12c8208f3a444098aee562f5a1ef620142807eda2Scroggo/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Skia
32c8208f3a444098aee562f5a1ef620142807eda2Scroggo *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
62c8208f3a444098aee562f5a1ef620142807eda2Scroggo */
72c8208f3a444098aee562f5a1ef620142807eda2Scroggo
8f726a1c9e6efad526eba603be9f24b4b77b993ebtfarina@chromium.org#ifndef SampleApp_DEFINED
9f726a1c9e6efad526eba603be9f24b4b77b993ebtfarina@chromium.org#define SampleApp_DEFINED
10ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
11f726a1c9e6efad526eba603be9f24b4b77b993ebtfarina@chromium.org#include "SkOSMenu.h"
122c8208f3a444098aee562f5a1ef620142807eda2Scroggo#include "SkPath.h"
1384b18c7e3e042bf206e1ace3d1b6ea5bb929fe51robertphillips@google.com#include "SkPicture.h"
14770963f23f4fc313db0fa3bac18b1b8aafb55f17robertphillips@google.com#include "SkPictureRecorder.h"
152c8208f3a444098aee562f5a1ef620142807eda2Scroggo#include "SkScalar.h"
1654dc4878b02765efea39e68b218df1e4bfff4b88reed#include "SkStream.h"
1738c72151576a6e89b31b0bd4c45a0b01c11641ffjvanverth#include "SkSurface.h"
182c8208f3a444098aee562f5a1ef620142807eda2Scroggo#include "SkTDArray.h"
192c8208f3a444098aee562f5a1ef620142807eda2Scroggo#include "SkTouchGesture.h"
202c8208f3a444098aee562f5a1ef620142807eda2Scroggo#include "SkWindow.h"
214d0d81aec2667cf4dc82971ee42c29c1ec1aeb13jvanverth#include "timer/Timer.h"
222c8208f3a444098aee562f5a1ef620142807eda2Scroggo
2354dc4878b02765efea39e68b218df1e4bfff4b88reed#include "SkPipe.h"
2454dc4878b02765efea39e68b218df1e4bfff4b88reed
25008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton#if SK_SUPPORT_GPU
26008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton#include "GrContextOptions.h"
27008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton#endif
28008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton
292c8208f3a444098aee562f5a1ef620142807eda2Scroggoclass GrContext;
3029038ed2ab5cb87fda5a2a4d3267f0a5aa227a3dreed@google.comclass GrRenderTarget;
312c8208f3a444098aee562f5a1ef620142807eda2Scroggo
322c8208f3a444098aee562f5a1ef620142807eda2Scroggoclass SkCanvas;
33f726a1c9e6efad526eba603be9f24b4b77b993ebtfarina@chromium.orgclass SkData;
34ddb5eca198736a320b8318eb5f6dfd6d0b6ad1d3reedclass SkDocument;
35f726a1c9e6efad526eba603be9f24b4b77b993ebtfarina@chromium.orgclass SkEvent;
362c8208f3a444098aee562f5a1ef620142807eda2Scroggoclass SkTypeface;
37f726a1c9e6efad526eba603be9f24b4b77b993ebtfarina@chromium.orgclass SkViewFactory;
382c8208f3a444098aee562f5a1ef620142807eda2Scroggo
392c8208f3a444098aee562f5a1ef620142807eda2Scroggoclass SampleWindow : public SkOSWindow {
4048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    SkTDArray<const SkViewFactory*> fSamples;
412c8208f3a444098aee562f5a1ef620142807eda2Scroggopublic:
42098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    enum DeviceType {
43098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        kRaster_DeviceType,
44cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#if SK_SUPPORT_GPU
4574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com        kGPU_DeviceType,
46b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com#if SK_ANGLE
47b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com        kANGLE_DeviceType,
48cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#endif // SK_ANGLE
49cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#endif // SK_SUPPORT_GPU
50cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com        kDeviceTypeCnt
51098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    };
5282502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com
5382502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com    static bool IsGpuDeviceType(DeviceType devType) {
5482502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com    #if SK_SUPPORT_GPU
5582502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com        switch (devType) {
5682502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com            case kGPU_DeviceType:
5782502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com    #if SK_ANGLE
5882502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com            case kANGLE_DeviceType:
5982502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com    #endif // SK_ANGLE
6082502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com                return true;
6158c0aaaf1bf51d3a9d5eab8e702946155b953284reed@google.com            default:
6258c0aaaf1bf51d3a9d5eab8e702946155b953284reed@google.com                return false;
6382502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com        }
6482502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com    #endif // SK_SUPPORT_GPU
6582502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com        return false;
6682502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com    }
6782502e2e3966a9b0e48665f20154eaacd2a452b3bsalomon@google.com
68098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    /**
69098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com     * SampleApp ports can subclass this manager class if they want to:
70098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com     *      * filter the types of devices supported
711f2f338e23789f3eef168dcbd8171a28820ba6c1robertphillips@google.com     *      * customize plugging of SkBaseDevice objects into an SkCanvas
72098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com     *      * customize publishing the results of draw to the OS window
73098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com     *      * manage GrContext / GrRenderTarget lifetimes
74098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com     */
75098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    class DeviceManager : public SkRefCnt {
76098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    public:
77008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton        struct BackendOptions {
78008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton#if SK_SUPPORT_GPU
79008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton            GrContextOptions   fGrContextOptions;
80008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton            int                fMSAASampleCount;
81008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton            bool               fDeepColor;
82008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton#endif
83008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton        };
849d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary
85008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton        virtual void setUpBackend(SampleWindow* win, const BackendOptions&) = 0;
86098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
87b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com        virtual void tearDownBackend(SampleWindow* win) = 0;
88098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
89098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        // called before drawing. should install correct device
90098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        // type on the canvas. Will skip drawing if returns false.
91ecf3dbe8f2987a08b21be1aff61b7fbfbb69640arobertphillips        virtual sk_sp<SkSurface> makeSurface(DeviceType dType, SampleWindow* win) = 0;
92098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
93098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        // called after drawing, should get the results onto the
94098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        // screen.
95098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        virtual void publishCanvas(DeviceType dType,
96098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com                                   SkCanvas* canvas,
97098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com                                   SampleWindow* win) = 0;
98098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
99098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        // called when window changes size, guaranteed to be called
100098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        // at least once before first draw (after init)
101098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com        virtual void windowSizeChanged(SampleWindow* win) = 0;
102098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
10396fcdcc219d2a0d3579719b84b28bede76efba64halcanary        // return the GrContext backing gpu devices (nullptr if not built with GPU support)
104b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com        virtual GrContext* getGrContext() = 0;
1051195925b05ee9d666ea8a8f68fde5d8ca7e49b04bsalomon@google.com
10696fcdcc219d2a0d3579719b84b28bede76efba64halcanary        // return the GrRenderTarget backing gpu devices (nullptr if not built with GPU support)
107ecf3dbe8f2987a08b21be1aff61b7fbfbb69640arobertphillips        virtual int numColorSamples() const = 0;
1082d1ee7936e3536e45c963db004e3b512bb415fd8brianosman
1092d1ee7936e3536e45c963db004e3b512bb415fd8brianosman        // return the color depth of the output device
1102d1ee7936e3536e45c963db004e3b512bb415fd8brianosman        virtual int getColorBits() = 0;
1112d1ee7936e3536e45c963db004e3b512bb415fd8brianosman
112a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com    private:
113a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com        typedef SkRefCnt INHERITED;
114098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    };
115098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
116098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    SampleWindow(void* hwnd, int argc, char** argv, DeviceManager*);
117d3b65972aad96453ff4510caa3e25a2b847c6d1eBrian Salomon    ~SampleWindow() override;
1182c8208f3a444098aee562f5a1ef620142807eda2Scroggo
119ecf3dbe8f2987a08b21be1aff61b7fbfbb69640arobertphillips    sk_sp<SkSurface> makeSurface() override {
120ecf3dbe8f2987a08b21be1aff61b7fbfbb69640arobertphillips        sk_sp<SkSurface> surface;
1215957f47e8de0ff55b8c0bf84984d4915c7c72825reed@google.com        if (fDevManager) {
122ecf3dbe8f2987a08b21be1aff61b7fbfbb69640arobertphillips            surface = fDevManager->makeSurface(fDeviceType, this);
1235957f47e8de0ff55b8c0bf84984d4915c7c72825reed@google.com        }
124ecf3dbe8f2987a08b21be1aff61b7fbfbb69640arobertphillips        if (!surface) {
125ecf3dbe8f2987a08b21be1aff61b7fbfbb69640arobertphillips            surface = this->INHERITED::makeSurface();
1265957f47e8de0ff55b8c0bf84984d4915c7c72825reed@google.com        }
1270397e9f3415b4646797f1b17e9a38b5deb864ff0reed        return surface;
1285957f47e8de0ff55b8c0bf84984d4915c7c72825reed@google.com    }
1295957f47e8de0ff55b8c0bf84984d4915c7c72825reed@google.com
13036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void draw(SkCanvas*) override;
1312c8208f3a444098aee562f5a1ef620142807eda2Scroggo
132921091f29e2ecfec55f4d1ac5611b4aa4731e7d6yangsu@google.com    void setDeviceType(DeviceType type);
133b109b8c5ec40a7dd85a0a2951a1f98fa63b805aabrianosman    void setDeviceColorType(SkColorType, sk_sp<SkColorSpace>);
1342c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void toggleRendering();
1352c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void toggleSlideshow();
1362c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void toggleFPS();
137db03eaa37111a63835ab7f61cb550971e609a621yangsu@google.com    void showOverview();
1384302ae91b0c97993f7b659474a5fd305921cdc5ereed    void toggleDistanceFieldFonts();
1395a59a422970eb63dd5af6baa797b25fba9dec5bbbungeman    void setPixelGeometry(int pixelGeometryIndex);
140098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
141b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com    GrContext* getGrContext() const { return fDevManager->getGrContext(); }
142098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
1432c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void setZoomCenter(float x, float y);
1442c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void changeZoomLevel(float delta);
145ce56026db55d8585c2f920a6107a25b40fd5160abungeman    void changeOffset(SkVector delta);
1462c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool nextSample();
1472c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool previousSample();
148501775e5ac99f9805d1aba3aa7ca554a83d2dc43yangsu@google.com    bool goToSample(int i);
149501775e5ac99f9805d1aba3aa7ca554a83d2dc43yangsu@google.com    SkString getSampleTitle(int i);
150501775e5ac99f9805d1aba3aa7ca554a83d2dc43yangsu@google.com    int  sampleCount();
151a54e2f61f8d181b95dd1757d405eacf9f6a9d792Scroggo    bool handleTouch(int ownerId, float x, float y,
152a54e2f61f8d181b95dd1757d405eacf9f6a9d792Scroggo            SkView::Click::State state);
1538ac0d542b0226e68b0faa935b3402ffc91409a02Scroggo    void saveToPdf();
15462b65b0913566381db468277de07e5dd2a9237caScroggo    void postInvalDelay();
1552c8208f3a444098aee562f5a1ef620142807eda2Scroggo
156b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com    DeviceType getDeviceType() const { return fDeviceType; }
15735a02a83f5642de3afe88657c3fafd84b7b90735brianosman    int getColorConfigIndex() const { return fColorConfigIndex; }
158b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com
1592c8208f3a444098aee562f5a1ef620142807eda2Scroggoprotected:
16036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(SkCanvas* canvas) override;
16136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onHandleKey(SkKey key) override;
16236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onHandleChar(SkUnichar) override;
16336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onSizeChange() override;
1644d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com
16536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkCanvas* beforeChildren(SkCanvas*) override;
16636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void afterChildren(SkCanvas*) override;
16736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void beforeChild(SkView* child, SkCanvas* canvas) override;
1684d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com
16936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onEvent(const SkEvent& evt) override;
17036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onQuery(SkEvent* evt) override;
1714d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com
1724d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com    virtual bool onDispatchClick(int x, int y, Click::State, void* owner,
17336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                                 unsigned modi) override;
17436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onClick(Click* click) override;
1754d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com    virtual Click* onFindClickHandler(SkScalar x, SkScalar y,
17636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                                      unsigned modi) override;
1772c8208f3a444098aee562f5a1ef620142807eda2Scroggo
1782c8208f3a444098aee562f5a1ef620142807eda2Scroggoprivate:
179098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    class DefaultDeviceManager;
180098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com
1812c8208f3a444098aee562f5a1ef620142807eda2Scroggo    int fCurrIndex;
1822c8208f3a444098aee562f5a1ef620142807eda2Scroggo
18354dc4878b02765efea39e68b218df1e4bfff4b88reed    std::unique_ptr<SkDynamicMemoryWStream> fPipeStream;
18454dc4878b02765efea39e68b218df1e4bfff4b88reed    SkPipeSerializer        fPipeSerializer;
18554dc4878b02765efea39e68b218df1e4bfff4b88reed    SkPipeDeserializer      fPipeDeserializer;
18654dc4878b02765efea39e68b218df1e4bfff4b88reed
18784b18c7e3e042bf206e1ace3d1b6ea5bb929fe51robertphillips@google.com    SkPictureRecorder fRecorder;
188145dbcd165d9d27298eb8888bc240e2d06a95464Ben Wagner    std::unique_ptr<SkCanvas> fFlagsFilterCanvas;
1892c8208f3a444098aee562f5a1ef620142807eda2Scroggo    SkPath fClipPath;
1902c8208f3a444098aee562f5a1ef620142807eda2Scroggo
1912c8208f3a444098aee562f5a1ef620142807eda2Scroggo    SkTouchGesture fGesture;
1922c8208f3a444098aee562f5a1ef620142807eda2Scroggo    SkScalar fZoomLevel;
1932c8208f3a444098aee562f5a1ef620142807eda2Scroggo    SkScalar fZoomScale;
194ce56026db55d8585c2f920a6107a25b40fd5160abungeman    SkVector fOffset;
1952c8208f3a444098aee562f5a1ef620142807eda2Scroggo
196098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    DeviceType fDeviceType;
197098e96df6ab0327f18537c7006ff2b0b4116ee30bsalomon@google.com    DeviceManager* fDevManager;
1982c8208f3a444098aee562f5a1ef620142807eda2Scroggo
1998ac0d542b0226e68b0faa935b3402ffc91409a02Scroggo    bool fSaveToPdf;
200093b4e8f51ab3432cc22ae506a2bd036d5716c98reed    bool fSaveToSKP;
201676ab68b04597c997e3152f31c08090c0d2ccbe4halcanary    sk_sp<SkDocument> fPDFDocument;
2028ac0d542b0226e68b0faa935b3402ffc91409a02Scroggo
2032c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool fUseClip;
20491b4dfbb2fe995db8404fe881a99d4d3d36fee71reed    bool fUsePicture;
2052c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool fAnimating;
2062c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool fRotate;
207e8f091093509d946a7f6722b40033a3dc946dc0fbsalomon@google.com    bool fPerspAnim;
2082c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool fRequestGrabImage;
2092c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool fMeasureFPS;
210babc3de2ce7c2f7b32b1b6b9f36d2ac4a4d8dee1reed    bool fUseDeferredCanvas;
2114d0d81aec2667cf4dc82971ee42c29c1ec1aeb13jvanverth    WallTimer fTimer;
2124d0d81aec2667cf4dc82971ee42c29c1ec1aeb13jvanverth    double fMeasureFPS_Time;
213db03eaa37111a63835ab7f61cb550971e609a621yangsu@google.com    bool fMagnify;
214cc63b32eb8702bfa4d965fa443cf00fc1c1d10b7commit-bot@chromium.org    int fTilingMode;
2154605a3f3ff8fa2072f98e6bcb71bc43d4c6196d6chudy@google.com
2162c8208f3a444098aee562f5a1ef620142807eda2Scroggo    // The following are for the 'fatbits' drawing
2172c8208f3a444098aee562f5a1ef620142807eda2Scroggo    // Latest position of the mouse.
2182c8208f3a444098aee562f5a1ef620142807eda2Scroggo    int fMouseX, fMouseY;
2192c8208f3a444098aee562f5a1ef620142807eda2Scroggo    int fFatBitsScale;
2202c8208f3a444098aee562f5a1ef620142807eda2Scroggo    // Used by the text showing position and color values.
22113b9c95295f4c5732e34574789e721a6bc08f7b4bungeman    sk_sp<SkTypeface> fTypeface;
2222c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool fShowZoomer;
2234605a3f3ff8fa2072f98e6bcb71bc43d4c6196d6chudy@google.com
224db03eaa37111a63835ab7f61cb550971e609a621yangsu@google.com    SkOSMenu::TriState fLCDState;
225db03eaa37111a63835ab7f61cb550971e609a621yangsu@google.com    SkOSMenu::TriState fAAState;
22696aabc850835f6d08a117c0277be93848ddbf785bungeman@google.com    SkOSMenu::TriState fSubpixelState;
22796aabc850835f6d08a117c0277be93848ddbf785bungeman@google.com    int fHintingState;
2285a59a422970eb63dd5af6baa797b25fba9dec5bbbungeman    int fPixelGeometryIndex;
22993a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed    int fFilterQualityIndex;
2302c8208f3a444098aee562f5a1ef620142807eda2Scroggo    unsigned   fFlipAxis;
2312c8208f3a444098aee562f5a1ef620142807eda2Scroggo
232008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton    DeviceManager::BackendOptions fBackendOptions;
233008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton
23435a02a83f5642de3afe88657c3fafd84b7b90735brianosman    int fColorConfigIndex;
2351195925b05ee9d666ea8a8f68fde5d8ca7e49b04bsalomon@google.com
2362c8208f3a444098aee562f5a1ef620142807eda2Scroggo    SkScalar fZoomCenterX, fZoomCenterY;
2372c8208f3a444098aee562f5a1ef620142807eda2Scroggo
238921091f29e2ecfec55f4d1ac5611b4aa4731e7d6yangsu@google.com    //Stores global settings
2397dadc748d96fdf6c1eadc960f1481807d2ac90cfscroggo@google.com    SkOSMenu* fAppMenu; // We pass ownership to SkWindow, when we call addMenu
240921091f29e2ecfec55f4d1ac5611b4aa4731e7d6yangsu@google.com    //Stores slide specific settings
2417dadc748d96fdf6c1eadc960f1481807d2ac90cfscroggo@google.com    SkOSMenu* fSlideMenu; // We pass ownership to SkWindow, when we call addMenu
2427dadc748d96fdf6c1eadc960f1481807d2ac90cfscroggo@google.com
2432c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void loadView(SkView*);
2442c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void updateTitle();
245ddb5eca198736a320b8318eb5f6dfd6d0b6ad1d3reed    bool getRawTitle(SkString*);
2462c8208f3a444098aee562f5a1ef620142807eda2Scroggo
2472c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool zoomIn();
2482c8208f3a444098aee562f5a1ef620142807eda2Scroggo    bool zoomOut();
2492c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void updatePointer(int x, int y);
250db03eaa37111a63835ab7f61cb550971e609a621yangsu@google.com    void magnify(SkCanvas* canvas);
2512c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void showZoomer(SkCanvas* canvas);
252f03bb566e25ace918f8fdda3cb8426626a00894creed@google.com    void updateMatrix();
2532c8208f3a444098aee562f5a1ef620142807eda2Scroggo    void postAnimatingEvent();
2546f6e8c39a7b07f8a916a60ad27f17bd13f3c89admike@reedtribe.org    int findByTitle(const char*);
2557265e725555098637498db2f397623d7991ceb4brobertphillips@google.com    void listTitles();
256bbe43a9ce0513d37cbd5dca583c391b7b1e39b3acommit-bot@chromium.org    SkSize tileSize() const;
257d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed    bool sendAnimatePulse();
2582c8208f3a444098aee562f5a1ef620142807eda2Scroggo
2592c8208f3a444098aee562f5a1ef620142807eda2Scroggo    typedef SkOSWindow INHERITED;
2602c8208f3a444098aee562f5a1ef620142807eda2Scroggo};
2612c8208f3a444098aee562f5a1ef620142807eda2Scroggo
2622c8208f3a444098aee562f5a1ef620142807eda2Scroggo#endif
263