PDF Bookmark working, needs to be scaled with Zoom

presentation
Andreas Butti 7 years ago
parent 048b0deaeb
commit b16e4a8ecc
  1. 3
      src/gui/sidebar/indextree/SidebarIndexPage.cpp
  2. 94
      src/pdf/popplerapi/PopplerGlibAction.cpp
  3. 3
      src/pdf/popplerapi/PopplerGlibAction.h
  4. 3
      src/pdf/popplerapi/PopplerGlibDocument.cpp
  5. 16
      src/pdf/popplerapi/PopplerGlibPageBookmarkIterator.cpp
  6. 3
      src/pdf/popplerapi/PopplerGlibPageBookmarkIterator.h

@ -353,6 +353,7 @@ bool SidebarIndexPage::selectPageNr(size_t page, size_t pdfPage, GtkTreeIter* pa
doc->unlock();
return false;
}
g_object_ref(model);
doc->unlock();
@ -378,7 +379,7 @@ bool SidebarIndexPage::selectPageNr(size_t page, size_t pdfPage, GtkTreeIter* pa
g_object_unref(model);
g_object_unref(link);
// already bookmak from this page selected
// already a bookmark from this page selected
return true;
}
}

@ -1,9 +1,11 @@
#include "PopplerGlibAction.h"
PopplerGlibAction::PopplerGlibAction(PopplerAction* action)
: action(action)
PopplerGlibAction::PopplerGlibAction(PopplerAction* action, PopplerDocument* document)
: action(action),
document(document)
{
XOJ_INIT_TYPE(PopplerGlibAction);
g_object_ref(document);
}
PopplerGlibAction::~PopplerGlibAction()
@ -13,6 +15,12 @@ PopplerGlibAction::~PopplerGlibAction()
poppler_action_free(action);
action = NULL;
if (document)
{
g_object_unref(document);
document = NULL;
}
XOJ_RELEASE_TYPE(PopplerGlibAction);
}
@ -48,62 +56,84 @@ void PopplerGlibAction::linkFromDest(LinkDestination* link, PopplerDest* pDest)
switch(pDest->type)
{
case POPPLER_DEST_UNKNOWN:
g_warning("PDF Contains unknown link destination");
break;
case POPPLER_DEST_XYZ:
{
// int page_num;
// double left;
// double bottom;
// double right;
// double top;
// double zoom;
//
//
// XojPopplerPage* popplerPage = doc.getPage(MAX(0, pageNum));
// if (!popplerPage)
// {
// return;
// }
// double height = popplerPage->getHeight();
//
// if (dest->getChangeLeft())
// {
// link->setChangeLeft(dest->getLeft());
// }
//
// if (dest->getChangeTop())
// {
// link->setChangeTop(height - MIN(height, dest->getTop()));
// }
//
// if (dest->getChangeZoom())
// {
// link->setChangeZoom(dest->getZoom());
// }
PopplerPage* page = poppler_document_get_page(document, pDest->page_num);
if (page == NULL)
{
return;
}
double pageWidth = 0;
double pageHeight = 0;
poppler_page_get_size(page, &pageWidth, &pageHeight);
if (pDest->left)
{
link->setChangeLeft(pDest->left);
}
else if (pDest->right)
{
link->setChangeLeft(pageWidth - pDest->right);
}
if (pDest->top)
{
link->setChangeTop(pDest->top);
}
else if (pDest->bottom)
{
link->setChangeTop(pageHeight - pDest->bottom);
}
if (pDest->zoom != 0)
{
link->setChangeZoom(pDest->zoom);
}
g_object_unref(page);
}
break;
case POPPLER_DEST_FIT:
g_warning("Unimplemented link type: POPPLER_DEST_FIT");
break;
case POPPLER_DEST_FITH:
g_warning("Unimplemented link type: POPPLER_DEST_FITH");
break;
case POPPLER_DEST_FITV:
g_warning("Unimplemented link type: POPPLER_DEST_FITV");
break;
case POPPLER_DEST_FITR:
g_warning("Unimplemented link type: POPPLER_DEST_FITR");
break;
case POPPLER_DEST_FITB:
g_warning("Unimplemented link type: POPPLER_DEST_FITB");
break;
case POPPLER_DEST_FITBH:
g_warning("Unimplemented link type: POPPLER_DEST_FITBH");
break;
case POPPLER_DEST_FITBV:
g_warning("Unimplemented link type: POPPLER_DEST_FITBV");
break;
case POPPLER_DEST_NAMED:
{
PopplerDest* pDest2 = poppler_document_find_dest(document, pDest->named_dest);
if (pDest2 != NULL)
{
linkFromDest(link, pDest2);
poppler_dest_free(pDest2);
return;
}
}
break;
default:
break;
}
link->setPdfPage(pDest->page_num);
link->setPdfPage(pDest->page_num - 1);
}
string PopplerGlibAction::getTitle()

