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

Unified Diff: ui/display/fake_display_delegate.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_delegate.h ('k') | ui/display/fake_display_snapshot.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/display/fake_display_delegate.cc
diff --git a/ui/display/fake_display_delegate.cc b/ui/display/fake_display_delegate.cc
index b1fda156787f78b0db57989708a5fe7acc0b54a0..8f02397c2c9efb9885ca16622b83e5b12371edca 100644
--- a/ui/display/fake_display_delegate.cc
+++ b/ui/display/fake_display_delegate.cc
@@ -5,6 +5,7 @@
#include "ui/display/fake_display_delegate.h"
#include <string>
+#include <utility>
#include "base/command_line.h"
#include "base/hash.h"
@@ -34,30 +35,52 @@ FakeDisplayDelegate::FakeDisplayDelegate() {}
FakeDisplayDelegate::~FakeDisplayDelegate() {}
int64_t FakeDisplayDelegate::AddDisplay(const gfx::Size& display_size) {
+ DCHECK(!display_size.IsEmpty());
+
if (next_display_id_ == 0xFF) {
LOG(ERROR) << "Exceeded display id limit";
- return display::Display::kInvalidDisplayID;
+ return Display::kInvalidDisplayID;
}
int64_t id = GenerateDisplayID(kReservedManufacturerID, kProductCodeHash,
++next_display_id_);
+
+ FakeDisplaySnapshot::Builder builder;
+ builder.SetId(id).SetNativeMode(display_size);
+ builder.SetName(base::StringPrintf("Fake Display %d", next_display_id_));
+
// Add the first display as internal.
- ui::DisplayConnectionType type = displays_.empty()
- ? ui::DISPLAY_CONNECTION_TYPE_INTERNAL
- : ui::DISPLAY_CONNECTION_TYPE_UNKNOWN;
- std::string name = base::StringPrintf("Fake Display %d", next_display_id_);
+ if (displays_.empty())
+ builder.SetType(ui::DISPLAY_CONNECTION_TYPE_INTERNAL);
+
+ return AddDisplay(builder.Build()) ? id : Display::kInvalidDisplayID;
+}
+
+bool FakeDisplayDelegate::AddDisplay(
+ std::unique_ptr<ui::DisplaySnapshot> display) {
+ DCHECK(display);
- displays_.push_back(
- base::MakeUnique<FakeDisplaySnapshot>(id, display_size, type, name));
+ int64_t display_id = display->display_id();
+ // Check there is no existing display with the same id.
+ for (auto& existing_display : displays_) {
+ if (existing_display->display_id() == display_id) {
+ LOG(ERROR) << "Display with id " << display_id << " already exists";
+ return false;
+ }
+ }
+
+ DVLOG(1) << "Added display " << display->ToString();
+ displays_.push_back(std::move(display));
OnConfigurationChanged();
- return id;
+ return true;
}
bool FakeDisplayDelegate::RemoveDisplay(int64_t display_id) {
// Find display snapshot with matching id and remove it.
for (auto iter = displays_.begin(); iter != displays_.end(); ++iter) {
if ((*iter)->display_id() == display_id) {
+ DVLOG(1) << "Removed display " << (*iter)->ToString();
displays_.erase(iter);
OnConfigurationChanged();
return true;
@@ -69,10 +92,9 @@ bool FakeDisplayDelegate::RemoveDisplay(int64_t display_id) {
void FakeDisplayDelegate::Initialize() {
DCHECK(!initialized_);
- InitFromCommandLine();
// If no command line flags are provided then initialize a default display.
- if (displays_.empty())
+ if (!InitFromCommandLine())
AddDisplay(gfx::Size(1024, 768));
initialized_ = true;
@@ -162,26 +184,59 @@ FakeDisplayController* FakeDisplayDelegate::GetFakeDisplayController() {
return static_cast<FakeDisplayController*>(this);
}
-void FakeDisplayDelegate::InitFromCommandLine() {
+bool FakeDisplayDelegate::InitFromCommandLine() {
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
if (!command_line->HasSwitch(switches::kScreenConfig))
- return;
+ return false;
const std::string command_string =
command_line->GetSwitchValueASCII(switches::kScreenConfig);
+ // Start without any displays.
+ if (command_string == "none")
+ return true;
+
// Split on commas and parse each display string.
for (std::string part : base::SplitString(
command_string, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
- int width = 0;
- int height = 0;
- if (sscanf(part.c_str(), "%dx%d", &width, &height) >= 2) {
- gfx::Size display_size(width, height);
- AddDisplay(display_size);
+ std::unique_ptr<ui::DisplaySnapshot> snapshot =
+ CreateSnapshotFromSpec(part);
+ if (snapshot) {
+ AddDisplay(std::move(snapshot));
} else {
LOG(ERROR) << "Failed to parse display \"" << part << "\"";
}
}
+
+ return true;
+}
+
+std::unique_ptr<ui::DisplaySnapshot>
+FakeDisplayDelegate::CreateSnapshotFromSpec(const std::string& spec) {
+ int width = 0;
+ int height = 0;
+ int dpi = 0;
+
+ // Width and height are required but DPI is optional.
+ int found = sscanf(spec.c_str(), "%dx%d^%d", &width, &height, &dpi);
+ if (found < 2)
+ return nullptr;
+
+ int64_t id = GenerateDisplayID(kReservedManufacturerID, kProductCodeHash,
+ ++next_display_id_);
+
+ FakeDisplaySnapshot::Builder builder;
+ builder.SetId(id).SetNativeMode(gfx::Size(width, height));
+ builder.SetName(base::StringPrintf("Fake Display %d", next_display_id_));
+
+ if (found >= 3)
+ builder.SetDPI(dpi);
+
+ // TODO(kylechar): Add type to the spec string.
+ if (displays_.empty())
+ builder.SetType(ui::DISPLAY_CONNECTION_TYPE_INTERNAL);
+
+ return builder.Build();
}
void FakeDisplayDelegate::OnConfigurationChanged() {
« no previous file with comments | « ui/display/fake_display_delegate.h ('k') | ui/display/fake_display_snapshot.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698