Hi Dileep!

@all: Please check if the following is correct

But now the problem is I'm confused inside the large codebase

Don't worry! I guess this has happened to almost everybody here a few times :)

I'm trying to get an idea from the annotations that remains glued to
the pageview and do scroll with the scrollbar

There's an critical difference between your popup annotation windows and the "glued annotations": The popup windows are real, independent widgets (AnnotWindow<-QFrame<-QWidget). But the glued ones are just "dumb" pixmaps mostly rendered by the poppler generator, while all logic & drawing is done by the (too-)mighty PageView (a QAbstractScrollArea widget). Imho, this disqualifies them a bit as "similar code example".

Most "glued annotations" are rendered by the poppler library along with text and other PDF objects into, simplest case, one big QImage per page (see PDFGenerator::image [0], rendering thread). The page QImage is converted to a QPixmap and gets painted at once in PagePainter::paintCroppedPageOnPainter [1]. Okular just knows the annotations position rectangles, so that the PageView widget can overlay some basic UI functionality like tooltips and selection rectangles.

There are interesting exceptions, e.g. stamp annotations. Poppler can't render them, so as kind of workaround [2] Okular does that on its own. Stamps are drawn in the seciton "5 -- MIXED FLOW. Draw ANNOTATIONS [OPAQUE ONES] on ACTIVE PAINTER" - "draw StampAnnotation" [3]. So, rendered by okular, scrolling with the page - that's a bit closer to what you want. But otoh, those stamps are still only dumb QPixmaps, handled by the PageView widget.

Your popup note input dialog is a real independent widget (good so!) with user input logic + state. See class AnnotWindow, and PageView::openAnnotationWindow. This widget implements the "open state" of annotations, which is a term from PDF standard ISO 32000 [4]. Chapter 12.5.1, "Annotations - General" describes the open and closed state in detail, I think that's a good reading for you.

Btw., I found README.internals.png [5] to be a brief and good overview of Okulars design when I first touched Okular.

Sorry for not providing concrete solution hints. Hopefully it helped to at least gain more insight into the problem.

Cheers
Tobias

[0] https://cgit.kde.org/okular.git/tree/generators/poppler/generator_pdf.cpp?h=v17.12.2#n950 [1] https://cgit.kde.org/okular.git/tree/ui/pagepainter.cpp?h=v17.12.2#n265
[2] https://bugs.kde.org/show_bug.cgi?id=383651
[3] https://cgit.kde.org/okular.git/tree/ui/pagepainter.cpp?h=v17.12.2#n741 [4] https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/PDF32000_2008.pdf
[5] https://cgit.kde.org/okular.git/tree/README.internals.png?h=v17.12.2

Reply via email to