//
// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

#ifndef SAMPLE_UTIL_WIN32_WINDOW_H
#define SAMPLE_UTIL_WIN32_WINDOW_H

#include "OSWindow.h"
#include <string>
#include <windows.h>

class Win32Window : public OSWindow
{
  public:
    Win32Window();
    ~Win32Window();

    bool initialize(const std::string &name, size_t width, size_t height);
    void destroy();

    EGLNativeWindowType getNativeWindow() const;
    EGLNativeDisplayType getNativeDisplay() const;

    void messageLoop();

    virtual void pushEvent(Event event);

    void setMousePosition(int x, int y);
    bool resize(int width, int height);
    bool setVisible(bool isVisible);

  private:
    std::string mParentClassName;
    std::string mChildClassName;

    EGLNativeWindowType mNativeWindow;
    EGLNativeWindowType mParentWindow;
    EGLNativeDisplayType mNativeDisplay;
};

#endif // SAMPLE_UTIL_WINDOW_H
