| // Copyright 2013 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. |
| |
| #include "base/command_line.h" |
| #include "base/logging.h" |
| #include "ui/ozone/ozone_platform.h" |
| #include "ui/ozone/ozone_platform_list.h" |
| #include "ui/ozone/ozone_switches.h" |
| |
| namespace ui { |
| |
| namespace { |
| |
| // Helper to construct an OzonePlatform by name using the platform list. |
| OzonePlatform* CreatePlatform(const std::string& platform_name) { |
| // The first platform is the defualt. |
| if (platform_name == "default" && kOzonePlatformCount > 0) |
| return kOzonePlatforms[0].constructor(); |
| |
| // Otherwise, search for a matching platform in the list. |
| for (int i = 0; i < kOzonePlatformCount; ++i) |
| if (platform_name == kOzonePlatforms[i].name) |
| return kOzonePlatforms[i].constructor(); |
| |
| LOG(FATAL) << "Invalid ozone platform: " << platform_name; |
| return NULL; // not reached |
| } |
| |
| // Returns the name of the platform to use (value of --ozone-platform flag). |
| std::string GetRequestedPlatform() { |
| if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kOzonePlatform)) |
| return "default"; |
| return CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
| switches::kOzonePlatform); |
| } |
| |
| } // namespace |
| |
| OzonePlatform::OzonePlatform() {} |
| |
| OzonePlatform::~OzonePlatform() { |
| gfx::SurfaceFactoryOzone::SetInstance(NULL); |
| ui::EventFactoryOzone::SetInstance(NULL); |
| } |
| |
| // static |
| void OzonePlatform::Initialize() { |
| if (instance_) |
| return; |
| |
| instance_ = CreatePlatform(GetRequestedPlatform()); |
| |
| // Inject ozone interfaces. |
| gfx::SurfaceFactoryOzone::SetInstance(instance_->GetSurfaceFactoryOzone()); |
| ui::EventFactoryOzone::SetInstance(instance_->GetEventFactoryOzone()); |
| } |
| |
| // static |
| OzonePlatform* OzonePlatform::instance_; |
| |
| } // namespace ui |