index 8a5aa1f46b329ddfb1ced1bfd9ad9ec98ebb4ce2..44d8232e0d24ecb4c17b308ff1320173e9faf99e 100644 (file)
#include "document.h"
#include "widgets/widget-sizes.h"
#include "widgets/spinbutton-events.h"
-#include "svg/svg.h"
+#include "svg/svg-color.h"
#include "svg/css-ostringstream.h"
#include "helper/units.h"
_tooltips (),
- _dropF(0),
- _dropS(0)
+ _drop((void*[]){0,0}),
+ _dropEnabled((bool[]){false, false})
{
_fill_label.set_alignment(0.0, 0.5);
_fill_label.set_padding(0, 0);
sp_set_font_size_smaller (GTK_WIDGET(_fill_label.gobj()));
sp_set_font_size_smaller (GTK_WIDGET(_stroke_label.gobj()));
- _dropF = new DropTracker();
- ((DropTracker*)_dropF)->parent = this;
- ((DropTracker*)_dropF)->item = SS_FILL;
+ _drop[SS_FILL] = new DropTracker();
+ ((DropTracker*)_drop[SS_FILL])->parent = this;
+ ((DropTracker*)_drop[SS_FILL])->item = SS_FILL;
- _dropS = new DropTracker();
- ((DropTracker*)_dropS)->parent = this;
- ((DropTracker*)_dropS)->item = SS_STROKE;
+ _drop[SS_STROKE] = new DropTracker();
+ ((DropTracker*)_drop[SS_STROKE])->parent = this;
+ ((DropTracker*)_drop[SS_STROKE])->item = SS_STROKE;
- {
- gtk_drag_dest_set(GTK_WIDGET(_stroke_place.gobj()),
- GTK_DEST_DEFAULT_ALL,
- ui_drop_target_entries,
- nui_drop_target_entries,
- GdkDragAction(GDK_ACTION_COPY | GDK_ACTION_MOVE));
- g_signal_connect(_stroke_place.gobj(),
- "drag_data_received",
- G_CALLBACK(dragDataReceived),
- _dropS);
-
- gtk_drag_dest_set(GTK_WIDGET(_fill_place.gobj()),
- GTK_DEST_DEFAULT_ALL,
- ui_drop_target_entries,
- nui_drop_target_entries,
- GdkDragAction(GDK_ACTION_COPY | GDK_ACTION_MOVE));
- g_signal_connect(_fill_place.gobj(),
- "drag_data_received",
- G_CALLBACK(dragDataReceived),
- _dropF);
- }
+ g_signal_connect(_stroke_place.gobj(),
+ "drag_data_received",
+ G_CALLBACK(dragDataReceived),
+ _drop[SS_STROKE]);
+
+ g_signal_connect(_fill_place.gobj(),
+ "drag_data_received",
+ G_CALLBACK(dragDataReceived),
+ _drop[SS_FILL]);
}
SelectedStyle::~SelectedStyle()
delete _color_preview[i];
}
- delete (DropTracker*)_dropF;
- delete (DropTracker*)_dropS;
+ delete (DropTracker*)_drop[SS_FILL];
+ delete (DropTracker*)_drop[SS_STROKE];
}
void
_desktop = desktop;
gtk_object_set_data (GTK_OBJECT(_opacity_sb.gobj()), "dtw", _desktop->canvas);
- Inkscape::Selection *selection = SP_DT_SELECTION (desktop);
+ Inkscape::Selection *selection = sp_desktop_selection (desktop);
selection_changed_connection = new sigc::connection (selection->connectChanged(
sigc::bind (
this )
));
- //_sw_unit = (SPUnit *) SP_DT_NAMEDVIEW(desktop)->doc_units;
+ //_sw_unit = (SPUnit *) sp_desktop_namedview(desktop)->doc_units;
}
void SelectedStyle::dragDataReceived( GtkWidget *widget,
sp_repr_css_set_property( css, (tracker->item == SS_FILL) ? "fill":"stroke", c );
sp_desktop_set_style( tracker->parent->_desktop, css );
sp_repr_css_attr_unref( css );
- sp_document_done( SP_DT_DOCUMENT(tracker->parent->_desktop) );
+ sp_document_done( sp_desktop_document(tracker->parent->_desktop) );
}
}
break;
void SelectedStyle::on_fill_remove() {
SPCSSAttr *css = sp_repr_css_attr_new ();
sp_repr_css_set_property (css, "fill", "none");
- sp_desktop_set_style (_desktop, css, true, false); // do not write to current, to preserve current color
+ sp_desktop_set_style (_desktop, css, true, true);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_stroke_remove() {
SPCSSAttr *css = sp_repr_css_attr_new ();
sp_repr_css_set_property (css, "stroke", "none");
- sp_desktop_set_style (_desktop, css, true, false); // do not write to current, to preserve current color
+ sp_desktop_set_style (_desktop, css, true, true);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_unset() {
SPCSSAttr *css = sp_repr_css_attr_new ();
sp_repr_css_unset_property (css, "fill");
- sp_desktop_set_style (_desktop, css, true, false); // do not write to current, to preserve current color
+ sp_desktop_set_style (_desktop, css, true, true);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_stroke_unset() {
SPCSSAttr *css = sp_repr_css_attr_new ();
sp_repr_css_unset_property (css, "stroke");
- sp_desktop_set_style (_desktop, css, true, false); // do not write to current, to preserve current color
+ sp_desktop_set_style (_desktop, css, true, true);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_opaque() {
sp_repr_css_set_property (css, "fill-opacity", "1");
sp_desktop_set_style (_desktop, css, true);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_stroke_opaque() {
sp_repr_css_set_property (css, "stroke-opacity", "1");
sp_desktop_set_style (_desktop, css, true);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_lastused() {
sp_repr_css_set_property (css, "fill", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_stroke_lastused() {
sp_repr_css_set_property (css, "stroke", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_lastselected() {
sp_repr_css_set_property (css, "fill", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_stroke_lastselected() {
sp_repr_css_set_property (css, "stroke", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_invert() {
sp_repr_css_set_property (css, "fill", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_stroke_invert() {
sp_repr_css_set_property (css, "stroke", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_white() {
sp_repr_css_set_property (css, "fill-opacity", "1");
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_stroke_white() {
sp_repr_css_set_property (css, "stroke-opacity", "1");
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_black() {
sp_repr_css_set_property (css, "fill-opacity", "1.0");
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_stroke_black() {
sp_repr_css_set_property (css, "stroke-opacity", "1.0");
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_copy() {
sp_repr_css_set_property (css, "fill", text.c_str());
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
}
sp_repr_css_set_property (css, "stroke", text.c_str());
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
}
void SelectedStyle::on_fillstroke_swap() {
SPCSSAttr *css = sp_repr_css_attr_new ();
+ g_message("on_fillstroke_swap()");
+
switch (_mode[SS_FILL]) {
case SS_NA:
case SS_MANY:
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void SelectedStyle::on_fill_edit() {
sp_repr_css_set_property (css, "opacity", opacity);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT (_desktop));
+ sp_document_done (sp_desktop_document (_desktop));
return true;
}
sp_repr_css_set_property (css, "stroke-width", os.str().c_str());
sp_desktop_set_style (_desktop, css, true);
sp_repr_css_attr_unref (css);
- sp_document_done (SP_DT_DOCUMENT(_desktop));
+ sp_document_done (sp_desktop_document(_desktop));
}
void
place->add(_na[i]);
_tooltips.set_tip(*place, __na[i]);
_mode[i] = SS_NA;
+ if ( _dropEnabled[i] ) {
+ gtk_drag_dest_unset( GTK_WIDGET((i==SS_FILL) ? _fill_place.gobj():_stroke_place.gobj()) );
+ _dropEnabled[i] = false;
+ }
break;
case QUERY_STYLE_SINGLE:
case QUERY_STYLE_MULTIPLE_AVERAGED:
case QUERY_STYLE_MULTIPLE_SAME:
+ if ( !_dropEnabled[i] ) {
+ gtk_drag_dest_set( GTK_WIDGET( (i==SS_FILL) ? _fill_place.gobj():_stroke_place.gobj()),
+ GTK_DEST_DEFAULT_ALL,
+ ui_drop_target_entries,
+ nui_drop_target_entries,
+ GdkDragAction(GDK_ACTION_COPY | GDK_ACTION_MOVE) );
+ _dropEnabled[i] = true;
+ }
SPIPaint *paint;
if (i == SS_FILL) {
paint = &(query->fill);
} else if (paint->set && paint->type == SP_PAINT_TYPE_PAINTSERVER) {
SPPaintServer *server = (i == SS_FILL)? SP_STYLE_FILL_SERVER (query) : SP_STYLE_STROKE_SERVER (query);
-
- Inkscape::XML::Node *srepr = SP_OBJECT_REPR(server);
- _paintserver_id[i] += "url(#";
- _paintserver_id[i] += srepr->attribute("id");
- _paintserver_id[i] += ")";
-
- if (SP_IS_LINEARGRADIENT (server)) {
- place->add(_lgradient[i]);
- _tooltips.set_tip(*place, __lgradient[i]);
- _mode[i] = SS_LGRADIENT;
- } else if (SP_IS_RADIALGRADIENT (server)) {
- place->add(_rgradient[i]);
- _tooltips.set_tip(*place, __rgradient[i]);
- _mode[i] = SS_RGRADIENT;
- } else if (SP_IS_PATTERN (server)) {
- place->add(_pattern[i]);
- _tooltips.set_tip(*place, __pattern[i]);
- _mode[i] = SS_PATTERN;
+ if ( server ) {
+ Inkscape::XML::Node *srepr = SP_OBJECT_REPR(server);
+ _paintserver_id[i] += "url(#";
+ _paintserver_id[i] += srepr->attribute("id");
+ _paintserver_id[i] += ")";
+
+ if (SP_IS_LINEARGRADIENT (server)) {
+ place->add(_lgradient[i]);
+ _tooltips.set_tip(*place, __lgradient[i]);
+ _mode[i] = SS_LGRADIENT;
+ } else if (SP_IS_RADIALGRADIENT (server)) {
+ place->add(_rgradient[i]);
+ _tooltips.set_tip(*place, __rgradient[i]);
+ _mode[i] = SS_RGRADIENT;
+ } else if (SP_IS_PATTERN (server)) {
+ place->add(_pattern[i]);
+ _tooltips.set_tip(*place, __pattern[i]);
+ _mode[i] = SS_PATTERN;
+ }
+ } else {
+ g_warning ("file %s: line %d: Unknown paint server", __FILE__, __LINE__);
}
} else if (paint->set && paint->type == SP_PAINT_TYPE_NONE) {
sp_repr_css_set_property (css, "opacity", os.str().c_str());
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_maybe_done (SP_DT_DOCUMENT (_desktop), "fillstroke:opacity");
+ sp_document_maybe_done (sp_desktop_document (_desktop), "fillstroke:opacity");
spinbutton_defocus(GTK_OBJECT(_opacity_sb.gobj()));
_opacity_blocked = false;
}