@ -27,7 +27,7 @@ class LinkDestination;
class PopplerGlibAction : public XojPdfAction
{
public:
PopplerGlibAction(PopplerAction* action);
PopplerGlibAction(PopplerAction* action, PopplerDocument* document);
virtual ~PopplerGlibAction();
public:
@ -41,5 +41,6 @@ private:
XOJ_TYPE_ATTRIB;
PopplerAction* action;
PopplerDocument* document;
};

@ -17,7 +17,6 @@ PopplerGlibDocument::PopplerGlibDocument(const PopplerGlibDocument& doc)
if (document)
{
g_object_ref(document);
document = NULL;
}
}
@ -133,7 +132,7 @@ XojPdfBookmarkIterator* PopplerGlibDocument::getContentsIter()
return NULL;
}
return new PopplerGlibPageBookmarkIterator(iter);
return new PopplerGlibPageBookmarkIterator(iter, document);
}

@ -1,9 +1,11 @@
#include "PopplerGlibPageBookmarkIterator.h"
PopplerGlibPageBookmarkIterator::PopplerGlibPageBookmarkIterator(PopplerIndexIter* iter)
: iter(iter)
PopplerGlibPageBookmarkIterator::PopplerGlibPageBookmarkIterator(PopplerIndexIter* iter, PopplerDocument* document)
: iter(iter),
document(document)
{
XOJ_INIT_TYPE(PopplerGlibPageBookmarkIterator);
g_object_ref(document);
}
PopplerGlibPageBookmarkIterator::~PopplerGlibPageBookmarkIterator()
@ -13,6 +15,12 @@ PopplerGlibPageBookmarkIterator::~PopplerGlibPageBookmarkIterator()
poppler_index_iter_free(iter);
iter = NULL;
if (document)
{
g_object_unref(document);
document = NULL;
}
XOJ_RELEASE_TYPE(PopplerGlibPageBookmarkIterator);
}
@ -40,7 +48,7 @@ XojPdfBookmarkIterator* PopplerGlibPageBookmarkIterator::getChildIter()
return NULL;
}
return new PopplerGlibPageBookmarkIterator(child);
return new PopplerGlibPageBookmarkIterator(child, document);
}
XojPdfAction* PopplerGlibPageBookmarkIterator::getAction()
@ -54,5 +62,5 @@ XojPdfAction* PopplerGlibPageBookmarkIterator::getAction()
return NULL;
}
return new PopplerGlibAction(action);
return new PopplerGlibAction(action, document);
}

@ -22,7 +22,7 @@
class PopplerGlibPageBookmarkIterator : public XojPdfBookmarkIterator
{
public:
PopplerGlibPageBookmarkIterator(PopplerIndexIter* iter);
PopplerGlibPageBookmarkIterator(PopplerIndexIter* iter, PopplerDocument* document);
virtual ~PopplerGlibPageBookmarkIterator();
public:
@ -35,5 +35,6 @@ private:
XOJ_TYPE_ATTRIB;
PopplerIndexIter* iter;
PopplerDocument* document;
};

Loading…
Cancel
Save