diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2015-12-21 09:48:56 +0000 |
|---|---|---|
| committer | tavmjong-free <tavmjong@free.fr> | 2015-12-21 09:48:56 +0000 |
| commit | 6f817f71119774c09888fddf8ba28a96c4546165 (patch) | |
| tree | 5d1296a00c47067231691b2e9eb31ea0ee5c92de /src | |
| parent | fixes layer movement when there is a document scaling factor (diff) | |
| download | inkscape-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.cpp | 1 | ||||
| -rw-r--r-- | src/attributes.h | 1 | ||||
| -rw-r--r-- | src/desktop.cpp | 16 | ||||
| -rw-r--r-- | src/display/sodipodi-ctrlrect.cpp | 15 | ||||
| -rw-r--r-- | src/display/sodipodi-ctrlrect.h | 3 | ||||
| -rw-r--r-- | src/sp-namedview.cpp | 6 | ||||
| -rw-r--r-- | src/sp-namedview.h | 1 | ||||
| -rw-r--r-- | src/ui/dialog/document-properties.cpp | 24 | ||||
| -rw-r--r-- | src/ui/dialog/document-properties.h | 1 |
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; |
