1902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com/*
3902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Copyright 2012 Google Inc.
4902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com *
5902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Use of this source code is governed by a BSD-style license that can be
6902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * found in the LICENSE file.
7902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com */
8902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
10ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com#ifndef SKCANVASWIDGET_H_
11ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com#define SKCANVASWIDGET_H_
12902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
13ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com#include <QWidget>
14ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com#include <QHBoxLayout>
15ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com#include "SkStream.h"
16ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com#include "SkRasterWidget.h"
17ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com#include "SkGLWidget.h"
18607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com#include "SkDebugger.h"
19902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
20902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comclass SkCanvasWidget : public QWidget {
21902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    Q_OBJECT
22902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
23902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
24607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkCanvasWidget(QWidget* parent, SkDebugger* debugger);
25902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
262d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    ~SkCanvasWidget();
27902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
28ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    enum WidgetType {
29ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com        kRaster_8888_WidgetType = 1 << 0,
30e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#if SK_SUPPORT_GPU
31ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com        kGPU_WidgetType         = 1 << 1,
32e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#endif
33ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    };
34902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
35ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    void drawTo(int index);
36ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
37ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    void setWidgetVisibility(WidgetType type, bool isHidden);
38ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
39fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org#if SK_SUPPORT_GPU
40fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org    void setGLSampleCount(int sampleCount);
41fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org#endif
42fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org
43e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    /** Zooms the canvas by scale with the transformation centered at the widget point (px, py). */
44e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void zoom(float scale, int px, int py);
45902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
46686e68019374dca3692cac6d5f8d94515e53d6c8chudy@google.com    void resetWidgetTransform();
47686e68019374dca3692cac6d5f8d94515e53d6c8chudy@google.com
48e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    enum ZoomCommandTypes {
49e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com        kIn_ZoomCommand,
50e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com        kOut_ZoomCommand,
51e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    };
52e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.compublic slots:
53e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    /**
54e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com     *  Zooms in or out (see ZoomCommandTypes) by the standard zoom factor
55e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com     *  with the transformation centered in the middle of the widget.
56e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com     */
57e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void zoom(int zoomCommand);
58e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com
597dcae67cae277549accdd38d0496b72d00151239chudy@google.comsignals:
607dcae67cae277549accdd38d0496b72d00151239chudy@google.com    void scaleFactorChanged(float newScaleFactor);
617dcae67cae277549accdd38d0496b72d00151239chudy@google.com    void commandChanged(int newCommand);
62e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    void hitChanged(int hit);
637dcae67cae277549accdd38d0496b72d00151239chudy@google.com
64902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
65ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    QHBoxLayout fHorizontalLayout;
66ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    SkRasterWidget fRasterWidget;
67e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#if SK_SUPPORT_GPU
68ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    SkGLWidget fGLWidget;
69e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#endif
70607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkDebugger* fDebugger;
712f891793957252b0262276c957c67798c905be80chudy@google.com    SkIPoint fPreviousPoint;
72e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    SkMatrix fUserMatrix;
73ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
74ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    void mouseMoveEvent(QMouseEvent* event);
75ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
76ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    void mousePressEvent(QMouseEvent* event);
77ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
78ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    void mouseDoubleClickEvent(QMouseEvent* event);
79ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
80e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void wheelEvent(QWheelEvent* event);
81e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com
82e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void snapWidgetTransform();
83902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
84902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
85ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
86ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com#endif /* SKCANVASWIDGET_H_ */
87