// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "remoting/host/desktop_resizer.h"

#include "base/logging.h"

namespace remoting {

class DesktopResizerOzone : public DesktopResizer {
 public:
  DesktopResizerOzone();
  ~DesktopResizerOzone() override;

  // DesktopResizer:
  ScreenResolution GetCurrentResolution() override;
  std::list<ScreenResolution> GetSupportedResolutions(
      const ScreenResolution& preferred) override;
  void SetResolution(const ScreenResolution& resolution) override;
  void RestoreResolution(const ScreenResolution& original) override;

 private:
  DISALLOW_COPY_AND_ASSIGN(DesktopResizerOzone);
};

DesktopResizerOzone::DesktopResizerOzone() {
}

DesktopResizerOzone::~DesktopResizerOzone() {
}

ScreenResolution DesktopResizerOzone::GetCurrentResolution() {
  NOTIMPLEMENTED();
  return ScreenResolution();
}

std::list<ScreenResolution> DesktopResizerOzone::GetSupportedResolutions(
    const ScreenResolution& preferred) {
  NOTIMPLEMENTED();
  return std::list<ScreenResolution>();
}

void DesktopResizerOzone::SetResolution(const ScreenResolution& resolution) {
  NOTIMPLEMENTED();
}

void DesktopResizerOzone::RestoreResolution(const ScreenResolution& original) {
}

scoped_ptr<DesktopResizer> DesktopResizer::Create() {
  return make_scoped_ptr(new DesktopResizerOzone);
}

}  // namespace remoting
