/*
 * Copyright 2006 The Android Open Source Project
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkOSWindow_SDL_DEFINED
#define SkOSWindow_SDL_DEFINED

#include "SDL.h"
#include "SDL_opengl.h"
#include "SkWindow.h"

class SkOSWindow : public SkWindow {
public:
    SkOSWindow(void*);
    virtual ~SkOSWindow();

    enum SkBackEndTypes {
        kNone_BackEndType, // TODO: remove this, it's not a real option.
        kNativeGL_BackEndType,
#if SK_ANGLE
        kANGLE_BackEndType,
#endif // SK_ANGLE
#if SK_COMMAND_BUFFER
        kCommandBufferES2_BackEndType,
#endif // SK_COMMAND_BUFFER
    };

    void detach();
    bool attach(SkBackEndTypes attachType, int msaaSampleCount, AttachmentInfo*);
    void present();
    bool makeFullscreen();
    void setVsync(bool);
    void closeWindow();
    static void RunEventLoop();

protected:
    void onSetTitle(const char title[]) override;

private:
    void createWindow(int msaaSampleCount);
    void destroyWindow();
    void updateWindowTitle();
    static SkOSWindow* GetInstanceForWindowID(Uint32 windowID);
    static bool HasDirtyWindows();
    static void UpdateDirtyWindows();
    static void HandleEvent(const SDL_Event&);

    SDL_Window* fWindow;
    SDL_GLContext fGLContext;
    int fWindowMSAASampleCount;
    typedef SkWindow INHERITED;
};

#endif
