/*
* Copyright 2017 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/

#ifndef Window_ios_DEFINED
#define Window_ios_DEFINED

#include "src/core/SkChecksum.h"
#include "src/core/SkTDynamicHash.h"
#include "tools/sk_app/Window.h"

#import <UIKit/UIKit.h>

namespace sk_app {

class Window_ios : public Window {
public:
    Window_ios()
            : Window()
            , fWindow(nil) {}
    ~Window_ios() override { this->closeWindow(); }

    bool initWindow();

    void setTitle(const char*) override {}
    void show() override {}

    bool attach(BackendType) override;

    void onInval() override;

    static void PaintWindow();

    UIWindow* uiWindow() { return fWindow; }

    static Window_ios* MainWindow() { return gWindow; }

private:
    void closeWindow();

    UIWindow*    fWindow;

    static Window_ios* gWindow; // there should be only one
};

}   // namespace sk_app

//////////////////////////////////////////////////////////////////////////

@interface MainView : UIView

- (MainView*)initWithWindow:(sk_app::Window_ios*)initWindow;

@end

#endif
