File indexing completed on 2024-05-12 16:06:38

0001 /*
0002     SPDX-FileCopyrightText: 2006 Luigi Toscano <luigi.toscano@tiscali.it>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef _DVI_GENERATOR_H_
0008 #define _DVI_GENERATOR_H_
0009 
0010 #include <core/generator.h>
0011 
0012 #include <QBitArray>
0013 
0014 class dviRenderer;
0015 class dviPageInfo;
0016 class Anchor;
0017 
0018 namespace Okular
0019 {
0020 class DocumentViewport;
0021 class ObjectRect;
0022 }
0023 
0024 class DviGenerator : public Okular::Generator
0025 {
0026     Q_OBJECT
0027     Q_INTERFACES(Okular::Generator)
0028 public:
0029     DviGenerator(QObject *parent, const QVariantList &args);
0030     bool loadDocument(const QString &fileName, QVector<Okular::Page *> &pagesVector) override;
0031 
0032     // document information
0033     Okular::DocumentInfo generateDocumentInfo(const QSet<Okular::DocumentInfo::Key> &keys) const override;
0034 
0035     // table of contents
0036     const Okular::DocumentSynopsis *generateDocumentSynopsis() override;
0037 
0038     // list of fonts
0039     Okular::FontInfo::List fontsForPage(int page) override;
0040 
0041     Okular::Document::PrintError print(QPrinter &printer) override;
0042 
0043     QVariant metaData(const QString &key, const QVariant &option) const override;
0044 
0045 protected:
0046     bool doCloseDocument() override;
0047     QImage image(Okular::PixmapRequest *request) override;
0048     Okular::TextPage *textPage(Okular::TextRequest *request) override;
0049 
0050 private:
0051     double m_resolution;
0052     bool m_fontExtracted;
0053 
0054     Okular::DocumentSynopsis *m_docSynopsis;
0055 
0056     dviRenderer *m_dviRenderer;
0057     QBitArray m_linkGenerated;
0058 
0059     void loadPages(QVector<Okular::Page *> &pagesVector);
0060     Okular::TextPage *extractTextFromPage(const dviPageInfo &pageInfo);
0061     void fillViewportFromAnchor(Okular::DocumentViewport &vp, const Anchor anch, int pW, int pH) const;
0062     void fillViewportFromAnchor(Okular::DocumentViewport &vp, const Anchor anch, const Okular::Page *page) const;
0063     QList<Okular::ObjectRect *> generateDviLinks(const dviPageInfo *pageInfo);
0064 };
0065 
0066 #endif