Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: ui/display/fake_display_snapshot.cc

Issue 2340383002: Add FakeDisplaySnapshot builder and related changes. (Closed)
Patch Set: Fixes for comments. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/display/fake_display_snapshot.h ('k') | ui/display/types/fake_display_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ui/display/fake_display_snapshot.h ('k') | ui/display/types/fake_display_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698