[PATCH 1/6] Move thumbnails to ApiTraceEvent

Dan McCabe zen3d.linux at gmail.com
Fri Jun 1 13:40:02 PDT 2012


Previously, thumbnails were only supported for frames. Now, we want to
display thumbnails for calls as well.

Therefore, move thumbnail methods and private data to the common parent
class of both ApiTraceFrame and ApiTraceCall: ApiTraceEvent.

Also, in ApiCallDelegate::paint(), add support for drawing the call
thumbnail. Since no calls have thumbnails yet, nothing will be drawn.
However, the code is still correct.

Finally, in ApiCallDelegate::sizeHint(), add support for sizing the
call thumbnail.
---
 gui/apicalldelegate.cpp |   14 ++++++++++++++
 gui/apitracecall.cpp    |   20 ++++++++++----------
 gui/apitracecall.h      |    9 +++++----
 3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/gui/apicalldelegate.cpp b/gui/apicalldelegate.cpp
index 9ad9f24..0e583bc 100644
--- a/gui/apicalldelegate.cpp
+++ b/gui/apicalldelegate.cpp
@@ -54,6 +54,11 @@ void ApiCallDelegate::paint(QPainter *painter,
         }
         if (event->type() == ApiTraceEvent::Call) {
             ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
+            const QImage & thumbnail = call->thumbnail();
+            if (!thumbnail.isNull()) {
+                painter->drawImage(offset, thumbnail);
+                offset += QPoint(textSize.height() + thumbnail.width(), option.rect.height()/2 - textSize.height()/2);
+            }
             if (call->hasError()) {
                 QPixmap px = m_errorEmblem.pixmap(textSize.height(),
                                                   textSize.height());
@@ -101,6 +106,15 @@ QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option,
                     size.setHeight(thumbnail.height());
                 }
             }
+        } else if (event->type() == ApiTraceEvent::Call) {
+            ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
+            const QImage & thumbnail = call->thumbnail();
+            if (!thumbnail.isNull()) {
+                size.rwidth() += thumbnail.width();
+                if (size.height() < thumbnail.height()) {
+                    size.setHeight(thumbnail.height());
+                }
+            }
         }
 
         return size;
diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp
index 907e10a..eca6945 100644
--- a/gui/apitracecall.cpp
+++ b/gui/apitracecall.cpp
@@ -659,6 +659,16 @@ void ApiTraceEvent::setState(ApiTraceState *state)
     m_state = state;
 }
 
+void ApiTraceEvent::setThumbnail(const QImage & thumbnail)
+{
+    m_thumbnail = thumbnail;
+}
+
+const QImage & ApiTraceEvent::thumbnail() const
+{
+    return m_thumbnail;
+}
+
 ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame,
                            TraceLoader *loader,
                            const trace::Call *call)
@@ -1205,13 +1215,3 @@ unsigned ApiTraceFrame::lastCallIndex() const
         return m_lastCallIndex;
     }
 }
-
-void ApiTraceFrame::setThumbnail(const QImage & thumbnail)
-{
-    m_thumbnail = thumbnail;
-}
-
-const QImage & ApiTraceFrame::thumbnail() const
-{
-    return m_thumbnail;
-}
diff --git a/gui/apitracecall.h b/gui/apitracecall.h
index 6c6b607..86db3e9 100644
--- a/gui/apitracecall.h
+++ b/gui/apitracecall.h
@@ -229,6 +229,9 @@ public:
         return m_state && !m_state->isEmpty();
     }
 
+    void setThumbnail(const QImage & thumbnail);
+    const QImage & thumbnail() const;
+
 protected:
     int m_type : 4;
     mutable bool m_hasBinaryData;
@@ -236,6 +239,8 @@ protected:
     ApiTraceState *m_state;
 
     mutable QStaticText *m_staticText;
+
+    QImage m_thumbnail;
 };
 Q_DECLARE_METATYPE(ApiTraceEvent*);
 
@@ -337,9 +342,6 @@ public:
     void setLastCallIndex(unsigned index);
     unsigned lastCallIndex() const;
 
-    void setThumbnail(const QImage & thumbnail);
-    const QImage & thumbnail() const;
-
 private:
     ApiTrace *m_parentTrace;
     quint64 m_binaryDataSize;
@@ -347,7 +349,6 @@ private:
     bool m_loaded;
     unsigned m_callsToLoad;
     unsigned m_lastCallIndex;
-    QImage m_thumbnail;
 };
 Q_DECLARE_METATYPE(ApiTraceFrame*);
 
-- 
1.7.9.1



More information about the apitrace mailing list