summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2015-12-21 09:48:56 +0000
committertavmjong-free <tavmjong@free.fr>2015-12-21 09:48:56 +0000
commit6f817f71119774c09888fddf8ba28a96c4546165 (patch)
tree5d1296a00c47067231691b2e9eb31ea0ee5c92de /src
parentfixes layer movement when there is a document scaling factor (diff)
downloadinkscape-6f817f71119774c09888fddf8ba28a96c4546165.tar.gz
inkscape-6f817f71119774c09888fddf8ba28a96c4546165.zip
Add option for checkerboard background.
Fixed bugs: - https://launchpad.net/bugs/397723 (bzr r14539)
Diffstat (limited to 'src')
-rw-r--r--src/attributes.cpp1
-rw-r--r--src/attributes.h1
-rw-r--r--src/desktop.cpp16
-rw-r--r--src/display/sodipodi-ctrlrect.cpp15
-rw-r--r--src/display/sodipodi-ctrlrect.h3
-rw-r--r--src/sp-namedview.cpp6
-rw-r--r--src/sp-namedview.h1
-rw-r--r--src/ui/dialog/document-properties.cpp24
-rw-r--r--src/ui/dialog/document-properties.h1
9 files changed, 57 insertions, 11 deletions
diff --git a/src/attributes.cpp b/src/attributes.cpp
index e8620a498..dcd644b5d 100644
--- a/src/attributes.cpp
+++ b/src/attributes.cpp
@@ -82,6 +82,7 @@ static SPStyleProp const props[] = {
{SP_ATTR_FIT_MARGIN_LEFT, "fit-margin-left"},
{SP_ATTR_FIT_MARGIN_RIGHT, "fit-margin-right"},
{SP_ATTR_FIT_MARGIN_BOTTOM, "fit-margin-bottom"},
+ {SP_ATTR_INKSCAPE_PAGECHECKERBOARD, "inkscape:checkerboard"},
{SP_ATTR_INKSCAPE_PAGEOPACITY, "inkscape:pageopacity"},
{SP_ATTR_INKSCAPE_PAGESHADOW, "inkscape:pageshadow"},
{SP_ATTR_INKSCAPE_ZOOM, "inkscape:zoom"},
diff --git a/src/attributes.h b/src/attributes.h
index 03df0cb94..754cc876a 100644
--- a/src/attributes.h
+++ b/src/attributes.h
@@ -83,6 +83,7 @@ enum SPAttributeEnum {
SP_ATTR_FIT_MARGIN_LEFT,
SP_ATTR_FIT_MARGIN_RIGHT,
SP_ATTR_FIT_MARGIN_BOTTOM,
+ SP_ATTR_INKSCAPE_PAGECHECKERBOARD,
SP_ATTR_INKSCAPE_PAGEOPACITY,
SP_ATTR_INKSCAPE_PAGESHADOW,
SP_ATTR_INKSCAPE_ZOOM,
diff --git a/src/desktop.cpp b/src/desktop.cpp
index 0aac46e8d..f099ba39f 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -210,9 +210,11 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid
main = (SPCanvasGroup *) sp_canvas_item_new (root, SP_TYPE_CANVAS_GROUP, NULL);
g_signal_connect (G_OBJECT (main), "event", G_CALLBACK (sp_desktop_root_handler), this);
+ /* This is the background the page sits on. */
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);
@@ -1731,14 +1733,16 @@ static void _namedview_modified (SPObject *obj, guint flags, SPDesktop *desktop)
if (flags & SP_OBJECT_MODIFIED_FLAG) {
- /* Show/hide page background */
- if (nv->pagecolor | (0xff != 0xffffffff)) {
- sp_canvas_item_show (desktop->table);
- ((CtrlRect *) desktop->table)->setColor(0x00000000, true, nv->pagecolor | 0xff);
- sp_canvas_item_move_to_z (desktop->table, 0);
+ /* Set page background */
+ sp_canvas_item_show (desktop->table);
+ if (nv->pagecheckerboard) {
+ ((CtrlRect *) desktop->table)->setCheckerboard( true );
+ ((CtrlRect *) desktop->table)->setColor(0x00000000, true, nv->pagecolor ); // | 0xff);
} else {
- sp_canvas_item_hide (desktop->table);
+ ((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) {
diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp
index 75789ff50..ecc952c48 100644
--- a/src/display/sodipodi-ctrlrect.cpp
+++ b/src/display/sodipodi-ctrlrect.cpp
@@ -74,6 +74,8 @@ void CtrlRect::init()
{
_has_fill = false;
_dashed = false;
+ _checkerboard = false;
+
_shadow = 0;
_area = Geom::OptIntRect();
@@ -109,10 +111,17 @@ void CtrlRect::render(SPCanvasBuf *buf)
cairo_rectangle(buf->ct, 0.5 + area[X].min(), 0.5 + area[Y].min(),
area[X].max() - area[X].min(), area[Y].max() - area[Y].min());
+ if (_checkerboard) {
+ cairo_pattern_t *cb = ink_cairo_pattern_create_checkerboard();
+ cairo_set_source(buf->ct, cb);
+ cairo_pattern_destroy(cb);
+ cairo_fill_preserve(buf->ct);
+ }
if (_has_fill) {
ink_cairo_set_source_rgba32(buf->ct, _fill_color);
cairo_fill_preserve(buf->ct);
}
+
ink_cairo_set_source_rgba32(buf->ct, _border_color);
cairo_stroke(buf->ct);
@@ -297,6 +306,12 @@ void CtrlRect::setDashed(bool d)
_requestUpdate();
}
+void CtrlRect::setCheckerboard(bool d)
+{
+ _checkerboard = d;
+ _requestUpdate();
+}
+
void CtrlRect::_requestUpdate()
{
sp_canvas_item_request_update(SP_CANVAS_ITEM(this));
diff --git a/src/display/sodipodi-ctrlrect.h b/src/display/sodipodi-ctrlrect.h
index ff6c55b06..08a085649 100644
--- a/src/display/sodipodi-ctrlrect.h
+++ b/src/display/sodipodi-ctrlrect.h
@@ -39,6 +39,7 @@ public:
void setShadow(int s, guint c);
void setRectangle(Geom::Rect const &r);
void setDashed(bool d);
+ void setCheckerboard(bool d);
void render(SPCanvasBuf *buf);
void update(Geom::Affine const &affine, unsigned int flags);
@@ -49,6 +50,8 @@ private:
Geom::Rect _rect;
bool _has_fill;
bool _dashed;
+ bool _checkerboard;
+
Geom::OptIntRect _area;
gint _shadow_size;
guint32 _border_color;
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index 50b567d2c..0942081ca 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -84,6 +84,7 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) {
this->lockguides = false;
this->grids_visible = false;
this->showborder = TRUE;
+ this->pagecheckerboard = FALSE;
this->showpageshadow = TRUE;
this->guides.clear();
@@ -207,6 +208,7 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) {
this->readAttr( "bordercolor" );
this->readAttr( "borderopacity" );
this->readAttr( "pagecolor" );
+ this->readAttr( "inkscape:pagecheckerboard" );
this->readAttr( "inkscape:pageopacity" );
this->readAttr( "inkscape:pageshadow" );
this->readAttr( "inkscape:zoom" );
@@ -390,6 +392,10 @@ void SPNamedView::set(unsigned int key, const gchar* value) {
}
this->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
+ case SP_ATTR_INKSCAPE_PAGECHECKERBOARD:
+ this->pagecheckerboard = (value) ? sp_str_to_bool (value) : TRUE;
+ this->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
case SP_ATTR_INKSCAPE_PAGEOPACITY:
this->pagecolor = (this->pagecolor & 0xffffff00) | (DEFAULTPAGECOLOR & 0xff);
sp_nv_read_opacity(value, &this->pagecolor);
diff --git a/src/sp-namedview.h b/src/sp-namedview.h
index 7aae90f40..3d63f2b97 100644
--- a/src/sp-namedview.h
+++ b/src/sp-namedview.h
@@ -46,6 +46,7 @@ public:
unsigned int editable : 1;
unsigned int showguides : 1;
unsigned int lockguides : 1;
+ unsigned int pagecheckerboard : 1;
unsigned int showborder : 1;
unsigned int showpageshadow : 1;
unsigned int borderlayer : 2;
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index b90467d93..030bbbf7b 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -116,10 +116,11 @@ DocumentProperties::DocumentProperties()
_page_metadata2(Gtk::manage(new UI::Widget::NotebookPage(1, 1))),
//---------------------------------------------------------------
_rcb_antialias(_("Use antialiasing"), _("If unset, no antialiasing will be done on the drawing"), "shape-rendering", _wr, false, NULL, NULL, NULL, "crispEdges"),
+ _rcb_checkerboard(_("Checkerboard background"), _("If set, use checkerboard for background, otherwise use background color at full opacity."), "inkscape:checkerboard", _wr, false),
_rcb_canb(_("Show page _border"), _("If set, rectangular page border is shown"), "showborder", _wr, false),
_rcb_bord(_("Border on _top of drawing"), _("If set, border is always on top of the drawing"), "borderlayer", _wr, false),
_rcb_shad(_("_Show border shadow"), _("If set, page border shows a shadow on its right and lower side"), "inkscape:showpageshadow", _wr, false),
- _rcp_bg(_("Back_ground color:"), _("Background color"), _("Color of the page background. Note: transparency setting ignored while editing but used when exporting to bitmap."), "pagecolor", "inkscape:pageopacity", _wr),
+ _rcp_bg(_("Back_ground color:"), _("Background color"), _("Color of the page background. Note: transparency setting ignored while editing if 'Checkerboard background' set (but used when exporting to bitmap)."), "pagecolor", "inkscape:pageopacity", _wr),
_rcp_bord(_("Border _color:"), _("Page border color"), _("Color of the page border"), "bordercolor", "borderopacity", _wr),
_rum_deflt(_("Display _units:"), "inkscape:document-units", _wr),
_page_sizer(_wr),
@@ -327,10 +328,19 @@ void DocumentProperties::build_page()
Gtk::Label* label_gen = Gtk::manage (new Gtk::Label);
label_gen->set_markup (_("<b>General</b>"));
+
Gtk::Label *label_for = Gtk::manage (new Gtk::Label);
label_for->set_markup (_("<b>Page Size</b>"));
+
+ Gtk::Label* label_bkg = Gtk::manage (new Gtk::Label);
+ label_bkg->set_markup (_("<b>Background</b>"));
+
+ Gtk::Label* label_bdr = Gtk::manage (new Gtk::Label);
+ label_bdr->set_markup (_("<b>Border</b>"));
+
Gtk::Label* label_dsp = Gtk::manage (new Gtk::Label);
label_dsp->set_markup (_("<b>Display</b>"));
+
_page_sizer.init();
Gtk::Widget *const widget_array[] =
@@ -343,13 +353,16 @@ void DocumentProperties::build_page()
label_for, 0,
0, &_page_sizer,
0, 0,
- label_dsp, 0,
+ label_bkg, 0,
+ 0, &_rcb_checkerboard,
+ _rcp_bg._label, &_rcp_bg,
+ label_bdr, 0,
0, &_rcb_canb,
0, &_rcb_bord,
0, &_rcb_shad,
- 0, &_rcb_antialias,
- _rcp_bg._label, &_rcp_bg,
_rcp_bord._label, &_rcp_bord,
+ label_dsp, 0,
+ 0, &_rcb_antialias,
};
std::list<Gtk::Widget*> _slaveList;
@@ -1438,6 +1451,7 @@ void DocumentProperties::update()
set_sensitive (true);
//-----------------------------------------------------------page page
+ _rcb_checkerboard.setActive (nv->pagecheckerboard);
_rcp_bg.setRgba32 (nv->pagecolor);
_rcb_canb.setActive (nv->showborder);
_rcb_bord.setActive (nv->borderlayer == SP_BORDER_LAYER_TOP);
@@ -1636,7 +1650,7 @@ void DocumentProperties::onRemoveGrid()
SPDesktop *dt = getDesktop();
SPNamedView *nv = dt->getNamedView();
Inkscape::CanvasGrid * found_grid = NULL;
- if( pagenum < nv->grids.size())
+ if( pagenum < (gint)nv->grids.size())
found_grid = nv->grids[pagenum];
if (found_grid) {
diff --git a/src/ui/dialog/document-properties.h b/src/ui/dialog/document-properties.h
index b1f90b4b7..7340b67f5 100644
--- a/src/ui/dialog/document-properties.h
+++ b/src/ui/dialog/document-properties.h
@@ -118,6 +118,7 @@ protected:
UI::Widget::Registry _wr;
//---------------------------------------------------------------
UI::Widget::RegisteredCheckButton _rcb_antialias;
+ UI::Widget::RegisteredCheckButton _rcb_checkerboard;
UI::Widget::RegisteredCheckButton _rcb_canb;
UI::Widget::RegisteredCheckButton _rcb_bord;
UI::Widget::RegisteredCheckButton _rcb_shad;