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

#ifndef CONTENT_BROWSER_RENDERER_HOST_DISPLAY_FEATURE_H_
#define CONTENT_BROWSER_RENDERER_HOST_DISPLAY_FEATURE_H_

#include <vector>

#include "build/build_config.h"
#include "content/common/content_export.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/gfx/geometry/rect.h"

namespace content {

// Information about a physical attribute of the screen which that creates a
// Logical separator or divider (e.g. a fold or mask).
// This is a visual example of a vertically oriented display feature that masks
// content underneath
//
//    Orientation: vertical
//
//                 offset
//                   |
//         +---------|===|---------+
//         |         |   |         |
//         |         |   |         |
//         |         |   |         |
//         |         |   |         |
//         |         |   |         |
//         +---------|===|---------+
//                      \
//                      mask_length
//
// Note that the implicit height of the display feature is the entire height of
// the screen on which it exists.
struct CONTENT_EXPORT DisplayFeature {
  enum class Orientation { kVertical, kHorizontal, kMaxValue = kHorizontal };
  enum class ParamErrorEnum {
    kDisplayFeatureWithZeroScreenSize = 1,
    kNegativeDisplayFeatureParams,
    kOutsideScreenWidth,
    kOutsideScreenHeight
  };

  // The orientation of the display feature in relation to the screen.
  Orientation orientation = Orientation::kVertical;

  // The offset from the screen origin in either the x (for vertical
  // orientation) or y (for horizontal orientation) direction.
  int offset = 0;

  // A display feature may mask content such that it is not physically
  // displayed - this length along with the offset describes this area.
  // A display feature that only splits content will have a 0 |mask_length|.
  int mask_length = 0;

  bool operator==(const DisplayFeature& other) const;
  bool operator!=(const DisplayFeature& other) const;

  // Computes logical segments of the |visible_viewport_size|, based on
  // this display feature. These segments are in DIPs relative to the widget
  // origin.
  std::vector<gfx::Rect> ComputeWindowSegments(
      const gfx::Size& visible_viewport_size) const;

  static absl::optional<DisplayFeature> Create(
      Orientation orientation,
      int offset,
      int mask_length,
      int screen_width,
      int screen_height,
      DisplayFeature::ParamErrorEnum* error);
};

}  // namespace content

#endif  // CONTENT_BROWSER_RENDERER_HOST_DISPLAY_FEATURE_H_
