SOURCES: poppler-annotation-helper.h (NEW) - missing file from pop...
qboosh
qboosh at pld-linux.org
Sat May 27 11:34:40 CEST 2006
Author: qboosh Date: Sat May 27 09:34:40 2006 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- missing file from poppler CVS
---- Files affected:
SOURCES:
poppler-annotation-helper.h (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/poppler-annotation-helper.h
diff -u /dev/null SOURCES/poppler-annotation-helper.h:1.1
--- /dev/null Sat May 27 11:34:40 2006
+++ SOURCES/poppler-annotation-helper.h Sat May 27 11:34:35 2006
@@ -0,0 +1,213 @@
+/* poppler-annotation-helper.h: qt interface to poppler
+ * Copyright (C) 2006, Albert Astals Cid <aacid at kde.org>
+ * Adapting code from
+ * Copyright (C) 2004 by Enrico Ros <eros.kde at email.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <QtCore/QDebug>
+
+namespace Poppler {
+
+class XPDFReader
+{
+ public:
+ // find named symbol and parse it
+ static void lookupName( Dict *, const char *, QString & dest );
+ static void lookupString( Dict *, const char *, QString & dest );
+ static void lookupBool( Dict *, const char *, bool & dest );
+ static void lookupInt( Dict *, const char *, int & dest );
+ static void lookupNum( Dict *, const char *, double & dest );
+ static int lookupNumArray( Dict *, const char *, double * dest, int len );
+ static void lookupColor( Dict *, const char *, QColor & color );
+ static void lookupIntRef( Dict *, const char *, int & dest );
+ static void lookupDate( Dict *, const char *, QDateTime & dest );
+ // transform from user coords to normalized ones using the matrix M
+ static inline void transform( double * M, double x, double y, QPointF &res );
+};
+
+void XPDFReader::lookupName( Dict * dict, const char * type, QString & dest )
+{
+ Object nameObj;
+ dict->lookup( type, &nameObj );
+ if ( nameObj.isNull() )
+ return;
+ if ( nameObj.isName() )
+ dest = nameObj.getName();
+ else
+ qDebug() << type << " is not Name." << endl;
+ nameObj.free();
+}
+
+void XPDFReader::lookupString( Dict * dict, const char * type, QString & dest )
+{
+ Object stringObj;
+ dict->lookup( type, &stringObj );
+ if ( stringObj.isNull() )
+ return;
+ if ( stringObj.isString() )
+ dest = stringObj.getString()->getCString();
+ else
+ qDebug() << type << " is not String." << endl;
+ stringObj.free();
+}
+
+void XPDFReader::lookupBool( Dict * dict, const char * type, bool & dest )
+{
+ Object boolObj;
+ dict->lookup( type, &boolObj );
+ if ( boolObj.isNull() )
+ return;
+ if ( boolObj.isBool() )
+ dest = boolObj.getBool() == gTrue;
+ else
+ qDebug() << type << " is not Bool." << endl;
+ boolObj.free();
+}
+
+void XPDFReader::lookupInt( Dict * dict, const char * type, int & dest )
+{
+ Object intObj;
+ dict->lookup( type, &intObj );
+ if ( intObj.isNull() )
+ return;
+ if ( intObj.isInt() )
+ dest = intObj.getInt();
+ else
+ qDebug() << type << " is not Int." << endl;
+ intObj.free();
+}
+
+void XPDFReader::lookupNum( Dict * dict, const char * type, double & dest )
+{
+ Object numObj;
+ dict->lookup( type, &numObj );
+ if ( numObj.isNull() )
+ return;
+ if ( numObj.isNum() )
+ dest = numObj.getNum();
+ else
+ qDebug() << type << " is not Num." << endl;
+ numObj.free();
+}
+
+int XPDFReader::lookupNumArray( Dict * dict, const char * type, double * dest, int len )
+{
+ Object arrObj;
+ dict->lookup( type, &arrObj );
+ if ( arrObj.isNull() )
+ return 0;
+ Object numObj;
+ if ( arrObj.isArray() )
+ {
+ len = qMin( len, arrObj.arrayGetLength() );
+ for ( int i = 0; i < len; i++ )
+ {
+ dest[i] = arrObj.arrayGet( i, &numObj )->getNum();
+ numObj.free();
+ }
+ }
+ else
+ {
+ len = 0;
+ qDebug() << type << "is not Array." << endl;
+ }
+ arrObj.free();
+ return len;
+}
+
+void XPDFReader::lookupColor( Dict * dict, const char * type, QColor & dest )
+{
+ double c[3];
+ if ( XPDFReader::lookupNumArray( dict, type, c, 3 ) == 3 )
+ dest = QColor( (int)(c[0]*255.0), (int)(c[1]*255.0), (int)(c[2]*255.0));
+}
+
+void XPDFReader::lookupIntRef( Dict * dict, const char * type, int & dest )
+{
+ Object refObj;
+ dict->lookupNF( type, &refObj );
+ if ( refObj.isNull() )
+ return;
+ if ( refObj.isRef() )
+ dest = refObj.getRefNum();
+ else
+ qDebug() << type << " is not Ref." << endl;
+ refObj.free();
+}
+
+void XPDFReader::lookupDate( Dict * dict, const char * type, QDateTime & dest )
+{
+ Object dateObj;
+ dict->lookup( type, &dateObj );
+ if ( dateObj.isNull() )
+ return;
+ if ( dateObj.isString() )
+ {
+ const char * s = dateObj.getString()->getCString();
+ if ( s[0] == 'D' && s[1] == ':' )
+ s += 2;
+ int year, mon, day, hour, min, sec;
+ if ( sscanf( s, "%4d%2d%2d%2d%2d%2d", &year, &mon, &day, &hour, &min, &sec ) == 6 )
+ {
+ QDate d( year, mon, day );
+ QTime t( hour, min, sec );
+ if ( d.isValid() && t.isValid() )
+ dest = QDateTime(d, t);
+ }
+ else
+ qDebug() << "Wrong Date format '" << s << "' for '" << type << "'." << endl;
+ }
+ else
+ qDebug() << type << " is not Date" << endl;
+ dateObj.free();
+}
+
+void XPDFReader::transform( double * M, double x, double y, QPointF &res )
+{
+ res.setX( M[0] * x + M[2] * y + M[4] );
+ res.setY( M[1] * x + M[3] * y + M[5] );
+}
+
+/** @short Helper classes for CROSSDEPS resolving and DS conversion. */
+struct ResolveRevision
+{
+ int prevAnnotationID; // ID of the annotation to be reparended
+ int nextAnnotationID; // (only needed for speeding up resolving)
+ Annotation * nextAnnotation; // annotation that will act as parent
+ Annotation::RevScope nextScope; // scope of revision (Reply)
+ Annotation::RevType nextType; // type of revision (None)
+};
+
+struct ResolveWindow
+{
+ int popupWindowID; // ID of the (maybe shared) window
+ Annotation * annotation; // annotation having the popup window
+};
+
+struct PostProcessText // this handles a special pdf case conversion
+{
+ Annotation * textAnnotation; // a popup text annotation (not FreeText)
+ bool opened; // pdf property to convert to window flags
+};
+
+struct PopupWindow
+{
+ Annotation * dummyAnnotation; // window properties (in pdf as Annotation)
+ bool shown; // converted to Annotation::Hidden flag
+};
+
+}
================================================================
More information about the pld-cvs-commit
mailing list