]> git.cworth.org Git - apitrace/commitdiff
Make frame thumbnail size consistent.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 25 Mar 2012 19:59:24 +0000 (20:59 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 25 Mar 2012 19:59:24 +0000 (20:59 +0100)
gui/apicalldelegate.cpp
gui/apisurface.cpp
gui/mainwindow.cpp
gui/retracer.cpp
gui/thumbnail.h [new file with mode: 0644]

index c68717580ddc6e5e5d94f3b95eb9fd27b8d6cf45..9ad9f24ad535fe729cb478164b30410727014401 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "apitracecall.h"
 #include "apitracemodel.h"
+#include "thumbnail.h"
 
 #include <QApplication>
 #include <QDebug>
@@ -27,46 +28,47 @@ void ApiCallDelegate::paint(QPainter *painter,
     Q_ASSERT(index.column() == 0);
 
     if (event) {
-        QPoint offset = QPoint(0, 0);
+        QPoint offset = option.rect.topLeft();
         QStaticText text = event->staticText();
+        QSize textSize = text.size().toSize();
         //text.setTextWidth(option.rect.width());
         //QStyledItemDelegate::paint(painter, option, index);
         QStyle *style = QApplication::style();
         style->drawControl(QStyle::CE_ItemViewItem, &option, painter, 0);
 
         // draw thumbnail of frame
-        if(event->type() == ApiTraceEvent::Frame) {
+        if (event->type() == ApiTraceEvent::Frame) {
             ApiTraceFrame *frame = static_cast<ApiTraceFrame*>(event);
             const QImage & thumbnail = frame->thumbnail();
             if (!thumbnail.isNull()) {
-                painter->drawImage(option.rect.topLeft() + offset, thumbnail);
-                offset += QPoint(option.rect.height() + 16, 0);
+                painter->drawImage(offset, thumbnail);
+                offset += QPoint(textSize.height() + thumbnail.width(), option.rect.height()/2 - textSize.height()/2);
             }
         }
 
         if (event->hasState()) {
-            QPixmap px = m_stateEmblem.pixmap(option.rect.height(),
-                                              option.rect.height());
+            QPixmap px = m_stateEmblem.pixmap(textSize.height(),
+                                              textSize.height());
             painter->drawPixmap(option.rect.topLeft(), px);
-            offset = QPoint(option.rect.height() + 5, 0);
+            offset += QPoint(textSize.height() + 5, 0);
         }
         if (event->type() == ApiTraceEvent::Call) {
             ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
             if (call->hasError()) {
-                QPixmap px = m_errorEmblem.pixmap(option.rect.height(),
-                                                  option.rect.height());
-                painter->drawPixmap(option.rect.topLeft() + offset, px);
-                offset += QPoint(option.rect.height() + 5, 0);
+                QPixmap px = m_errorEmblem.pixmap(textSize.height(),
+                                                  textSize.height());
+                painter->drawPixmap(offset, px);
+                offset += QPoint(textSize.height() + 5, 0);
             }
             if (call->edited()) {
-                QPixmap px = m_editEmblem.pixmap(option.rect.height(),
-                                                 option.rect.height());
-                painter->drawPixmap(option.rect.topLeft() + offset, px);
-                offset += QPoint(option.rect.height() + 5, 0);
+                QPixmap px = m_editEmblem.pixmap(textSize.height(),
+                                                 textSize.height());
+                painter->drawPixmap(offset, px);
+                offset += QPoint(textSize.height() + 5, 0);
             }
         }
 
-        painter->drawStaticText(option.rect.topLeft() + offset, text);
+        painter->drawStaticText(offset, text);
     } else {
         QStyledItemDelegate::paint(painter, option, index);
     }
@@ -75,8 +77,8 @@ void ApiCallDelegate::paint(QPainter *painter,
 QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option,
                                 const QModelIndex &index) const
 {
-    ApiTraceEvent *event =
-        index.data(ApiTraceModel::EventRole).value<ApiTraceEvent*>();
+    QVariant var = index.data(ApiTraceModel::EventRole);
+    ApiTraceEvent *event = var.value<ApiTraceEvent*>();
 
 #ifndef __APPLE__
     /* XXX: This fails on MacOSX, but seems safe to ignore */
@@ -87,7 +89,21 @@ QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option,
         QStaticText text = event->staticText();
         //text.setTextWidth(option.rect.width());
         //qDebug()<<"text size = "<<text.size();
-        return text.size().toSize();
+        QSize size = text.size().toSize();
+
+        // Adjust for thumbnail
+        if (event->type() == ApiTraceEvent::Frame) {
+            ApiTraceFrame *frame = static_cast<ApiTraceFrame*>(event);
+            const QImage & thumbnail = frame->thumbnail();
+            if (!thumbnail.isNull()) {
+                size.rwidth() += thumbnail.width();
+                if (size.height() < thumbnail.height()) {
+                    size.setHeight(thumbnail.height());
+                }
+            }
+        }
+
+        return size;
     }
     return QStyledItemDelegate::sizeHint(option, index);
 }
index 7bf3c8fe5f20c8531d27a4a4feacbfc320c5ad6c..bfc6cfdf128038d6e6b18a6afb057ebeb53e50e2 100644 (file)
@@ -1,4 +1,5 @@
 #include "apisurface.h"
+#include "thumbnail.h"
 
 #include <QDebug>
 #include <QSysInfo>
@@ -31,7 +32,7 @@ void ApiSurface::contentsFromBase64(const QByteArray &base64)
 {
     QByteArray dataArray = QByteArray::fromBase64(base64);
     m_image.loadFromData(dataArray, "png");
-    m_thumb = m_image.scaled(64, 64, Qt::KeepAspectRatio);
+    m_thumb = thumbnail(m_image);
 }
 
 QImage ApiSurface::image() const
index fce9984a33c89fc8b34b8ecca08d597ab3af3c42..bf56115ddc06d44b4023c4598fb8657ca2b809a2 100644 (file)
@@ -14,6 +14,7 @@
 #include "shaderssourcewidget.h"
 #include "tracedialog.h"
 #include "traceprocess.h"
+#include "thumbnail.h"
 #include "ui_retracerdialog.h"
 #include "vertexdatainterpreter.h"
 
@@ -554,7 +555,7 @@ void MainWindow::fillStateForFrame()
     if (textures.isEmpty() && fbos.isEmpty()) {
         m_ui.surfacesTab->setDisabled(false);
     } else {
-        m_ui.surfacesTreeWidget->setIconSize(QSize(64, 64));
+        m_ui.surfacesTreeWidget->setIconSize(QSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE));
         if (!textures.isEmpty()) {
             QTreeWidgetItem *textureItem =
                 new QTreeWidgetItem(m_ui.surfacesTreeWidget);
@@ -863,6 +864,7 @@ void MainWindow::replayStateFound(ApiTraceState *state)
 
 void MainWindow::replayThumbnailsFound(const QList<QImage> &thumbnails)
 {
+    m_ui.callView->setUniformRowHeights(false);
     m_trace->bindThumbnailsToFrames(thumbnails);
 }
 
index fa220117f0c5bb9de24d490d0b5d5c07f2ed7e53..7c66f3e09a9a975dd3304242a595a5f53770192b 100644 (file)
@@ -1,6 +1,7 @@
 #include "retracer.h"
 
 #include "apitracecall.h"
+#include "thumbnail.h"
 
 #include "image.hpp"
 
@@ -241,8 +242,8 @@ void RetraceProcess::replayFinished(int exitCode, QProcess::ExitStatus exitStatu
                         m_process->read((char *) scanLine, rowBytes);
                     }
 
-                    QImage thumbnail = snapshot.scaled(16, 16, Qt::KeepAspectRatio, Qt::FastTransformation);
-                    thumbnails.append(thumbnail);
+                    QImage thumb = thumbnail(snapshot);
+                    thumbnails.append(thumb);
                 }
 
                 emit foundThumbnails(thumbnails);
diff --git a/gui/thumbnail.h b/gui/thumbnail.h
new file mode 100644 (file)
index 0000000..2315564
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef THUMBNAIL_H
+#define THUMBNAIL_H
+
+#define THUMBNAIL_SIZE 64
+
+#include <QImage>
+
+inline QImage
+thumbnail(const QImage &image, Qt::TransformationMode transformationMode = Qt::FastTransformation) {
+    return image.scaled(THUMBNAIL_SIZE, THUMBNAIL_SIZE, Qt::KeepAspectRatio, transformationMode);
+}
+
+#endif