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

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

Issue 2445323002: Ozone: Remove the caca platform from the tree (Closed)
Patch Set: Created 4 years, 1 month 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
(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 <stddef.h>
8
9 #include "base/macros.h"
10 #include "base/trace_event/trace_event.h"
11 #include "third_party/skia/include/core/SkCanvas.h"
12 #include "third_party/skia/include/core/SkRefCnt.h"
13 #include "third_party/skia/include/core/SkSurface.h"
14 #include "ui/gfx/skia_util.h"
15 #include "ui/gfx/vsync_provider.h"
16 #include "ui/ozone/platform/caca/caca_window.h"
17 #include "ui/ozone/platform/caca/scoped_caca_types.h"
18 #include "ui/ozone/public/surface_ozone_canvas.h"
19
20 namespace ui {
21
22 namespace {
23
24 class CacaSurface : public ui::SurfaceOzoneCanvas {
25 public:
26 explicit CacaSurface(CacaWindow* window);
27 ~CacaSurface() override;
28
29 bool Initialize();
30
31 // ui::SurfaceOzoneCanvas overrides:
32 sk_sp<SkSurface> GetSurface() override;
33 void ResizeCanvas(const gfx::Size& viewport_size) override;
34 void PresentCanvas(const gfx::Rect& damage) override;
35 std::unique_ptr<gfx::VSyncProvider> CreateVSyncProvider() override;
36
37 private:
38 CacaWindow* window_; // Not owned.
39
40 ScopedCacaDither dither_;
41
42 sk_sp<SkSurface> surface_;
43
44 DISALLOW_COPY_AND_ASSIGN(CacaSurface);
45 };
46
47 CacaSurface::CacaSurface(CacaWindow* window) : window_(window) {
48 }
49
50 CacaSurface::~CacaSurface() {
51 }
52
53 bool CacaSurface::Initialize() {
54 ResizeCanvas(window_->bitmap_size());
55 return true;
56 }
57
58 sk_sp<SkSurface> CacaSurface::GetSurface() {
59 return surface_;
60 }
61
62 void CacaSurface::ResizeCanvas(const gfx::Size& viewport_size) {
63 TRACE_EVENT0("ozone", "CacaSurface::ResizeCanvas");
64
65 VLOG(2) << "creating libcaca surface with from window " << (void*)window_;
66
67 SkImageInfo info = SkImageInfo::Make(window_->bitmap_size().width(),
68 window_->bitmap_size().height(),
69 kN32_SkColorType,
70 kPremul_SkAlphaType);
71
72 surface_ = SkSurface::MakeRaster(info);
73 if (!surface_)
74 LOG(ERROR) << "Failed to create SkSurface";
75
76 dither_.reset(caca_create_dither(info.bytesPerPixel() * 8,
77 info.width(),
78 info.height(),
79 info.minRowBytes(),
80 0x00ff0000,
81 0x0000ff00,
82 0x000000ff,
83 0xff000000));
84 if (!dither_)
85 LOG(ERROR) << "failed to create dither";
86 }
87
88 void CacaSurface::PresentCanvas(const gfx::Rect& damage) {
89 TRACE_EVENT0("ozone", "CacaSurface::PresentCanvas");
90
91 SkPixmap pixmap;
92 surface_->peekPixels(&pixmap);
93
94 caca_canvas_t* canvas = caca_get_canvas(window_->display());
95 caca_dither_bitmap(canvas, 0, 0, caca_get_canvas_width(canvas),
96 caca_get_canvas_height(canvas), dither_.get(),
97 static_cast<const uint8_t*>(pixmap.addr()));
98 caca_refresh_display(window_->display());
99 }
100
101 std::unique_ptr<gfx::VSyncProvider> CacaSurface::CreateVSyncProvider() {
102 return nullptr;
103 }
104
105 } // namespace
106
107 CacaWindowManager::CacaWindowManager() {
108 }
109
110 int32_t CacaWindowManager::AddWindow(CacaWindow* window) {
111 return windows_.Add(window);
112 }
113
114 void CacaWindowManager::RemoveWindow(int window_id, CacaWindow* window) {
115 DCHECK_EQ(window, windows_.Lookup(window_id));
116 windows_.Remove(window_id);
117 }
118
119 CacaWindowManager::~CacaWindowManager() {
120 DCHECK(thread_checker_.CalledOnValidThread());
121 }
122
123 std::unique_ptr<ui::SurfaceOzoneCanvas>
124 CacaWindowManager::CreateCanvasForWidget(gfx::AcceleratedWidget widget) {
125 DCHECK(thread_checker_.CalledOnValidThread());
126 CacaWindow* window = windows_.Lookup(widget);
127 DCHECK(window);
128
129 std::unique_ptr<CacaSurface> canvas(new CacaSurface(window));
130 bool initialized = canvas->Initialize();
131 DCHECK(initialized);
132 return std::move(canvas);
133 }
134
135 } // namespace ui
OLDNEW
« no previous file with comments | « ui/ozone/platform/caca/caca_window_manager.h ('k') | ui/ozone/platform/caca/client_native_pixmap_factory_caca.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698