SampleApp.h revision 8ac0d542b0226e68b0faa935b3402ffc91409a02
1/*
2 * Copyright (C) 2011 Skia
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef SampleWindow_DEFINED
18#define SampleWindow_DEFINED
19
20#include "SkWindow.h"
21
22#include "SampleCode.h"
23#include "SkPath.h"
24#include "SkScalar.h"
25#include "SkTDArray.h"
26#include "SkTouchGesture.h"
27#include "SkWindow.h"
28
29class GrContext;
30
31class SkEvent;
32class SkCanvas;
33class SkGpuCanvas;
34class SkPicture;
35class SkTypeface;
36
37enum SkTriState {
38    kFalse_SkTriState,
39    kTrue_SkTriState,
40    kUnknown_SkTriState,
41};
42
43class SampleWindow : public SkOSWindow {
44    SkTDArray<SkViewFactory> fSamples;
45public:
46    SampleWindow(void* hwnd);
47    virtual ~SampleWindow();
48
49    virtual void draw(SkCanvas* canvas);
50
51    void toggleRendering();
52    void toggleSlideshow();
53    void toggleFPS();
54    bool drawsToHardware() { return fCanvasType == kGPU_CanvasType; }
55    bool setGrContext(GrContext*);
56    GrContext* getGrContext();
57    void setZoomCenter(float x, float y);
58    void changeZoomLevel(float delta);
59    bool nextSample();
60    bool previousSample();
61    bool handleTouch(int ownerId, float x, float y,
62            SkView::Click::State state);
63    void saveToPdf();
64
65protected:
66    virtual void onDraw(SkCanvas* canvas);
67    virtual bool onHandleKey(SkKey key);
68    virtual bool onHandleChar(SkUnichar);
69    virtual void onSizeChange();
70
71    virtual SkCanvas* beforeChildren(SkCanvas*);
72    virtual void afterChildren(SkCanvas*);
73    virtual void beforeChild(SkView* child, SkCanvas* canvas);
74    virtual void afterChild(SkView* child, SkCanvas* canvas);
75
76    virtual bool onEvent(const SkEvent& evt);
77    virtual bool onQuery(SkEvent* evt);
78
79    virtual bool onDispatchClick(int x, int y, Click::State);
80    virtual bool onClick(Click* click);
81    virtual Click* onFindClickHandler(SkScalar x, SkScalar y);
82
83private:
84    int fCurrIndex;
85
86    SkPicture* fPicture;
87    SkGpuCanvas* fGpuCanvas;
88    GrContext* fGrContext;
89    SkPath fClipPath;
90
91    SkTouchGesture fGesture;
92    SkScalar fZoomLevel;
93    SkScalar fZoomScale;
94
95    enum CanvasType {
96        kRaster_CanvasType,
97        kPicture_CanvasType,
98        kGPU_CanvasType
99    };
100    CanvasType fCanvasType;
101
102    bool fSaveToPdf;
103    SkCanvas* fPdfCanvas;
104
105    bool fUseClip;
106    bool fNClip;
107    bool fRepeatDrawing;
108    bool fAnimating;
109    bool fRotate;
110    bool fScale;
111    bool fRequestGrabImage;
112    bool fUsePipe;
113    bool fMeasureFPS;
114    SkMSec fMeasureFPS_Time;
115
116    // The following are for the 'fatbits' drawing
117    // Latest position of the mouse.
118    int fMouseX, fMouseY;
119    int fFatBitsScale;
120    // Used by the text showing position and color values.
121    SkTypeface* fTypeface;
122    bool fShowZoomer;
123
124    SkTriState fLCDState;
125    SkTriState fAAState;
126    SkTriState fFilterState;
127    SkTriState fHintingState;
128    unsigned   fFlipAxis;
129
130    int fScrollTestX, fScrollTestY;
131    SkScalar fZoomCenterX, fZoomCenterY;
132
133    bool make3DReady();
134
135    void loadView(SkView*);
136    void updateTitle();
137
138    void toggleZoomer();
139    bool zoomIn();
140    bool zoomOut();
141    void updatePointer(int x, int y);
142    void showZoomer(SkCanvas* canvas);
143
144    void postAnimatingEvent();
145
146    static CanvasType cycle_canvastype(CanvasType);
147
148    typedef SkOSWindow INHERITED;
149};
150
151#endif
152