Upstream version 8.37.180.0
[platform/framework/web/crosswalk.git] / src / ui / ozone / platform / dri / dri_surface_factory.h
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
3 // found in the LICENSE file.
4
5 #ifndef UI_OZONE_PLATFORM_DRI_DRI_SURFACE_FACTORY_H_
6 #define UI_OZONE_PLATFORM_DRI_DRI_SURFACE_FACTORY_H_
7
8 #include <map>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "third_party/skia/include/core/SkBitmap.h"
12 #include "ui/ozone/ozone_export.h"
13 #include "ui/ozone/public/surface_factory_ozone.h"
14
15 typedef struct _drmModeModeInfo drmModeModeInfo;
16
17 namespace gfx {
18 class SurfaceOzoneCanvas;
19 }
20
21 namespace ui {
22
23 class DriSurface;
24 class DriWrapper;
25 class HardwareDisplayController;
26 class ScreenManager;
27
28 // SurfaceFactoryOzone implementation on top of DRM/KMS using dumb buffers.
29 // This implementation is used in conjunction with the software rendering
30 // path.
31 class OZONE_EXPORT DriSurfaceFactory : public ui::SurfaceFactoryOzone {
32  public:
33   static const gfx::AcceleratedWidget kDefaultWidgetHandle;
34
35   DriSurfaceFactory(DriWrapper* drm, ScreenManager* screen_manager);
36   virtual ~DriSurfaceFactory();
37
38   // SurfaceFactoryOzone overrides:
39   virtual HardwareState InitializeHardware() OVERRIDE;
40   virtual void ShutdownHardware() OVERRIDE;
41
42   virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
43
44   virtual scoped_ptr<ui::SurfaceOzoneCanvas> CreateCanvasForWidget(
45       gfx::AcceleratedWidget w) OVERRIDE;
46
47   virtual bool LoadEGLGLES2Bindings(
48       AddGLLibraryCallback add_gl_library,
49       SetGLGetProcAddressProcCallback set_gl_get_proc_address) OVERRIDE;
50
51   gfx::Size GetWidgetSize(gfx::AcceleratedWidget w);
52
53   void SetHardwareCursor(gfx::AcceleratedWidget window,
54                          const SkBitmap& image,
55                          const gfx::Point& location);
56
57   void MoveHardwareCursor(gfx::AcceleratedWidget window,
58                           const gfx::Point& location);
59
60   void UnsetHardwareCursor(gfx::AcceleratedWidget window);
61
62  protected:
63   // Draw the last set cursor & update the cursor plane.
64   void ResetCursor(gfx::AcceleratedWidget w);
65
66   virtual DriSurface* CreateSurface(const gfx::Size& size);
67
68   DriWrapper* drm_;  // Not owned.
69   ScreenManager* screen_manager_;  // Not owned.
70   HardwareState state_;
71
72   // Active outputs.
73   int allocated_widgets_;
74
75   scoped_ptr<DriSurface> cursor_surface_;
76
77   SkBitmap cursor_bitmap_;
78   gfx::Point cursor_location_;
79
80   DISALLOW_COPY_AND_ASSIGN(DriSurfaceFactory);
81 };
82
83 }  // namespace ui
84
85 #endif  // UI_OZONE_PLATFORM_DRI_DRI_SURFACE_FACTORY_H_