summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortsepez <tsepez@chromium.org>2016-12-13 10:28:47 -0800
committerCommit bot <commit-bot@chromium.org>2016-12-13 10:28:47 -0800
commit05b4fc1227f5b6d39a3a65daf915a92ea3b749f4 (patch)
tree681b1f98593fb3923b46dff4f58a627aeb131d40
parent8df02348924f66e14131aa378abc6c6ea7a352b6 (diff)
downloadpdfium-05b4fc1227f5b6d39a3a65daf915a92ea3b749f4.tar.xz
Use CFX_MaybeOwned<> in CPDF_Annot.
Avoid another unique_ptr release and a separate flag. Review-Url: https://codereview.chromium.org/2570913002
-rw-r--r--core/fpdfdoc/cpdf_annot.cpp35
-rw-r--r--core/fpdfdoc/cpdf_annot.h10
2 files changed, 19 insertions, 26 deletions
diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
index 70c6b8d3c4..38e5b5fc8b 100644
--- a/core/fpdfdoc/cpdf_annot.cpp
+++ b/core/fpdfdoc/cpdf_annot.cpp
@@ -63,20 +63,16 @@ CPDF_Form* AnnotGetMatrix(const CPDF_Page* pPage,
CPDF_Annot::CPDF_Annot(std::unique_ptr<CPDF_Dictionary> pDict,
CPDF_Document* pDocument)
- : m_bOwnedAnnotDict(true),
- m_pAnnotDict(pDict.release()),
- m_pDocument(pDocument) {
+ : m_pAnnotDict(std::move(pDict)), m_pDocument(pDocument) {
Init();
}
CPDF_Annot::CPDF_Annot(CPDF_Dictionary* pDict, CPDF_Document* pDocument)
- : m_bOwnedAnnotDict(false), m_pAnnotDict(pDict), m_pDocument(pDocument) {
+ : m_pAnnotDict(pDict), m_pDocument(pDocument) {
Init();
}
CPDF_Annot::~CPDF_Annot() {
- if (m_bOwnedAnnotDict)
- delete m_pAnnotDict;
ClearCachedAP();
}
@@ -88,28 +84,29 @@ void CPDF_Annot::Init() {
}
void CPDF_Annot::GenerateAPIfNeeded() {
- if (!ShouldGenerateAPForAnnotation(m_pAnnotDict))
+ if (!ShouldGenerateAPForAnnotation(m_pAnnotDict.Get()))
return;
+ CPDF_Dictionary* pDict = m_pAnnotDict.Get();
bool result = false;
if (m_nSubtype == CPDF_Annot::Subtype::CIRCLE)
- result = CPVT_GenerateAP::GenerateCircleAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GenerateCircleAP(m_pDocument, pDict);
else if (m_nSubtype == CPDF_Annot::Subtype::HIGHLIGHT)
- result = CPVT_GenerateAP::GenerateHighlightAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GenerateHighlightAP(m_pDocument, pDict);
else if (m_nSubtype == CPDF_Annot::Subtype::INK)
- result = CPVT_GenerateAP::GenerateInkAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GenerateInkAP(m_pDocument, pDict);
else if (m_nSubtype == CPDF_Annot::Subtype::POPUP)
- result = CPVT_GenerateAP::GeneratePopupAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GeneratePopupAP(m_pDocument, pDict);
else if (m_nSubtype == CPDF_Annot::Subtype::SQUARE)
- result = CPVT_GenerateAP::GenerateSquareAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GenerateSquareAP(m_pDocument, pDict);
else if (m_nSubtype == CPDF_Annot::Subtype::SQUIGGLY)
- result = CPVT_GenerateAP::GenerateSquigglyAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GenerateSquigglyAP(m_pDocument, pDict);
else if (m_nSubtype == CPDF_Annot::Subtype::STRIKEOUT)
- result = CPVT_GenerateAP::GenerateStrikeOutAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GenerateStrikeOutAP(m_pDocument, pDict);
else if (m_nSubtype == CPDF_Annot::Subtype::TEXT)
- result = CPVT_GenerateAP::GenerateTextAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GenerateTextAP(m_pDocument, pDict);
else if (m_nSubtype == CPDF_Annot::Subtype::UNDERLINE)
- result = CPVT_GenerateAP::GenerateUnderlineAP(m_pDocument, m_pAnnotDict);
+ result = CPVT_GenerateAP::GenerateUnderlineAP(m_pDocument, pDict);
if (result) {
m_pAnnotDict->SetNewFor<CPDF_Boolean>(kPDFiumKey_HasGeneratedAP, result);
@@ -118,7 +115,7 @@ void CPDF_Annot::GenerateAPIfNeeded() {
}
bool CPDF_Annot::ShouldDrawAnnotation() {
- if (IsAnnotationHidden(m_pAnnotDict))
+ if (IsAnnotationHidden(m_pAnnotDict.Get()))
return false;
if (m_nSubtype == CPDF_Annot::Subtype::POPUP && !m_bOpenState)
@@ -142,7 +139,7 @@ CFX_FloatRect CPDF_Annot::RectForDrawing() const {
bool bShouldUseQuadPointsCoords =
m_bIsTextMarkupAnnotation && m_bHasGeneratedAP;
if (bShouldUseQuadPointsCoords)
- return RectFromQuadPoints(m_pAnnotDict);
+ return RectFromQuadPoints(m_pAnnotDict.Get());
return m_pAnnotDict->GetRectFor("Rect");
}
@@ -199,7 +196,7 @@ CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict,
}
CPDF_Form* CPDF_Annot::GetAPForm(const CPDF_Page* pPage, AppearanceMode mode) {
- CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pAnnotDict, mode);
+ CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pAnnotDict.Get(), mode);
if (!pStream)
return nullptr;
diff --git a/core/fpdfdoc/cpdf_annot.h b/core/fpdfdoc/cpdf_annot.h
index 2dcddb0ef8..188106acdf 100644
--- a/core/fpdfdoc/cpdf_annot.h
+++ b/core/fpdfdoc/cpdf_annot.h
@@ -10,6 +10,7 @@
#include <map>
#include <memory>
+#include "core/fxcrt/cfx_maybe_owned.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/fx_system.h"
@@ -81,9 +82,8 @@ class CPDF_Annot {
CPDF_Annot::Subtype GetSubtype() const;
uint32_t GetFlags() const;
CFX_FloatRect GetRect() const;
- const CPDF_Dictionary* GetAnnotDict() const { return m_pAnnotDict; }
- CPDF_Dictionary* GetAnnotDict() { return m_pAnnotDict; }
CPDF_Document* GetDocument() const { return m_pDocument; }
+ CPDF_Dictionary* GetAnnotDict() const { return m_pAnnotDict.Get(); }
bool DrawAppearance(CPDF_Page* pPage,
CFX_RenderDevice* pDevice,
@@ -111,11 +111,7 @@ class CPDF_Annot {
CFX_FloatRect RectForDrawing() const;
- // For regular annotations, |m_pAnnotDict| is not owned. For
- // our artificially created popup annotations, |m_pAnnotDict|
- // is owned by this class.
- bool m_bOwnedAnnotDict;
- CPDF_Dictionary* m_pAnnotDict;
+ CFX_MaybeOwned<CPDF_Dictionary> m_pAnnotDict;
CPDF_Document* const m_pDocument;
CPDF_Annot::Subtype m_nSubtype;
std::map<CPDF_Stream*, std::unique_ptr<CPDF_Form>> m_APMap;