// Copyright 2017 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_BASE_WINDOW_SIZE_CHANGED_EVENT_H_
#define COBALT_BASE_WINDOW_SIZE_CHANGED_EVENT_H_

#include "cobalt/base/event.h"
#include "starboard/event.h"
#include "starboard/window.h"

namespace base {

class WindowSizeChangedEvent : public Event {
 public:
  WindowSizeChangedEvent(SbWindow window, SbWindowSize size)
      : window_(window), size_(size) {}

  SbWindow window() const { return window_; }
  SbWindowSize size() const { return size_; }

  BASE_EVENT_SUBCLASS(WindowSizeChangedEvent);

 private:
  SbWindow window_;
  SbWindowSize size_;
};

}  // namespace base

#endif  // COBALT_BASE_WINDOW_SIZE_CHANGED_EVENT_H_
