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)