summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2010-08-05 23:23:28 +0000
committerKrzysztof KosiƄski <tweenk.pl@gmail.com>2010-08-05 23:23:28 +0000
commit267b81d9fd0d1254a80b008c26237fbe4bd93610 (patch)
treec243149698673345ae8ae553bdcfbf305392a976 /src
parentWholesale cruft removal part 5; completely remove RasterFont (diff)
downloadinkscape-267b81d9fd0d1254a80b008c26237fbe4bd93610.tar.gz
inkscape-267b81d9fd0d1254a80b008c26237fbe4bd93610.zip
Minor cleanups
(bzr r9508.1.51)
Diffstat (limited to 'src')
-rw-r--r--src/display/nr-arena-image.cpp3
-rw-r--r--src/display/nr-arena-item.cpp5
-rw-r--r--src/display/nr-arena-shape.cpp1
-rw-r--r--src/display/nr-filter-image.cpp1
-rw-r--r--src/display/nr-filter-slot.cpp3
-rw-r--r--src/display/nr-filter.cpp69
-rw-r--r--src/display/nr-filter.h7
-rw-r--r--src/display/nr-style.cpp6
-rw-r--r--src/sp-pattern.cpp8
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) {