| Index: ui/display/fake_display_snapshot.cc
|
| diff --git a/ui/display/fake_display_snapshot.cc b/ui/display/fake_display_snapshot.cc
|
| index 4d2fbf5aeaac3e539ce874767c0d3625475dee2b..a431a2a2f652418470ae1c24b3b7fbfb081d232a 100644
|
| --- a/ui/display/fake_display_snapshot.cc
|
| +++ b/ui/display/fake_display_snapshot.cc
|
| @@ -6,50 +6,211 @@
|
|
|
| #include <inttypes.h>
|
|
|
| +#include <sstream>
|
| +#include <utility>
|
| #include <vector>
|
|
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/strings/stringprintf.h"
|
|
|
| namespace display {
|
|
|
| namespace {
|
|
|
| -// For a non high-DPI display (96 dpi) use a pitch of 265µm.
|
| -static const float kDisplayPitchMM = 0.265f;
|
| +static const float kInchInMm = 25.4f;
|
| +
|
| +// Get pixel pitch in millimeters from DPI.
|
| +float PixelPitchMmFromDPI(float dpi) {
|
| + return (1.0f / dpi) * kInchInMm;
|
| +}
|
| +
|
| +std::string ModeListString(
|
| + const std::vector<std::unique_ptr<const ui::DisplayMode>>& modes) {
|
| + std::stringstream stream;
|
| + bool first = true;
|
| + for (auto& mode : modes) {
|
| + if (!first)
|
| + stream << ", ";
|
| + stream << mode->ToString();
|
| + first = false;
|
| + }
|
| + return stream.str();
|
| +}
|
| +
|
| +std::string DisplayConnectionTypeString(ui::DisplayConnectionType type) {
|
| + switch (type) {
|
| + case ui::DISPLAY_CONNECTION_TYPE_NONE:
|
| + return "none";
|
| + case ui::DISPLAY_CONNECTION_TYPE_UNKNOWN:
|
| + return "unknown";
|
| + case ui::DISPLAY_CONNECTION_TYPE_INTERNAL:
|
| + return "internal";
|
| + case ui::DISPLAY_CONNECTION_TYPE_VGA:
|
| + return "vga";
|
| + case ui::DISPLAY_CONNECTION_TYPE_HDMI:
|
| + return "hdmi";
|
| + case ui::DISPLAY_CONNECTION_TYPE_DVI:
|
| + return "dvi";
|
| + case ui::DISPLAY_CONNECTION_TYPE_DISPLAYPORT:
|
| + return "dp";
|
| + case ui::DISPLAY_CONNECTION_TYPE_NETWORK:
|
| + return "network";
|
| + case ui::DISPLAY_CONNECTION_TYPE_VIRTUAL:
|
| + return "virtual";
|
| + }
|
| + NOTREACHED();
|
| + return "";
|
| +}
|
|
|
| } // namespace
|
|
|
| -FakeDisplaySnapshot::FakeDisplaySnapshot(int64_t display_id,
|
| - const gfx::Size& display_size,
|
| - ui::DisplayConnectionType type,
|
| - std::string name)
|
| +using Builder = FakeDisplaySnapshot::Builder;
|
| +
|
| +Builder::Builder() {}
|
| +
|
| +Builder::~Builder() {}
|
| +
|
| +std::unique_ptr<FakeDisplaySnapshot> Builder::Build() {
|
| + if (modes_.empty() || id_ == Display::kInvalidDisplayID) {
|
| + NOTREACHED() << "Display modes or display ID missing";
|
| + return nullptr;
|
| + }
|
| +
|
| + // If there is no native mode set, use the first display mode.
|
| + if (!native_mode_)
|
| + native_mode_ = modes_.back().get();
|
| +
|
| + // Calculate physical size to match set DPI.
|
| + gfx::Size physical_size =
|
| + gfx::ScaleToRoundedSize(native_mode_->size(), PixelPitchMmFromDPI(dpi_));
|
| +
|
| + return base::WrapUnique(new FakeDisplaySnapshot(
|
| + id_, origin_, physical_size, type_, is_aspect_preserving_scaling_,
|
| + has_overscan_, has_color_correction_matrix_, name_, product_id_,
|
| + std::move(modes_), current_mode_, native_mode_));
|
| +}
|
| +
|
| +Builder& Builder::SetId(int64_t id) {
|
| + id_ = id;
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetNativeMode(const gfx::Size& size) {
|
| + native_mode_ = AddOrFindDisplayMode(size);
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetCurrentMode(const gfx::Size& size) {
|
| + current_mode_ = AddOrFindDisplayMode(size);
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::AddMode(const gfx::Size& size) {
|
| + AddOrFindDisplayMode(size);
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetOrigin(const gfx::Point& origin) {
|
| + origin_ = origin;
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetType(ui::DisplayConnectionType type) {
|
| + type_ = type;
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetIsAspectPerservingScaling(bool val) {
|
| + is_aspect_preserving_scaling_ = val;
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetHasOverscan(bool has_overscan) {
|
| + has_overscan_ = has_overscan;
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetHasColorCorrectionMatrix(bool val) {
|
| + has_color_correction_matrix_ = val;
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetName(const std::string& name) {
|
| + name_ = name;
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetProductId(int64_t product_id) {
|
| + product_id_ = product_id;
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetDPI(int dpi) {
|
| + dpi_ = static_cast<float>(dpi);
|
| + return *this;
|
| +}
|
| +
|
| +Builder& Builder::SetLowDPI() {
|
| + return SetDPI(96);
|
| +}
|
| +
|
| +Builder& Builder::SetHighDPI() {
|
| + return SetDPI(326); // Retina-ish.
|
| +}
|
| +
|
| +const ui::DisplayMode* Builder::AddOrFindDisplayMode(const gfx::Size& size) {
|
| + for (auto& mode : modes_) {
|
| + if (mode->size() == size)
|
| + return mode.get();
|
| + }
|
| +
|
| + // Not found, insert a mode with the size and return.
|
| + modes_.push_back(base::MakeUnique<ui::DisplayMode>(size, false, 60.0f));
|
| + return modes_.back().get();
|
| +}
|
| +
|
| +FakeDisplaySnapshot::FakeDisplaySnapshot(
|
| + int64_t display_id,
|
| + const gfx::Point& origin,
|
| + const gfx::Size& physical_size,
|
| + ui::DisplayConnectionType type,
|
| + bool is_aspect_preserving_scaling,
|
| + bool has_overscan,
|
| + bool has_color_correction_matrix,
|
| + std::string display_name,
|
| + int64_t product_id,
|
| + std::vector<std::unique_ptr<const ui::DisplayMode>> modes,
|
| + const ui::DisplayMode* current_mode,
|
| + const ui::DisplayMode* native_mode)
|
| : DisplaySnapshot(display_id,
|
| - gfx::Point(0, 0),
|
| - gfx::Size(display_size.width() * kDisplayPitchMM,
|
| - display_size.height() * kDisplayPitchMM),
|
| + origin,
|
| + physical_size,
|
| type,
|
| - false,
|
| - false,
|
| - false,
|
| - name,
|
| + is_aspect_preserving_scaling,
|
| + has_overscan,
|
| + has_color_correction_matrix,
|
| + display_name,
|
| base::FilePath(),
|
| - std::vector<std::unique_ptr<const ui::DisplayMode>>(),
|
| + std::move(modes),
|
| std::vector<uint8_t>(),
|
| - nullptr,
|
| - nullptr) {
|
| - ui::DisplayMode mode(display_size, false, 60.0f);
|
| - modes_.push_back(mode.Clone());
|
| -
|
| - native_mode_ = modes_.front().get();
|
| + current_mode,
|
| + native_mode) {
|
| + product_id_ = product_id;
|
| }
|
|
|
| FakeDisplaySnapshot::~FakeDisplaySnapshot() {}
|
|
|
| std::string FakeDisplaySnapshot::ToString() const {
|
| return base::StringPrintf(
|
| - "id=%" PRId64 " current_mode=%s physical_size=%s", display_id_,
|
| + "id=%" PRId64
|
| + " current_mode=%s native_mode=%s origin=%s"
|
| + " physical_size=%s, type=%s name=\"%s\" modes=(%s)",
|
| + display_id_,
|
| current_mode_ ? current_mode_->ToString().c_str() : "nullptr",
|
| - physical_size_.ToString().c_str());
|
| + native_mode_ ? native_mode_->ToString().c_str() : "nullptr",
|
| + origin_.ToString().c_str(), physical_size_.ToString().c_str(),
|
| + DisplayConnectionTypeString(type_).c_str(), display_name_.c_str(),
|
| + ModeListString(modes_).c_str());
|
| }
|
|
|
| } // namespace display
|
|
|