| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/gfx/ozone/dri/dri_surface_factory.h" | 5 #include "ui/gfx/ozone/dri/dri_surface_factory.h" |
| 6 | 6 |
| 7 #include <drm.h> | 7 #include <drm.h> |
| 8 #include <errno.h> | 8 #include <errno.h> |
| 9 #include <xf86drm.h> | 9 #include <xf86drm.h> |
| 10 | 10 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 } | 204 } |
| 205 | 205 |
| 206 // Bind the surface to the controller. This will register the backing buffers | 206 // Bind the surface to the controller. This will register the backing buffers |
| 207 // with the hardware CRTC such that we can show the buffers. The controller | 207 // with the hardware CRTC such that we can show the buffers. The controller |
| 208 // takes ownership of the surface. | 208 // takes ownership of the surface. |
| 209 if (!controller_->BindSurfaceToController(surface.Pass())) { | 209 if (!controller_->BindSurfaceToController(surface.Pass())) { |
| 210 LOG(ERROR) << "Failed to bind surface to controller"; | 210 LOG(ERROR) << "Failed to bind surface to controller"; |
| 211 return gfx::kNullAcceleratedWidget; | 211 return gfx::kNullAcceleratedWidget; |
| 212 } | 212 } |
| 213 | 213 |
| 214 // Initial cursor set. |
| 215 ResetCursor(); |
| 216 |
| 214 return reinterpret_cast<gfx::AcceleratedWidget>(controller_->get_surface()); | 217 return reinterpret_cast<gfx::AcceleratedWidget>(controller_->get_surface()); |
| 215 } | 218 } |
| 216 | 219 |
| 217 bool DriSurfaceFactory::LoadEGLGLES2Bindings( | 220 bool DriSurfaceFactory::LoadEGLGLES2Bindings( |
| 218 AddGLLibraryCallback add_gl_library, | 221 AddGLLibraryCallback add_gl_library, |
| 219 SetGLGetProcAddressProcCallback set_gl_get_proc_address) { | 222 SetGLGetProcAddressProcCallback set_gl_get_proc_address) { |
| 220 return false; | 223 return false; |
| 221 } | 224 } |
| 222 | 225 |
| 223 bool DriSurfaceFactory::AttemptToResizeAcceleratedWidget( | 226 bool DriSurfaceFactory::AttemptToResizeAcceleratedWidget( |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 | 269 |
| 267 scoped_ptr<gfx::VSyncProvider> DriSurfaceFactory::CreateVSyncProvider( | 270 scoped_ptr<gfx::VSyncProvider> DriSurfaceFactory::CreateVSyncProvider( |
| 268 gfx::AcceleratedWidget w) { | 271 gfx::AcceleratedWidget w) { |
| 269 CHECK(state_ == INITIALIZED); | 272 CHECK(state_ == INITIALIZED); |
| 270 return scoped_ptr<VSyncProvider>(new DriVSyncProvider(controller_.get())); | 273 return scoped_ptr<VSyncProvider>(new DriVSyncProvider(controller_.get())); |
| 271 } | 274 } |
| 272 | 275 |
| 273 void DriSurfaceFactory::SetHardwareCursor(gfx::AcceleratedWidget window, | 276 void DriSurfaceFactory::SetHardwareCursor(gfx::AcceleratedWidget window, |
| 274 const SkBitmap& image, | 277 const SkBitmap& image, |
| 275 const gfx::Point& location) { | 278 const gfx::Point& location) { |
| 279 cursor_bitmap_ = image; |
| 280 cursor_location_ = location; |
| 281 |
| 276 if (state_ != INITIALIZED) | 282 if (state_ != INITIALIZED) |
| 277 return; | 283 return; |
| 278 | 284 |
| 279 UpdateCursorImage(cursor_surface_.get(), image); | 285 ResetCursor(); |
| 280 controller_->MoveCursor(location); | |
| 281 controller_->SetCursor(*cursor_surface_.get()); | |
| 282 cursor_surface_->SwapBuffers(); | |
| 283 } | 286 } |
| 284 | 287 |
| 285 void DriSurfaceFactory::MoveHardwareCursor(gfx::AcceleratedWidget window, | 288 void DriSurfaceFactory::MoveHardwareCursor(gfx::AcceleratedWidget window, |
| 286 const gfx::Point& location) { | 289 const gfx::Point& location) { |
| 290 cursor_location_ = location; |
| 291 |
| 287 if (state_ != INITIALIZED) | 292 if (state_ != INITIALIZED) |
| 288 return; | 293 return; |
| 289 | 294 |
| 290 controller_->MoveCursor(location); | 295 controller_->MoveCursor(location); |
| 291 } | 296 } |
| 292 | 297 |
| 293 void DriSurfaceFactory::UnsetHardwareCursor(gfx::AcceleratedWidget window) { | 298 void DriSurfaceFactory::UnsetHardwareCursor(gfx::AcceleratedWidget window) { |
| 299 cursor_bitmap_.reset(); |
| 300 |
| 294 if (state_ != INITIALIZED) | 301 if (state_ != INITIALIZED) |
| 295 return; | 302 return; |
| 296 | 303 |
| 297 controller_->UnsetCursor(); | 304 ResetCursor(); |
| 298 } | 305 } |
| 299 | 306 |
| 300 //////////////////////////////////////////////////////////////////////////////// | 307 //////////////////////////////////////////////////////////////////////////////// |
| 301 // DriSurfaceFactory private | 308 // DriSurfaceFactory private |
| 302 | 309 |
| 303 DriSurface* DriSurfaceFactory::CreateSurface(const gfx::Size& size) { | 310 DriSurface* DriSurfaceFactory::CreateSurface(const gfx::Size& size) { |
| 304 return new DriSurface(drm_.get(), size); | 311 return new DriSurface(drm_.get(), size); |
| 305 } | 312 } |
| 306 | 313 |
| 307 DriWrapper* DriSurfaceFactory::CreateWrapper() { | 314 DriWrapper* DriSurfaceFactory::CreateWrapper() { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 void DriSurfaceFactory::WaitForPageFlipEvent(int fd) { | 367 void DriSurfaceFactory::WaitForPageFlipEvent(int fd) { |
| 361 drmEventContext drm_event; | 368 drmEventContext drm_event; |
| 362 drm_event.version = DRM_EVENT_CONTEXT_VERSION; | 369 drm_event.version = DRM_EVENT_CONTEXT_VERSION; |
| 363 drm_event.page_flip_handler = HandlePageFlipEvent; | 370 drm_event.page_flip_handler = HandlePageFlipEvent; |
| 364 drm_event.vblank_handler = NULL; | 371 drm_event.vblank_handler = NULL; |
| 365 | 372 |
| 366 // Wait for the page-flip to complete. | 373 // Wait for the page-flip to complete. |
| 367 drmHandleEvent(fd, &drm_event); | 374 drmHandleEvent(fd, &drm_event); |
| 368 } | 375 } |
| 369 | 376 |
| 377 void DriSurfaceFactory::ResetCursor() { |
| 378 if (!cursor_bitmap_.empty()) { |
| 379 // Draw new cursor into backbuffer. |
| 380 UpdateCursorImage(cursor_surface_.get(), cursor_bitmap_); |
| 381 |
| 382 // Reset location & buffer. |
| 383 controller_->MoveCursor(cursor_location_); |
| 384 controller_->SetCursor(cursor_surface_.get()); |
| 385 } else { |
| 386 // No cursor set. |
| 387 controller_->UnsetCursor(); |
| 388 } |
| 389 } |
| 390 |
| 391 |
| 370 } // namespace gfx | 392 } // namespace gfx |
| OLD | NEW |