| |
| /* |
| * 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 "SkCanvasWidget.h" |
| |
| SkCanvasWidget::SkCanvasWidget(QWidget* parent, |
| SkDebugger* debugger) : QWidget(parent) |
| , fHorizontalLayout(this) |
| , fRasterWidget(debugger) |
| , fGLWidget(debugger) |
| { |
| |
| fDebugger = debugger; |
| |
| fHorizontalLayout.setSpacing(6); |
| fHorizontalLayout.setContentsMargins(0,0,0,0); |
| fRasterWidget.setSizePolicy(QSizePolicy::Expanding, |
| QSizePolicy::Expanding); |
| fGLWidget.setSizePolicy(QSizePolicy::Expanding, |
| QSizePolicy::Expanding); |
| |
| fHorizontalLayout.addWidget(&fRasterWidget); |
| fHorizontalLayout.addWidget(&fGLWidget); |
| |
| fPreviousPoint.set(0,0); |
| fUserOffset.set(0,0); |
| fUserScaleFactor = 1.0; |
| |
| setWidgetVisibility(kGPU_WidgetType, true); |
| connect(&fRasterWidget, SIGNAL(drawComplete()), |
| this->parentWidget(), SLOT(drawComplete())); |
| } |
| |
| SkCanvasWidget::~SkCanvasWidget() {} |
| |
| void SkCanvasWidget::drawTo(int index) { |
| fDebugger->setIndex(index); |
| fRasterWidget.draw(); |
| fGLWidget.draw(); |
| emit commandChanged(fDebugger->index()); |
| } |
| |
| void SkCanvasWidget::mouseMoveEvent(QMouseEvent* event) { |
| SkIPoint eventPoint = SkIPoint::Make(event->globalX(), event->globalY()); |
| fUserOffset += eventPoint - fPreviousPoint; |
| fPreviousPoint = eventPoint; |
| fDebugger->setUserOffset(fUserOffset); |
| drawTo(fDebugger->index()); |
| } |
| |
| void SkCanvasWidget::mousePressEvent(QMouseEvent* event) { |
| fPreviousPoint.set(event->globalX(), event->globalY()); |
| emit hitChanged(fDebugger->getCommandAtPoint(event->x(), event->y(), |
| fDebugger->index())); |
| } |
| |
| void SkCanvasWidget::mouseDoubleClickEvent(QMouseEvent* event) { |
| resetWidgetTransform(); |
| } |
| |
| void SkCanvasWidget::resetWidgetTransform() { |
| fUserOffset.set(0,0); |
| fUserScaleFactor = 1.0; |
| fDebugger->setUserOffset(fUserOffset); |
| fDebugger->setUserScale(fUserScaleFactor); |
| emit scaleFactorChanged(fUserScaleFactor); |
| drawTo(fDebugger->index()); |
| } |
| |
| void SkCanvasWidget::setWidgetVisibility(WidgetType type, bool isHidden) { |
| if (type == kRaster_8888_WidgetType) { |
| fRasterWidget.setHidden(isHidden); |
| } else if (type == kGPU_WidgetType) { |
| fGLWidget.setHidden(isHidden); |
| } |
| } |
| |
| void SkCanvasWidget::zoom(float zoomIncrement) { |
| fUserScaleFactor += zoomIncrement; |
| |
| /* The range of the fUserScaleFactor crosses over the range -1,0,1 frequently. |
| * Based on the code below, -1 and 1 both scale the image to it's original |
| * size we do the following to never have a registered wheel scroll |
| * not effect the fUserScaleFactor. */ |
| if (fUserScaleFactor == 0) { |
| fUserScaleFactor = 2 * zoomIncrement; |
| } |
| emit scaleFactorChanged(fUserScaleFactor); |
| fDebugger->setUserScale(fUserScaleFactor); |
| drawTo(fDebugger->index()); |
| } |