typo fix
[pykit.git] / PDFWidget.cc
index 6998d1e..02976cd 100644 (file)
@@ -11,6 +11,7 @@
 
 // Custom includes
 #include <iostream>
+#include <boost/foreach.hpp>
 #include <QNetworkRequest>
 #include <QNetworkReply>
 #include <QKeyEvent>
@@ -30,7 +31,7 @@ prefix_ pykit::PDFWidget::PDFWidget(QString const & id, QNetworkAccessManager *
 {
     QWebView * webView (dynamic_cast<QWebView*>(parent));
     if (webView && !id_.isEmpty())
-        webView->page()->mainFrame()->addToJavaScriptWindowObject(id_,this);
+        webView->page()->mainFrame()->addToJavaScriptWindowObject(id_, this);
 }
 
 prefix_ pykit::PDFWidget::PDFWidget(QString const & id, QString const & document,
@@ -42,7 +43,7 @@ prefix_ pykit::PDFWidget::PDFWidget(QString const & id, QString const & document
     document_.reset(Poppler::Document::load(document));
     QWebView * webView (dynamic_cast<QWebView*>(parent));
     if (webView && !id_.isEmpty())
-        webView->page()->mainFrame()->addToJavaScriptWindowObject(id_,this);
+        webView->page()->mainFrame()->addToJavaScriptWindowObject(id_, this);
     documentSetup();
 }
 
@@ -87,7 +88,7 @@ prefix_ void pykit::PDFWidget::mouseMoveEvent(QMouseEvent * event)
         rubberBand_->setGeometry(QRect(origin_, event->pos()).normalized());
 }
 
-prefix_ void pykit::PDFWidget::mouseReleaseEvent(QMouseEvent * event)
+prefix_ void pykit::PDFWidget::mouseReleaseEvent(QMouseEvent *)
 {
     if (rubberBand_) {
         QMatrix matrix (dpi_ / 72.0, 0, 0, dpi_ / 72.0, 0, 0);
@@ -117,15 +118,43 @@ prefix_ void pykit::PDFWidget::documentSetup()
     document_->setRenderHint(Poppler::Document::TextAntialiasing, true);
     document_->setRenderHint(Poppler::Document::TextHinting, false);
     resizeEvent(0);
+    Poppler::Page::SearchDirection dir (Poppler::Page::FromTop);
+    highlightAreas_.clear();
+    BOOST_FOREACH(QString const & str, highlightStrings_) {
+        QRectF highlightArea;
+        while (document_->page(currentPage_)->search(str, highlightArea, dir,
+                                                     Poppler::Page::CaseInsensitive)) {
+            highlightAreas_.push_back(highlightArea);
+            dir = Poppler::Page::NextResult;
+        }
+    }
     showPage();
 }
 
+prefix_ void pykit::PDFWidget::highlightString(QString const & str)
+{
+    highlightStrings_.append(str);
+    documentSetup();
+}
+
 prefix_ void pykit::PDFWidget::showPage()
 {
     if (! document_)
         return;
     QImage image (document_->page(currentPage_)->renderToImage(
                       dpi_, dpi_, 0, 0, width(), height()));
+    QMatrix matrix (dpi_ / 72.0, 0, 0, dpi_ / 72.0, 0, 0);
+
+    QPainter painter;
+    painter.begin(&image);
+    painter.setCompositionMode(QPainter::CompositionMode_Darken);
+    BOOST_FOREACH(QRectF const & highlightArea, highlightAreas_) {
+        QRect highlightRect = matrix.mapRect(highlightArea).toRect();
+        highlightRect.adjust(-2, -2, 2, 1);
+        painter.fillRect(highlightRect, QColor(244, 229, 0));
+    }
+    painter.end();
+
     setPixmap(QPixmap::fromImage(image));
 }