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

Unified Diff: ui/ozone/platform/dri/dri_window_delegate_impl.cc

Issue 981583005: [Ozone-Dri] Merge the DriWindowDelegate with the implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
Index: ui/ozone/platform/dri/dri_window_delegate_impl.cc
diff --git a/ui/ozone/platform/dri/dri_window_delegate_impl.cc b/ui/ozone/platform/dri/dri_window_delegate_impl.cc
deleted file mode 100644
index 9a9c8a33109c8d4b04e585a0f66552366e418444..0000000000000000000000000000000000000000
--- a/ui/ozone/platform/dri/dri_window_delegate_impl.cc
+++ /dev/null
@@ -1,219 +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/ozone/platform/dri/dri_window_delegate_impl.h"
-
-#include "base/trace_event/trace_event.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "third_party/skia/include/core/SkDevice.h"
-#include "third_party/skia/include/core/SkSurface.h"
-#include "ui/ozone/platform/dri/dri_buffer.h"
-#include "ui/ozone/platform/dri/drm_device.h"
-#include "ui/ozone/platform/dri/drm_device_manager.h"
-#include "ui/ozone/platform/dri/screen_manager.h"
-
-namespace ui {
-
-namespace {
-
-#ifndef DRM_CAP_CURSOR_WIDTH
-#define DRM_CAP_CURSOR_WIDTH 0x8
-#endif
-
-#ifndef DRM_CAP_CURSOR_HEIGHT
-#define DRM_CAP_CURSOR_HEIGHT 0x9
-#endif
-
-void UpdateCursorImage(DriBuffer* cursor, const SkBitmap& image) {
- SkRect damage;
- image.getBounds(&damage);
-
- // Clear to transparent in case |image| is smaller than the canvas.
- SkCanvas* canvas = cursor->GetCanvas();
- canvas->clear(SK_ColorTRANSPARENT);
-
- SkRect clip;
- clip.set(0, 0, canvas->getDeviceSize().width(),
- canvas->getDeviceSize().height());
- canvas->clipRect(clip, SkRegion::kReplace_Op);
- canvas->drawBitmapRectToRect(image, &damage, damage);
-}
-
-} // namespace
-
-DriWindowDelegateImpl::DriWindowDelegateImpl(
- gfx::AcceleratedWidget widget,
- DrmDeviceManager* device_manager,
- ScreenManager* screen_manager)
- : widget_(widget),
- device_manager_(device_manager),
- screen_manager_(screen_manager),
- controller_(NULL),
- cursor_frontbuffer_(0),
- cursor_frame_(0),
- cursor_frame_delay_ms_(0) {
-}
-
-DriWindowDelegateImpl::~DriWindowDelegateImpl() {
-}
-
-void DriWindowDelegateImpl::Initialize() {
- TRACE_EVENT1("dri", "DriWindowDelegateImpl::Initialize", "widget", widget_);
-
- device_manager_->UpdateDrmDevice(widget_, nullptr);
- screen_manager_->AddObserver(this);
-}
-
-void DriWindowDelegateImpl::Shutdown() {
- TRACE_EVENT1("dri", "DriWindowDelegateImpl::Shutdown", "widget", widget_);
- screen_manager_->RemoveObserver(this);
- device_manager_->RemoveDrmDevice(widget_);
-}
-
-gfx::AcceleratedWidget DriWindowDelegateImpl::GetAcceleratedWidget() {
- return widget_;
-}
-
-HardwareDisplayController* DriWindowDelegateImpl::GetController() {
- return controller_;
-}
-
-void DriWindowDelegateImpl::OnBoundsChanged(const gfx::Rect& bounds) {
- TRACE_EVENT2("dri", "DriWindowDelegateImpl::OnBoundsChanged", "widget",
- widget_, "bounds", bounds.ToString());
- bounds_ = bounds;
- controller_ = screen_manager_->GetDisplayController(bounds);
- UpdateWidgetToDrmDeviceMapping();
- UpdateCursorBuffers();
-}
-
-void DriWindowDelegateImpl::SetCursor(const std::vector<SkBitmap>& bitmaps,
- const gfx::Point& location,
- int frame_delay_ms) {
- cursor_bitmaps_ = bitmaps;
- cursor_location_ = location;
- cursor_frame_ = 0;
- cursor_frame_delay_ms_ = frame_delay_ms;
- cursor_timer_.Stop();
-
- if (cursor_frame_delay_ms_)
- cursor_timer_.Start(
- FROM_HERE, base::TimeDelta::FromMilliseconds(cursor_frame_delay_ms_),
- this, &DriWindowDelegateImpl::OnCursorAnimationTimeout);
-
- ResetCursor(false);
-}
-
-void DriWindowDelegateImpl::SetCursorWithoutAnimations(
- const std::vector<SkBitmap>& bitmaps,
- const gfx::Point& location) {
- cursor_bitmaps_ = bitmaps;
- cursor_location_ = location;
- cursor_frame_ = 0;
- cursor_frame_delay_ms_ = 0;
- ResetCursor(false);
-}
-
-void DriWindowDelegateImpl::MoveCursor(const gfx::Point& location) {
- cursor_location_ = location;
-
- if (controller_)
- controller_->MoveCursor(location);
-}
-
-void DriWindowDelegateImpl::OnDisplayChanged(
- HardwareDisplayController* controller) {
- DCHECK(controller);
-
- // If we have a new controller we need to re-allocate the buffers.
- bool should_allocate_cursor_buffers = controller_ != controller;
-
- gfx::Rect controller_bounds =
- gfx::Rect(controller->origin(), controller->GetModeSize());
- if (controller_) {
- if (controller_ != controller)
- return;
-
- if (controller->IsDisabled() || bounds_ != controller_bounds)
- controller_ = nullptr;
- } else {
- if (bounds_ == controller_bounds && !controller->IsDisabled())
- controller_ = controller;
- }
-
- UpdateWidgetToDrmDeviceMapping();
- if (should_allocate_cursor_buffers)
- UpdateCursorBuffers();
-}
-
-void DriWindowDelegateImpl::OnDisplayRemoved(
- HardwareDisplayController* controller) {
- if (controller_ == controller)
- controller_ = nullptr;
-}
-
-void DriWindowDelegateImpl::ResetCursor(bool bitmap_only) {
- if (!controller_)
- return;
-
- if (cursor_bitmaps_.size()) {
- // Draw new cursor into backbuffer.
- UpdateCursorImage(cursor_buffers_[cursor_frontbuffer_ ^ 1].get(),
- cursor_bitmaps_[cursor_frame_]);
-
- // Reset location & buffer.
- if (!bitmap_only)
- controller_->MoveCursor(cursor_location_);
- controller_->SetCursor(cursor_buffers_[cursor_frontbuffer_ ^ 1]);
- cursor_frontbuffer_ ^= 1;
- } else {
- // No cursor set.
- controller_->UnsetCursor();
- }
-}
-
-void DriWindowDelegateImpl::OnCursorAnimationTimeout() {
- cursor_frame_++;
- cursor_frame_ %= cursor_bitmaps_.size();
-
- ResetCursor(true);
-}
-
-void DriWindowDelegateImpl::UpdateWidgetToDrmDeviceMapping() {
- scoped_refptr<DrmDevice> drm = nullptr;
- if (controller_)
- drm = controller_->GetAllocationDrmDevice();
-
- device_manager_->UpdateDrmDevice(widget_, drm);
-}
-
-void DriWindowDelegateImpl::UpdateCursorBuffers() {
- if (!controller_) {
- for (size_t i = 0; i < arraysize(cursor_buffers_); ++i) {
- cursor_buffers_[i] = nullptr;
- }
- } else {
- scoped_refptr<DrmDevice> drm = controller_->GetAllocationDrmDevice();
-
- uint64_t cursor_width = 64;
- uint64_t cursor_height = 64;
- drm->GetCapability(DRM_CAP_CURSOR_WIDTH, &cursor_width);
- drm->GetCapability(DRM_CAP_CURSOR_HEIGHT, &cursor_height);
-
- SkImageInfo info = SkImageInfo::MakeN32Premul(cursor_width, cursor_height);
- for (size_t i = 0; i < arraysize(cursor_buffers_); ++i) {
- cursor_buffers_[i] = new DriBuffer(drm);
- // Don't register a framebuffer for cursors since they are special (they
- // aren't modesetting buffers and drivers may fail to register them due to
- // their small sizes).
- if (!cursor_buffers_[i]->Initialize(
- info, false /* should_register_framebuffer */)) {
- LOG(FATAL) << "Failed to initialize cursor buffer";
- return;
- }
- }
- }
-}
-
-} // namespace ui
« no previous file with comments | « ui/ozone/platform/dri/dri_window_delegate_impl.h ('k') | ui/ozone/platform/dri/dri_window_delegate_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698