@ -11,6 +11,7 @@
# include "annots.h"
// qt/kde includes
# include <QFileInfo>
# include <QLoggingCategory>
# include <QVariant>
@ -279,6 +280,19 @@ static void setSharedAnnotationPropertiesToPopplerAnnotation(const Okular::Annot
popplerAnnotation - > setModificationDate ( okularAnnotation - > modificationDate ( ) ) ;
}
# ifdef HAVE_POPPLER_21_10
static void setPopplerStampAnnotationCustomImage ( const Poppler : : Page * page , Poppler : : StampAnnotation * pStampAnnotation , const Okular : : StampAnnotation * oStampAnnotation )
{
const QSize size = page - > pageSize ( ) ;
const QRect rect = Okular : : AnnotationUtils : : annotationGeometry ( oStampAnnotation , size . width ( ) , size . height ( ) ) ;
QImage image = Okular : : AnnotationUtils : : loadStamp ( oStampAnnotation - > stampIconName ( ) , qMax ( rect . width ( ) , rect . height ( ) ) ) . toImage ( ) ;
if ( ! image . isNull ( ) )
pStampAnnotation - > setStampCustomImage ( image ) ;
}
# endif
static void updatePopplerAnnotationFromOkularAnnotation ( const Okular : : TextAnnotation * oTextAnnotation , Poppler : : TextAnnotation * pTextAnnotation )
{
pTextAnnotation - > setTextIcon ( oTextAnnotation - > textIcon ( ) ) ;
@ -333,10 +347,17 @@ static void updatePopplerAnnotationFromOkularAnnotation(const Okular::HighlightA
pHighlightAnnotation - > setHighlightQuads ( pQuads ) ;
}
# ifdef HAVE_POPPLER_21_10
static void updatePopplerAnnotationFromOkularAnnotation ( const Okular : : StampAnnotation * oStampAnnotation , Poppler : : StampAnnotation * pStampAnnotation , const Poppler : : Page * page )
{
setPopplerStampAnnotationCustomImage ( page , pStampAnnotation , oStampAnnotation ) ;
}
# else
static void updatePopplerAnnotationFromOkularAnnotation ( const Okular : : StampAnnotation * oStampAnnotation , Poppler : : StampAnnotation * pStampAnnotation )
{
pStampAnnotation - > setStampIconName ( oStampAnnotation - > stampIconName ( ) ) ;
}
# endif
static void updatePopplerAnnotationFromOkularAnnotation ( const Okular : : InkAnnotation * oInkAnnotation , Poppler : : InkAnnotation * pInkAnnotation )
{
@ -398,6 +419,17 @@ static Poppler::Annotation *createPopplerAnnotationFromOkularAnnotation(const Ok
return pHighlightAnnotation ;
}
# ifdef HAVE_POPPLER_21_10
static Poppler : : Annotation * createPopplerAnnotationFromOkularAnnotation ( const Okular : : StampAnnotation * oStampAnnotation , Poppler : : Page * page )
{
Poppler : : StampAnnotation * pStampAnnotation = new Poppler : : StampAnnotation ( ) ;
setSharedAnnotationPropertiesToPopplerAnnotation ( oStampAnnotation , pStampAnnotation ) ;
updatePopplerAnnotationFromOkularAnnotation ( oStampAnnotation , pStampAnnotation , page ) ;
return pStampAnnotation ;
}
# else
static Poppler : : Annotation * createPopplerAnnotationFromOkularAnnotation ( const Okular : : StampAnnotation * oStampAnnotation )
{
Poppler : : StampAnnotation * pStampAnnotation = new Poppler : : StampAnnotation ( ) ;
@ -407,6 +439,7 @@ static Poppler::Annotation *createPopplerAnnotationFromOkularAnnotation(const Ok
return pStampAnnotation ;
}
# endif
static Poppler : : Annotation * createPopplerAnnotationFromOkularAnnotation ( const Okular : : InkAnnotation * oInkAnnotation )
{
@ -431,6 +464,8 @@ void PopplerAnnotationProxy::notifyAddition(Okular::Annotation *okl_ann, int pag
{
QMutexLocker ml ( mutex ) ;
Poppler : : Page * ppl_page = ppl_doc - > page ( page ) ;
// Create poppler annotation
Poppler : : Annotation * ppl_ann = nullptr ;
switch ( okl_ann - > subType ( ) ) {
@ -447,8 +482,26 @@ void PopplerAnnotationProxy::notifyAddition(Okular::Annotation *okl_ann, int pag
ppl_ann = createPopplerAnnotationFromOkularAnnotation ( static_cast < Okular : : HighlightAnnotation * > ( okl_ann ) ) ;
break ;
case Okular : : Annotation : : AStamp :
# ifdef HAVE_POPPLER_21_10
{
bool wasDenyWriteEnabled = okl_ann - > flags ( ) & Okular : : Annotation : : DenyWrite ;
if ( wasDenyWriteEnabled )
okl_ann - > setFlags ( okl_ann - > flags ( ) & ~ Okular : : Annotation : : DenyWrite ) ;
ppl_ann = createPopplerAnnotationFromOkularAnnotation ( static_cast < Okular : : StampAnnotation * > ( okl_ann ) , ppl_page ) ;
if ( deletedStampsAnnotationAppearance . find ( static_cast < Okular : : StampAnnotation * > ( okl_ann ) ) ! = deletedStampsAnnotationAppearance . end ( ) ) {
ppl_ann - > setAnnotationAppearance ( * deletedStampsAnnotationAppearance [ static_cast < Okular : : StampAnnotation * > ( okl_ann ) ] . get ( ) ) ;
deletedStampsAnnotationAppearance . erase ( static_cast < Okular : : StampAnnotation * > ( okl_ann ) ) ;
if ( wasDenyWriteEnabled )
okl_ann - > setFlags ( okl_ann - > flags ( ) | Okular : : Annotation : : DenyWrite ) ;
}
}
# else
ppl_ann = createPopplerAnnotationFromOkularAnnotation ( static_cast < Okular : : StampAnnotation * > ( okl_ann ) ) ;
break ;
# endif
break ;
case Okular : : Annotation : : AInk :
ppl_ann = createPopplerAnnotationFromOkularAnnotation ( static_cast < Okular : : InkAnnotation * > ( okl_ann ) ) ;
break ;
@ -460,12 +513,15 @@ void PopplerAnnotationProxy::notifyAddition(Okular::Annotation *okl_ann, int pag
return ;
}
# ifdef HAVE_POPPLER_21_10
okl_ann - > setFlags ( okl_ann - > flags ( ) | Okular : : Annotation : : ExternallyDrawn ) ;
# else
// Poppler doesn't render StampAnnotations yet
if ( ppl_ann - > subType ( ) ! = Poppler : : Annotation : : AStamp )
okl_ann - > setFlags ( okl_ann - > flags ( ) | Okular : : Annotation : : ExternallyDrawn ) ;
# endif
// Bind poppler object to page
Poppler : : Page * ppl_page = ppl_doc - > page ( page ) ;
ppl_page - > addAnnotation ( ppl_ann ) ;
delete ppl_page ;
@ -534,7 +590,13 @@ void PopplerAnnotationProxy::notifyModification(const Okular::Annotation *okl_an
case Poppler : : Annotation : : AStamp : {
const Okular : : StampAnnotation * okl_stampann = static_cast < const Okular : : StampAnnotation * > ( okl_ann ) ;
Poppler : : StampAnnotation * ppl_stampann = static_cast < Poppler : : StampAnnotation * > ( ppl_ann ) ;
# ifdef HAVE_POPPLER_21_10
Poppler : : Page * ppl_page = ppl_doc - > page ( page ) ;
updatePopplerAnnotationFromOkularAnnotation ( okl_stampann , ppl_stampann , ppl_page ) ;
delete ppl_page ;
# else
updatePopplerAnnotationFromOkularAnnotation ( okl_stampann , ppl_stampann ) ;
# endif
break ;
}
case Poppler : : Annotation : : AInk : {
@ -562,6 +624,10 @@ void PopplerAnnotationProxy::notifyRemoval(Okular::Annotation *okl_ann, int page
Poppler : : Page * ppl_page = ppl_doc - > page ( page ) ;
annotationsOnOpenHash - > remove ( okl_ann ) ;
# ifdef HAVE_POPPLER_21_10
if ( okl_ann - > subType ( ) = = Okular : : Annotation : : AStamp )
deletedStampsAnnotationAppearance [ static_cast < Okular : : StampAnnotation * > ( okl_ann ) ] = std : : move ( ppl_ann - > annotationAppearance ( ) ) ;
# endif
ppl_page - > removeAnnotation ( ppl_ann ) ; // Also destroys ppl_ann
delete ppl_page ;
@ -997,6 +1063,9 @@ Okular::Annotation *createAnnotationFromPopplerAnnotation(Poppler::Annotation *p
break ;
}
case Poppler : : Annotation : : AStamp :
# ifdef HAVE_POPPLER_21_10
externallyDrawn = true ;
# endif
tieToOkularAnn = true ;
* doDelete = false ;
okularAnnotation = createAnnotationFromPopplerAnnotation ( static_cast < Poppler : : StampAnnotation * > ( popplerAnnotation ) ) ;
@ -1020,6 +1089,18 @@ Okular::Annotation *createAnnotationFromPopplerAnnotation(Poppler::Annotation *p
if ( externallyDrawn )
okularAnnotation - > setFlags ( okularAnnotation - > flags ( ) | Okular : : Annotation : : ExternallyDrawn ) ;
# ifdef HAVE_POPPLER_21_10
if ( okularAnnotation - > subType ( ) = = Okular : : Annotation : : SubType : : AStamp ) {
Okular : : StampAnnotation * oStampAnn = static_cast < Okular : : StampAnnotation * > ( okularAnnotation ) ;
Poppler : : StampAnnotation * pStampAnn = static_cast < Poppler : : StampAnnotation * > ( popplerAnnotation ) ;
QFileInfo stampIconFile = oStampAnn - > stampIconName ( ) ;
if ( stampIconFile . exists ( ) & & stampIconFile . isFile ( ) ) {
setPopplerStampAnnotationCustomImage ( & popplerPage , pStampAnn , oStampAnn ) ;
}
oStampAnn - > setFlags ( okularAnnotation - > flags ( ) | Okular : : Annotation : : Flag : : DenyWrite ) ;
}
# endif
// Convert the poppler annotation style to Okular annotation style
Okular : : Annotation : : Style & okularStyle = okularAnnotation - > style ( ) ;