Fixed bugs in reference counting. The transform boxen need to acquire refs to

the objects they transform. Fixes ticket #4536.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33170 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2009-09-18 10:05:27 +00:00
parent 3b56969814
commit 2291f75684
2 changed files with 10 additions and 3 deletions
@@ -31,6 +31,8 @@ TransformPointsBox::TransformPointsBox(CanvasView* view,
fCount(count), fCount(count),
fPoints(count > 0 ? new (nothrow) control_point[count] : NULL) fPoints(count > 0 ? new (nothrow) control_point[count] : NULL)
{ {
fPath->Acquire();
BRect bounds(0, 0, -1, -1); BRect bounds(0, 0, -1, -1);
if (fPoints && fIndices) { if (fPoints && fIndices) {
@@ -68,6 +70,7 @@ TransformPointsBox::~TransformPointsBox()
{ {
delete[] fIndices; delete[] fIndices;
delete[] fPoints; delete[] fPoints;
fPath->Release();
} }
// #pragma mark - // #pragma mark -
@@ -31,7 +31,7 @@ TransformShapesBox::TransformShapesBox(CanvasView* view,
fParentTransform() fParentTransform()
{ {
if (fShapes) { if (fShapes != NULL) {
// allocate storage for the current transformations // allocate storage for the current transformations
// of each object // of each object
fOriginals = new double[fCount * Transformable::matrix_size]; fOriginals = new double[fCount * Transformable::matrix_size];
@@ -39,8 +39,10 @@ TransformShapesBox::TransformShapesBox(CanvasView* view,
memcpy(fShapes, shapes, fCount * sizeof(Shape*)); memcpy(fShapes, shapes, fCount * sizeof(Shape*));
for (int32 i = 0; i < fCount; i++) { for (int32 i = 0; i < fCount; i++) {
if (fShapes[i]) if (fShapes[i]) {
fShapes[i]->Acquire();
fShapes[i]->AddObserver(this); fShapes[i]->AddObserver(this);
}
} }
// trigger init // trigger init
@@ -55,8 +57,10 @@ TransformShapesBox::~TransformShapesBox()
{ {
if (fShapes) { if (fShapes) {
for (int32 i = 0; i < fCount; i++) { for (int32 i = 0; i < fCount; i++) {
if (fShapes[i]) if (fShapes[i]) {
fShapes[i]->RemoveObserver(this); fShapes[i]->RemoveObserver(this);
fShapes[i]->Release();
}
} }
delete[] fShapes; delete[] fShapes;
} }