// Copyright 2016 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 CONTENT_PUBLIC_COMMON_SCREEN_INFO_H_
#define CONTENT_PUBLIC_COMMON_SCREEN_INFO_H_

#include "content/common/content_export.h"
#include "content/public/common/screen_orientation_values.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/icc_profile.h"

namespace content {

// Information about the screen on which a RenderWidget is being displayed. This
// is the content counterpart to WebScreenInfo in blink.
struct CONTENT_EXPORT ScreenInfo {
    ScreenInfo();
    ScreenInfo(const ScreenInfo& other);
    ~ScreenInfo();

    // Device scale factor. Specifies the ratio between physical and logical
    // pixels.
    float device_scale_factor = 1.f;

    // The ICC profile of the output display.
    gfx::ICCProfile icc_profile;

    // The screen depth in bits per pixel
    uint32_t depth = 0;

    // The bits per colour component. This assumes that the colours are balanced
    // equally.
    uint32_t depth_per_component = 0;

    // This can be true for black and white printers
    bool is_monochrome = false;

    // The display monitor rectangle in virtual-screen coordinates. Note that
    // this may be negative.
    gfx::Rect rect;

    // The portion of the monitor's rectangle that can be used by applications.
    gfx::Rect available_rect;

    // The monitor's orientation.
    ScreenOrientationValues orientation_type =
        SCREEN_ORIENTATION_VALUES_DEFAULT;

    // This is the orientation angle of the displayed content in degrees.
    // It is the opposite of the physical rotation.
    uint16_t orientation_angle = 0;

    bool operator==(const ScreenInfo& other) const;
    bool operator!=(const ScreenInfo& other) const;
};

}  // namespace content

#endif  // CONTENT_PUBLIC_COMMON_SCREEN_INFO_H_
