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

Side by Side Diff: ui/ozone/platform/dri/dri_window_delegate_impl.cc

Issue 844343002: [Ozone-DRI] Add display observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update GYP Created 5 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/ozone/platform/dri/dri_window_delegate_impl.h" 5 #include "ui/ozone/platform/dri/dri_window_delegate_impl.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "third_party/skia/include/core/SkBitmap.h" 8 #include "third_party/skia/include/core/SkBitmap.h"
9 #include "third_party/skia/include/core/SkDevice.h" 9 #include "third_party/skia/include/core/SkDevice.h"
10 #include "third_party/skia/include/core/SkSurface.h" 10 #include "third_party/skia/include/core/SkSurface.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 cursor_frame_(0), 54 cursor_frame_(0),
55 cursor_frame_delay_ms_(0) { 55 cursor_frame_delay_ms_(0) {
56 } 56 }
57 57
58 DriWindowDelegateImpl::~DriWindowDelegateImpl() { 58 DriWindowDelegateImpl::~DriWindowDelegateImpl() {
59 } 59 }
60 60
61 void DriWindowDelegateImpl::Initialize() { 61 void DriWindowDelegateImpl::Initialize() {
62 TRACE_EVENT1("dri", "DriWindowDelegateImpl::Initialize", "widget", widget_); 62 TRACE_EVENT1("dri", "DriWindowDelegateImpl::Initialize", "widget", widget_);
63 63
64 screen_manager_->AddObserver(this);
65
64 uint64_t cursor_width = 64; 66 uint64_t cursor_width = 64;
65 uint64_t cursor_height = 64; 67 uint64_t cursor_height = 64;
66 drm_->GetCapability(DRM_CAP_CURSOR_WIDTH, &cursor_width); 68 drm_->GetCapability(DRM_CAP_CURSOR_WIDTH, &cursor_width);
67 drm_->GetCapability(DRM_CAP_CURSOR_HEIGHT, &cursor_height); 69 drm_->GetCapability(DRM_CAP_CURSOR_HEIGHT, &cursor_height);
68 70
69 SkImageInfo info = SkImageInfo::MakeN32Premul(cursor_width, cursor_height); 71 SkImageInfo info = SkImageInfo::MakeN32Premul(cursor_width, cursor_height);
70 for (size_t i = 0; i < arraysize(cursor_buffers_); ++i) { 72 for (size_t i = 0; i < arraysize(cursor_buffers_); ++i) {
71 cursor_buffers_[i] = new DriBuffer(drm_); 73 cursor_buffers_[i] = new DriBuffer(drm_);
72 if (!cursor_buffers_[i]->Initialize(info)) { 74 if (!cursor_buffers_[i]->Initialize(info)) {
73 LOG(ERROR) << "Failed to initialize cursor buffer"; 75 LOG(ERROR) << "Failed to initialize cursor buffer";
74 return; 76 return;
75 } 77 }
76 } 78 }
77 } 79 }
78 80
79 void DriWindowDelegateImpl::Shutdown() { 81 void DriWindowDelegateImpl::Shutdown() {
80 TRACE_EVENT1("dri", "DriWindowDelegateImpl::Shutdown", "widget", widget_); 82 TRACE_EVENT1("dri", "DriWindowDelegateImpl::Shutdown", "widget", widget_);
83 screen_manager_->RemoveObserver(this);
81 } 84 }
82 85
83 gfx::AcceleratedWidget DriWindowDelegateImpl::GetAcceleratedWidget() { 86 gfx::AcceleratedWidget DriWindowDelegateImpl::GetAcceleratedWidget() {
84 return widget_; 87 return widget_;
85 } 88 }
86 89
87 HardwareDisplayController* DriWindowDelegateImpl::GetController() { 90 HardwareDisplayController* DriWindowDelegateImpl::GetController() {
88 return controller_.get(); 91 return controller_;
89 } 92 }
90 93
91 void DriWindowDelegateImpl::OnBoundsChanged(const gfx::Rect& bounds) { 94 void DriWindowDelegateImpl::OnBoundsChanged(const gfx::Rect& bounds) {
92 TRACE_EVENT2("dri", "DriWindowDelegateImpl::OnBoundsChanged", "widget", 95 TRACE_EVENT2("dri", "DriWindowDelegateImpl::OnBoundsChanged", "widget",
93 widget_, "bounds", bounds.ToString()); 96 widget_, "bounds", bounds.ToString());
97 bounds_ = bounds;
94 controller_ = screen_manager_->GetDisplayController(bounds); 98 controller_ = screen_manager_->GetDisplayController(bounds);
95 } 99 }
96 100
97 void DriWindowDelegateImpl::SetCursor(const std::vector<SkBitmap>& bitmaps, 101 void DriWindowDelegateImpl::SetCursor(const std::vector<SkBitmap>& bitmaps,
98 const gfx::Point& location, 102 const gfx::Point& location,
99 int frame_delay_ms) { 103 int frame_delay_ms) {
100 cursor_bitmaps_ = bitmaps; 104 cursor_bitmaps_ = bitmaps;
101 cursor_location_ = location; 105 cursor_location_ = location;
102 cursor_frame_ = 0; 106 cursor_frame_ = 0;
103 cursor_frame_delay_ms_ = frame_delay_ms; 107 cursor_frame_delay_ms_ = frame_delay_ms;
(...skipping 17 matching lines...) Expand all
121 ResetCursor(false); 125 ResetCursor(false);
122 } 126 }
123 127
124 void DriWindowDelegateImpl::MoveCursor(const gfx::Point& location) { 128 void DriWindowDelegateImpl::MoveCursor(const gfx::Point& location) {
125 cursor_location_ = location; 129 cursor_location_ = location;
126 130
127 if (controller_) 131 if (controller_)
128 controller_->MoveCursor(location); 132 controller_->MoveCursor(location);
129 } 133 }
130 134
135 void DriWindowDelegateImpl::OnDisplayChanged(
136 HardwareDisplayController* controller) {
137 DCHECK(controller);
138
139 gfx::Rect controller_bounds =
140 gfx::Rect(controller->origin(), controller->GetModeSize());
141 if (controller_) {
142 if (controller_ != controller)
143 return;
144
145 if (controller->IsDisabled() || bounds_ != controller_bounds)
146 controller_ = nullptr;
147 } else {
148 if (bounds_ == controller_bounds && !controller->IsDisabled())
149 controller_ = controller;
150 }
151 }
152
153 void DriWindowDelegateImpl::OnDisplayRemoved(
154 HardwareDisplayController* controller) {
155 if (controller_ == controller)
156 controller_ = nullptr;
157 }
158
131 void DriWindowDelegateImpl::ResetCursor(bool bitmap_only) { 159 void DriWindowDelegateImpl::ResetCursor(bool bitmap_only) {
132 if (cursor_bitmaps_.size()) { 160 if (cursor_bitmaps_.size()) {
133 // Draw new cursor into backbuffer. 161 // Draw new cursor into backbuffer.
134 UpdateCursorImage(cursor_buffers_[cursor_frontbuffer_ ^ 1].get(), 162 UpdateCursorImage(cursor_buffers_[cursor_frontbuffer_ ^ 1].get(),
135 cursor_bitmaps_[cursor_frame_]); 163 cursor_bitmaps_[cursor_frame_]);
136 164
137 // Reset location & buffer. 165 // Reset location & buffer.
138 if (controller_) { 166 if (controller_) {
139 if (!bitmap_only) 167 if (!bitmap_only)
140 controller_->MoveCursor(cursor_location_); 168 controller_->MoveCursor(cursor_location_);
141 controller_->SetCursor(cursor_buffers_[cursor_frontbuffer_ ^ 1]); 169 controller_->SetCursor(cursor_buffers_[cursor_frontbuffer_ ^ 1]);
142 cursor_frontbuffer_ ^= 1; 170 cursor_frontbuffer_ ^= 1;
143 } 171 }
144 } else { 172 } else {
145 // No cursor set. 173 // No cursor set.
146 if (controller_) 174 if (controller_)
147 controller_->UnsetCursor(); 175 controller_->UnsetCursor();
148 } 176 }
149 } 177 }
150 178
151 void DriWindowDelegateImpl::OnCursorAnimationTimeout() { 179 void DriWindowDelegateImpl::OnCursorAnimationTimeout() {
152 cursor_frame_++; 180 cursor_frame_++;
153 cursor_frame_ %= cursor_bitmaps_.size(); 181 cursor_frame_ %= cursor_bitmaps_.size();
154 182
155 ResetCursor(true); 183 ResetCursor(true);
156 } 184 }
157 185
158 } // namespace ui 186 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698