summaryrefslogtreecommitdiff
path: root/fpdfsdk/fpdfannot.cpp
diff options
context:
space:
mode:
authorHenrique Nakashima <hnakashima@chromium.org>2018-01-11 22:40:59 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-01-11 22:40:59 +0000
commit5970a47ac3cb1c0256d73f509ac73fa24aa4be42 (patch)
tree8053f39360b76d4373813284df5529fd08f5bc3e /fpdfsdk/fpdfannot.cpp
parent7c0a92e1761dddaf6ed84e3bea723dc7a40c8685 (diff)
downloadpdfium-5970a47ac3cb1c0256d73f509ac73fa24aa4be42.tar.xz
Add FPDFAnnot_SetAP to public API.chromium/3319
Change-Id: I6de3e4e158a8b0276775c0915cbe53417135eec3 Reviewed-on: https://pdfium-review.googlesource.com/22570 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Diffstat (limited to 'fpdfsdk/fpdfannot.cpp')
-rw-r--r--fpdfsdk/fpdfannot.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/fpdfsdk/fpdfannot.cpp b/fpdfsdk/fpdfannot.cpp
index e40e21981e..9b0cb39574 100644
--- a/fpdfsdk/fpdfannot.cpp
+++ b/fpdfsdk/fpdfannot.cpp
@@ -747,6 +747,51 @@ FPDFAnnot_GetStringValue(FPDF_ANNOTATION annot,
buffer, buflen);
}
+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
+FPDFAnnot_SetAP(FPDF_ANNOTATION annot,
+ FPDF_ANNOT_APPEARANCEMODE appearanceMode,
+ FPDF_WIDESTRING value) {
+ if (appearanceMode < 0 || appearanceMode >= FPDF_ANNOT_APPEARANCEMODE_COUNT)
+ return false;
+
+ if (!annot)
+ return false;
+
+ CPDF_Dictionary* pAnnotDict =
+ CPDFAnnotContextFromFPDFAnnotation(annot)->GetAnnotDict();
+ if (!pAnnotDict)
+ return false;
+
+ constexpr const char* modeKeyForMode[] = {"N", "R", "D"};
+ static_assert(FX_ArraySize(modeKeyForMode) == FPDF_ANNOT_APPEARANCEMODE_COUNT,
+ "length of modeKeyForMode should be equal to "
+ "FPDF_ANNOT_APPEARANCEMODE_COUNT");
+ const char* modeKey = modeKeyForMode[appearanceMode];
+
+ CPDF_Dictionary* pApDict = pAnnotDict->GetDictFor("AP");
+
+ // If value is null, we're in remove mode. Otherwise, we're in add/update
+ // mode.
+ if (value) {
+ if (!pApDict)
+ pApDict = pAnnotDict->SetNewFor<CPDF_Dictionary>("AP");
+
+ ByteString newValue = CFXByteStringFromFPDFWideString(value);
+ auto pNewApStream = pdfium::MakeUnique<CPDF_Stream>();
+ pNewApStream->SetData(newValue.raw_str(), newValue.GetLength());
+ pApDict->SetFor(modeKey, std::move(pNewApStream));
+ } else {
+ if (pApDict) {
+ if (appearanceMode == FPDF_ANNOT_APPEARANCEMODE_NORMAL)
+ pAnnotDict->RemoveFor("AP");
+ else
+ pApDict->RemoveFor(modeKey);
+ }
+ }
+
+ return true;
+}
+
FPDF_EXPORT unsigned long FPDF_CALLCONV
FPDFAnnot_GetAP(FPDF_ANNOTATION annot,
FPDF_ANNOT_APPEARANCEMODE appearanceMode,