1 package cx.fbn.nevernote.gui;
\r
3 import com.trolltech.qt.core.QBuffer;
\r
4 import com.trolltech.qt.core.QByteArray;
\r
5 import com.trolltech.qt.core.QIODevice;
\r
6 import com.trolltech.qt.core.QMutex;
\r
7 import com.trolltech.qt.core.QObject;
\r
8 import com.trolltech.qt.core.QSize;
\r
9 import com.trolltech.qt.core.Qt.AspectRatioMode;
\r
10 import com.trolltech.qt.core.Qt.Orientation;
\r
11 import com.trolltech.qt.core.Qt.ScrollBarPolicy;
\r
12 import com.trolltech.qt.core.Qt.TransformationMode;
\r
13 import com.trolltech.qt.gui.QImage;
\r
14 import com.trolltech.qt.gui.QImage.Format;
\r
15 import com.trolltech.qt.gui.QPainter;
\r
16 import com.trolltech.qt.webkit.QWebPage;
\r
18 import cx.fbn.nevernote.Global;
\r
19 import cx.fbn.nevernote.sql.DatabaseConnection;
\r
20 import cx.fbn.nevernote.threads.ThumbnailRunner;
\r
21 import cx.fbn.nevernote.utilities.ApplicationLogger;
\r
22 import cx.fbn.nevernote.utilities.ListManager;
\r
24 public class Thumbnailer extends QObject {
\r
25 public QWebPage page = new QWebPage();
\r
26 public QImage image;
\r
27 public QPainter painter = new QPainter();
\r
28 public QMutex mutex;
\r
30 private final QSize size;
\r
32 private QBuffer buffer;
\r
33 private final ApplicationLogger logger;
\r
34 private final DatabaseConnection conn;
\r
36 public Thumbnailer(ApplicationLogger logger, DatabaseConnection conn, ListManager l, ThumbnailRunner r)
\r
38 mutex = new QMutex();
\r
41 this.logger = logger;
\r
42 page = new QWebPage();
\r
44 size = new QSize(1024,768);
\r
45 // size = new QSize();
\r
46 // size.setWidth(Global.largeThumbnailSize.width());
\r
47 // size.setHeight(Global.largeThumbnailSize.height());
\r
48 image = new QImage(size, Format.Format_ARGB32_Premultiplied);
\r
49 page.setViewportSize(size);
\r
50 page.loadFinished.connect(this, "loadFinished(Boolean)");
\r
51 buffer = new QBuffer();
\r
55 public void loadContent(String guid, QByteArray html, int zoom) {
\r
58 page.mainFrame().setScrollBarPolicy(Orientation.Horizontal, ScrollBarPolicy.ScrollBarAlwaysOff);
\r
59 page.mainFrame().setScrollBarPolicy(Orientation.Vertical, ScrollBarPolicy.ScrollBarAlwaysOff);
\r
60 page.mainFrame().setContent(html);
\r
64 @SuppressWarnings("unused")
\r
65 private String loadFinished(Boolean ok) {
\r
70 // page.setViewportSize(page.mainFrame().contentsSize());
\r
71 // image = new QImage(size, Format.Format_ARGB32);
\r
72 logger.log(logger.EXTREME, "Creating painter");
\r
73 painter = new QPainter();
\r
74 logger.log(logger.EXTREME, "Beginning painter");
\r
75 painter.begin(image);
\r
76 page.mainFrame().setZoomFactor(new Double(zoom));
\r
77 if (painter.paintEngine() == null) {
\r
78 logger.log(logger.EXTREME, "Bad paint engine. Aborting");
\r
83 logger.log(logger.EXTREME, "Rendering image");
\r
84 page.mainFrame().render(painter);
\r
85 logger.log(logger.EXTREME, "Closing painter");
\r
87 if (image.isNull()) {
\r
88 logger.log(logger.EXTREME, "Error rendering thumbnail image. Aborting");
\r
92 logger.log(logger.EXTREME, "Saving image isNull=" +image.isNull() +" Size=" +image.size());
\r
93 logger.log(logger.EXTREME, "Adding image to runner");
\r
95 logger.log(logger.EXTREME, "Unlocking thumbnailer");
\r
101 private void saveImage() {
\r
102 logger.log(logger.EXTREME, "Image found "+guid);
\r
104 logger.log(logger.EXTREME, "Opening buffer");
\r
105 if (buffer == null)
\r
106 buffer = new QBuffer();
\r
107 if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {
\r
108 logger.log(logger.EXTREME, "Failure to open buffer. Aborting.");
\r
113 logger.log(logger.EXTREME, "Filling buffer");
\r
114 QImage img = image.scaled(Global.largeThumbnailSize,
\r
115 AspectRatioMode.KeepAspectRatio, TransformationMode.SmoothTransformation);
\r
116 if (!img.save(buffer, "PNG")) {
\r
117 logger.log(logger.EXTREME, "Failure to write to buffer. Aborting.");
\r
123 logger.log(logger.EXTREME, "Updating database");
\r
124 QByteArray b = buffer.buffer();
\r
125 conn.getNoteTable().setThumbnail(guid, b);
\r
126 conn.getNoteTable().setThumbnailNeeded(guid, false);
\r