diff options
| author | Krzysztof Kosi??ski <tweenk.pl@gmail.com> | 2010-08-05 23:23:28 +0000 |
|---|---|---|
| committer | Krzysztof KosiĆski <tweenk.pl@gmail.com> | 2010-08-05 23:23:28 +0000 |
| commit | 267b81d9fd0d1254a80b008c26237fbe4bd93610 (patch) | |
| tree | c243149698673345ae8ae553bdcfbf305392a976 /src | |
| parent | Wholesale cruft removal part 5; completely remove RasterFont (diff) | |
| download | inkscape-267b81d9fd0d1254a80b008c26237fbe4bd93610.tar.gz inkscape-267b81d9fd0d1254a80b008c26237fbe4bd93610.zip | |
Minor cleanups
(bzr r9508.1.51)
Diffstat (limited to 'src')
| -rw-r--r-- | src/display/nr-arena-image.cpp | 3 | ||||
| -rw-r--r-- | src/display/nr-arena-item.cpp | 5 | ||||
| -rw-r--r-- | src/display/nr-arena-shape.cpp | 1 | ||||
| -rw-r--r-- | src/display/nr-filter-image.cpp | 1 | ||||
| -rw-r--r-- | src/display/nr-filter-slot.cpp | 3 | ||||
| -rw-r--r-- | src/display/nr-filter.cpp | 69 | ||||
| -rw-r--r-- | src/display/nr-filter.h | 7 | ||||
| -rw-r--r-- | src/display/nr-style.cpp | 6 | ||||
| -rw-r--r-- | src/sp-pattern.cpp | 8 |
9 files changed, 33 insertions, 70 deletions
diff --git a/src/display/nr-arena-image.cpp b/src/display/nr-arena-image.cpp index 5617bb084..d32b6efe0 100644 --- a/src/display/nr-arena-image.cpp +++ b/src/display/nr-arena-image.cpp @@ -93,9 +93,10 @@ nr_arena_image_finalize (NRObject *object) { NRArenaImage *image = NR_ARENA_IMAGE (object); - image->px = NULL; if (image->pixbuf != NULL) g_object_unref(image->pixbuf); + if (image->style) + sp_style_unref(image->style); ((NRObjectClass *) parent_class)->finalize (object); } diff --git a/src/display/nr-arena-item.cpp b/src/display/nr-arena-item.cpp index 9b76c4ff7..9f3863f4d 100644 --- a/src/display/nr-arena-item.cpp +++ b/src/display/nr-arena-item.cpp @@ -106,6 +106,11 @@ nr_arena_item_private_finalize (NRObject *object) item->px = NULL; item->transform = NULL; + if (item->clip) + nr_arena_item_detach(item, item->clip); + if (item->mask) + nr_arena_item_detach(item, item->mask); + ((NRObjectClass *) (parent_class))->finalize (object); } diff --git a/src/display/nr-arena-shape.cpp b/src/display/nr-arena-shape.cpp index 5b5000c60..8a2b27f4f 100644 --- a/src/display/nr-arena-shape.cpp +++ b/src/display/nr-arena-shape.cpp @@ -121,6 +121,7 @@ nr_arena_shape_finalize(NRObject *object) if (shape->path) cairo_path_destroy(shape->path); if (shape->style) sp_style_unref(shape->style); if (shape->curve) shape->curve->unref(); + shape->last_pick = NULL; ((NRObjectClass *) shape_parent_class)->finalize(object); } diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp index 636f31187..28b2aa5c1 100644 --- a/src/display/nr-filter-image.cpp +++ b/src/display/nr-filter-image.cpp @@ -113,6 +113,7 @@ void FilterImage::render_cairo(FilterSlot &slot) NR_ARENA_ITEM_STATE_ALL, NR_ARENA_ITEM_STATE_NONE); nr_arena_item_invoke_render(ct, ai, &render_rect, NULL, NR_ARENA_ITEM_RENDER_NO_CACHE); + sp_item_invoke_hide(SVGElem, key); nr_object_unref((NRObject*) arena); slot.set(_output, out); diff --git a/src/display/nr-filter-slot.cpp b/src/display/nr-filter-slot.cpp index 6cca0fc77..c02f47b26 100644 --- a/src/display/nr-filter-slot.cpp +++ b/src/display/nr-filter-slot.cpp @@ -121,9 +121,6 @@ cairo_surface_t *FilterSlot::getcairo(int slot_nr) s = _slots.find(slot_nr); } return s->second; - - //assert(slot_nr == NR_FILTER_SLOT_NOT_SET ||_slot_number[index] == slot_nr); - //return _slot[index]; } cairo_surface_t *FilterSlot::_get_transformed_source_graphic() diff --git a/src/display/nr-filter.cpp b/src/display/nr-filter.cpp index 1484235dc..e163b6346 100644 --- a/src/display/nr-filter.cpp +++ b/src/display/nr-filter.cpp @@ -79,23 +79,12 @@ static Geom::OptRect get_item_bbox(NRArenaItem const *item) { Filter::Filter() { - _primitive_count = 0; - _primitive_table_size = 1; - _primitive = new FilterPrimitive*[1]; - _primitive[0] = NULL; - //_primitive_count = 1; - //_primitive[0] = new FilterGaussian; _common_init(); } Filter::Filter(int n) { - _primitive_count = 0; - _primitive_table_size = (n > 0) ? n : 1; // we guarantee there is at least 1(one) filter slot - _primitive = new FilterPrimitive*[_primitive_table_size]; - for ( int i = 0 ; i < _primitive_table_size ; i++ ) { - _primitive[i] = NULL; - } + if (n > 0) _primitive.reserve(n); _common_init(); } @@ -124,13 +113,12 @@ void Filter::_common_init() { Filter::~Filter() { clear_primitives(); - delete[] _primitive; } int Filter::render(NRArenaItem const *item, cairo_t *bgct, NRRectL const *bgarea, cairo_t *graphic, NRRectL const *area) { - if (!_primitive[0]) { + if (_primitive.empty()) { // when no primitives are defined, clear source graphic cairo_set_source_rgba(graphic, 0,0,0,0); cairo_set_operator(graphic, CAIRO_OPERATOR_SOURCE); @@ -186,7 +174,7 @@ int Filter::render(NRArenaItem const *item, cairo_t *bgct, NRRectL const *bgarea units.set_paraller(false); Geom::Matrix pbtrans = units.get_matrix_display2pb(); - for (int i = 0 ; i < _primitive_count ; i++) { + for (unsigned i = 0 ; i < _primitive.size() ; i++) { if (!_primitive[i]->can_handle_affine(pbtrans)) { units.set_paraller(true); break; @@ -197,7 +185,7 @@ int Filter::render(NRArenaItem const *item, cairo_t *bgct, NRRectL const *bgarea slot.set_quality(filterquality); slot.set_blurquality(blurquality); - for (int i = 0 ; i < _primitive_count ; i++) { + for (unsigned i = 0 ; i < _primitive.size() ; i++) { _primitive[i]->render_cairo(slot); } @@ -220,7 +208,7 @@ void Filter::set_primitive_units(SPFilterUnits unit) { } void Filter::area_enlarge(NRRectL &bbox, NRArenaItem const *item) const { - for (int i = 0 ; i < _primitive_count ; i++) { + for (unsigned i = 0 ; i < _primitive.size() ; i++) { if (_primitive[i]) _primitive[i]->area_enlarge(bbox, item->ctm); } @@ -356,27 +344,6 @@ void Filter::_create_constructor_table() created = true; } -/** Helper method for enlarging table of filter primitives. When new - * primitives are added, but we have no space for them, this function - * makes some more space. - */ -void Filter::_enlarge_primitive_table() { - FilterPrimitive **new_tbl = new FilterPrimitive*[_primitive_table_size * 2]; - for (int i = 0 ; i < _primitive_count ; i++) { - new_tbl[i] = _primitive[i]; - } - _primitive_table_size *= 2; - for (int i = _primitive_count ; i < _primitive_table_size ; i++) { - new_tbl[i] = NULL; - } - if(_primitive != NULL) { - delete[] _primitive; - } else { - g_warning("oh oh"); - } - _primitive = new_tbl; -} - int Filter::add_primitive(FilterPrimitiveType type) { _create_constructor_table(); @@ -387,14 +354,8 @@ int Filter::add_primitive(FilterPrimitiveType type) if (!_constructor[type]) return -1; FilterPrimitive *created = _constructor[type](); - // If there is no space for new filter primitive, enlarge the table - if (_primitive_count >= _primitive_table_size) { - _enlarge_primitive_table(); - } - - _primitive[_primitive_count] = created; - int handle = _primitive_count; - _primitive_count++; + int handle = _primitive.size(); + _primitive.push_back(created); return handle; } @@ -404,8 +365,7 @@ int Filter::replace_primitive(int target, FilterPrimitiveType type) // Check that target is valid primitive inside this filter if (target < 0) return -1; - if (target >= _primitive_count) return -1; - if (!_primitive[target]) return -1; + if (static_cast<unsigned>(target) >= _primitive.size()) return -1; // Check that we can create a new filter of specified type if (type < 0 || type >= NR_FILTER_ENDPRIMITIVETYPE) @@ -413,27 +373,22 @@ int Filter::replace_primitive(int target, FilterPrimitiveType type) if (!_constructor[type]) return -1; FilterPrimitive *created = _constructor[type](); - // If there is no space for new filter primitive, enlarge the table - if (_primitive_count >= _primitive_table_size) { - _enlarge_primitive_table(); - } - delete _primitive[target]; _primitive[target] = created; return target; } FilterPrimitive *Filter::get_primitive(int handle) { - if (handle < 0 || handle >= _primitive_count) return NULL; + if (handle < 0 || handle >= static_cast<int>(_primitive.size())) return NULL; return _primitive[handle]; } void Filter::clear_primitives() { - for (int i = 0 ; i < _primitive_count ; i++) { - if (_primitive[i]) delete _primitive[i]; + for (unsigned i = 0 ; i < _primitive.size() ; i++) { + delete _primitive[i]; } - _primitive_count = 0; + _primitive.clear(); } void Filter::set_x(SVGLength const &length) diff --git a/src/display/nr-filter.h b/src/display/nr-filter.h index 4db1ec988..9349ba9c6 100644 --- a/src/display/nr-filter.h +++ b/src/display/nr-filter.h @@ -174,9 +174,7 @@ public: virtual ~Filter(); private: - int _primitive_count; - int _primitive_table_size; - + std::vector<FilterPrimitive*> _primitive; /** Amount of image slots used, when this filter was rendered last time */ int _slot_count; @@ -198,10 +196,7 @@ private: SPFilterUnits _filter_units; SPFilterUnits _primitive_units; - FilterPrimitive ** _primitive; - void _create_constructor_table(); - void _enlarge_primitive_table(); void _common_init(); int _resolution_limit(FilterQuality const quality) const; std::pair<double,double> _filter_resolution(Geom::Rect const &area, diff --git a/src/display/nr-style.cpp b/src/display/nr-style.cpp index bf2f2d305..40366f5d3 100644 --- a/src/display/nr-style.cpp +++ b/src/display/nr-style.cpp @@ -55,8 +55,8 @@ NRStyle::NRStyle() NRStyle::~NRStyle() { - cairo_pattern_destroy(fill_pattern); - cairo_pattern_destroy(stroke_pattern); + if (fill_pattern) cairo_pattern_destroy(fill_pattern); + if (stroke_pattern) cairo_pattern_destroy(stroke_pattern); if (dash) delete dash; } @@ -123,7 +123,7 @@ void NRStyle::set(SPStyle *style) } miter_limit = style->stroke_miterlimit.value; - delete [] dash; + if (dash) delete [] dash; n_dash = style->stroke_dash.n_dash; if (n_dash != 0) { diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index a559a4a50..8d156bc77 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -610,9 +610,11 @@ sp_pattern_create_pattern(SPPaintServer *ps, NRArenaGroup *root = NRArenaGroup::create(arena); /* Show items */ + SPPattern *shown = NULL; for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { // find the first one with item children if (pat_i && SP_IS_OBJECT (pat_i) && pattern_hasItemChildren(pat_i)) { + shown = pat_i; for (SPObject *child = sp_object_first_child(SP_OBJECT(pat_i)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) { if (SP_IS_ITEM (child)) { // for each item in pattern, show it on our arena, add to the group, @@ -664,6 +666,12 @@ sp_pattern_create_pattern(SPPaintServer *ps, gc.transform = vb2ps; nr_arena_item_invoke_update (root, NULL, &gc, NR_ARENA_ITEM_STATE_ALL, NR_ARENA_ITEM_STATE_ALL); nr_arena_item_invoke_render (ct, root, &one_tile, NULL, 0); + for (SPObject *child = sp_object_first_child(SP_OBJECT(shown)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) { + if (SP_IS_ITEM (child)) { + sp_item_invoke_hide(SP_ITEM (child), dkey); + } + } + nr_object_unref(root); nr_object_unref(arena); if (needs_opacity) { |
