pdf2json 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +9 -0
- data/bin/.gitkeep +0 -0
- data/ext/extconf.rb +30 -0
- data/lib/pdf2json.rb +8 -0
- data/pdf2json-0.52-source/AUTHORS +24 -0
- data/pdf2json-0.52-source/CHANGES +11 -0
- data/pdf2json-0.52-source/Makefile +84 -0
- data/pdf2json-0.52-source/Makefile.in +84 -0
- data/pdf2json-0.52-source/aclocal.m4 +274 -0
- data/pdf2json-0.52-source/aconf-win32.h +86 -0
- data/pdf2json-0.52-source/aconf.h +42 -0
- data/pdf2json-0.52-source/aconf.h.in +41 -0
- data/pdf2json-0.52-source/autom4te.cache/output.0 +6908 -0
- data/pdf2json-0.52-source/autom4te.cache/requests +76 -0
- data/pdf2json-0.52-source/autom4te.cache/traces.0 +466 -0
- data/pdf2json-0.52-source/config.log +1259 -0
- data/pdf2json-0.52-source/config.status +1050 -0
- data/pdf2json-0.52-source/configure +6908 -0
- data/pdf2json-0.52-source/configure.ac +93 -0
- data/pdf2json-0.52-source/doc/pdffonts.1 +130 -0
- data/pdf2json-0.52-source/doc/pdffonts.cat +107 -0
- data/pdf2json-0.52-source/doc/pdffonts.hlp +117 -0
- data/pdf2json-0.52-source/doc/pdfimages.1 +102 -0
- data/pdf2json-0.52-source/doc/pdfimages.cat +92 -0
- data/pdf2json-0.52-source/doc/pdfimages.hlp +101 -0
- data/pdf2json-0.52-source/doc/pdfinfo.1 +158 -0
- data/pdf2json-0.52-source/doc/pdfinfo.cat +119 -0
- data/pdf2json-0.52-source/doc/pdfinfo.hlp +129 -0
- data/pdf2json-0.52-source/doc/pdftoppm.1 +115 -0
- data/pdf2json-0.52-source/doc/pdftoppm.cat +105 -0
- data/pdf2json-0.52-source/doc/pdftoppm.hlp +114 -0
- data/pdf2json-0.52-source/doc/pdftops.1 +229 -0
- data/pdf2json-0.52-source/doc/pdftops.cat +221 -0
- data/pdf2json-0.52-source/doc/pdftops.hlp +231 -0
- data/pdf2json-0.52-source/doc/pdftotext.1 +137 -0
- data/pdf2json-0.52-source/doc/pdftotext.cat +120 -0
- data/pdf2json-0.52-source/doc/pdftotext.hlp +133 -0
- data/pdf2json-0.52-source/doc/sample-xpdfrc +91 -0
- data/pdf2json-0.52-source/doc/xpdf.1 +513 -0
- data/pdf2json-0.52-source/doc/xpdf.cat +476 -0
- data/pdf2json-0.52-source/doc/xpdf.hlp +489 -0
- data/pdf2json-0.52-source/doc/xpdfrc.5 +480 -0
- data/pdf2json-0.52-source/doc/xpdfrc.cat +474 -0
- data/pdf2json-0.52-source/doc/xpdfrc.hlp +479 -0
- data/pdf2json-0.52-source/fofi/.DS_Store +0 -0
- data/pdf2json-0.52-source/fofi/FoFiBase.cc +156 -0
- data/pdf2json-0.52-source/fofi/FoFiBase.h +57 -0
- data/pdf2json-0.52-source/fofi/FoFiBase.o +0 -0
- data/pdf2json-0.52-source/fofi/FoFiEncodings.cc +994 -0
- data/pdf2json-0.52-source/fofi/FoFiEncodings.h +36 -0
- data/pdf2json-0.52-source/fofi/FoFiEncodings.o +0 -0
- data/pdf2json-0.52-source/fofi/FoFiTrueType.cc +2027 -0
- data/pdf2json-0.52-source/fofi/FoFiTrueType.h +174 -0
- data/pdf2json-0.52-source/fofi/FoFiTrueType.o +0 -0
- data/pdf2json-0.52-source/fofi/FoFiType1.cc +252 -0
- data/pdf2json-0.52-source/fofi/FoFiType1.h +59 -0
- data/pdf2json-0.52-source/fofi/FoFiType1.o +0 -0
- data/pdf2json-0.52-source/fofi/FoFiType1C.cc +2603 -0
- data/pdf2json-0.52-source/fofi/FoFiType1C.h +233 -0
- data/pdf2json-0.52-source/fofi/FoFiType1C.o +0 -0
- data/pdf2json-0.52-source/fofi/Makefile +70 -0
- data/pdf2json-0.52-source/fofi/Makefile.dep +0 -0
- data/pdf2json-0.52-source/fofi/Makefile.in +70 -0
- data/pdf2json-0.52-source/fofi/libfofi.a +0 -0
- data/pdf2json-0.52-source/fofi/vms_make.com +0 -0
- data/pdf2json-0.52-source/freetype.win32/.DS_Store +0 -0
- data/pdf2json-0.52-source/freetype.win32/include/.DS_Store +0 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftconfig.h +528 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftheader.h +780 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftmodule.h +32 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftoption.h +733 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftstdlib.h +173 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/freetype.h +3919 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftadvanc.h +179 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftbbox.h +94 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftbdf.h +209 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftbitmap.h +227 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftcache.h +1128 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftchapters.h +103 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftcid.h +166 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/fterrdef.h +244 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/fterrors.h +206 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftgasp.h +120 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftglyph.h +613 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftgxval.h +358 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftgzip.h +102 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftimage.h +1313 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftincrem.h +353 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftlcdfil.h +213 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftlist.h +277 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftlzw.h +99 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftmac.h +274 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftmm.h +378 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftmodapi.h +483 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftmoderr.h +155 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftotval.h +203 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftoutln.h +537 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftpfr.h +172 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftrender.h +230 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftsizes.h +159 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftsnames.h +200 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftstroke.h +716 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftsynth.h +80 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftsystem.h +347 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/fttrigon.h +350 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/fttypes.h +588 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftwinfnt.h +274 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ftxf86.h +83 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/autohint.h +231 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftcalc.h +179 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftdebug.h +250 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftdriver.h +422 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftgloadr.h +168 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftmemory.h +380 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftobjs.h +1428 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftpic.h +67 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftrfork.h +196 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftserv.h +620 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftstream.h +539 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/fttrace.h +139 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftvalid.h +150 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/internal.h +51 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/pcftypes.h +56 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/psaux.h +873 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/pshints.h +712 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svbdf.h +77 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svcid.h +83 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svgldict.h +82 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svgxval.h +72 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svkern.h +51 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svmm.h +104 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svotval.h +55 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svpfr.h +66 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svpostnm.h +79 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svpscmap.h +164 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svpsinfo.h +92 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svsfnt.h +102 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svttcmap.h +106 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svtteng.h +53 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svttglyf.h +67 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svwinfnt.h +50 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svxf86nm.h +55 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/sfnt.h +897 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/t1types.h +270 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/tttypes.h +1543 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/t1tables.h +504 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ttnameid.h +1247 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/tttables.h +759 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/tttags.h +107 -0
- data/pdf2json-0.52-source/freetype.win32/include/freetype/ttunpat.h +59 -0
- data/pdf2json-0.52-source/freetype.win32/include/ft2build.h +39 -0
- data/pdf2json-0.52-source/freetype.win32/lib/freetype_a.lib +0 -0
- data/pdf2json-0.52-source/goo/.DS_Store +0 -0
- data/pdf2json-0.52-source/goo/FixedPoint.cc +118 -0
- data/pdf2json-0.52-source/goo/FixedPoint.h +155 -0
- data/pdf2json-0.52-source/goo/FixedPoint.o +0 -0
- data/pdf2json-0.52-source/goo/GHash.cc +380 -0
- data/pdf2json-0.52-source/goo/GHash.h +78 -0
- data/pdf2json-0.52-source/goo/GHash.o +0 -0
- data/pdf2json-0.52-source/goo/GList.cc +97 -0
- data/pdf2json-0.52-source/goo/GList.h +96 -0
- data/pdf2json-0.52-source/goo/GList.o +0 -0
- data/pdf2json-0.52-source/goo/GMutex.h +49 -0
- data/pdf2json-0.52-source/goo/GString.cc +724 -0
- data/pdf2json-0.52-source/goo/GString.cc.fixed +718 -0
- data/pdf2json-0.52-source/goo/GString.h +136 -0
- data/pdf2json-0.52-source/goo/GString.o +0 -0
- data/pdf2json-0.52-source/goo/ImgWriter.o +0 -0
- data/pdf2json-0.52-source/goo/JpegWriter.o +0 -0
- data/pdf2json-0.52-source/goo/Makefile +72 -0
- data/pdf2json-0.52-source/goo/Makefile.dep +0 -0
- data/pdf2json-0.52-source/goo/Makefile.in +72 -0
- data/pdf2json-0.52-source/goo/PNGWriter.o +0 -0
- data/pdf2json-0.52-source/goo/gfile.cc +731 -0
- data/pdf2json-0.52-source/goo/gfile.h +138 -0
- data/pdf2json-0.52-source/goo/gfile.o +0 -0
- data/pdf2json-0.52-source/goo/gmem.cc +264 -0
- data/pdf2json-0.52-source/goo/gmem.h +79 -0
- data/pdf2json-0.52-source/goo/gmem.o +0 -0
- data/pdf2json-0.52-source/goo/gmempp.cc +32 -0
- data/pdf2json-0.52-source/goo/gmempp.o +0 -0
- data/pdf2json-0.52-source/goo/gtypes.h +29 -0
- data/pdf2json-0.52-source/goo/libGoo.a +0 -0
- data/pdf2json-0.52-source/goo/parseargs.c +190 -0
- data/pdf2json-0.52-source/goo/parseargs.h +71 -0
- data/pdf2json-0.52-source/goo/parseargs.o +0 -0
- data/pdf2json-0.52-source/goo/vms_directory.c +214 -0
- data/pdf2json-0.52-source/goo/vms_dirent.h +67 -0
- data/pdf2json-0.52-source/goo/vms_make.com +82 -0
- data/pdf2json-0.52-source/goo/vms_sys_dirent.h +54 -0
- data/pdf2json-0.52-source/goo/vms_unix_time.h +102 -0
- data/pdf2json-0.52-source/goo/vms_unix_times.c +42 -0
- data/pdf2json-0.52-source/goo/vms_unlink.c +22 -0
- data/pdf2json-0.52-source/ms_make.bat +199 -0
- data/pdf2json-0.52-source/splash/.DS_Store +0 -0
- data/pdf2json-0.52-source/splash/Makefile +103 -0
- data/pdf2json-0.52-source/splash/Makefile.dep +0 -0
- data/pdf2json-0.52-source/splash/Makefile.in +103 -0
- data/pdf2json-0.52-source/splash/Splash.cc +3310 -0
- data/pdf2json-0.52-source/splash/Splash.h +293 -0
- data/pdf2json-0.52-source/splash/Splash.o +0 -0
- data/pdf2json-0.52-source/splash/SplashBitmap.cc +188 -0
- data/pdf2json-0.52-source/splash/SplashBitmap.h +64 -0
- data/pdf2json-0.52-source/splash/SplashBitmap.o +0 -0
- data/pdf2json-0.52-source/splash/SplashClip.cc +382 -0
- data/pdf2json-0.52-source/splash/SplashClip.h +107 -0
- data/pdf2json-0.52-source/splash/SplashClip.o +0 -0
- data/pdf2json-0.52-source/splash/SplashErrorCodes.h +32 -0
- data/pdf2json-0.52-source/splash/SplashFTFont.cc +357 -0
- data/pdf2json-0.52-source/splash/SplashFTFont.h +58 -0
- data/pdf2json-0.52-source/splash/SplashFTFont.o +0 -0
- data/pdf2json-0.52-source/splash/SplashFTFontEngine.cc +179 -0
- data/pdf2json-0.52-source/splash/SplashFTFontEngine.h +65 -0
- data/pdf2json-0.52-source/splash/SplashFTFontEngine.o +0 -0
- data/pdf2json-0.52-source/splash/SplashFTFontFile.cc +114 -0
- data/pdf2json-0.52-source/splash/SplashFTFontFile.h +73 -0
- data/pdf2json-0.52-source/splash/SplashFTFontFile.o +0 -0
- data/pdf2json-0.52-source/splash/SplashFont.cc +176 -0
- data/pdf2json-0.52-source/splash/SplashFont.h +104 -0
- data/pdf2json-0.52-source/splash/SplashFont.o +0 -0
- data/pdf2json-0.52-source/splash/SplashFontEngine.cc +317 -0
- data/pdf2json-0.52-source/splash/SplashFontEngine.h +91 -0
- data/pdf2json-0.52-source/splash/SplashFontEngine.o +0 -0
- data/pdf2json-0.52-source/splash/SplashFontFile.cc +55 -0
- data/pdf2json-0.52-source/splash/SplashFontFile.h +60 -0
- data/pdf2json-0.52-source/splash/SplashFontFile.o +0 -0
- data/pdf2json-0.52-source/splash/SplashFontFileID.cc +23 -0
- data/pdf2json-0.52-source/splash/SplashFontFileID.h +30 -0
- data/pdf2json-0.52-source/splash/SplashFontFileID.o +0 -0
- data/pdf2json-0.52-source/splash/SplashGlyphBitmap.h +26 -0
- data/pdf2json-0.52-source/splash/SplashMath.h +89 -0
- data/pdf2json-0.52-source/splash/SplashPath.cc +184 -0
- data/pdf2json-0.52-source/splash/SplashPath.h +121 -0
- data/pdf2json-0.52-source/splash/SplashPath.o +0 -0
- data/pdf2json-0.52-source/splash/SplashPattern.cc +40 -0
- data/pdf2json-0.52-source/splash/SplashPattern.h +65 -0
- data/pdf2json-0.52-source/splash/SplashPattern.o +0 -0
- data/pdf2json-0.52-source/splash/SplashScreen.cc +383 -0
- data/pdf2json-0.52-source/splash/SplashScreen.h +56 -0
- data/pdf2json-0.52-source/splash/SplashScreen.o +0 -0
- data/pdf2json-0.52-source/splash/SplashState.cc +165 -0
- data/pdf2json-0.52-source/splash/SplashState.h +103 -0
- data/pdf2json-0.52-source/splash/SplashState.o +0 -0
- data/pdf2json-0.52-source/splash/SplashT1Font.cc +287 -0
- data/pdf2json-0.52-source/splash/SplashT1Font.h +57 -0
- data/pdf2json-0.52-source/splash/SplashT1Font.o +0 -0
- data/pdf2json-0.52-source/splash/SplashT1FontEngine.cc +124 -0
- data/pdf2json-0.52-source/splash/SplashT1FontEngine.h +53 -0
- data/pdf2json-0.52-source/splash/SplashT1FontEngine.o +0 -0
- data/pdf2json-0.52-source/splash/SplashT1FontFile.cc +97 -0
- data/pdf2json-0.52-source/splash/SplashT1FontFile.h +58 -0
- data/pdf2json-0.52-source/splash/SplashT1FontFile.o +0 -0
- data/pdf2json-0.52-source/splash/SplashTypes.h +132 -0
- data/pdf2json-0.52-source/splash/SplashXPath.cc +438 -0
- data/pdf2json-0.52-source/splash/SplashXPath.h +100 -0
- data/pdf2json-0.52-source/splash/SplashXPath.o +0 -0
- data/pdf2json-0.52-source/splash/SplashXPathScanner.cc +428 -0
- data/pdf2json-0.52-source/splash/SplashXPathScanner.h +87 -0
- data/pdf2json-0.52-source/splash/SplashXPathScanner.o +0 -0
- data/pdf2json-0.52-source/splash/libsplash.a +0 -0
- data/pdf2json-0.52-source/splash/vms_make.com +0 -0
- data/pdf2json-0.52-source/src/.DS_Store +0 -0
- data/pdf2json-0.52-source/src/GVector.h +101 -0
- data/pdf2json-0.52-source/src/ImgOutputDev.cc +1243 -0
- data/pdf2json-0.52-source/src/ImgOutputDev.h +307 -0
- data/pdf2json-0.52-source/src/ImgOutputDev.o +0 -0
- data/pdf2json-0.52-source/src/Makefile +68 -0
- data/pdf2json-0.52-source/src/Makefile.in +68 -0
- data/pdf2json-0.52-source/src/XmlFonts.cc +367 -0
- data/pdf2json-0.52-source/src/XmlFonts.h +91 -0
- data/pdf2json-0.52-source/src/XmlFonts.o +0 -0
- data/pdf2json-0.52-source/src/XmlLinks.cc +101 -0
- data/pdf2json-0.52-source/src/XmlLinks.h +54 -0
- data/pdf2json-0.52-source/src/XmlLinks.o +0 -0
- data/pdf2json-0.52-source/src/pdf2json +0 -0
- data/pdf2json-0.52-source/src/pdf2json.cc +343 -0
- data/pdf2json-0.52-source/src/pdf2json.o +0 -0
- data/pdf2json-0.52-source/src/pdf2xml.dtd +22 -0
- data/pdf2json-0.52-source/src/pdf2xmljson.dtd +9 -0
- data/pdf2json-0.52-source/xpdf/.DS_Store +0 -0
- data/pdf2json-0.52-source/xpdf/Annot.cc +1556 -0
- data/pdf2json-0.52-source/xpdf/Annot.h +142 -0
- data/pdf2json-0.52-source/xpdf/Annot.o +0 -0
- data/pdf2json-0.52-source/xpdf/Array.cc +73 -0
- data/pdf2json-0.52-source/xpdf/Array.h +58 -0
- data/pdf2json-0.52-source/xpdf/Array.o +0 -0
- data/pdf2json-0.52-source/xpdf/BuiltinFont.cc +65 -0
- data/pdf2json-0.52-source/xpdf/BuiltinFont.h +57 -0
- data/pdf2json-0.52-source/xpdf/BuiltinFont.o +0 -0
- data/pdf2json-0.52-source/xpdf/BuiltinFontTables.cc +4284 -0
- data/pdf2json-0.52-source/xpdf/BuiltinFontTables.h +23 -0
- data/pdf2json-0.52-source/xpdf/BuiltinFontTables.o +0 -0
- data/pdf2json-0.52-source/xpdf/CMap.cc +408 -0
- data/pdf2json-0.52-source/xpdf/CMap.h +102 -0
- data/pdf2json-0.52-source/xpdf/CMap.o +0 -0
- data/pdf2json-0.52-source/xpdf/Catalog.cc +374 -0
- data/pdf2json-0.52-source/xpdf/Catalog.h +97 -0
- data/pdf2json-0.52-source/xpdf/Catalog.o +0 -0
- data/pdf2json-0.52-source/xpdf/CharCodeToUnicode.cc +540 -0
- data/pdf2json-0.52-source/xpdf/CharCodeToUnicode.h +117 -0
- data/pdf2json-0.52-source/xpdf/CharCodeToUnicode.o +0 -0
- data/pdf2json-0.52-source/xpdf/CharTypes.h +24 -0
- data/pdf2json-0.52-source/xpdf/CompactFontTables.h +464 -0
- data/pdf2json-0.52-source/xpdf/CoreOutputDev.cc +61 -0
- data/pdf2json-0.52-source/xpdf/CoreOutputDev.h +61 -0
- data/pdf2json-0.52-source/xpdf/Decrypt.cc +776 -0
- data/pdf2json-0.52-source/xpdf/Decrypt.h +95 -0
- data/pdf2json-0.52-source/xpdf/Decrypt.o +0 -0
- data/pdf2json-0.52-source/xpdf/Dict.cc +95 -0
- data/pdf2json-0.52-source/xpdf/Dict.h +77 -0
- data/pdf2json-0.52-source/xpdf/Dict.o +0 -0
- data/pdf2json-0.52-source/xpdf/Error.cc +38 -0
- data/pdf2json-0.52-source/xpdf/Error.h +23 -0
- data/pdf2json-0.52-source/xpdf/Error.o +0 -0
- data/pdf2json-0.52-source/xpdf/ErrorCodes.h +36 -0
- data/pdf2json-0.52-source/xpdf/FontEncodingTables.cc +1824 -0
- data/pdf2json-0.52-source/xpdf/FontEncodingTables.h +20 -0
- data/pdf2json-0.52-source/xpdf/FontEncodingTables.o +0 -0
- data/pdf2json-0.52-source/xpdf/Function.cc +1573 -0
- data/pdf2json-0.52-source/xpdf/Function.h +229 -0
- data/pdf2json-0.52-source/xpdf/Function.o +0 -0
- data/pdf2json-0.52-source/xpdf/Gfx.cc +4187 -0
- data/pdf2json-0.52-source/xpdf/Gfx.h +312 -0
- data/pdf2json-0.52-source/xpdf/Gfx.o +0 -0
- data/pdf2json-0.52-source/xpdf/GfxFont.cc +1568 -0
- data/pdf2json-0.52-source/xpdf/GfxFont.h +320 -0
- data/pdf2json-0.52-source/xpdf/GfxFont.o +0 -0
- data/pdf2json-0.52-source/xpdf/GfxState.cc +4137 -0
- data/pdf2json-0.52-source/xpdf/GfxState.h +1244 -0
- data/pdf2json-0.52-source/xpdf/GfxState.o +0 -0
- data/pdf2json-0.52-source/xpdf/GlobalParams.cc +2924 -0
- data/pdf2json-0.52-source/xpdf/GlobalParams.cc.old +2908 -0
- data/pdf2json-0.52-source/xpdf/GlobalParams.h +466 -0
- data/pdf2json-0.52-source/xpdf/GlobalParams.h.old +463 -0
- data/pdf2json-0.52-source/xpdf/GlobalParams.o +0 -0
- data/pdf2json-0.52-source/xpdf/ImageOutputDev.cc +195 -0
- data/pdf2json-0.52-source/xpdf/ImageOutputDev.h +76 -0
- data/pdf2json-0.52-source/xpdf/ImageOutputDev.o +0 -0
- data/pdf2json-0.52-source/xpdf/JArithmeticDecoder.cc +322 -0
- data/pdf2json-0.52-source/xpdf/JArithmeticDecoder.h +109 -0
- data/pdf2json-0.52-source/xpdf/JArithmeticDecoder.o +0 -0
- data/pdf2json-0.52-source/xpdf/JBIG2Stream.cc +3413 -0
- data/pdf2json-0.52-source/xpdf/JBIG2Stream.h +145 -0
- data/pdf2json-0.52-source/xpdf/JBIG2Stream.o +0 -0
- data/pdf2json-0.52-source/xpdf/JPXStream.cc +3144 -0
- data/pdf2json-0.52-source/xpdf/JPXStream.h +351 -0
- data/pdf2json-0.52-source/xpdf/JPXStream.o +0 -0
- data/pdf2json-0.52-source/xpdf/Lexer.cc +485 -0
- data/pdf2json-0.52-source/xpdf/Lexer.h +80 -0
- data/pdf2json-0.52-source/xpdf/Lexer.o +0 -0
- data/pdf2json-0.52-source/xpdf/Link.cc +806 -0
- data/pdf2json-0.52-source/xpdf/Link.cc.old +784 -0
- data/pdf2json-0.52-source/xpdf/Link.h +415 -0
- data/pdf2json-0.52-source/xpdf/Link.h.old +369 -0
- data/pdf2json-0.52-source/xpdf/Link.o +0 -0
- data/pdf2json-0.52-source/xpdf/Makefile +232 -0
- data/pdf2json-0.52-source/xpdf/Makefile.dep +0 -0
- data/pdf2json-0.52-source/xpdf/Makefile.in +232 -0
- data/pdf2json-0.52-source/xpdf/NameToCharCode.cc +116 -0
- data/pdf2json-0.52-source/xpdf/NameToCharCode.h +42 -0
- data/pdf2json-0.52-source/xpdf/NameToCharCode.o +0 -0
- data/pdf2json-0.52-source/xpdf/NameToUnicodeTable.h +1097 -0
- data/pdf2json-0.52-source/xpdf/Object.cc +231 -0
- data/pdf2json-0.52-source/xpdf/Object.h +303 -0
- data/pdf2json-0.52-source/xpdf/Object.o +0 -0
- data/pdf2json-0.52-source/xpdf/Outline.cc +151 -0
- data/pdf2json-0.52-source/xpdf/Outline.h +76 -0
- data/pdf2json-0.52-source/xpdf/Outline.o +0 -0
- data/pdf2json-0.52-source/xpdf/OutputDev.cc +131 -0
- data/pdf2json-0.52-source/xpdf/OutputDev.h +253 -0
- data/pdf2json-0.52-source/xpdf/OutputDev.o +0 -0
- data/pdf2json-0.52-source/xpdf/PDFCore.cc +2044 -0
- data/pdf2json-0.52-source/xpdf/PDFCore.h +321 -0
- data/pdf2json-0.52-source/xpdf/PDFDoc.cc +404 -0
- data/pdf2json-0.52-source/xpdf/PDFDoc.h +183 -0
- data/pdf2json-0.52-source/xpdf/PDFDoc.o +0 -0
- data/pdf2json-0.52-source/xpdf/PDFDocEncoding.cc +44 -0
- data/pdf2json-0.52-source/xpdf/PDFDocEncoding.h +16 -0
- data/pdf2json-0.52-source/xpdf/PDFDocEncoding.o +0 -0
- data/pdf2json-0.52-source/xpdf/PSOutputDev.cc +6224 -0
- data/pdf2json-0.52-source/xpdf/PSOutputDev.h +395 -0
- data/pdf2json-0.52-source/xpdf/PSOutputDev.o +0 -0
- data/pdf2json-0.52-source/xpdf/PSTokenizer.cc +135 -0
- data/pdf2json-0.52-source/xpdf/PSTokenizer.h +41 -0
- data/pdf2json-0.52-source/xpdf/PSTokenizer.o +0 -0
- data/pdf2json-0.52-source/xpdf/Page.cc +454 -0
- data/pdf2json-0.52-source/xpdf/Page.h +187 -0
- data/pdf2json-0.52-source/xpdf/Page.o +0 -0
- data/pdf2json-0.52-source/xpdf/Parser.cc +227 -0
- data/pdf2json-0.52-source/xpdf/Parser.h +59 -0
- data/pdf2json-0.52-source/xpdf/Parser.o +0 -0
- data/pdf2json-0.52-source/xpdf/PreScanOutputDev.cc +257 -0
- data/pdf2json-0.52-source/xpdf/PreScanOutputDev.h +130 -0
- data/pdf2json-0.52-source/xpdf/PreScanOutputDev.o +0 -0
- data/pdf2json-0.52-source/xpdf/SecurityHandler.cc +390 -0
- data/pdf2json-0.52-source/xpdf/SecurityHandler.h +160 -0
- data/pdf2json-0.52-source/xpdf/SecurityHandler.o +0 -0
- data/pdf2json-0.52-source/xpdf/SplashOutputDev.cc +2845 -0
- data/pdf2json-0.52-source/xpdf/SplashOutputDev.h +247 -0
- data/pdf2json-0.52-source/xpdf/SplashOutputDev.o +0 -0
- data/pdf2json-0.52-source/xpdf/Stream-CCITT.h +459 -0
- data/pdf2json-0.52-source/xpdf/Stream.cc +4627 -0
- data/pdf2json-0.52-source/xpdf/Stream.h +858 -0
- data/pdf2json-0.52-source/xpdf/Stream.o +0 -0
- data/pdf2json-0.52-source/xpdf/TextOutputDev.cc +4090 -0
- data/pdf2json-0.52-source/xpdf/TextOutputDev.h +661 -0
- data/pdf2json-0.52-source/xpdf/TextOutputDev.o +0 -0
- data/pdf2json-0.52-source/xpdf/UTF8.h +56 -0
- data/pdf2json-0.52-source/xpdf/UnicodeMap.cc +302 -0
- data/pdf2json-0.52-source/xpdf/UnicodeMap.cc.old +293 -0
- data/pdf2json-0.52-source/xpdf/UnicodeMap.h +135 -0
- data/pdf2json-0.52-source/xpdf/UnicodeMap.h.old +123 -0
- data/pdf2json-0.52-source/xpdf/UnicodeMap.o +0 -0
- data/pdf2json-0.52-source/xpdf/UnicodeMapTables.h +361 -0
- data/pdf2json-0.52-source/xpdf/UnicodeTypeTable.cc +949 -0
- data/pdf2json-0.52-source/xpdf/UnicodeTypeTable.h +20 -0
- data/pdf2json-0.52-source/xpdf/UnicodeTypeTable.o +0 -0
- data/pdf2json-0.52-source/xpdf/XPDFApp.cc +447 -0
- data/pdf2json-0.52-source/xpdf/XPDFApp.h +114 -0
- data/pdf2json-0.52-source/xpdf/XPDFCore.cc +1655 -0
- data/pdf2json-0.52-source/xpdf/XPDFCore.h +251 -0
- data/pdf2json-0.52-source/xpdf/XPDFTree.cc +931 -0
- data/pdf2json-0.52-source/xpdf/XPDFTree.h +45 -0
- data/pdf2json-0.52-source/xpdf/XPDFTreeP.h +87 -0
- data/pdf2json-0.52-source/xpdf/XPDFViewer.cc +3488 -0
- data/pdf2json-0.52-source/xpdf/XPDFViewer.h +352 -0
- data/pdf2json-0.52-source/xpdf/XRef.cc +896 -0
- data/pdf2json-0.52-source/xpdf/XRef.h +133 -0
- data/pdf2json-0.52-source/xpdf/XRef.o +0 -0
- data/pdf2json-0.52-source/xpdf/XpdfPluginAPI.cc +262 -0
- data/pdf2json-0.52-source/xpdf/XpdfPluginAPI.h +341 -0
- data/pdf2json-0.52-source/xpdf/XpdfPluginAPI.o +0 -0
- data/pdf2json-0.52-source/xpdf/about-text.h +48 -0
- data/pdf2json-0.52-source/xpdf/about.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/backArrow.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/backArrowDis.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/config.h +112 -0
- data/pdf2json-0.52-source/xpdf/dblLeftArrow.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/dblLeftArrowDis.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/dblRightArrow.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/dblRightArrowDis.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/find.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/findDis.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/forwardArrow.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/forwardArrowDis.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/leftArrow.xbm +5 -0
- data/pdf2json-0.52-source/xpdf/leftArrowDis.xbm +5 -0
- data/pdf2json-0.52-source/xpdf/libXpdf.a +0 -0
- data/pdf2json-0.52-source/xpdf/pdffonts +0 -0
- data/pdf2json-0.52-source/xpdf/pdffonts.cc +298 -0
- data/pdf2json-0.52-source/xpdf/pdffonts.o +0 -0
- data/pdf2json-0.52-source/xpdf/pdfimages +0 -0
- data/pdf2json-0.52-source/xpdf/pdfimages.cc +155 -0
- data/pdf2json-0.52-source/xpdf/pdfimages.o +0 -0
- data/pdf2json-0.52-source/xpdf/pdfinfo +0 -0
- data/pdf2json-0.52-source/xpdf/pdfinfo.cc +387 -0
- data/pdf2json-0.52-source/xpdf/pdfinfo.o +0 -0
- data/pdf2json-0.52-source/xpdf/pdftoppm.cc +203 -0
- data/pdf2json-0.52-source/xpdf/pdftops +0 -0
- data/pdf2json-0.52-source/xpdf/pdftops.cc +344 -0
- data/pdf2json-0.52-source/xpdf/pdftops.o +0 -0
- data/pdf2json-0.52-source/xpdf/pdftotext +0 -0
- data/pdf2json-0.52-source/xpdf/pdftotext.cc +333 -0
- data/pdf2json-0.52-source/xpdf/pdftotext.o +0 -0
- data/pdf2json-0.52-source/xpdf/print.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/printDis.xbm +6 -0
- data/pdf2json-0.52-source/xpdf/rightArrow.xbm +5 -0
- data/pdf2json-0.52-source/xpdf/rightArrowDis.xbm +5 -0
- data/pdf2json-0.52-source/xpdf/vms_make.com +129 -0
- data/pdf2json-0.52-source/xpdf/xpdf.cc +344 -0
- data/pdf2json-0.52-source/xpdf/xpdfIcon.xpm +62 -0
- data/pdf2json.gemspec +29 -0
- metadata +518 -0
@@ -0,0 +1,251 @@
|
|
1
|
+
//========================================================================
|
2
|
+
//
|
3
|
+
// XPDFCore.h
|
4
|
+
//
|
5
|
+
// Copyright 2002-2003 Glyph & Cog, LLC
|
6
|
+
//
|
7
|
+
//========================================================================
|
8
|
+
|
9
|
+
#ifndef XPDFCORE_H
|
10
|
+
#define XPDFCORE_H
|
11
|
+
|
12
|
+
#include <aconf.h>
|
13
|
+
|
14
|
+
#ifdef USE_GCC_PRAGMAS
|
15
|
+
#pragma interface
|
16
|
+
#endif
|
17
|
+
|
18
|
+
#define Object XtObject
|
19
|
+
#include <Xm/XmAll.h>
|
20
|
+
#undef Object
|
21
|
+
#include "gtypes.h"
|
22
|
+
#include "gfile.h" // for time_t
|
23
|
+
#include "SplashTypes.h"
|
24
|
+
#include "PDFCore.h"
|
25
|
+
|
26
|
+
class GString;
|
27
|
+
class BaseStream;
|
28
|
+
class PDFDoc;
|
29
|
+
class LinkAction;
|
30
|
+
|
31
|
+
//------------------------------------------------------------------------
|
32
|
+
|
33
|
+
#define xMaxRGBCube 6 // max size of RGB color cube
|
34
|
+
|
35
|
+
//------------------------------------------------------------------------
|
36
|
+
// callbacks
|
37
|
+
//------------------------------------------------------------------------
|
38
|
+
|
39
|
+
typedef void (*XPDFUpdateCbk)(void *data, GString *fileName,
|
40
|
+
int pageNum, int numPages, char *linkLabel);
|
41
|
+
|
42
|
+
typedef void (*XPDFActionCbk)(void *data, char *action);
|
43
|
+
|
44
|
+
typedef void (*XPDFKeyPressCbk)(void *data, KeySym key, Guint modifiers,
|
45
|
+
XEvent *event);
|
46
|
+
|
47
|
+
typedef void (*XPDFMouseCbk)(void *data, XEvent *event);
|
48
|
+
|
49
|
+
//------------------------------------------------------------------------
|
50
|
+
// XPDFCore
|
51
|
+
//------------------------------------------------------------------------
|
52
|
+
|
53
|
+
class XPDFCore: public PDFCore {
|
54
|
+
public:
|
55
|
+
|
56
|
+
// Create viewer core inside <parentWidgetA>.
|
57
|
+
XPDFCore(Widget shellA, Widget parentWidgetA,
|
58
|
+
SplashColorPtr paperColorA, Gulong paperPixelA,
|
59
|
+
Gulong mattePixelA, GBool fullScreenA, GBool reverseVideoA,
|
60
|
+
GBool installCmap, int rgbCubeSizeA);
|
61
|
+
|
62
|
+
~XPDFCore();
|
63
|
+
|
64
|
+
//----- loadFile / displayPage / displayDest
|
65
|
+
|
66
|
+
// Load a new file. Returns pdfOk or error code.
|
67
|
+
virtual int loadFile(GString *fileName, GString *ownerPassword = NULL,
|
68
|
+
GString *userPassword = NULL);
|
69
|
+
|
70
|
+
// Load a new file, via a Stream instead of a file name. Returns
|
71
|
+
// pdfOk or error code.
|
72
|
+
virtual int loadFile(BaseStream *stream, GString *ownerPassword = NULL,
|
73
|
+
GString *userPassword = NULL);
|
74
|
+
|
75
|
+
// Load an already-created PDFDoc object.
|
76
|
+
virtual void loadDoc(PDFDoc *docA);
|
77
|
+
|
78
|
+
// Resize the window to fit page <pg> of the current document.
|
79
|
+
void resizeToPage(int pg);
|
80
|
+
|
81
|
+
// Update the display, given the specified parameters.
|
82
|
+
virtual void update(int topPageA, int scrollXA, int scrollYA,
|
83
|
+
double zoomA, int rotateA,
|
84
|
+
GBool force, GBool addToHist);
|
85
|
+
|
86
|
+
//----- page/position changes
|
87
|
+
|
88
|
+
virtual GBool gotoNextPage(int inc, GBool top);
|
89
|
+
virtual GBool gotoPrevPage(int dec, GBool top, GBool bottom);
|
90
|
+
virtual GBool goForward();
|
91
|
+
virtual GBool goBackward();
|
92
|
+
|
93
|
+
//----- selection
|
94
|
+
|
95
|
+
void startSelection(int wx, int wy);
|
96
|
+
void endSelection(int wx, int wy);
|
97
|
+
void copySelection();
|
98
|
+
void startPan(int wx, int wy);
|
99
|
+
void endPan(int wx, int wy);
|
100
|
+
|
101
|
+
//----- hyperlinks
|
102
|
+
|
103
|
+
void doAction(LinkAction *action);
|
104
|
+
LinkAction *getLinkAction() { return linkAction; }
|
105
|
+
GString *mungeURL(GString *url);
|
106
|
+
|
107
|
+
//----- find
|
108
|
+
|
109
|
+
virtual GBool find(char *s, GBool caseSensitive,
|
110
|
+
GBool next, GBool backward, GBool onePageOnly);
|
111
|
+
virtual GBool findU(Unicode *u, int len, GBool caseSensitive,
|
112
|
+
GBool next, GBool backward, GBool onePageOnly);
|
113
|
+
|
114
|
+
//----- simple modal dialogs
|
115
|
+
|
116
|
+
GBool doQuestionDialog(char *title, GString *msg);
|
117
|
+
void doInfoDialog(char *title, GString *msg);
|
118
|
+
void doErrorDialog(char *title, GString *msg);
|
119
|
+
|
120
|
+
//----- password dialog
|
121
|
+
|
122
|
+
GString *getPassword();
|
123
|
+
|
124
|
+
//----- misc access
|
125
|
+
|
126
|
+
Widget getWidget() { return scrolledWin; }
|
127
|
+
Widget getDrawAreaWidget() { return drawArea; }
|
128
|
+
virtual void setBusyCursor(GBool busy);
|
129
|
+
Cursor getBusyCursor() { return busyCursor; }
|
130
|
+
void takeFocus();
|
131
|
+
void enableHyperlinks(GBool on) { hyperlinksEnabled = on; }
|
132
|
+
GBool getHyperlinksEnabled() { return hyperlinksEnabled; }
|
133
|
+
void enableSelect(GBool on) { selectEnabled = on; }
|
134
|
+
void setUpdateCbk(XPDFUpdateCbk cbk, void *data)
|
135
|
+
{ updateCbk = cbk; updateCbkData = data; }
|
136
|
+
void setActionCbk(XPDFActionCbk cbk, void *data)
|
137
|
+
{ actionCbk = cbk; actionCbkData = data; }
|
138
|
+
void setKeyPressCbk(XPDFKeyPressCbk cbk, void *data)
|
139
|
+
{ keyPressCbk = cbk; keyPressCbkData = data; }
|
140
|
+
void setMouseCbk(XPDFMouseCbk cbk, void *data)
|
141
|
+
{ mouseCbk = cbk; mouseCbkData = data; }
|
142
|
+
GBool getFullScreen() { return fullScreen; }
|
143
|
+
|
144
|
+
private:
|
145
|
+
|
146
|
+
virtual GBool checkForNewFile();
|
147
|
+
|
148
|
+
//----- hyperlinks
|
149
|
+
void runCommand(GString *cmdFmt, GString *arg);
|
150
|
+
|
151
|
+
//----- selection
|
152
|
+
static Boolean convertSelectionCbk(Widget widget, Atom *selection,
|
153
|
+
Atom *target, Atom *type,
|
154
|
+
XtPointer *value, unsigned long *length,
|
155
|
+
int *format);
|
156
|
+
|
157
|
+
//----- GUI code
|
158
|
+
void setupX(GBool installCmap, int rgbCubeSizeA);
|
159
|
+
void initWindow();
|
160
|
+
static void hScrollChangeCbk(Widget widget, XtPointer ptr,
|
161
|
+
XtPointer callData);
|
162
|
+
static void hScrollDragCbk(Widget widget, XtPointer ptr,
|
163
|
+
XtPointer callData);
|
164
|
+
static void vScrollChangeCbk(Widget widget, XtPointer ptr,
|
165
|
+
XtPointer callData);
|
166
|
+
static void vScrollDragCbk(Widget widget, XtPointer ptr,
|
167
|
+
XtPointer callData);
|
168
|
+
static void resizeCbk(Widget widget, XtPointer ptr, XtPointer callData);
|
169
|
+
static void redrawCbk(Widget widget, XtPointer ptr, XtPointer callData);
|
170
|
+
static void inputCbk(Widget widget, XtPointer ptr, XtPointer callData);
|
171
|
+
virtual PDFCoreTile *newTile(int xDestA, int yDestA);
|
172
|
+
virtual void updateTileData(PDFCoreTile *tileA, int xSrc, int ySrc,
|
173
|
+
int width, int height, GBool composited);
|
174
|
+
virtual void redrawRect(PDFCoreTile *tileA, int xSrc, int ySrc,
|
175
|
+
int xDest, int yDest, int width, int height,
|
176
|
+
GBool composited);
|
177
|
+
virtual void updateScrollbars();
|
178
|
+
void setCursor(Cursor cursor);
|
179
|
+
GBool doDialog(int type, GBool hasCancel,
|
180
|
+
char *title, GString *msg);
|
181
|
+
static void dialogOkCbk(Widget widget, XtPointer ptr,
|
182
|
+
XtPointer callData);
|
183
|
+
static void dialogCancelCbk(Widget widget, XtPointer ptr,
|
184
|
+
XtPointer callData);
|
185
|
+
void initPasswordDialog();
|
186
|
+
static void passwordTextVerifyCbk(Widget widget, XtPointer ptr,
|
187
|
+
XtPointer callData);
|
188
|
+
static void passwordOkCbk(Widget widget, XtPointer ptr,
|
189
|
+
XtPointer callData);
|
190
|
+
static void passwordCancelCbk(Widget widget, XtPointer ptr,
|
191
|
+
XtPointer callData);
|
192
|
+
|
193
|
+
Gulong paperPixel;
|
194
|
+
Gulong mattePixel;
|
195
|
+
//~unimp: move fullScreen into PDFCore?
|
196
|
+
GBool fullScreen;
|
197
|
+
|
198
|
+
Display *display;
|
199
|
+
int screenNum;
|
200
|
+
Visual *visual;
|
201
|
+
Colormap colormap;
|
202
|
+
Guint depth; // visual depth
|
203
|
+
GBool trueColor; // set if using a TrueColor visual
|
204
|
+
int rDiv, gDiv, bDiv; // RGB right shifts (for TrueColor)
|
205
|
+
int rShift, gShift, bShift; // RGB left shifts (for TrueColor)
|
206
|
+
int rgbCubeSize; // size of color cube (for non-TrueColor)
|
207
|
+
Gulong // color cube (for non-TrueColor)
|
208
|
+
colors[xMaxRGBCube * xMaxRGBCube * xMaxRGBCube];
|
209
|
+
|
210
|
+
Widget shell; // top-level shell containing the widget
|
211
|
+
Widget parentWidget; // parent widget (not created by XPDFCore)
|
212
|
+
Widget scrolledWin;
|
213
|
+
Widget hScrollBar;
|
214
|
+
Widget vScrollBar;
|
215
|
+
Widget drawAreaFrame;
|
216
|
+
Widget drawArea;
|
217
|
+
Cursor busyCursor, linkCursor, selectCursor;
|
218
|
+
Cursor currentCursor;
|
219
|
+
GC drawAreaGC; // GC for blitting into drawArea
|
220
|
+
|
221
|
+
static GString *currentSelection; // selected text
|
222
|
+
static XPDFCore *currentSelectionOwner;
|
223
|
+
static Atom targetsAtom;
|
224
|
+
|
225
|
+
GBool panning;
|
226
|
+
int panMX, panMY;
|
227
|
+
|
228
|
+
time_t modTime; // last modification time of PDF file
|
229
|
+
|
230
|
+
LinkAction *linkAction; // mouse cursor is over this link
|
231
|
+
|
232
|
+
XPDFUpdateCbk updateCbk;
|
233
|
+
void *updateCbkData;
|
234
|
+
XPDFActionCbk actionCbk;
|
235
|
+
void *actionCbkData;
|
236
|
+
XPDFKeyPressCbk keyPressCbk;
|
237
|
+
void *keyPressCbkData;
|
238
|
+
XPDFMouseCbk mouseCbk;
|
239
|
+
void *mouseCbkData;
|
240
|
+
|
241
|
+
GBool hyperlinksEnabled;
|
242
|
+
GBool selectEnabled;
|
243
|
+
|
244
|
+
int dialogDone;
|
245
|
+
|
246
|
+
Widget passwordDialog;
|
247
|
+
Widget passwordText;
|
248
|
+
GString *password;
|
249
|
+
};
|
250
|
+
|
251
|
+
#endif
|
@@ -0,0 +1,931 @@
|
|
1
|
+
//========================================================================
|
2
|
+
//
|
3
|
+
// XPDFTree.cc
|
4
|
+
//
|
5
|
+
// Copyright 2002-2003 Glyph & Cog, LLC
|
6
|
+
//
|
7
|
+
//========================================================================
|
8
|
+
|
9
|
+
#include <stdlib.h>
|
10
|
+
#include "gmem.h"
|
11
|
+
#include "XPDFTreeP.h"
|
12
|
+
|
13
|
+
//------------------------------------------------------------------------
|
14
|
+
|
15
|
+
#define xpdfTreeIndent 16
|
16
|
+
|
17
|
+
//------------------------------------------------------------------------
|
18
|
+
|
19
|
+
struct _XPDFTreeEntry {
|
20
|
+
Widget widget;
|
21
|
+
XPDFTreeEntry *children;
|
22
|
+
XPDFTreeEntry *next;
|
23
|
+
};
|
24
|
+
|
25
|
+
//------------------------------------------------------------------------
|
26
|
+
|
27
|
+
static void classPartInitialize(WidgetClass widgetClass);
|
28
|
+
static void initialize(Widget requestWidget, Widget newWidget,
|
29
|
+
ArgList args, Cardinal *numArgs);
|
30
|
+
static void destroy(Widget widget);
|
31
|
+
static void destroySubtree(XPDFTreeEntry *e);
|
32
|
+
static void resize(Widget widget);
|
33
|
+
static void redisplay(Widget widget, XEvent *event, Region region);
|
34
|
+
static void redisplaySubtree(XPDFTreeWidget w, XPDFTreeEntry *e,
|
35
|
+
XEvent *event, Region region);
|
36
|
+
static void drawExpandedIcon(XPDFTreeWidget w, Position x, Position y);
|
37
|
+
static void drawCollapsedIcon(XPDFTreeWidget w, Position x, Position y);
|
38
|
+
static Boolean setValues(Widget oldWidget, Widget requestWidget,
|
39
|
+
Widget newWidget, ArgList args, Cardinal *numArgs);
|
40
|
+
static void setValuesAlmost(Widget oldWidget, Widget newWidget,
|
41
|
+
XtWidgetGeometry *request,
|
42
|
+
XtWidgetGeometry *reply);
|
43
|
+
static XtGeometryResult queryGeometry(Widget widget,
|
44
|
+
XtWidgetGeometry *request,
|
45
|
+
XtWidgetGeometry *reply);
|
46
|
+
static XtGeometryResult geometryManager(Widget widget,
|
47
|
+
XtWidgetGeometry *request,
|
48
|
+
XtWidgetGeometry *reply);
|
49
|
+
static void changeManaged(Widget widget);
|
50
|
+
static void initConstraint(Widget requestWidget, Widget newWidget,
|
51
|
+
ArgList args, Cardinal *numArgs);
|
52
|
+
static void destroyConstraint(Widget widget);
|
53
|
+
static void deleteSubtree(Widget widget);
|
54
|
+
static Boolean constraintSetValues(Widget oldWidget, Widget requestWidget,
|
55
|
+
Widget newWidget,
|
56
|
+
ArgList args, Cardinal *numArgs);
|
57
|
+
static void insertChildOnList(XPDFTreeEntry *e, XPDFTreeEntry **listHead);
|
58
|
+
static void deleteChildFromList(XPDFTreeEntry *e, XPDFTreeEntry **listHead);
|
59
|
+
static void createGC(Widget widget);
|
60
|
+
static void destroyGC(Widget widget);
|
61
|
+
static void layout(Widget widget, Widget instigator);
|
62
|
+
static int layoutSubtree(XPDFTreeWidget w, Widget instigator,
|
63
|
+
XPDFTreeEntry *e, Position x, Position y,
|
64
|
+
Boolean visible);
|
65
|
+
static void calcSize(Widget widget, Widget instigator,
|
66
|
+
Dimension *totalWidth,
|
67
|
+
Dimension *totalHeight);
|
68
|
+
static void calcSubtreeSize(XPDFTreeWidget w, Widget instigator,
|
69
|
+
XPDFTreeEntry *e,
|
70
|
+
Dimension *width, Dimension *height);
|
71
|
+
static Boolean needRelayout(Widget oldWidget, Widget newWidget);
|
72
|
+
static void click(Widget widget, XEvent *event,
|
73
|
+
String *params, Cardinal *numParams);
|
74
|
+
static Boolean findPosition(XPDFTreeWidget w, int x, int y,
|
75
|
+
XPDFTreeEntry **e, Boolean *onExpandIcon);
|
76
|
+
static Boolean findPositionInSubtree(XPDFTreeWidget w, int x, int y,
|
77
|
+
XPDFTreeEntry **e,
|
78
|
+
Boolean *onExpandIcon);
|
79
|
+
|
80
|
+
//------------------------------------------------------------------------
|
81
|
+
|
82
|
+
static XtResource resources[] = {
|
83
|
+
{ XmNmarginWidth, XmCMarginWidth, XmRHorizontalDimension,
|
84
|
+
sizeof(Dimension), XtOffsetOf(XPDFTreeRec, tree.marginWidth),
|
85
|
+
XmRImmediate, (XtPointer)0 },
|
86
|
+
{ XmNmarginHeight, XmCMarginHeight, XmRVerticalDimension,
|
87
|
+
sizeof(Dimension), XtOffsetOf(XPDFTreeRec, tree.marginHeight),
|
88
|
+
XmRImmediate, (XtPointer)0 },
|
89
|
+
{ XPDFNselectionCallback, XmCCallback, XmRCallback,
|
90
|
+
sizeof(XtCallbackList), XtOffsetOf(XPDFTreeRec, tree.selectCallback),
|
91
|
+
XmRImmediate, (XtPointer)NULL }
|
92
|
+
};
|
93
|
+
|
94
|
+
static XmSyntheticResource synResources[] = {
|
95
|
+
{ XmNmarginWidth, sizeof(Dimension),
|
96
|
+
XtOffsetOf(XPDFTreeRec, tree.marginWidth),
|
97
|
+
#if XmVERSION > 1
|
98
|
+
XmeFromHorizontalPixels, XmeToHorizontalPixels
|
99
|
+
#else
|
100
|
+
_XmFromHorizontalPixels, _XmToHorizontalPixels
|
101
|
+
#endif
|
102
|
+
},
|
103
|
+
{ XmNmarginHeight, sizeof(Dimension),
|
104
|
+
XtOffsetOf(XPDFTreeRec, tree.marginHeight),
|
105
|
+
#if XmVERSION > 1
|
106
|
+
XmeFromVerticalPixels, XmeToVerticalPixels
|
107
|
+
#else
|
108
|
+
_XmFromVerticalPixels, _XmToVerticalPixels
|
109
|
+
#endif
|
110
|
+
}
|
111
|
+
};
|
112
|
+
|
113
|
+
static XtResource constraints[] = {
|
114
|
+
{ XPDFNentryParent, XPDFCentryParent, XmRWidget,
|
115
|
+
sizeof(Widget), XtOffsetOf(XPDFTreeConstraintRec, tree.entryParent),
|
116
|
+
XmRImmediate, (XtPointer)NULL },
|
117
|
+
{ XPDFNentryExpanded, XPDFCentryExpanded, XmRBoolean,
|
118
|
+
sizeof(Boolean), XtOffsetOf(XPDFTreeConstraintRec, tree.entryExpanded),
|
119
|
+
XmRImmediate, (XtPointer)False },
|
120
|
+
{ XPDFNentryPosition, XPDFCentryPosition, XmRInt,
|
121
|
+
sizeof(int), XtOffsetOf(XPDFTreeConstraintRec, tree.entryPosition),
|
122
|
+
XmRImmediate, (XtPointer)0 }
|
123
|
+
};
|
124
|
+
|
125
|
+
static char defaultTranslations[] =
|
126
|
+
"<Btn1Down>: XPDFTreeClick()";
|
127
|
+
|
128
|
+
static XtActionsRec actions[] = {
|
129
|
+
{ "XPDFTreeClick", click }
|
130
|
+
};
|
131
|
+
|
132
|
+
externaldef(xpdftreeclassrec) XPDFTreeClassRec xpdfTreeClassRec = {
|
133
|
+
{ // Core
|
134
|
+
(WidgetClass)&xmManagerClassRec, // superclass
|
135
|
+
"XPDFTree", // class_name
|
136
|
+
sizeof(XPDFTreeRec), // widget_size
|
137
|
+
NULL, // class_initialize
|
138
|
+
&classPartInitialize, // class_part_initialize
|
139
|
+
FALSE, // class_inited
|
140
|
+
&initialize, // initialize
|
141
|
+
NULL, // initialize_hook
|
142
|
+
XtInheritRealize, // realize
|
143
|
+
actions, // actions
|
144
|
+
XtNumber(actions), // num_actions
|
145
|
+
resources, // resources
|
146
|
+
XtNumber(resources), // num_resources
|
147
|
+
NULLQUARK, // xrm_class
|
148
|
+
TRUE, // compress_motion
|
149
|
+
XtExposeCompressMaximal, // compress_exposure
|
150
|
+
TRUE, // compress_enterleave
|
151
|
+
FALSE, // visible_interest
|
152
|
+
&destroy, // destroy
|
153
|
+
&resize, // resize
|
154
|
+
&redisplay, // expose
|
155
|
+
&setValues, // set_values
|
156
|
+
NULL, // set_values_hook
|
157
|
+
&setValuesAlmost, // set_values_almost
|
158
|
+
NULL, // get_values_hook
|
159
|
+
NULL, // accept_focus
|
160
|
+
XtVersion, // version
|
161
|
+
NULL, // callback_private
|
162
|
+
defaultTranslations, // tm_table
|
163
|
+
&queryGeometry, // query_geometry
|
164
|
+
NULL, // display_accelerator
|
165
|
+
NULL // extension
|
166
|
+
},
|
167
|
+
{ // Composite
|
168
|
+
&geometryManager, // geometry_manager
|
169
|
+
&changeManaged, // change_managed
|
170
|
+
XtInheritInsertChild, // insert_child
|
171
|
+
XtInheritDeleteChild, // delete_child
|
172
|
+
NULL // extension
|
173
|
+
},
|
174
|
+
{ // Constraint
|
175
|
+
constraints, // constraint_resources
|
176
|
+
XtNumber(constraints), // constraint_num_resources
|
177
|
+
sizeof(XPDFTreeConstraintRec), // constraint_size
|
178
|
+
&initConstraint, // constraint_initialize
|
179
|
+
&destroyConstraint, // constraint_destroy
|
180
|
+
&constraintSetValues, // constraint_set_values
|
181
|
+
NULL // extension
|
182
|
+
},
|
183
|
+
{ // XmManager
|
184
|
+
XtInheritTranslations, // translations
|
185
|
+
#if XmVERSION > 1
|
186
|
+
synResources, // syn_resources
|
187
|
+
XtNumber(synResources), // num_syn_resources
|
188
|
+
#else
|
189
|
+
NULL, // syn_resources
|
190
|
+
0, // num_syn_resources
|
191
|
+
#endif
|
192
|
+
NULL, // syn_constraint_resources
|
193
|
+
0, // num_syn_constraint_res's
|
194
|
+
XmInheritParentProcess, // parent_process
|
195
|
+
NULL // extension
|
196
|
+
},
|
197
|
+
{ // XPDFTree
|
198
|
+
&createGC, // createGC
|
199
|
+
&destroyGC, // destroyGC
|
200
|
+
&layout, // layout
|
201
|
+
&calcSize, // calcSize
|
202
|
+
&needRelayout, // needRelayout
|
203
|
+
NULL // extension
|
204
|
+
}
|
205
|
+
};
|
206
|
+
|
207
|
+
externaldef(xpdftreewidgetclass) WidgetClass xpdfTreeWidgetClass =
|
208
|
+
(WidgetClass)&xpdfTreeClassRec;
|
209
|
+
|
210
|
+
//------------------------------------------------------------------------
|
211
|
+
|
212
|
+
static void classPartInitialize(WidgetClass widgetCls) {
|
213
|
+
XPDFTreeWidgetClass wc = (XPDFTreeWidgetClass)widgetCls;
|
214
|
+
XPDFTreeWidgetClass sc = (XPDFTreeWidgetClass)wc->coreClass.superclass;
|
215
|
+
|
216
|
+
// method inheritance
|
217
|
+
if (wc->treeClass.createGC == XPDFInheritCreateGC) {
|
218
|
+
wc->treeClass.createGC = sc->treeClass.createGC;
|
219
|
+
}
|
220
|
+
if (wc->treeClass.destroyGC == XPDFInheritDestroyGC) {
|
221
|
+
wc->treeClass.destroyGC = sc->treeClass.destroyGC;
|
222
|
+
}
|
223
|
+
if (wc->treeClass.layout == XPDFInheritLayout) {
|
224
|
+
wc->treeClass.layout = sc->treeClass.layout;
|
225
|
+
}
|
226
|
+
if (wc->treeClass.calcSize == XPDFInheritCalcSize) {
|
227
|
+
wc->treeClass.calcSize = sc->treeClass.calcSize;
|
228
|
+
}
|
229
|
+
if (wc->treeClass.needRelayout == XPDFInheritNeedRelayout) {
|
230
|
+
wc->treeClass.needRelayout = sc->treeClass.needRelayout;
|
231
|
+
}
|
232
|
+
}
|
233
|
+
|
234
|
+
static void initialize(Widget requestWidget, Widget newWidget,
|
235
|
+
ArgList args, Cardinal *numArgs) {
|
236
|
+
XPDFTreeWidget nw = (XPDFTreeWidget)newWidget;
|
237
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(newWidget);
|
238
|
+
|
239
|
+
nw->tree.root = NULL;
|
240
|
+
nw->tree.redrawY = -1;
|
241
|
+
if (cls->treeClass.createGC) {
|
242
|
+
(*cls->treeClass.createGC)(newWidget);
|
243
|
+
} else {
|
244
|
+
createGC(newWidget);
|
245
|
+
}
|
246
|
+
}
|
247
|
+
|
248
|
+
static void destroy(Widget widget) {
|
249
|
+
XPDFTreeWidget w = (XPDFTreeWidget)widget;
|
250
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget);
|
251
|
+
|
252
|
+
if (w->tree.root) {
|
253
|
+
destroySubtree(w->tree.root);
|
254
|
+
w->tree.root = NULL;
|
255
|
+
}
|
256
|
+
if (cls->treeClass.destroyGC) {
|
257
|
+
(*cls->treeClass.destroyGC)(widget);
|
258
|
+
} else {
|
259
|
+
destroyGC(widget);
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
static void destroySubtree(XPDFTreeEntry *e) {
|
264
|
+
if (e->children) {
|
265
|
+
destroySubtree(e->children);
|
266
|
+
}
|
267
|
+
if (e->next) {
|
268
|
+
destroySubtree(e->next);
|
269
|
+
}
|
270
|
+
}
|
271
|
+
|
272
|
+
static void resize(Widget widget) {
|
273
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget);
|
274
|
+
|
275
|
+
if (cls->treeClass.layout) {
|
276
|
+
(*cls->treeClass.layout)(widget, NULL);
|
277
|
+
} else {
|
278
|
+
layout(widget, NULL);
|
279
|
+
}
|
280
|
+
}
|
281
|
+
|
282
|
+
static void redisplay(Widget widget, XEvent *event, Region region) {
|
283
|
+
XPDFTreeWidget w = (XPDFTreeWidget)widget;
|
284
|
+
XPDFTreeEntry *e;
|
285
|
+
|
286
|
+
if (w->tree.redrawY >= 0) {
|
287
|
+
XClearArea(XtDisplay((Widget)w), XtWindow((Widget)w),
|
288
|
+
0, w->tree.redrawY, w->core.width, w->core.height, False);
|
289
|
+
w->tree.redrawY = -1;
|
290
|
+
}
|
291
|
+
for (e = w->tree.root; e; e = e->next) {
|
292
|
+
redisplaySubtree(w, e, event, region);
|
293
|
+
}
|
294
|
+
}
|
295
|
+
|
296
|
+
static void redisplaySubtree(XPDFTreeWidget w, XPDFTreeEntry *e,
|
297
|
+
XEvent *event, Region region) {
|
298
|
+
XPDFTreeConstraint c;
|
299
|
+
Position x, y, y2;
|
300
|
+
XPDFTreeEntry *child;
|
301
|
+
|
302
|
+
(*XtClass(e->widget)->core_class.expose)(e->widget, event, region);
|
303
|
+
c = XPDFTreeCPart(e->widget);
|
304
|
+
x = e->widget->core.x;
|
305
|
+
y = e->widget->core.y + e->widget->core.height / 2;
|
306
|
+
if (e->children) {
|
307
|
+
if (c->entryExpanded) {
|
308
|
+
drawExpandedIcon(w, x - 8, y);
|
309
|
+
y2 = y; // make gcc happy
|
310
|
+
for (child = e->children; child; child = child->next) {
|
311
|
+
y2 = child->widget->core.y + child->widget->core.height / 2;
|
312
|
+
XDrawLine(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.dottedGC,
|
313
|
+
x - 8, y2, x + 6, y2);
|
314
|
+
redisplaySubtree(w, child, event, region);
|
315
|
+
}
|
316
|
+
XDrawLine(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.dottedGC,
|
317
|
+
x - 8, y + 2, x - 8, y2);
|
318
|
+
} else {
|
319
|
+
drawCollapsedIcon(w, x - 8, y);
|
320
|
+
}
|
321
|
+
}
|
322
|
+
}
|
323
|
+
|
324
|
+
static void drawExpandedIcon(XPDFTreeWidget w, Position x, Position y) {
|
325
|
+
XPoint pts[4];
|
326
|
+
|
327
|
+
pts[0].x = x - 4; pts[0].y = y - 2;
|
328
|
+
pts[1].x = x + 4; pts[1].y = y - 2;
|
329
|
+
pts[2].x = x; pts[2].y = y + 2;
|
330
|
+
pts[3].x = x - 4; pts[3].y = y - 2;
|
331
|
+
XDrawLines(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.plainGC,
|
332
|
+
pts, 4, CoordModeOrigin);
|
333
|
+
}
|
334
|
+
|
335
|
+
static void drawCollapsedIcon(XPDFTreeWidget w, Position x, Position y) {
|
336
|
+
XPoint pts[4];
|
337
|
+
|
338
|
+
pts[0].x = x - 2; pts[0].y = y - 4;
|
339
|
+
pts[1].x = x - 2; pts[1].y = y + 4;
|
340
|
+
pts[2].x = x + 2; pts[2].y = y;
|
341
|
+
pts[3].x = x - 2; pts[3].y = y - 4;
|
342
|
+
XDrawLines(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.plainGC,
|
343
|
+
pts, 4, CoordModeOrigin);
|
344
|
+
}
|
345
|
+
|
346
|
+
static Boolean setValues(Widget oldWidget, Widget requestWidget,
|
347
|
+
Widget newWidget, ArgList args, Cardinal *numArgs) {
|
348
|
+
XPDFTreeWidget ow = (XPDFTreeWidget)oldWidget;
|
349
|
+
XPDFTreeWidget nw = (XPDFTreeWidget)newWidget;
|
350
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(nw);
|
351
|
+
Boolean relayout, redisp;
|
352
|
+
|
353
|
+
// check to see if layout-affecting resources have changed
|
354
|
+
if (cls->treeClass.needRelayout) {
|
355
|
+
relayout = (*cls->treeClass.needRelayout)((Widget)ow, (Widget)nw);
|
356
|
+
} else {
|
357
|
+
relayout = needRelayout((Widget)ow, (Widget)nw);
|
358
|
+
}
|
359
|
+
redisp = False;
|
360
|
+
if (relayout) {
|
361
|
+
|
362
|
+
// calculate a new ideal size (reset the widget size first so
|
363
|
+
// calcSize will compute a new one)
|
364
|
+
if (nw->core.width == ow->core.width) {
|
365
|
+
nw->core.width = 0;
|
366
|
+
}
|
367
|
+
if (nw->core.height == ow->core.height) {
|
368
|
+
nw->core.height = 0;
|
369
|
+
}
|
370
|
+
if (cls->treeClass.calcSize) {
|
371
|
+
(*cls->treeClass.calcSize)((Widget)nw, NULL,
|
372
|
+
&nw->core.width, &nw->core.height);
|
373
|
+
} else {
|
374
|
+
calcSize((Widget)nw, NULL, &nw->core.width, &nw->core.height);
|
375
|
+
}
|
376
|
+
|
377
|
+
// if resources have changed but size hasn't, layout manually
|
378
|
+
// (because Xt just looks at the size)
|
379
|
+
if (nw->core.width == ow->core.width &&
|
380
|
+
nw->core.height == ow->core.height) {
|
381
|
+
if (cls->treeClass.layout) {
|
382
|
+
(*cls->treeClass.layout)((Widget)nw, NULL);
|
383
|
+
} else {
|
384
|
+
layout((Widget)nw, NULL);
|
385
|
+
}
|
386
|
+
redisp = True;
|
387
|
+
}
|
388
|
+
}
|
389
|
+
|
390
|
+
return redisp;
|
391
|
+
}
|
392
|
+
|
393
|
+
static void setValuesAlmost(Widget oldWidget, Widget newWidget,
|
394
|
+
XtWidgetGeometry *request,
|
395
|
+
XtWidgetGeometry *reply) {
|
396
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(newWidget);
|
397
|
+
|
398
|
+
// our parent rejected a geometry request, so accept the compromise
|
399
|
+
// and relayout
|
400
|
+
if (!reply->request_mode) {
|
401
|
+
if (cls->treeClass.layout) {
|
402
|
+
(*cls->treeClass.layout)(newWidget, NULL);
|
403
|
+
} else {
|
404
|
+
layout(newWidget, NULL);
|
405
|
+
}
|
406
|
+
}
|
407
|
+
*request = *reply;
|
408
|
+
}
|
409
|
+
|
410
|
+
static XtGeometryResult queryGeometry(Widget widget,
|
411
|
+
XtWidgetGeometry *request,
|
412
|
+
XtWidgetGeometry *reply) {
|
413
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget);
|
414
|
+
|
415
|
+
if (!XtIsRealized(widget)) {
|
416
|
+
reply->width = XtWidth(widget);
|
417
|
+
reply->height = XtHeight(widget);
|
418
|
+
} else {
|
419
|
+
reply->width = 0;
|
420
|
+
reply->height = 0;
|
421
|
+
}
|
422
|
+
if (cls->treeClass.calcSize) {
|
423
|
+
(*cls->treeClass.calcSize)(widget, NULL, &reply->width, &reply->height);
|
424
|
+
} else {
|
425
|
+
calcSize(widget, NULL, &reply->width, &reply->height);
|
426
|
+
}
|
427
|
+
#if XmVERSION > 1
|
428
|
+
return XmeReplyToQueryGeometry(widget, request, reply);
|
429
|
+
#else
|
430
|
+
if ((request->request_mode & CWWidth) &&
|
431
|
+
(request->request_mode & CWHeight) &&
|
432
|
+
request->width == reply->width &&
|
433
|
+
request->height == reply->height) {
|
434
|
+
return XtGeometryYes;
|
435
|
+
}
|
436
|
+
if (reply->width == XtWidth(widget) &&
|
437
|
+
reply->height == XtHeight(widget)) {
|
438
|
+
return XtGeometryNo;
|
439
|
+
}
|
440
|
+
reply->request_mode = CWWidth | CWHeight;
|
441
|
+
return XtGeometryAlmost;
|
442
|
+
#endif
|
443
|
+
}
|
444
|
+
|
445
|
+
static XtGeometryResult geometryManager(Widget widget,
|
446
|
+
XtWidgetGeometry *request,
|
447
|
+
XtWidgetGeometry *reply) {
|
448
|
+
XPDFTreeWidget w = (XPDFTreeWidget)XtParent(widget);
|
449
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(w);
|
450
|
+
Dimension curWidth, curHeight, curBW;
|
451
|
+
XtWidgetGeometry parentReq;
|
452
|
+
XtGeometryResult result;
|
453
|
+
|
454
|
+
// deny any requests for a new position
|
455
|
+
if ((request->request_mode & CWX) || (request->request_mode & CWY)) {
|
456
|
+
return XtGeometryNo;
|
457
|
+
}
|
458
|
+
|
459
|
+
// save the current geometry
|
460
|
+
curWidth = w->core.width;
|
461
|
+
curHeight = w->core.height;
|
462
|
+
curBW = w->core.border_width;
|
463
|
+
|
464
|
+
// make the requested changes
|
465
|
+
if (request->request_mode & CWWidth) {
|
466
|
+
w->core.width = request->width;
|
467
|
+
}
|
468
|
+
if (request->request_mode & CWHeight) {
|
469
|
+
w->core.height = request->height;
|
470
|
+
}
|
471
|
+
if (request->request_mode & CWBorderWidth) {
|
472
|
+
w->core.border_width = request->border_width;
|
473
|
+
}
|
474
|
+
|
475
|
+
// calculate the new ideal size
|
476
|
+
parentReq.width = 0;
|
477
|
+
parentReq.height = 0;
|
478
|
+
if (cls->treeClass.calcSize) {
|
479
|
+
(*cls->treeClass.calcSize)((Widget)w, widget,
|
480
|
+
&parentReq.width, &reply->height);
|
481
|
+
} else {
|
482
|
+
calcSize((Widget)w, widget, &parentReq.width, &reply->height);
|
483
|
+
}
|
484
|
+
|
485
|
+
// send geometry request to our parent
|
486
|
+
parentReq.request_mode = CWWidth | CWHeight;
|
487
|
+
if (request->request_mode & XtCWQueryOnly) {
|
488
|
+
parentReq.request_mode |= XtCWQueryOnly;
|
489
|
+
}
|
490
|
+
result = XtMakeGeometryRequest((Widget)w, &parentReq, NULL);
|
491
|
+
if (result == XtGeometryAlmost) {
|
492
|
+
result = XtGeometryNo;
|
493
|
+
}
|
494
|
+
|
495
|
+
if (result == XtGeometryNo || (request->request_mode & XtCWQueryOnly)) {
|
496
|
+
// restore the original geometry
|
497
|
+
w->core.width = curWidth;
|
498
|
+
w->core.height = curHeight;
|
499
|
+
w->core.border_width = curBW;
|
500
|
+
} else {
|
501
|
+
if (cls->treeClass.layout) {
|
502
|
+
(*cls->treeClass.layout)((Widget)w, widget);
|
503
|
+
} else {
|
504
|
+
layout((Widget)w, widget);
|
505
|
+
}
|
506
|
+
}
|
507
|
+
|
508
|
+
return result;
|
509
|
+
}
|
510
|
+
|
511
|
+
static void changeManaged(Widget widget) {
|
512
|
+
Dimension width, height;
|
513
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget);
|
514
|
+
|
515
|
+
// compute the ideal size
|
516
|
+
if (!XtIsRealized(widget)) {
|
517
|
+
width = XtWidth(widget);
|
518
|
+
height = XtHeight(widget);
|
519
|
+
} else {
|
520
|
+
width = 0;
|
521
|
+
height = 0;
|
522
|
+
}
|
523
|
+
if (cls->treeClass.calcSize) {
|
524
|
+
(*cls->treeClass.calcSize)(widget, NULL, &width, &height);
|
525
|
+
} else {
|
526
|
+
calcSize(widget, NULL, &width, &height);
|
527
|
+
}
|
528
|
+
|
529
|
+
// make resize request to parent -- keep asking until we get a yes
|
530
|
+
// or no
|
531
|
+
while (XtMakeResizeRequest(widget, width, height, &width, &height)
|
532
|
+
== XtGeometryAlmost) ;
|
533
|
+
|
534
|
+
// relayout
|
535
|
+
if (cls->treeClass.layout) {
|
536
|
+
(*cls->treeClass.layout)(widget, NULL);
|
537
|
+
} else {
|
538
|
+
layout(widget, NULL);
|
539
|
+
}
|
540
|
+
|
541
|
+
#if XmVERSION > 1
|
542
|
+
// update keyboard traversal
|
543
|
+
XmeNavigChangeManaged(widget);
|
544
|
+
#else
|
545
|
+
_XmNavigChangeManaged(widget);
|
546
|
+
#endif
|
547
|
+
}
|
548
|
+
|
549
|
+
static void initConstraint(Widget requestWidget, Widget newWidget,
|
550
|
+
ArgList args, Cardinal *numArgs) {
|
551
|
+
XPDFTreeWidget w = (XPDFTreeWidget)XtParent(newWidget);
|
552
|
+
XPDFTreeConstraint c;
|
553
|
+
|
554
|
+
c = XPDFTreeCPart(newWidget);
|
555
|
+
c->e = (XPDFTreeEntry *)gmalloc(sizeof(XPDFTreeEntry));
|
556
|
+
c->e->widget = newWidget;
|
557
|
+
c->e->children = NULL;
|
558
|
+
c->e->next = NULL;
|
559
|
+
if (c->entryParent) {
|
560
|
+
insertChildOnList(c->e, &XPDFTreeCPart(c->entryParent)->e->children);
|
561
|
+
} else {
|
562
|
+
insertChildOnList(c->e, &w->tree.root);
|
563
|
+
}
|
564
|
+
}
|
565
|
+
|
566
|
+
static void destroyConstraint(Widget widget) {
|
567
|
+
deleteSubtree(widget);
|
568
|
+
}
|
569
|
+
|
570
|
+
static void deleteSubtree(Widget widget) {
|
571
|
+
XPDFTreeWidget w = (XPDFTreeWidget)XtParent(widget);
|
572
|
+
XPDFTreeConstraint c;
|
573
|
+
|
574
|
+
c = XPDFTreeCPart(widget);
|
575
|
+
if (!c->e) {
|
576
|
+
return;
|
577
|
+
}
|
578
|
+
while (c->e->children) {
|
579
|
+
deleteSubtree(c->e->children->widget);
|
580
|
+
}
|
581
|
+
if (c->entryParent) {
|
582
|
+
deleteChildFromList(c->e, &XPDFTreeCPart(c->entryParent)->e->children);
|
583
|
+
} else {
|
584
|
+
deleteChildFromList(c->e, &w->tree.root);
|
585
|
+
}
|
586
|
+
gfree(c->e);
|
587
|
+
c->e = NULL;
|
588
|
+
}
|
589
|
+
|
590
|
+
static Boolean constraintSetValues(Widget oldWidget, Widget requestWidget,
|
591
|
+
Widget newWidget,
|
592
|
+
ArgList args, Cardinal *numArgs) {
|
593
|
+
XPDFTreeWidget w = (XPDFTreeWidget)XtParent(newWidget);
|
594
|
+
XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass((Widget)w);
|
595
|
+
XPDFTreeConstraint oc, nc;
|
596
|
+
Boolean relayout;
|
597
|
+
Dimension width, height;
|
598
|
+
|
599
|
+
if (!XtIsManaged(newWidget)) {
|
600
|
+
return False;
|
601
|
+
}
|
602
|
+
oc = XPDFTreeCPart(oldWidget);
|
603
|
+
nc = XPDFTreeCPart(newWidget);
|
604
|
+
relayout = False;
|
605
|
+
if (nc->entryParent != oc->entryParent ||
|
606
|
+
nc->entryPosition != oc->entryPosition) {
|
607
|
+
if (oc->entryParent) {
|
608
|
+
deleteChildFromList(oc->e, &XPDFTreeCPart(oc->entryParent)->e->children);
|
609
|
+
} else {
|
610
|
+
deleteChildFromList(oc->e, &w->tree.root);
|
611
|
+
}
|
612
|
+
if (nc->entryParent) {
|
613
|
+
insertChildOnList(nc->e, &XPDFTreeCPart(nc->entryParent)->e->children);
|
614
|
+
} else {
|
615
|
+
insertChildOnList(nc->e, &w->tree.root);
|
616
|
+
}
|
617
|
+
relayout = True;
|
618
|
+
} else if (nc->entryExpanded != oc->entryExpanded) {
|
619
|
+
relayout = True;
|
620
|
+
}
|
621
|
+
|
622
|
+
if (relayout) {
|
623
|
+
|
624
|
+
// calculate a new ideal size (reset the widget size first so
|
625
|
+
// calcSize will compute a new one)
|
626
|
+
width = 0;
|
627
|
+
height = 0;
|
628
|
+
if (cls->treeClass.calcSize) {
|
629
|
+
(*cls->treeClass.calcSize)((Widget)w, NULL, &width, &height);
|
630
|
+
} else {
|
631
|
+
calcSize((Widget)w, NULL, &width, &height);
|
632
|
+
}
|
633
|
+
|
634
|
+
// make resize request to parent -- keep asking until we get a yes
|
635
|
+
// or no
|
636
|
+
while (XtMakeResizeRequest((Widget)w, width, height, &width, &height)
|
637
|
+
== XtGeometryAlmost) ;
|
638
|
+
|
639
|
+
// relayout the widget
|
640
|
+
if (cls->treeClass.layout) {
|
641
|
+
(*cls->treeClass.layout)((Widget)w, NULL);
|
642
|
+
} else {
|
643
|
+
layout((Widget)w, NULL);
|
644
|
+
}
|
645
|
+
}
|
646
|
+
|
647
|
+
return relayout;
|
648
|
+
}
|
649
|
+
|
650
|
+
static void insertChildOnList(XPDFTreeEntry *e, XPDFTreeEntry **listHead) {
|
651
|
+
int pos;
|
652
|
+
XPDFTreeEntry *e2;
|
653
|
+
|
654
|
+
pos = XPDFTreeCPart(e->widget)->entryPosition;
|
655
|
+
if (!*listHead || pos < XPDFTreeCPart((*listHead)->widget)->entryPosition) {
|
656
|
+
e->next = *listHead;
|
657
|
+
*listHead = e;
|
658
|
+
} else {
|
659
|
+
for (e2 = *listHead;
|
660
|
+
e2->next && pos >= XPDFTreeCPart(e2->next->widget)->entryPosition;
|
661
|
+
e2 = e2->next) ;
|
662
|
+
e->next = e2->next;
|
663
|
+
e2->next = e;
|
664
|
+
}
|
665
|
+
}
|
666
|
+
|
667
|
+
static void deleteChildFromList(XPDFTreeEntry *e, XPDFTreeEntry **listHead) {
|
668
|
+
XPDFTreeEntry **p;
|
669
|
+
|
670
|
+
for (p = listHead; *p; p = &(*p)->next) {
|
671
|
+
if (*p == e) {
|
672
|
+
*p = e->next;
|
673
|
+
e->next = NULL;
|
674
|
+
return;
|
675
|
+
}
|
676
|
+
}
|
677
|
+
}
|
678
|
+
|
679
|
+
static void createGC(Widget widget) {
|
680
|
+
XPDFTreeWidget w = (XPDFTreeWidget)widget;
|
681
|
+
XGCValues gcValues;
|
682
|
+
|
683
|
+
gcValues.foreground = w->manager.foreground;
|
684
|
+
gcValues.line_width = 0;
|
685
|
+
gcValues.line_style = LineSolid;
|
686
|
+
w->tree.plainGC = XtGetGC(widget,
|
687
|
+
GCForeground | GCLineWidth | GCLineStyle,
|
688
|
+
&gcValues);
|
689
|
+
|
690
|
+
gcValues.line_style = LineOnOffDash;
|
691
|
+
gcValues.dashes = 1;
|
692
|
+
gcValues.dash_offset = 0;
|
693
|
+
w->tree.dottedGC = XtGetGC(widget,
|
694
|
+
GCForeground | GCLineWidth | GCLineStyle |
|
695
|
+
GCDashList | GCDashOffset,
|
696
|
+
&gcValues);
|
697
|
+
}
|
698
|
+
|
699
|
+
static void destroyGC(Widget widget) {
|
700
|
+
XPDFTreeWidget w = (XPDFTreeWidget)widget;
|
701
|
+
|
702
|
+
XtReleaseGC(widget, w->tree.plainGC);
|
703
|
+
XtReleaseGC(widget, w->tree.dottedGC);
|
704
|
+
}
|
705
|
+
|
706
|
+
static void layout(Widget widget, Widget instigator) {
|
707
|
+
XPDFTreeWidget w = (XPDFTreeWidget)widget;
|
708
|
+
XPDFTreeEntry *e;
|
709
|
+
Position x, y;
|
710
|
+
|
711
|
+
x = w->tree.marginWidth + xpdfTreeIndent;
|
712
|
+
y = w->tree.marginHeight;
|
713
|
+
for (e = w->tree.root; e; e = e->next) {
|
714
|
+
y = layoutSubtree(w, instigator, e, x, y, True);
|
715
|
+
}
|
716
|
+
}
|
717
|
+
|
718
|
+
static int layoutSubtree(XPDFTreeWidget w, Widget instigator,
|
719
|
+
XPDFTreeEntry *e, Position x, Position y,
|
720
|
+
Boolean visible) {
|
721
|
+
Widget ew;
|
722
|
+
XPDFTreeEntry *child;
|
723
|
+
XPDFTreeConstraint c;
|
724
|
+
|
725
|
+
ew = e->widget;
|
726
|
+
if (!XtIsManaged(ew)) {
|
727
|
+
return y;
|
728
|
+
}
|
729
|
+
c = XPDFTreeCPart(ew);
|
730
|
+
|
731
|
+
// place this entry
|
732
|
+
if (ew) {
|
733
|
+
if (visible) {
|
734
|
+
if (ew == instigator) {
|
735
|
+
ew->core.x = x;
|
736
|
+
ew->core.y = y;
|
737
|
+
} else {
|
738
|
+
#if XmVERSION > 1
|
739
|
+
XmeConfigureObject(ew, x, y, ew->core.width, ew->core.height,
|
740
|
+
ew->core.border_width);
|
741
|
+
#else
|
742
|
+
_XmConfigureObject(ew, x, y, ew->core.width, ew->core.height,
|
743
|
+
ew->core.border_width);
|
744
|
+
#endif
|
745
|
+
}
|
746
|
+
y += ew->core.height + 2 * ew->core.border_width;
|
747
|
+
}
|
748
|
+
}
|
749
|
+
|
750
|
+
// place this entry's children
|
751
|
+
x += xpdfTreeIndent;
|
752
|
+
for (child = e->children; child; child = child->next) {
|
753
|
+
y = layoutSubtree(w, instigator, child, x, y,
|
754
|
+
visible && (!c || c->entryExpanded));
|
755
|
+
}
|
756
|
+
|
757
|
+
return y;
|
758
|
+
}
|
759
|
+
|
760
|
+
static void calcSize(Widget widget, Widget instigator,
|
761
|
+
Dimension *totalWidth,
|
762
|
+
Dimension *totalHeight) {
|
763
|
+
XPDFTreeWidget w = (XPDFTreeWidget)widget;
|
764
|
+
XPDFTreeEntry *e;
|
765
|
+
Dimension w1, h1, w2, h2;
|
766
|
+
|
767
|
+
w1 = h1 = 0;
|
768
|
+
for (e = w->tree.root; e; e = e->next) {
|
769
|
+
calcSubtreeSize(w, instigator, e, &w2, &h2);
|
770
|
+
if (w2 > w1) {
|
771
|
+
w1 = w2;
|
772
|
+
}
|
773
|
+
h1 += h2;
|
774
|
+
}
|
775
|
+
w1 += xpdfTreeIndent + 2 * w->tree.marginWidth;
|
776
|
+
h1 += 2 * w->tree.marginHeight;
|
777
|
+
if (h1 == 0) {
|
778
|
+
h1 = 1;
|
779
|
+
}
|
780
|
+
if (!*totalWidth) {
|
781
|
+
*totalWidth = w1;
|
782
|
+
}
|
783
|
+
if (!*totalHeight) {
|
784
|
+
*totalHeight = h1;
|
785
|
+
}
|
786
|
+
}
|
787
|
+
|
788
|
+
static void calcSubtreeSize(XPDFTreeWidget w, Widget instigator,
|
789
|
+
XPDFTreeEntry *e,
|
790
|
+
Dimension *width, Dimension *height) {
|
791
|
+
Widget ew;
|
792
|
+
XPDFTreeEntry *child;
|
793
|
+
XPDFTreeConstraint c;
|
794
|
+
XtWidgetGeometry geom;
|
795
|
+
Dimension w1, h1, w2, h2;
|
796
|
+
|
797
|
+
ew = e->widget;
|
798
|
+
if (!XtIsManaged(ew)) {
|
799
|
+
*width = *height = 0;
|
800
|
+
return;
|
801
|
+
}
|
802
|
+
c = XPDFTreeCPart(ew);
|
803
|
+
|
804
|
+
// get size of this entry
|
805
|
+
if (ew) {
|
806
|
+
if (!XtIsManaged(ew)) {
|
807
|
+
*width = *height = 0;
|
808
|
+
return;
|
809
|
+
}
|
810
|
+
if (ew == instigator) {
|
811
|
+
w1 = ew->core.width;
|
812
|
+
h1 = ew->core.height;
|
813
|
+
} else {
|
814
|
+
XtQueryGeometry(ew, NULL, &geom);
|
815
|
+
w1 = (geom.request_mode & CWWidth) ? geom.width : ew->core.width;
|
816
|
+
h1 = (geom.request_mode & CWHeight) ? geom.height : ew->core.height;
|
817
|
+
}
|
818
|
+
h1 += 2 * ew->core.border_width;
|
819
|
+
} else {
|
820
|
+
// root of tree
|
821
|
+
w1 = 0;
|
822
|
+
h1 = 0;
|
823
|
+
}
|
824
|
+
|
825
|
+
// if this entry is expanded, get size of all of its children
|
826
|
+
if (c->entryExpanded) {
|
827
|
+
for (child = e->children; child; child = child->next) {
|
828
|
+
calcSubtreeSize(w, instigator, child, &w2, &h2);
|
829
|
+
w2 += xpdfTreeIndent;
|
830
|
+
if (w2 > w1) {
|
831
|
+
w1 = w2;
|
832
|
+
}
|
833
|
+
h1 += h2;
|
834
|
+
}
|
835
|
+
}
|
836
|
+
|
837
|
+
*width = w1;
|
838
|
+
*height = h1;
|
839
|
+
}
|
840
|
+
|
841
|
+
static Boolean needRelayout(Widget oldWidget, Widget newWidget) {
|
842
|
+
XPDFTreeWidget ow = (XPDFTreeWidget)oldWidget;
|
843
|
+
XPDFTreeWidget nw = (XPDFTreeWidget)newWidget;
|
844
|
+
|
845
|
+
if (nw->tree.marginWidth != ow->tree.marginWidth ||
|
846
|
+
nw->tree.marginHeight != ow->tree.marginHeight) {
|
847
|
+
return True;
|
848
|
+
}
|
849
|
+
return False;
|
850
|
+
}
|
851
|
+
|
852
|
+
static void click(Widget widget, XEvent *event,
|
853
|
+
String *params, Cardinal *numParams) {
|
854
|
+
XPDFTreeWidget w = (XPDFTreeWidget)widget;
|
855
|
+
XButtonPressedEvent *bpe;
|
856
|
+
XPDFTreeEntry *e;
|
857
|
+
Boolean onExpandIcon;
|
858
|
+
XPDFTreeConstraint c;
|
859
|
+
XPDFTreeSelectCallbackStruct cbs;
|
860
|
+
|
861
|
+
if (event->type != ButtonPress) {
|
862
|
+
return;
|
863
|
+
}
|
864
|
+
bpe = (XButtonPressedEvent *)event;
|
865
|
+
if (findPosition(w, bpe->x, bpe->y, &e, &onExpandIcon)) {
|
866
|
+
if (onExpandIcon) {
|
867
|
+
c = XPDFTreeCPart(e->widget);
|
868
|
+
w->tree.redrawY = e->widget->core.y;
|
869
|
+
XtVaSetValues(e->widget, XPDFNentryExpanded, !c->entryExpanded, NULL);
|
870
|
+
} else {
|
871
|
+
XmProcessTraversal(e->widget, XmTRAVERSE_CURRENT);
|
872
|
+
XtCallActionProc(widget, "ManagerGadgetActivate", event, NULL, 0);
|
873
|
+
cbs.reason = XmCR_ACTIVATE;
|
874
|
+
cbs.event = event;
|
875
|
+
cbs.selectedItem = e->widget;
|
876
|
+
XtCallCallbackList(widget, w->tree.selectCallback, &cbs);
|
877
|
+
}
|
878
|
+
}
|
879
|
+
}
|
880
|
+
|
881
|
+
static Boolean findPosition(XPDFTreeWidget w, int x, int y,
|
882
|
+
XPDFTreeEntry **e, Boolean *onExpandIcon) {
|
883
|
+
XPDFTreeEntry *e2;
|
884
|
+
|
885
|
+
for (e2 = w->tree.root; e2; e2 = e2->next) {
|
886
|
+
*e = e2;
|
887
|
+
if (findPositionInSubtree(w, x, y, e, onExpandIcon)) {
|
888
|
+
return True;
|
889
|
+
}
|
890
|
+
}
|
891
|
+
return False;
|
892
|
+
}
|
893
|
+
|
894
|
+
// If (x,y) falls on either an expand/collapse icon or a label gadget,
|
895
|
+
// set *<e> and *<onExpandIcon> and return true.
|
896
|
+
static Boolean findPositionInSubtree(XPDFTreeWidget w, int x, int y,
|
897
|
+
XPDFTreeEntry **e,
|
898
|
+
Boolean *onExpandIcon) {
|
899
|
+
Widget child;
|
900
|
+
XPDFTreeConstraint c;
|
901
|
+
XPDFTreeEntry *e2;
|
902
|
+
int y1;
|
903
|
+
|
904
|
+
child = (*e)->widget;
|
905
|
+
y1 = child->core.y + child->core.height / 2;
|
906
|
+
if (x >= child->core.x && x < child->core.x + child->core.width &&
|
907
|
+
y >= child->core.y && y < child->core.y + child->core.height) {
|
908
|
+
*onExpandIcon = False;
|
909
|
+
return True;
|
910
|
+
} else if (x >= child->core.x - 16 && x < child->core.x - 4 &&
|
911
|
+
y >= y1 - 6 && y < y1 + 6 &&
|
912
|
+
(*e)->children) {
|
913
|
+
*onExpandIcon = True;
|
914
|
+
return True;
|
915
|
+
}
|
916
|
+
c = XPDFTreeCPart(child);
|
917
|
+
if (!c || c->entryExpanded) {
|
918
|
+
for (e2 = (*e)->children; e2; e2 = e2->next) {
|
919
|
+
*e = e2;
|
920
|
+
if (findPositionInSubtree(w, x, y, e, onExpandIcon)) {
|
921
|
+
return True;
|
922
|
+
}
|
923
|
+
}
|
924
|
+
}
|
925
|
+
return False;
|
926
|
+
}
|
927
|
+
|
928
|
+
Widget XPDFCreateTree(Widget parent, char *name,
|
929
|
+
ArgList argList, Cardinal numArgs) {
|
930
|
+
return XtCreateWidget(name, xpdfTreeWidgetClass, parent, argList, numArgs);
|
931
|
+
}
|