/*
 *  Copyright (c) 2016 The WebRTC 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 in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_SCREEN_DRAWER_H_
#define WEBRTC_MODULES_DESKTOP_CAPTURE_SCREEN_DRAWER_H_

#include <stdint.h>

#include <memory>

#include "webrtc/modules/desktop_capture/rgba_color.h"
#include "webrtc/modules/desktop_capture/desktop_geometry.h"

namespace webrtc {

// A set of basic platform dependent functions to draw various shapes on the
// screen.
class ScreenDrawer {
 public:
  // Creates a ScreenDrawer for the current platform, returns nullptr if no
  // ScreenDrawer implementation available.
  static std::unique_ptr<ScreenDrawer> Create();

  ScreenDrawer() {}
  virtual ~ScreenDrawer() {}

  // Returns the region inside which DrawRectangle() function are expected to
  // work, in capturer coordinates (assuming ScreenCapturer::SelectScreen has
  // not been called). This region may exclude regions of the screen reserved by
  // the OS for things like menu bars or app launchers.
  virtual DesktopRect DrawableRegion() = 0;

  // Draws a rectangle to cover |rect| with |color|. Note, rect.bottom() and
  // rect.right() two lines are not included. The part of |rect| which is out of
  // DrawableRegion() will be ignored.
  virtual void DrawRectangle(DesktopRect rect, RgbaColor color) = 0;

  // Clears all content on the screen by filling the area with black.
  virtual void Clear() = 0;

  // Blocks current thread until OS finishes previous DrawRectangle() actions.
  // ScreenCapturer should be able to capture the changes after this function
  // finish.
  virtual void WaitForPendingDraws() = 0;
};

}  // namespace webrtc

#endif  // WEBRTC_MODULES_DESKTOP_CAPTURE_SCREEN_DRAWER_H_
