summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/debugger/QT/SkListWidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/debugger/QT/SkListWidget.cpp')
-rw-r--r--chromium/third_party/skia/debugger/QT/SkListWidget.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/chromium/third_party/skia/debugger/QT/SkListWidget.cpp b/chromium/third_party/skia/debugger/QT/SkListWidget.cpp
new file mode 100644
index 00000000000..b5f9038d692
--- /dev/null
+++ b/chromium/third_party/skia/debugger/QT/SkListWidget.cpp
@@ -0,0 +1,121 @@
+
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
+#include "SkListWidget.h"
+
+void SkListWidget::paint (QPainter *painter,
+ const QStyleOptionViewItem &option,
+ const QModelIndex &index) const {
+ /* We adjust the initial position of the list item so that
+ * we don't have overlapping top and bottom borders of concurrent
+ * widget items. */
+ QRect r = option.rect;
+ r.adjust(-1,-1,1,0);
+
+ QPen linePen(QColor::fromRgb(211,211,211), 1, Qt::SolidLine);
+ QPen fontPen(QColor::fromRgb(51,51,51), 1, Qt::SolidLine);
+ QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine);
+
+ // If selected
+ if(option.state & QStyle::State_Selected){
+ QLinearGradient gradientSelected(r.left(),r.top(),r.left(),r.height()+r.top());
+ gradientSelected.setColorAt(0.0, QColor::fromRgb(119,213,247));
+ gradientSelected.setColorAt(0.9, QColor::fromRgb(27,134,183));
+ gradientSelected.setColorAt(1.0, QColor::fromRgb(0,120,174));
+ painter->setBrush(gradientSelected);
+ painter->drawRect(r);
+
+ painter->setPen(linePen);
+ painter->drawLine(r.topLeft(),r.topRight());
+ painter->drawLine(r.topRight(),r.bottomRight());
+ painter->drawLine(r.bottomLeft(),r.bottomRight());
+ painter->drawLine(r.topLeft(),r.bottomLeft());
+
+ painter->setPen(fontMarkedPen);
+
+ } else {
+ // Alternating background
+ painter->setBrush((index.row() % 2) ? Qt::white : QColor(252,252,252));
+ painter->drawRect(r);
+
+ painter->setPen(linePen);
+ painter->drawLine(r.topLeft(),r.topRight());
+ painter->drawLine(r.topRight(),r.bottomRight());
+ painter->drawLine(r.bottomLeft(),r.bottomRight());
+ painter->drawLine(r.topLeft(),r.bottomLeft());
+
+ painter->setPen(fontPen);
+ }
+
+ QIcon breakpointIcon =
+ QIcon(qvariant_cast<QPixmap>(index.data(Qt::DecorationRole)));
+ QIcon deleteIcon =
+ QIcon(qvariant_cast<QPixmap>(index.data(Qt::UserRole + 2)));
+ int indent = index.data(Qt::UserRole + 3).toInt();
+
+ QString drawCommandText = index.data(Qt::DisplayRole).toString();
+ QString drawCommandNumber;
+ if (kIndex_IndexStyle == fIndexStyle) {
+ drawCommandNumber = index.data(Qt::UserRole + 1).toString();
+ } else {
+ drawCommandNumber = index.data(Qt::UserRole + 5).toString();
+ }
+ float time = index.data(Qt::UserRole + 4).toFloat();
+ QString drawTime;
+ drawTime.setNum(time, 'f', 2);
+ drawTime += "%";
+
+ /* option.rect is a struct that Qt uses as a target to draw into. Following
+ * the format (x1,y1,x2,y2) x1 and y1 represent where the painter can start
+ * drawing. x2 and y2 represent where the drawing area has to terminate
+ * counting from the bottom right corner of each list item styled with this
+ * widget. A (x1,y1,0,0) rect would mean that the item being drawn would
+ * be pushed down into that bottom corner. Negative values in the x2,y2
+ * spot act as a margin for the bottom and right sides. Positive values in
+ * x1,y1 act as a margin for the top and left. The target area will not
+ * affect size of text but will scale icons. */
+ static const int kImageSpace = 35;
+ static const int kCommandNumberSpace = 33;
+ static const int kTimeSpace = 30;
+
+ // Breakpoint Icon
+ r = option.rect.adjusted(5, 10, -10, -10);
+ breakpointIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);
+
+ // Delete Icon
+ r = option.rect.adjusted(19, 10, -10, -10);
+ deleteIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);
+
+ // Draw Command
+ if (time >= 0.0) {
+ r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+kTimeSpace+indent, 0, -10, -7);
+ } else {
+ // don't need time offset
+ r = option.rect.adjusted(kImageSpace+kCommandNumberSpace+indent, 0, -10, -7);
+ }
+ painter->drawText(r.left(), r.top(), r.width(), r.height(),
+ Qt::AlignBottom|Qt::AlignLeft, drawCommandText, &r);
+
+ // Draw Command Number
+ r = option.rect.adjusted(kImageSpace, 0, -10, -7);
+ painter->drawText(r.left(), r.top(), r.width(), r.height(),
+ Qt::AlignBottom|Qt::AlignLeft, drawCommandNumber, &r);
+
+ if (time >= 0.0) {
+ // Draw time
+ r = option.rect.adjusted(kImageSpace+kCommandNumberSpace, 0, -10, -7);
+ painter->drawText(r.left(), r.top(), r.width(), r.height(),
+ Qt::AlignBottom|Qt::AlignLeft, drawTime, &r);
+ }
+}
+
+QSize SkListWidget::sizeHint (const QStyleOptionViewItem& option,
+ const QModelIndex& index) const{
+ return QSize(200, 30);
+}