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

Unified Diff: ui/display/chromeos/x11/native_display_delegate_x11.cc

Issue 2540313002: Split //ui/display and create //ui/display/manager. (Closed)
Patch Set: Cleanup export header. Created 4 years 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
Index: ui/display/chromeos/x11/native_display_delegate_x11.cc
diff --git a/ui/display/chromeos/x11/native_display_delegate_x11.cc b/ui/display/chromeos/x11/native_display_delegate_x11.cc
deleted file mode 100644
index 3cbfe69eb377ca1d5c58dbe91796162f7ccdb8c8..0000000000000000000000000000000000000000
--- a/ui/display/chromeos/x11/native_display_delegate_x11.cc
+++ /dev/null
@@ -1,664 +0,0 @@
-// Copyright 2014 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 "ui/display/chromeos/x11/native_display_delegate_x11.h"
-
-#include <X11/Xatom.h>
-#include <X11/Xlib.h>
-#include <X11/extensions/dpms.h>
-#include <X11/extensions/Xrandr.h>
-#include <X11/extensions/XInput2.h>
-
-#include <utility>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "ui/display/chromeos/x11/display_mode_x11.h"
-#include "ui/display/chromeos/x11/display_snapshot_x11.h"
-#include "ui/display/chromeos/x11/display_util_x11.h"
-#include "ui/display/chromeos/x11/native_display_event_dispatcher_x11.h"
-#include "ui/display/types/native_display_observer.h"
-#include "ui/display/util/x11/edid_parser_x11.h"
-#include "ui/events/platform/platform_event_source.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/gfx/x/x11_error_tracker.h"
-#include "ui/gfx/x/x11_types.h"
-
-namespace ui {
-
-namespace {
-
-// DPI measurements.
-const float kMmInInch = 25.4;
-const float kDpi96 = 96.0;
-const float kPixelsToMmScale = kMmInInch / kDpi96;
-
-const char kContentProtectionAtomName[] = "Content Protection";
-const char kProtectionUndesiredAtomName[] = "Undesired";
-const char kProtectionDesiredAtomName[] = "Desired";
-const char kProtectionEnabledAtomName[] = "Enabled";
-
-RRMode GetOutputNativeMode(const XRROutputInfo* output_info) {
- return output_info->nmode > 0 ? output_info->modes[0] : None;
-}
-
-XRRCrtcGamma* ResampleGammaRamp(XRRCrtcGamma* gamma_ramp, int gamma_ramp_size) {
- if (gamma_ramp->size == gamma_ramp_size)
- return gamma_ramp;
-
-#define RESAMPLE(array, i, r) \
- array[i] + (array[i + 1] - array[i]) * r / gamma_ramp_size
-
- XRRCrtcGamma* resampled = XRRAllocGamma(gamma_ramp_size);
- for (int i = 0; i < gamma_ramp_size; ++i) {
- int base_index = gamma_ramp->size * i / gamma_ramp_size;
- int remaining = gamma_ramp->size * i % gamma_ramp_size;
- if (base_index < gamma_ramp->size - 1) {
- resampled->red[i] = RESAMPLE(gamma_ramp->red, base_index, remaining);
- resampled->green[i] = RESAMPLE(gamma_ramp->green, base_index, remaining);
- resampled->blue[i] = RESAMPLE(gamma_ramp->blue, base_index, remaining);
- } else {
- resampled->red[i] = gamma_ramp->red[gamma_ramp->size - 1];
- resampled->green[i] = gamma_ramp->green[gamma_ramp->size - 1];
- resampled->blue[i] = gamma_ramp->blue[gamma_ramp->size - 1];
- }
- }
-
-#undef RESAMPLE
- XRRFreeGamma(gamma_ramp);
- return resampled;
-}
-
-} // namespace
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeDisplayDelegateX11::HelperDelegateX11
-
-class NativeDisplayDelegateX11::HelperDelegateX11
- : public NativeDisplayDelegateX11::HelperDelegate {
- public:
- HelperDelegateX11(NativeDisplayDelegateX11* delegate) : delegate_(delegate) {}
- ~HelperDelegateX11() override {}
-
- // NativeDisplayDelegateX11::HelperDelegate overrides:
- void UpdateXRandRConfiguration(const base::NativeEvent& event) override {
- XRRUpdateConfiguration(event);
- }
- const std::vector<DisplaySnapshot*>& GetCachedDisplays() const override {
- return delegate_->cached_outputs_.get();
- }
- void NotifyDisplayObservers() override {
- for (NativeDisplayObserver& observer : delegate_->observers_)
- observer.OnConfigurationChanged();
- }
-
- private:
- NativeDisplayDelegateX11* delegate_;
-
- DISALLOW_COPY_AND_ASSIGN(HelperDelegateX11);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeDisplayDelegateX11 implementation:
-
-NativeDisplayDelegateX11::NativeDisplayDelegateX11()
- : display_(gfx::GetXDisplay()),
- window_(DefaultRootWindow(display_)),
- background_color_argb_(0) {}
-
-NativeDisplayDelegateX11::~NativeDisplayDelegateX11() {
- if (ui::PlatformEventSource::GetInstance() &&
- platform_event_dispatcher_.get()) {
- ui::PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(
- platform_event_dispatcher_.get());
- }
-}
-
-void NativeDisplayDelegateX11::Initialize() {
- int error_base_ignored = 0;
- int xrandr_event_base = 0;
- XRRQueryExtension(display_, &xrandr_event_base, &error_base_ignored);
-
- helper_delegate_.reset(new HelperDelegateX11(this));
- platform_event_dispatcher_.reset(new NativeDisplayEventDispatcherX11(
- helper_delegate_.get(), xrandr_event_base));
-
- if (ui::PlatformEventSource::GetInstance()) {
- ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(
- platform_event_dispatcher_.get());
- }
-}
-
-void NativeDisplayDelegateX11::GrabServer() {
- CHECK(!screen_) << "Server already grabbed";
- XGrabServer(display_);
- screen_.reset(XRRGetScreenResources(display_, window_));
- CHECK(screen_);
-}
-
-void NativeDisplayDelegateX11::UngrabServer() {
- CHECK(screen_) << "Server not grabbed";
- screen_.reset();
- XUngrabServer(display_);
- // crbug.com/366125
- XFlush(display_);
-}
-
-void NativeDisplayDelegateX11::TakeDisplayControl(
- const DisplayControlCallback& callback) {
- NOTIMPLEMENTED();
-}
-
-void NativeDisplayDelegateX11::RelinquishDisplayControl(
- const DisplayControlCallback& callback) {
- NOTIMPLEMENTED();
-}
-
-void NativeDisplayDelegateX11::SyncWithServer() { XSync(display_, 0); }
-
-void NativeDisplayDelegateX11::SetBackgroundColor(uint32_t color_argb) {
- background_color_argb_ = color_argb;
-}
-
-void NativeDisplayDelegateX11::ForceDPMSOn() {
- CHECK(DPMSEnable(display_));
- CHECK(DPMSForceLevel(display_, DPMSModeOn));
-}
-
-void NativeDisplayDelegateX11::GetDisplays(
- const GetDisplaysCallback& callback) {
- CHECK(screen_) << "Server not grabbed";
-
- cached_outputs_.clear();
- std::set<RRCrtc> last_used_crtcs;
-
- InitModes();
- for (int i = 0; i < screen_->noutput; ++i) {
- RROutput output_id = screen_->outputs[i];
- XRROutputInfo* output_info =
- XRRGetOutputInfo(display_, screen_.get(), output_id);
- if (output_info->connection == RR_Connected) {
- DisplaySnapshotX11* output =
- InitDisplaySnapshot(output_id, output_info, &last_used_crtcs, i);
- cached_outputs_.push_back(output);
- }
- XRRFreeOutputInfo(output_info);
- }
-
- callback.Run(cached_outputs_.get());
-}
-
-void NativeDisplayDelegateX11::AddMode(const DisplaySnapshot& output,
- const DisplayMode* mode) {
- CHECK(screen_) << "Server not grabbed";
- CHECK(mode) << "Must add valid mode";
-
- const DisplaySnapshotX11& x11_output =
- static_cast<const DisplaySnapshotX11&>(output);
- RRMode mode_id = static_cast<const DisplayModeX11*>(mode)->mode_id();
-
- VLOG(1) << "AddDisplayMode: output=" << x11_output.output()
- << " mode=" << mode_id;
- XRRAddOutputMode(display_, x11_output.output(), mode_id);
-}
-
-void NativeDisplayDelegateX11::Configure(const DisplaySnapshot& output,
- const DisplayMode* mode,
- const gfx::Point& origin,
- const ConfigureCallback& callback) {
- const DisplaySnapshotX11& x11_output =
- static_cast<const DisplaySnapshotX11&>(output);
- RRMode mode_id = None;
- if (mode)
- mode_id = static_cast<const DisplayModeX11*>(mode)->mode_id();
-
- callback.Run(ConfigureCrtc(x11_output.crtc(), mode_id, x11_output.output(),
- origin.x(), origin.y()));
-}
-
-bool NativeDisplayDelegateX11::ConfigureCrtc(RRCrtc crtc,
- RRMode mode,
- RROutput output,
- int x,
- int y) {
- CHECK(screen_) << "Server not grabbed";
- VLOG(1) << "ConfigureCrtc: crtc=" << crtc << " mode=" << mode
- << " output=" << output << " x=" << x << " y=" << y;
- // Xrandr.h is full of lies. XRRSetCrtcConfig() is defined as returning a
- // Status, which is typically 0 for failure and 1 for success. In
- // actuality it returns a RRCONFIGSTATUS, which uses 0 for success.
- if (XRRSetCrtcConfig(display_, screen_.get(), crtc, CurrentTime, x, y, mode,
- RR_Rotate_0, (output && mode) ? &output : NULL,
- (output && mode) ? 1 : 0) != RRSetConfigSuccess) {
- LOG(WARNING) << "Unable to configure CRTC " << crtc << ":"
- << " mode=" << mode << " output=" << output << " x=" << x
- << " y=" << y;
- return false;
- }
-
- return true;
-}
-
-void NativeDisplayDelegateX11::CreateFrameBuffer(const gfx::Size& size) {
- CHECK(screen_) << "Server not grabbed";
- gfx::Size current_screen_size(
- DisplayWidth(display_, DefaultScreen(display_)),
- DisplayHeight(display_, DefaultScreen(display_)));
-
- VLOG(1) << "CreateFrameBuffer: new=" << size.ToString()
- << " current=" << current_screen_size.ToString();
-
- DestroyUnusedCrtcs();
-
- if (size == current_screen_size)
- return;
-
- gfx::Size min_screen_size(current_screen_size);
- min_screen_size.SetToMin(size);
- UpdateCrtcsForNewFramebuffer(min_screen_size);
-
- int mm_width = size.width() * kPixelsToMmScale;
- int mm_height = size.height() * kPixelsToMmScale;
- XRRSetScreenSize(
- display_, window_, size.width(), size.height(), mm_width, mm_height);
- // We don't wait for root window resize, therefore this end up with drawing
- // in the old window size, which we care during the boot.
- DrawBackground();
-
- // Don't redraw the background upon framebuffer change again. This should
- // happen only once after boot.
- background_color_argb_ = 0;
-}
-
-void NativeDisplayDelegateX11::AddObserver(NativeDisplayObserver* observer) {
- observers_.AddObserver(observer);
-}
-
-void NativeDisplayDelegateX11::RemoveObserver(NativeDisplayObserver* observer) {
- observers_.RemoveObserver(observer);
-}
-
-display::FakeDisplayController*
-NativeDisplayDelegateX11::GetFakeDisplayController() {
- return nullptr;
-}
-
-void NativeDisplayDelegateX11::InitModes() {
- CHECK(screen_) << "Server not grabbed";
-
- modes_.clear();
-
- for (int i = 0; i < screen_->nmode; ++i) {
- const XRRModeInfo& info = screen_->modes[i];
- float refresh_rate = 0.0f;
- if (info.hTotal && info.vTotal) {
- refresh_rate =
- static_cast<float>(info.dotClock) /
- (static_cast<float>(info.hTotal) * static_cast<float>(info.vTotal));
- }
-
- modes_.insert(std::make_pair(
- info.id, base::MakeUnique<DisplayModeX11>(
- gfx::Size(info.width, info.height),
- info.modeFlags & RR_Interlace, refresh_rate, info.id)));
- }
-}
-
-DisplaySnapshotX11* NativeDisplayDelegateX11::InitDisplaySnapshot(
- RROutput output,
- XRROutputInfo* info,
- std::set<RRCrtc>* last_used_crtcs,
- int index) {
- int64_t display_id = 0;
- display::EDIDParserX11 edid_parser(output);
- if (!edid_parser.GetDisplayId(static_cast<uint8_t>(index), &display_id))
- display_id = index;
-
- bool has_overscan = false;
- edid_parser.GetOutputOverscanFlag(&has_overscan);
-
- DisplayConnectionType type = GetDisplayConnectionTypeFromName(info->name);
- if (type == DISPLAY_CONNECTION_TYPE_UNKNOWN)
- LOG(ERROR) << "Unknown link type: " << info->name;
-
- RRMode native_mode_id = GetOutputNativeMode(info);
- RRMode current_mode_id = None;
- gfx::Point origin;
- if (info->crtc) {
- XRRCrtcInfo* crtc_info =
- XRRGetCrtcInfo(display_, screen_.get(), info->crtc);
- current_mode_id = crtc_info->mode;
- origin.SetPoint(crtc_info->x, crtc_info->y);
- XRRFreeCrtcInfo(crtc_info);
- }
-
- RRCrtc crtc = None;
- // Assign a CRTC that isn't already in use.
- for (int i = 0; i < info->ncrtc; ++i) {
- if (last_used_crtcs->find(info->crtcs[i]) == last_used_crtcs->end()) {
- crtc = info->crtcs[i];
- last_used_crtcs->insert(crtc);
- break;
- }
- }
-
- const DisplayMode* current_mode = NULL;
- const DisplayMode* native_mode = NULL;
- std::vector<std::unique_ptr<const DisplayMode>> display_modes;
-
- for (int i = 0; i < info->nmode; ++i) {
- const RRMode mode = info->modes[i];
- if (modes_.find(mode) != modes_.end()) {
- display_modes.push_back(modes_.at(mode)->Clone());
-
- if (mode == current_mode_id)
- current_mode = display_modes.back().get();
- if (mode == native_mode_id)
- native_mode = display_modes.back().get();
- } else {
- LOG(WARNING) << "Unable to find XRRModeInfo for mode " << mode;
- }
- }
-
- DisplaySnapshotX11* display_snapshot =
- new DisplaySnapshotX11(display_id,
- origin,
- gfx::Size(info->mm_width, info->mm_height),
- type,
- IsOutputAspectPreservingScaling(output),
- has_overscan,
- edid_parser.GetDisplayName(),
- std::move(display_modes),
- edid_parser.edid(),
- current_mode,
- native_mode,
- output,
- crtc,
- index);
-
- VLOG(1) << "Found display " << cached_outputs_.size() << ":"
- << " output=" << output << " crtc=" << crtc
- << " current_mode=" << current_mode_id;
-
- return display_snapshot;
-}
-
-void NativeDisplayDelegateX11::GetHDCPState(
- const DisplaySnapshot& output,
- const GetHDCPStateCallback& callback) {
- HDCPState state = HDCP_STATE_UNDESIRED;
- bool success = GetHDCPState(output, &state);
- callback.Run(success, state);
-}
-
-bool NativeDisplayDelegateX11::GetHDCPState(const DisplaySnapshot& output,
- HDCPState* state) {
- unsigned char* values = NULL;
- int actual_format = 0;
- unsigned long nitems = 0;
- unsigned long bytes_after = 0;
- Atom actual_type = None;
- int success = 0;
- RROutput output_id = static_cast<const DisplaySnapshotX11&>(output).output();
- // TODO(kcwu): Use X11AtomCache to save round trip time of XInternAtom.
- Atom prop = XInternAtom(display_, kContentProtectionAtomName, False);
-
- // TODO(kcwu): Move this to x11_util (similar method calls in this file and
- // output_util.cc)
- success = XRRGetOutputProperty(display_,
- output_id,
- prop,
- 0,
- 100,
- False,
- False,
- AnyPropertyType,
- &actual_type,
- &actual_format,
- &nitems,
- &bytes_after,
- &values);
- gfx::XScopedPtr<unsigned char> scoped_values(values);
- if (actual_type == None) {
- LOG(ERROR) << "Property '" << kContentProtectionAtomName
- << "' does not exist";
- return false;
- }
-
- if (success == Success && actual_type == XA_ATOM && actual_format == 32 &&
- nitems == 1) {
- Atom value = reinterpret_cast<Atom*>(values)[0];
- if (value == XInternAtom(display_, kProtectionUndesiredAtomName, False)) {
- *state = HDCP_STATE_UNDESIRED;
- } else if (value ==
- XInternAtom(display_, kProtectionDesiredAtomName, False)) {
- *state = HDCP_STATE_DESIRED;
- } else if (value ==
- XInternAtom(display_, kProtectionEnabledAtomName, False)) {
- *state = HDCP_STATE_ENABLED;
- } else {
- LOG(ERROR) << "Unknown " << kContentProtectionAtomName
- << " value: " << value;
- return false;
- }
- } else {
- LOG(ERROR) << "XRRGetOutputProperty failed";
- return false;
- }
-
- VLOG(3) << "HDCP state: success," << *state;
- return true;
-}
-
-void NativeDisplayDelegateX11::SetHDCPState(
- const DisplaySnapshot& output,
- HDCPState state,
- const SetHDCPStateCallback& callback) {
- callback.Run(SetHDCPState(output, state));
-}
-
-bool NativeDisplayDelegateX11::SetHDCPState(const DisplaySnapshot& output,
- HDCPState state) {
- Atom name = XInternAtom(display_, kContentProtectionAtomName, False);
- Atom value = None;
- switch (state) {
- case HDCP_STATE_UNDESIRED:
- value = XInternAtom(display_, kProtectionUndesiredAtomName, False);
- break;
- case HDCP_STATE_DESIRED:
- value = XInternAtom(display_, kProtectionDesiredAtomName, False);
- break;
- default:
- NOTREACHED() << "Invalid HDCP state: " << state;
- return false;
- }
- gfx::X11ErrorTracker err_tracker;
- unsigned char* data = reinterpret_cast<unsigned char*>(&value);
- RROutput output_id = static_cast<const DisplaySnapshotX11&>(output).output();
- XRRChangeOutputProperty(
- display_, output_id, name, XA_ATOM, 32, PropModeReplace, data, 1);
- if (err_tracker.FoundNewError()) {
- LOG(ERROR) << "XRRChangeOutputProperty failed";
- return false;
- } else {
- return true;
- }
-}
-
-void NativeDisplayDelegateX11::DestroyUnusedCrtcs() {
- CHECK(screen_) << "Server not grabbed";
-
- for (int i = 0; i < screen_->ncrtc; ++i) {
- bool in_use = false;
- for (ScopedVector<DisplaySnapshot>::const_iterator it =
- cached_outputs_.begin();
- it != cached_outputs_.end();
- ++it) {
- DisplaySnapshotX11* x11_output = static_cast<DisplaySnapshotX11*>(*it);
- if (screen_->crtcs[i] == x11_output->crtc()) {
- in_use = true;
- break;
- }
- }
-
- if (!in_use)
- ConfigureCrtc(screen_->crtcs[i], None, None, 0, 0);
- }
-}
-
-void NativeDisplayDelegateX11::UpdateCrtcsForNewFramebuffer(
- const gfx::Size& min_screen_size) {
- CHECK(screen_) << "Server not grabbed";
- // Setting the screen size will fail if any CRTC doesn't fit afterwards.
- // At the same time, turning CRTCs off and back on uses up a lot of time.
- // This function tries to be smart to avoid too many off/on cycles:
- // - We set the new modes on CRTCs, if they fit in both the old and new
- // FBs, and park them at (0,0)
- // - We disable the CRTCs we will need but don't fit in the old FB. Those
- // will be reenabled after the resize.
- // We don't worry about the cached state of the outputs here since we are
- // not interested in the state we are setting - we just try to get the CRTCs
- // out of the way so we can rebuild the frame buffer.
- gfx::Rect fb_rect(min_screen_size);
- for (ScopedVector<DisplaySnapshot>::const_iterator it =
- cached_outputs_.begin();
- it != cached_outputs_.end();
- ++it) {
- DisplaySnapshotX11* x11_output = static_cast<DisplaySnapshotX11*>(*it);
- const DisplayMode* mode_info = x11_output->current_mode();
- RROutput output = x11_output->output();
- RRMode mode = None;
-
- if (mode_info) {
- mode = static_cast<const DisplayModeX11*>(mode_info)->mode_id();
-
- if (!fb_rect.Contains(gfx::Rect(mode_info->size()))) {
- // In case our CRTC doesn't fit in common area of our current and about
- // to be resized framebuffer, disable it.
- // It'll get reenabled after we resize the framebuffer.
- mode = None;
- output = None;
- mode_info = NULL;
- }
- }
-
- ConfigureCrtc(x11_output->crtc(), mode, output, 0, 0);
- }
-}
-
-bool NativeDisplayDelegateX11::IsOutputAspectPreservingScaling(RROutput id) {
- Atom scaling_prop = XInternAtom(display_, "scaling mode", False);
- Atom full_aspect_atom = XInternAtom(display_, "Full aspect", False);
- if (scaling_prop == None || full_aspect_atom == None)
- return false;
-
- int nprop = 0;
- gfx::XScopedPtr<Atom[]> props(XRRListOutputProperties(display_, id, &nprop));
- for (int j = 0; j < nprop; j++) {
- Atom prop = props[j];
- if (scaling_prop == prop) {
- unsigned char* values = NULL;
- int actual_format;
- unsigned long nitems;
- unsigned long bytes_after;
- Atom actual_type;
- int success;
-
- success = XRRGetOutputProperty(display_,
- id,
- prop,
- 0,
- 100,
- False,
- False,
- AnyPropertyType,
- &actual_type,
- &actual_format,
- &nitems,
- &bytes_after,
- &values);
- gfx::XScopedPtr<unsigned char> scoped_value(values);
- if (success == Success && actual_type == XA_ATOM && actual_format == 32 &&
- nitems == 1) {
- Atom value = reinterpret_cast<Atom*>(values)[0];
- if (full_aspect_atom == value)
- return true;
- }
- }
- }
- return false;
-}
-
-
-std::vector<ColorCalibrationProfile>
-NativeDisplayDelegateX11::GetAvailableColorCalibrationProfiles(
- const DisplaySnapshot& output) {
- // TODO(mukai|marcheu): Checks the system data and fills the result.
- // Note that the order would be Dynamic -> Standard -> Movie -> Reading.
- return std::vector<ColorCalibrationProfile>();
-}
-
-bool NativeDisplayDelegateX11::SetColorCalibrationProfile(
- const DisplaySnapshot& output,
- ColorCalibrationProfile new_profile) {
- const DisplaySnapshotX11& x11_output =
- static_cast<const DisplaySnapshotX11&>(output);
-
- XRRCrtcGamma* gamma_ramp = CreateGammaRampForProfile(x11_output, new_profile);
-
- if (!gamma_ramp)
- return false;
-
- int gamma_ramp_size = XRRGetCrtcGammaSize(display_, x11_output.crtc());
- XRRSetCrtcGamma(display_,
- x11_output.crtc(),
- ResampleGammaRamp(gamma_ramp, gamma_ramp_size));
- XRRFreeGamma(gamma_ramp);
- return true;
-}
-
-XRRCrtcGamma* NativeDisplayDelegateX11::CreateGammaRampForProfile(
- const DisplaySnapshotX11& x11_output,
- ColorCalibrationProfile new_profile) {
- // TODO(mukai|marcheu): Creates the appropriate gamma ramp data from the
- // profile enum. It would be served by the vendor.
- return NULL;
-}
-
-bool NativeDisplayDelegateX11::SetColorCorrection(
- const ui::DisplaySnapshot& output,
- const std::vector<GammaRampRGBEntry>& degamma_lut,
- const std::vector<GammaRampRGBEntry>& gamma_lut,
- const std::vector<float>& correction_matrix) {
- NOTIMPLEMENTED();
- return false;
-}
-
-void NativeDisplayDelegateX11::DrawBackground() {
- if (!background_color_argb_)
- return;
- // Configuring CRTCs/Framebuffer clears the boot screen image. Paint the
- // same background color after updating framebuffer to minimize the
- // duration of black screen at boot time.
- XColor color;
- Colormap colormap = DefaultColormap(display_, 0);
- // XColor uses 16 bits per color.
- color.red = (background_color_argb_ & 0x00FF0000) >> 8;
- color.green = (background_color_argb_ & 0x0000FF00);
- color.blue = (background_color_argb_ & 0x000000FF) << 8;
- color.flags = DoRed | DoGreen | DoBlue;
- XAllocColor(display_, colormap, &color);
-
- GC gc = XCreateGC(display_, window_, 0, 0);
- XSetForeground(display_, gc, color.pixel);
- XSetFillStyle(display_, gc, FillSolid);
- int width = DisplayWidth(display_, DefaultScreen(display_));
- int height = DisplayHeight(display_, DefaultScreen(display_));
- XFillRectangle(display_, window_, gc, 0, 0, width, height);
- XFreeGC(display_, gc);
- XFreeColors(display_, colormap, &color.pixel, 1, 0);
-}
-
-} // namespace ui
« no previous file with comments | « ui/display/chromeos/x11/native_display_delegate_x11.h ('k') | ui/display/chromeos/x11/native_display_event_dispatcher_x11.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698