<div dir="ltr"><img width="0" height="0" class="mailtrack-img" alt="" style="display:flex" src="https://mailtrack.io/trace/mail/30af8fdcf403fd7fa95bbad25f1df1c9c399eb13.png?u=1477559"><div></div>Thank you so much. The information made me understand okular much better and its internals too. I will try my best to form a solution and if any problem, will contact the developers here or IRC.<br>Thank you once again.<br><br>Dileep<br><br><br><br><br><br>‌</div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Feb 17, 2018 at 4:13 PM, Tobias Deiminger <span dir="ltr"><<a href="mailto:haxtibal@posteo.de" target="_blank">haxtibal@posteo.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Dileep!<br>
<br>
@all: Please check if the following is correct<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
But now the problem is I'm confused inside the large codebase<br>
</blockquote>
<br></span>
Don't worry! I guess this has happened to almost everybody here a few times :)<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm trying to get an idea from the annotations that remains glued to<br>
the pageview and do scroll with the scrollbar<br>
</blockquote>
<br></span>
There's an critical difference between your popup annotation windows and the "glued annotations": The popup windows are real, independent widgets (AnnotWindow<-QFrame<-QWidget)<wbr>. 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".<br>
<br>
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::paintCroppedPageO<wbr>nPainter [1]. Okular just knows the annotations position rectangles, so that the PageView widget can overlay some basic UI functionality like tooltips and selection rectangles.<br>
<br>
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.<br>
<br>
Your popup note input dialog is a real independent widget (good so!) with user input logic + state. See class AnnotWindow, and PageView::openAnnotationWindow<wbr>. 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.<br>
<br>
Btw., I found README.internals.png [5] to be a brief and good overview of Okulars design when I first touched Okular.<br>
<br>
Sorry for not providing concrete solution hints. Hopefully it helped to at least gain more insight into the problem.<br>
<br>
Cheers<br>
Tobias<br>
<br>
[0] <a href="https://cgit.kde.org/okular.git/tree/generators/poppler/generator_pdf.cpp?h=v17.12.2#n950" rel="noreferrer" target="_blank">https://cgit.kde.org/okular.gi<wbr>t/tree/generators/poppler/gene<wbr>rator_pdf.cpp?h=v17.12.2#n950</a><br>
[1] <a href="https://cgit.kde.org/okular.git/tree/ui/pagepainter.cpp?h=v17.12.2#n265" rel="noreferrer" target="_blank">https://cgit.kde.org/okular.gi<wbr>t/tree/ui/pagepainter.cpp?h=v1<wbr>7.12.2#n265</a><br>
[2] <a href="https://bugs.kde.org/show_bug.cgi?id=383651" rel="noreferrer" target="_blank">https://bugs.kde.org/show_bug.<wbr>cgi?id=383651</a><br>
[3] <a href="https://cgit.kde.org/okular.git/tree/ui/pagepainter.cpp?h=v17.12.2#n741" rel="noreferrer" target="_blank">https://cgit.kde.org/okular.gi<wbr>t/tree/ui/pagepainter.cpp?h=v1<wbr>7.12.2#n741</a><br>
[4] <a href="https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/PDF32000_2008.pdf" rel="noreferrer" target="_blank">https://wwwimages2.adobe.com/c<wbr>ontent/dam/acom/en/devnet/pdf/<wbr>PDF32000_2008.pdf</a><br>
[5] <a href="https://cgit.kde.org/okular.git/tree/README.internals.png?h=v17.12.2" rel="noreferrer" target="_blank">https://cgit.kde.org/okular.gi<wbr>t/tree/README.internals.png?h=<wbr>v17.12.2</a><br>
<br>
</blockquote></div><br></div>