SkCanvasWidget.h revision fde1e7ccb4524aa2e0c42872e529ee25d09e7f34
1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/* 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * Copyright 2012 Google Inc. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * found in the LICENSE file. 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) */ 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef SKCANVASWIDGET_H_ 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define SKCANVASWIDGET_H_ 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <QWidget> 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <QHBoxLayout> 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "SkStream.h" 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "SkRasterWidget.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "SkGLWidget.h" 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "SkDebugger.h" 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class SkCanvasWidget : public QWidget { 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Q_OBJECT 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)public: 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SkCanvasWidget(QWidget* parent, SkDebugger* debugger); 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ~SkCanvasWidget(); 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) enum WidgetType { 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kRaster_8888_WidgetType = 1 << 0, 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if SK_SUPPORT_GPU 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kGPU_WidgetType = 1 << 1, 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void drawTo(int index); 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void setWidgetVisibility(WidgetType type, bool isHidden); 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if SK_SUPPORT_GPU 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void setGLSampleCount(int sampleCount); 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** Zooms the canvas by scale with the transformation centered at the widget point (px, py). */ 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void zoom(float scale, int px, int py); 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void resetWidgetTransform(); 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) enum ZoomCommandTypes { 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) kIn_ZoomCommand, 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) kOut_ZoomCommand, 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }; 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)public slots: 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Zooms in or out (see ZoomCommandTypes) by the standard zoom factor 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * with the transformation centered in the middle of the widget. 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void zoom(int zoomCommand); 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)signals: 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void scaleFactorChanged(float newScaleFactor); 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void commandChanged(int newCommand); 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void hitChanged(int hit); 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)private: 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) QHBoxLayout fHorizontalLayout; 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SkRasterWidget fRasterWidget; 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if SK_SUPPORT_GPU 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SkGLWidget fGLWidget; 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SkDebugger* fDebugger; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SkIPoint fPreviousPoint; 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SkMatrix fUserMatrix; 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void mouseMoveEvent(QMouseEvent* event); 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void mousePressEvent(QMouseEvent* event); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void mouseDoubleClickEvent(QMouseEvent* event); 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void wheelEvent(QWheelEvent* event); 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void snapWidgetTransform(); 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif /* SKCANVASWIDGET_H_ */ 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)