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

#ifndef Window_android_DEFINED
#define Window_android_DEFINED

#include "../Window.h"
#include "surface_glue_android.h"

namespace sk_app {

class Window_android : public Window {
public:
    Window_android() : Window() {}
    ~Window_android() override {}

    bool init(SkiaAndroidApp* skiaAndroidApp);
    void initDisplay(ANativeWindow* window);
    void onDisplayDestroyed();

    const DisplayParams& getDisplayParams() override;
    void setTitle(const char*) override;
    void show() override {}

    bool attach(BackendType attachType, const DisplayParams& params) override;
    void onInval() override;
    void setUIState(const Json::Value& state) override;

    void paintIfNeeded();

    bool scaleContentToFit() const override { return true; }
    bool supportsContentRect() const override { return true; }
    SkRect getContentRect() override { return fContentRect; }
    void setContentRect(int l, int t, int r, int b) { fContentRect.set(l,t,r,b); }

private:
    SkiaAndroidApp* fSkiaAndroidApp = nullptr;
    SkRect fContentRect;
    DisplayParams fDisplayParams;
    BackendType fBackendType;
};

}   // namespace sk_app

#endif
