summaryrefslogtreecommitdiff
path: root/core/fpdfapi/fpdf_page/include
diff options
context:
space:
mode:
authortsepez <tsepez@chromium.org>2016-09-02 17:34:21 -0700
committerCommit bot <commit-bot@chromium.org>2016-09-02 17:34:21 -0700
commitd21f22e2c07d61bf15ee3af91869901adb6f0cde (patch)
tree5277acb7de48541f5a39f57f3017a69b3ecfcec3 /core/fpdfapi/fpdf_page/include
parent6296f2d501e2749d98e890ed722f923ee584c9ca (diff)
downloadpdfium-d21f22e2c07d61bf15ee3af91869901adb6f0cde.tar.xz
Make CPDF_ClipPath have a CPDF_ClipPathData rather than inheriting.
Make Data private to the ClipPath class which manages it transparently for its callers. This prevents the callers from having to remember to make a copy before dirtying the shared data, since the operations that modify state will do this under the covers for us. Review-Url: https://codereview.chromium.org/2301263003
Diffstat (limited to 'core/fpdfapi/fpdf_page/include')
-rw-r--r--core/fpdfapi/fpdf_page/include/cpdf_clippath.h38
1 files changed, 35 insertions, 3 deletions
diff --git a/core/fpdfapi/fpdf_page/include/cpdf_clippath.h b/core/fpdfapi/fpdf_page/include/cpdf_clippath.h
index 1daacf55d0..6b3cca0d41 100644
--- a/core/fpdfapi/fpdf_page/include/cpdf_clippath.h
+++ b/core/fpdfapi/fpdf_page/include/cpdf_clippath.h
@@ -7,16 +7,33 @@
#ifndef CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_CLIPPATH_H_
#define CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_CLIPPATH_H_
-#include "core/fpdfapi/fpdf_page/cpdf_clippathdata.h"
+#include <memory>
+#include <utility>
+#include <vector>
+
#include "core/fpdfapi/fpdf_page/include/cpdf_path.h"
+#include "core/fxcrt/include/cfx_count_ref.h"
#include "core/fxcrt/include/fx_basic.h"
#include "core/fxcrt/include/fx_coordinates.h"
-#include "core/fxcrt/include/fx_system.h"
+class CPDF_Path;
class CPDF_TextObject;
-class CPDF_ClipPath : public CFX_CountRef<CPDF_ClipPathData> {
+class CPDF_ClipPath {
public:
+ CPDF_ClipPath();
+ CPDF_ClipPath(const CPDF_ClipPath& that);
+ ~CPDF_ClipPath();
+
+ void Emplace() { m_Ref.Emplace(); }
+ void SetNull() { m_Ref.SetNull(); }
+
+ explicit operator bool() const { return !!m_Ref; }
+ bool operator==(const CPDF_ClipPath& that) const {
+ return m_Ref == that.m_Ref;
+ }
+ bool operator!=(const CPDF_ClipPath& that) const { return !(*this == that); }
+
uint32_t GetPathCount() const;
CPDF_Path GetPath(size_t i) const;
uint8_t GetClipType(size_t i) const;
@@ -26,6 +43,21 @@ class CPDF_ClipPath : public CFX_CountRef<CPDF_ClipPathData> {
void AppendPath(CPDF_Path path, uint8_t type, bool bAutoMerge);
void AppendTexts(std::vector<std::unique_ptr<CPDF_TextObject>>* pTexts);
void Transform(const CFX_Matrix& matrix);
+
+ private:
+ class PathData {
+ public:
+ using PathAndTypeData = std::pair<CPDF_Path, uint8_t>;
+
+ PathData();
+ PathData(const PathData& that);
+ ~PathData();
+
+ std::vector<PathAndTypeData> m_PathAndTypeList;
+ std::vector<std::unique_ptr<CPDF_TextObject>> m_TextList;
+ };
+
+ CFX_CountRef<PathData> m_Ref;
};
#endif // CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_CLIPPATH_H_