poppler/Annot.cc | 91 ++++++++++++++++++------------------------------------- poppler/Annot.h | 4 +- 2 files changed, 34 insertions(+), 61 deletions(-)
New commits: commit 128dcaf282f418d8c45cea4df6ad4d3167b3e39c Author: Carlos Garcia Campos <[email protected]> Date: Sat Mar 5 13:12:49 2011 +0100 annots: Add AnnotBorder::parseDashArray() to parse dash arrays The code was duplicated in AnnotBorderArray and AnnotBorderBS diff --git a/poppler/Annot.cc b/poppler/Annot.cc index 53aa647..2a7e6d0 100644 --- a/poppler/Annot.cc +++ b/poppler/Annot.cc @@ -439,6 +439,32 @@ AnnotBorder::AnnotBorder() { style = borderSolid; } +void AnnotBorder::parseDashArray(Object *dashObj) { + GBool correct = gTrue; + int tempLength = dashObj->arrayGetLength(); + double *tempDash = (double *) gmallocn (tempLength, sizeof (double)); + + // TODO: check not all zero (Line Dash Pattern Page 217 PDF 8.1) + for (int i = 0; i < tempLength && i < DASH_LIMIT && correct; i++) { + Object obj1; + + if (dashObj->arrayGet(i, &obj1)->isNum()) { + tempDash[i] = obj1.getNum(); + + correct = tempDash[i] >= 0; + obj1.free(); + } + } + + if (correct) { + dashLength = tempLength; + dash = tempDash; + style = borderDashed; + } else { + gfree (tempDash); + } +} + AnnotBorder::~AnnotBorder() { if (dash) gfree (dash); @@ -480,37 +506,9 @@ AnnotBorderArray::AnnotBorderArray(Array *array) { correct = gFalse; obj1.free(); - // TODO: check not all zero ? (Line Dash Pattern Page 217 PDF 8.1) if (arrayLength == 4) { - if (array->get(3, &obj1)->isArray()) { - Array *dashPattern = obj1.getArray(); - int tempLength = dashPattern->getLength(); - double *tempDash = (double *) gmallocn (tempLength, sizeof (double)); - - for(int i = 0; i < tempLength && i < DASH_LIMIT && correct; i++) { - - if (dashPattern->get(i, &obj1)->isNum()) { - tempDash[i] = obj1.getNum(); - - if (tempDash[i] < 0) - correct = gFalse; - - } else { - correct = gFalse; - } - obj1.free(); - } - - if (correct) { - dashLength = tempLength; - dash = tempDash; - style = borderDashed; - } else { - gfree (tempDash); - } - } else { - correct = gFalse; - } + if (array->get(3, &obj1)->isArray()) + parseDashArray(&obj1); obj1.free(); } } else { @@ -565,42 +563,15 @@ AnnotBorderBS::AnnotBorderBS(Dict *dict) { obj2.free(); obj1.free(); - // TODO: check not all zero (Line Dash Pattern Page 217 PDF 8.1) - if (dict->lookup("D", &obj1)->isArray()) { - GBool correct = gTrue; - int tempLength = obj1.arrayGetLength(); - double *tempDash = (double *) gmallocn (tempLength, sizeof (double)); - - for(int i = 0; i < tempLength && correct; i++) { - Object obj2; - - if (obj1.arrayGet(i, &obj2)->isNum()) { - tempDash[i] = obj2.getNum(); - - if (tempDash[i] < 0) - correct = gFalse; - } else { - correct = gFalse; - } - obj2.free(); - } - - if (correct) { - dashLength = tempLength; - dash = tempDash; - style = borderDashed; - } else { - gfree (tempDash); - } - - } + if (dict->lookup("D", &obj1)->isArray()) + parseDashArray(&obj1); + obj1.free(); if (!dash) { dashLength = 1; dash = (double *) gmallocn (dashLength, sizeof (double)); dash[0] = 3; } - obj1.free(); } //------------------------------------------------------------------------ diff --git a/poppler/Annot.h b/poppler/Annot.h index ebce276..dcdf9ce 100644 --- a/poppler/Annot.h +++ b/poppler/Annot.h @@ -231,8 +231,11 @@ public: virtual AnnotBorderStyle getStyle() const { return style; } protected: + void parseDashArray(Object *dashObj); + AnnotBorderType type; double width; + static const int DASH_LIMIT = 10; // implementation note 82 in Appendix H. int dashLength; double *dash; AnnotBorderStyle style; @@ -251,7 +254,6 @@ public: double getVerticalCorner() const { return verticalCorner; } protected: - static const int DASH_LIMIT = 10; // implementation note 82 in Appendix H. double horizontalCorner; // (Default 0) double verticalCorner; // (Default 0) // double width; // (Default 1) (inherited from AnnotBorder) _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
