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

Side by Side Diff: ui/ozone/platform/caca/caca_window_manager.cc

Issue 387953004: ozone: caca: Convert to PlatformWindow (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase & nits Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
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 #include "ui/ozone/platform/caca/caca_window_manager.h"
6
7 #include "base/debug/trace_event.h"
8 #include "third_party/skia/include/core/SkBitmap.h"
9 #include "third_party/skia/include/core/SkCanvas.h"
10 #include "third_party/skia/include/core/SkSurface.h"
11 #include "ui/gfx/skia_util.h"
12 #include "ui/gfx/vsync_provider.h"
13 #include "ui/ozone/platform/caca/caca_window.h"
14 #include "ui/ozone/platform/caca/scoped_caca_types.h"
15 #include "ui/ozone/public/surface_ozone_canvas.h"
16
17 namespace ui {
18
19 namespace {
20
21 class CacaSurface : public ui::SurfaceOzoneCanvas {
22 public:
23 CacaSurface(CacaWindow* window);
24 virtual ~CacaSurface();
25
26 bool Initialize();
27
28 // ui::SurfaceOzoneCanvas overrides:
29 virtual skia::RefPtr<SkCanvas> GetCanvas() OVERRIDE;
30 virtual void ResizeCanvas(const gfx::Size& viewport_size) OVERRIDE;
31 virtual void PresentCanvas(const gfx::Rect& damage) OVERRIDE;
32 virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() OVERRIDE;
33
34 private:
35 CacaWindow* window_; // Not owned.
36
37 ScopedCacaDither dither_;
38
39 skia::RefPtr<SkSurface> surface_;
40
41 DISALLOW_COPY_AND_ASSIGN(CacaSurface);
42 };
43
44 CacaSurface::CacaSurface(CacaWindow* window) : window_(window) {
45 }
46
47 CacaSurface::~CacaSurface() {
48 }
49
50 bool CacaSurface::Initialize() {
51 ResizeCanvas(window_->bitmap_size());
52 return true;
53 }
54
55 skia::RefPtr<SkCanvas> CacaSurface::GetCanvas() {
56 return skia::SharePtr<SkCanvas>(surface_->getCanvas());
57 }
58
59 void CacaSurface::ResizeCanvas(const gfx::Size& viewport_size) {
60 TRACE_EVENT0("ozone", "CacaSurface::ResizeCanvas");
61
62 VLOG(2) << "creating libcaca surface with from window " << (void*)window_;
63
64 SkImageInfo info = SkImageInfo::Make(window_->bitmap_size().width(),
65 window_->bitmap_size().height(),
66 kN32_SkColorType,
67 kPremul_SkAlphaType);
68
69 surface_ = skia::AdoptRef(SkSurface::NewRaster(info));
70 if (!surface_)
71 LOG(ERROR) << "Failed to create SkSurface";
72
73 dither_.reset(caca_create_dither(info.bytesPerPixel() * 8,
74 info.width(),
75 info.height(),
76 info.minRowBytes(),
77 0x00ff0000,
78 0x0000ff00,
79 0x000000ff,
80 0xff000000));
81 if (!dither_)
82 LOG(ERROR) << "failed to create dither";
83 }
84
85 void CacaSurface::PresentCanvas(const gfx::Rect& damage) {
86 TRACE_EVENT0("ozone", "CacaSurface::PresentCanvas");
87
88 SkImageInfo info;
89 size_t row_bytes;
90 const void* pixels = surface_->peekPixels(&info, &row_bytes);
91
92 caca_canvas_t* canvas = caca_get_canvas(window_->display());
93 caca_dither_bitmap(canvas,
94 0,
95 0,
96 caca_get_canvas_width(canvas),
97 caca_get_canvas_height(canvas),
98 dither_.get(),
99 static_cast<const uint8_t*>(pixels));
100 caca_refresh_display(window_->display());
101 }
102
103 scoped_ptr<gfx::VSyncProvider> CacaSurface::CreateVSyncProvider() {
104 return scoped_ptr<gfx::VSyncProvider>();
105 }
106
107 } // namespace
108
109 CacaWindowManager::CacaWindowManager() {
110 }
111
112 int32_t CacaWindowManager::AddWindow(CacaWindow* window) {
113 return windows_.Add(window);
114 }
115
116 void CacaWindowManager::RemoveWindow(int window_id, CacaWindow* window) {
117 DCHECK_EQ(window, windows_.Lookup(window_id));
118 windows_.Remove(window_id);
119 }
120
121 CacaWindowManager::~CacaWindowManager() {
122 }
123
124 ui::SurfaceFactoryOzone::HardwareState CacaWindowManager::InitializeHardware() {
125 return INITIALIZED;
126 }
127
128 void CacaWindowManager::ShutdownHardware() {
129 }
130
131 gfx::AcceleratedWidget CacaWindowManager::GetAcceleratedWidget() {
132 NOTREACHED();
133 return gfx::kNullAcceleratedWidget;
134 }
135
136 bool CacaWindowManager::LoadEGLGLES2Bindings(
137 AddGLLibraryCallback add_gl_library,
138 SetGLGetProcAddressProcCallback set_gl_get_proc_address) {
139 NOTREACHED();
140 return false;
141 }
142
143 scoped_ptr<ui::SurfaceOzoneCanvas> CacaWindowManager::CreateCanvasForWidget(
144 gfx::AcceleratedWidget widget) {
145 CacaWindow* window = windows_.Lookup(widget);
146 DCHECK(window);
147
148 scoped_ptr<CacaSurface> canvas(new CacaSurface(window));
149 CHECK(canvas->Initialize());
150 return canvas.PassAs<ui::SurfaceOzoneCanvas>();
151 }
152
153 } // namespace ui
OLDNEW
« no previous file with comments | « ui/ozone/platform/caca/caca_window_manager.h ('k') | ui/ozone/platform/caca/ozone_platform_caca.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698