diff --git a/src/apps/haiku-depot/textview/ParagraphStyle.cpp b/src/apps/haiku-depot/textview/ParagraphStyle.cpp index 731dec706d..21a96a699e 100644 --- a/src/apps/haiku-depot/textview/ParagraphStyle.cpp +++ b/src/apps/haiku-depot/textview/ParagraphStyle.cpp @@ -57,48 +57,72 @@ ParagraphStyle::operator!=(const ParagraphStyle& other) const bool ParagraphStyle::SetAlignment(::Alignment alignment) { - fStyleData.SetTo(fStyleData->SetAlignment(alignment)); - return fStyleData->Alignment() == alignment; + ParagraphStyleDataRef data = fStyleData->SetAlignment(alignment); + if (data == fStyleData) + return data->Alignment() == alignment; + + fStyleData = data; + return true; } bool ParagraphStyle::SetJustify(bool justify) { - fStyleData.SetTo(fStyleData->SetJustify(justify)); - return fStyleData->Justify() == justify; + ParagraphStyleDataRef data = fStyleData->SetJustify(justify); + if (data == fStyleData) + return data->Justify() == justify; + + fStyleData = data; + return true; } bool ParagraphStyle::SetFirstLineInset(float inset) { - fStyleData.SetTo(fStyleData->SetFirstLineInset(inset)); - return fStyleData->FirstLineInset() == inset; + ParagraphStyleDataRef data = fStyleData->SetFirstLineInset(inset); + if (data == fStyleData) + return data->FirstLineInset() == inset; + + fStyleData = data; + return true; } bool ParagraphStyle::SetLineInset(float inset) { - fStyleData.SetTo(fStyleData->SetLineInset(inset)); - return fStyleData->LineInset() == inset; + ParagraphStyleDataRef data = fStyleData->SetLineInset(inset); + if (data == fStyleData) + return data->LineInset() == inset; + + fStyleData = data; + return true; } bool ParagraphStyle::SetSpacingTop(float spacing) { - fStyleData.SetTo(fStyleData->SetSpacingTop(spacing)); - return fStyleData->SpacingTop() == spacing; + ParagraphStyleDataRef data = fStyleData->SetSpacingTop(spacing); + if (data == fStyleData) + return data->SpacingTop() == spacing; + + fStyleData = data; + return true; } bool ParagraphStyle::SetSpacingBottom(float spacing) { - fStyleData.SetTo(fStyleData->SetSpacingBottom(spacing)); - return fStyleData->SpacingBottom() == spacing; + ParagraphStyleDataRef data = fStyleData->SetSpacingBottom(spacing); + if (data == fStyleData) + return data->SpacingBottom() == spacing; + + fStyleData = data; + return true; } diff --git a/src/apps/haiku-depot/textview/ParagraphStyle.h b/src/apps/haiku-depot/textview/ParagraphStyle.h index f548db41c6..8c9de53b84 100644 --- a/src/apps/haiku-depot/textview/ParagraphStyle.h +++ b/src/apps/haiku-depot/textview/ParagraphStyle.h @@ -37,7 +37,7 @@ public: private: - ParagraphDataRef fStyleData; + ParagraphStyleDataRef fStyleData; }; diff --git a/src/apps/haiku-depot/textview/ParagraphStyleData.cpp b/src/apps/haiku-depot/textview/ParagraphStyleData.cpp index d7f3db02ea..d943c21195 100644 --- a/src/apps/haiku-depot/textview/ParagraphStyleData.cpp +++ b/src/apps/haiku-depot/textview/ParagraphStyleData.cpp @@ -58,93 +58,93 @@ ParagraphStyleData::operator!=(const ParagraphStyleData& other) const } -ParagraphStyleData* +ParagraphStyleDataRef ParagraphStyleData::SetAlignment(::Alignment alignment) { if (fAlignment == alignment) - return this; + return ParagraphStyleDataRef(this); ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this); if (ret == NULL) - return this; + return ParagraphStyleDataRef(this); ret->fAlignment = alignment; - return ret; + return ParagraphStyleDataRef(ret, true); } -ParagraphStyleData* +ParagraphStyleDataRef ParagraphStyleData::SetJustify(bool justify) { if (fJustify == justify) - return this; + return ParagraphStyleDataRef(this); ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this); if (ret == NULL) - return this; + return ParagraphStyleDataRef(this); ret->fJustify = justify; - return ret; + return ParagraphStyleDataRef(ret, true); } -ParagraphStyleData* +ParagraphStyleDataRef ParagraphStyleData::SetFirstLineInset(float inset) { if (fFirstLineInset == inset) - return this; + return ParagraphStyleDataRef(this); ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this); if (ret == NULL) - return this; + return ParagraphStyleDataRef(this); ret->fFirstLineInset = inset; - return ret; + return ParagraphStyleDataRef(ret, true); } -ParagraphStyleData* +ParagraphStyleDataRef ParagraphStyleData::SetLineInset(float inset) { if (fLineInset == inset) - return this; + return ParagraphStyleDataRef(this); ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this); if (ret == NULL) - return this; + return ParagraphStyleDataRef(this); ret->fLineInset = inset; - return ret; + return ParagraphStyleDataRef(ret, true); } -ParagraphStyleData* +ParagraphStyleDataRef ParagraphStyleData::SetSpacingTop(float spacing) { if (fSpacingTop == spacing) - return this; + return ParagraphStyleDataRef(this); ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this); if (ret == NULL) - return this; + return ParagraphStyleDataRef(this); ret->fSpacingTop = spacing; - return ret; + return ParagraphStyleDataRef(ret, true); } -ParagraphStyleData* +ParagraphStyleDataRef ParagraphStyleData::SetSpacingBottom(float spacing) { if (fSpacingBottom == spacing) - return this; + return ParagraphStyleDataRef(this); ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this); if (ret == NULL) - return this; + return ParagraphStyleDataRef(this); ret->fSpacingBottom = spacing; - return ret; + return ParagraphStyleDataRef(ret, true); } diff --git a/src/apps/haiku-depot/textview/ParagraphStyleData.h b/src/apps/haiku-depot/textview/ParagraphStyleData.h index 96c9d4332f..c209643705 100644 --- a/src/apps/haiku-depot/textview/ParagraphStyleData.h +++ b/src/apps/haiku-depot/textview/ParagraphStyleData.h @@ -14,6 +14,11 @@ enum Alignment { ALIGN_RIGHT = 2, }; + +class ParagraphStyleData; +typedef BReference ParagraphStyleDataRef; + + // You cannot modify a ParagraphStyleData object once it has been // created. class ParagraphStyleData : public BReferenceable { @@ -27,27 +32,27 @@ public: bool operator!=( const ParagraphStyleData& other) const; - ParagraphStyleData* SetAlignment(::Alignment alignment); + ParagraphStyleDataRef SetAlignment(::Alignment alignment); inline ::Alignment Alignment() const { return fAlignment; } - ParagraphStyleData* SetJustify(bool justify); + ParagraphStyleDataRef SetJustify(bool justify); inline bool Justify() const { return fJustify; } - ParagraphStyleData* SetFirstLineInset(float inset); + ParagraphStyleDataRef SetFirstLineInset(float inset); inline float FirstLineInset() const { return fFirstLineInset; } - ParagraphStyleData* SetLineInset(float inset); + ParagraphStyleDataRef SetLineInset(float inset); inline float LineInset() const { return fLineInset; } - ParagraphStyleData* SetSpacingTop(float spacing); + ParagraphStyleDataRef SetSpacingTop(float spacing); inline float SpacingTop() const { return fSpacingTop; } - ParagraphStyleData* SetSpacingBottom(float spacing); + ParagraphStyleDataRef SetSpacingBottom(float spacing); inline float SpacingBottom() const { return fSpacingBottom; } @@ -66,7 +71,4 @@ private: }; -typedef BReference ParagraphDataRef; - - #endif // PARAGRAPH_STYLE_DATA_H