/** * @file * Widgets used in the stroke style dialog. */ /* Author: * Lauris Kaplinski * Jon A. Cruz * * Copyright (C) 2010 Jon A. Cruz * Copyright (C) 2001 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information */ #ifndef SEEN_DIALOGS_STROKE_STYLE_H #define SEEN_DIALOGS_STROKE_STYLE_H #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "widgets/dash-selector.h" #include #if WITH_GTKMM_3_0 #include #else #include #endif #include #include "desktop.h" #include "desktop-handles.h" #include "desktop-style.h" #include "dialogs/dialog-events.h" #include "display/canvas-bpath.h" // for SP_STROKE_LINEJOIN_* #include "display/drawing.h" #include "document-private.h" #include "document-undo.h" #include "gradient-chemistry.h" #include "helper/stock-items.h" #include "helper/unit-menu.h" #include "helper/units.h" #include "inkscape.h" #include "io/sys.h" #include "marker.h" #include "preferences.h" #include "path-prefix.h" #include "selection.h" #include "sp-linear-gradient.h" #include "sp-namedview.h" #include "sp-pattern.h" #include "sp-radial-gradient.h" #include "sp-rect.h" #include "sp-text.h" #include "style.h" #include "svg/css-ostringstream.h" #include "ui/cache/svg_preview_cache.h" #include "ui/icon-names.h" #include "widgets/icon.h" #include "widgets/paint-selector.h" #include "widgets/sp-widget.h" #include "widgets/spw-utilities.h" #include "ui/widget/spinbutton.h" #include "xml/repr.h" #include "stroke-style.h" #include "stroke-marker-selector.h" #include "fill-style.h" // to get sp_fill_style_widget_set_desktop #include "fill-n-stroke-factory.h" #include "verbs.h" namespace Gtk { class Widget; class Container; } struct { gchar const *key; gint value; } const SPMarkerNames[] = { {"marker-all", SP_MARKER_LOC}, {"marker-start", SP_MARKER_LOC_START}, {"marker-mid", SP_MARKER_LOC_MID}, {"marker-end", SP_MARKER_LOC_END}, {"", SP_MARKER_LOC_QTY}, {NULL, -1} }; /** * Creates an instance of a paint style widget. */ Gtk::Widget *sp_stroke_style_paint_widget_new(void); /** * Creates an instance of a line style widget. */ Gtk::Widget *sp_stroke_style_line_widget_new(void); /** * Switches a line or paint style widget to track the given desktop. */ void sp_stroke_style_widget_set_desktop(Gtk::Widget *widget, SPDesktop *desktop); SPObject *getMarkerObj(gchar const *n, SPDocument *doc); namespace Inkscape { class StrokeStyle : public Gtk::VBox { public: StrokeStyle(); ~StrokeStyle(); void setDesktop(SPDesktop *desktop); private: void updateLine(); void updateAllMarkers(GSList const *objects); void updateMarkerHist(SPMarkerLoc const which); void setDashSelectorFromStyle(SPDashSelector *dsel, SPStyle *style); void setJoinType (unsigned const jointype); void setCapType (unsigned const captype); void setJoinButtons(Gtk::ToggleButton *active); void setCapButtons(Gtk::ToggleButton *active); void scaleLine(); void setScaledDash(SPCSSAttr *css, int ndash, double *dash, double offset, double scale); void setMarkerColor(SPObject *marker, int loc, SPItem *item); SPObject *forkMarker(SPObject *marker, int loc, SPItem *item); const char *getItemColorForMarker(SPItem *item, Inkscape::PaintTarget fill_or_stroke, int loc); Gtk::RadioButton * makeRadioButton(Gtk::RadioButton *tb, char const *icon, Gtk::HBox *hb, gchar const *key, gchar const *data); static gboolean setStrokeWidthUnit(SPUnitSelector *, SPUnit const *old, SPUnit const *new_units, StrokeStyle *spw); // Callback functions void selectionModifiedCB(guint flags); void selectionChangedCB(); void widthChangedCB(); void miterLimitChangedCB(); void lineDashChangedCB(); static void markerSelectCB(MarkerComboBox *marker_combo, StrokeStyle *spw, SPMarkerLoc const which); static void buttonToggledCB(Gtk::ToggleButton *tb, StrokeStyle *spw); 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; GtkWidget *unitSelector; Gtk::RadioButton *joinMiter; Gtk::RadioButton *joinRound; Gtk::RadioButton *joinBevel; Gtk::RadioButton *capButt; Gtk::RadioButton *capRound; Gtk::RadioButton *capSquare; SPDashSelector *dashSelector; gboolean update; SPDesktop *desktop; sigc::connection selectChangedConn; sigc::connection selectModifiedConn; sigc::connection startMarkerConn; sigc::connection midMarkerConn; sigc::connection endMarkerConn; }; } // namespace Inkscape #endif // SEEN_DIALOGS_STROKE_STYLE_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 :