// Copyright 2014 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.

#ifndef UI_OZONE_COMMON_GPU_OZONE_GPU_MESSAGE_PARAMS_H_
#define UI_OZONE_COMMON_GPU_OZONE_GPU_MESSAGE_PARAMS_H_

#include <string>
#include <vector>

#include "ui/display/types/display_constants.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/overlay_transform.h"
#include "ui/ozone/ozone_export.h"
#include "ui/ozone/public/overlay_candidates_ozone.h"
#include "ui/ozone/public/surface_factory_ozone.h"

namespace ui {

struct OZONE_EXPORT DisplayMode_Params {
  DisplayMode_Params();
  ~DisplayMode_Params();

  gfx::Size size;
  bool is_interlaced = false;
  float refresh_rate = 0.0f;
};

struct OZONE_EXPORT DisplaySnapshot_Params {
  DisplaySnapshot_Params();
  ~DisplaySnapshot_Params();

  int64_t display_id = 0;
  gfx::Point origin;
  gfx::Size physical_size;
  DisplayConnectionType type = DISPLAY_CONNECTION_TYPE_NONE;
  std::vector<DisplayMode_Params> modes;
  bool has_current_mode = false;
  DisplayMode_Params current_mode;
  bool has_native_mode = false;
  DisplayMode_Params native_mode;
  int64_t product_id = 0;
  std::string string_representation;
};

struct OZONE_EXPORT OverlayCheck_Params {
  OverlayCheck_Params();
  OverlayCheck_Params(
      const OverlayCandidatesOzone::OverlaySurfaceCandidate& candidate);
  ~OverlayCheck_Params();

  gfx::Size buffer_size;
  gfx::OverlayTransform transform = gfx::OVERLAY_TRANSFORM_INVALID;
  SurfaceFactoryOzone::BufferFormat format = SurfaceFactoryOzone::UNKNOWN;
  gfx::Rect display_rect;
  int plane_z_order = 0;
};

}  // namespace ui

#endif  // UI_OZONE_COMMON_GPU_OZONE_GPU_MESSAGE_PARAMS_H_
