X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fplugins%2Fqmltooling%2Fqmldbg_qtquick2%2Fhighlight.cpp;h=a8fcace87745fa6e9600c0bc3b64cc77031ca9c1;hb=feb996e3ab44e68082c97102556ea396f5df3f44;hp=bb4048ee929c06f917c0cf70b5c27ccc2b8296f8;hpb=0284817d6cd7e17afa8da26ee6e9199100754446;p=profile%2Fivi%2Fqtdeclarative.git diff --git a/src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp b/src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp index bb4048e..a8fcace 100644 --- a/src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp +++ b/src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp @@ -41,21 +41,36 @@ #include "highlight.h" +#include #include +#include +#include namespace QmlJSDebugger { namespace QtQuick2 { +Highlight::Highlight(QQuickItem *parent) : QQuickPaintedItem(parent) +{ + initRenderDetails(); +} + Highlight::Highlight(QQuickItem *item, QQuickItem *parent) : QQuickPaintedItem(parent) { + initRenderDetails(); setItem(item); } +void Highlight::initRenderDetails() +{ + setRenderTarget(QQuickPaintedItem::FramebufferObject); + setPerformanceHint(QQuickPaintedItem::FastFBOResizing, true); +} + void Highlight::setItem(QQuickItem *item) { if (m_item) - m_item.data()->disconnect(this); + m_item->disconnect(this); if (item) { connect(item, SIGNAL(xChanged()), SLOT(adjust())); @@ -66,34 +81,124 @@ void Highlight::setItem(QQuickItem *item) connect(item, SIGNAL(transformOriginChanged(TransformOrigin)), SLOT(adjust())); } - + QQuickWindow *view = item->window(); + QQuickItem * rootItem = view->rootItem(); + if (rootItem) { + connect(rootItem, SIGNAL(xChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(yChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(widthChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(heightChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(rotationChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(transformOriginChanged(TransformOrigin)), + SLOT(adjust())); + } m_item = item; + setContentsSize(view->size()); adjust(); } void Highlight::adjust() { - const QQuickItem *item = m_item.data(); - setSize(QSizeF(item->width(), item->height())); - setPos(parentItem()->mapFromItem(item->parentItem(), item->pos())); - setRotation(item->rotation()); - setTransformOrigin(item->transformOrigin()); + if (!m_item) + return; + + bool success = false; + m_transform = m_item->itemTransform(0, &success); + if (!success) + m_transform = QTransform(); + + setSize(QSizeF(m_item->width(), m_item->height())); + qreal scaleFactor = 1; + QPointF originOffset = QPointF(0,0); + QQuickWindow *view = m_item->window(); + if (view->rootItem()) { + scaleFactor = view->rootItem()->scale(); + originOffset -= view->rootItem()->pos(); + } + // The scale transform for the overlay needs to be cancelled + // as the Item's transform which will be applied to the painter + // takes care of it. + parentItem()->setScale(1/scaleFactor); + setPos(originOffset); + update(); } -void SelectionHighlight::paint(QPainter *painter) +void HoverHighlight::paint(QPainter *painter) { + if (!item()) + return; + + painter->save(); + painter->setTransform(transform()); painter->setPen(QColor(108, 141, 221)); - painter->drawRect(QRect(0, 0, width() - 1, height() - 1)); + painter->drawRect(QRect(0, 0, item()->width() - 1, item()->height() - 1)); + painter->restore(); } -void HoverHighlight::paint(QPainter *painter) +SelectionHighlight::SelectionHighlight(const QString &name, QQuickItem *item, QQuickItem *parent) + : Highlight(item, parent), + m_name(name), + m_nameDisplayActive(false) +{ +} + +void SelectionHighlight::paint(QPainter *painter) +{ + if (!item()) + return; + painter->save(); + painter->fillRect(QRectF(0,0,contentsSize().width(), contentsSize().height()), + QColor(0,0,0,127)); + painter->setTransform(transform()); + // Setting the composition mode such that the transparency will + // be erased as per the selected item. + painter->setCompositionMode(QPainter::CompositionMode_Clear); + painter->fillRect(0, 0, item()->width(), item()->height(), Qt::black); + painter->restore(); + + // Use the painter with the original transform and not with the + // item's transform for display of name. + if (!m_nameDisplayActive) + return; + + // Paint the text in gray background if display name is active.. + QRect textRect = painter->boundingRect(QRect(10, contentsSize().height() - 10 , + contentsSize().width() - 20, contentsSize().height()), + Qt::AlignCenter | Qt::ElideRight, m_name); + + qreal xPosition = m_displayPoint.x(); + if (xPosition + textRect.width() > contentsSize().width()) + xPosition = contentsSize().width() - textRect.width(); + if (xPosition < 0) { + xPosition = 0; + textRect.setWidth(contentsSize().width()); + } + qreal yPosition = m_displayPoint.y() - textRect.height() - 20; + if (yPosition < 50 ) + yPosition = 50; + + painter->fillRect(QRectF(xPosition - 5, yPosition - 5, + textRect.width() + 10, textRect.height() + 10), Qt::gray); + painter->drawRect(QRectF(xPosition - 5, yPosition - 5, + textRect.width() + 10, textRect.height() + 10)); + + painter->drawStaticText(xPosition, yPosition, QStaticText(m_name)); +} + +void SelectionHighlight::showName(const QPointF &displayPoint) +{ + m_displayPoint = displayPoint; + m_nameDisplayActive = true; + QTimer::singleShot(1500, this, SLOT(disableNameDisplay())); + update(); +} + +void SelectionHighlight::disableNameDisplay() { - painter->setPen(QPen(QColor(0, 22, 159))); - painter->drawRect(QRect(1, 1, width() - 3, height() - 3)); - painter->setPen(QColor(158, 199, 255)); - painter->drawRect(QRect(0, 0, width() - 1, height() - 1)); + m_nameDisplayActive = false; + update(); } } // namespace QtQuick2