commit 268b338
Michael Forney
·
2014-01-22 02:05:51 +0000 UTC
parent 4a9aa15
wayland_buffer: Reorganize swc_wayland_buffer_get
1 files changed,
+43,
-42
+43,
-42
1@@ -71,57 +71,58 @@ static inline uint32_t format_shm_to_wld(uint32_t format)
2
3 struct swc_buffer * swc_wayland_buffer_get(struct wl_resource * resource)
4 {
5- struct wayland_buffer * buffer;
6-
7 if (wl_resource_instance_of(resource, &wl_buffer_interface,
8 &buffer_implementation))
9 {
10- buffer = wl_resource_get_user_data(resource);
11+ return wl_resource_get_user_data(resource);
12+ }
13+
14+ struct wl_listener * listener;
15+ struct wayland_buffer * buffer;
16+
17+ listener = wl_resource_get_destroy_listener(resource,
18+ &handle_buffer_destroy);
19+
20+ if (listener)
21+ {
22+ buffer = CONTAINER_OF(listener, typeof(*buffer), destroy_listener);
23+
24+ return &buffer->base;
25 }
26- else
27+
28+ struct wl_shm_buffer * shm_buffer;
29+ struct wld_buffer * wld = NULL;
30+
31+ if ((shm_buffer = wl_shm_buffer_get(resource)))
32 {
33- struct wl_listener * listener;
34-
35- listener = wl_resource_get_destroy_listener(resource,
36- &handle_buffer_destroy);
37-
38- if (listener)
39- buffer = CONTAINER_OF(listener, typeof(*buffer), destroy_listener);
40- else
41- {
42- struct wl_shm_buffer * shm_buffer;
43- struct wld_buffer * wld = NULL;
44-
45- if ((shm_buffer = wl_shm_buffer_get(resource)))
46- {
47- union wld_object object = {
48- .ptr = wl_shm_buffer_get_data(shm_buffer)
49- };
50-
51- wld = wld_import_buffer
52- (swc.shm->context, WLD_OBJECT_DATA, object,
53- wl_shm_buffer_get_width(shm_buffer),
54- wl_shm_buffer_get_height(shm_buffer),
55- format_shm_to_wld(wl_shm_buffer_get_format(shm_buffer)),
56- wl_shm_buffer_get_stride(shm_buffer));
57- }
58-
59- if (!wld)
60- goto error0;
61-
62- if (!(buffer = malloc(sizeof *buffer)))
63- goto error0;
64-
65- swc_buffer_initialize(&buffer->base, wld);
66- buffer->resource = resource;
67- buffer->destroy_listener.notify = &handle_buffer_destroy;
68- wl_resource_add_destroy_listener(resource,
69- &buffer->destroy_listener);
70- }
71+ union wld_object object = {
72+ .ptr = wl_shm_buffer_get_data(shm_buffer)
73+ };
74+
75+ wld = wld_import_buffer
76+ (swc.shm->context, WLD_OBJECT_DATA, object,
77+ wl_shm_buffer_get_width(shm_buffer),
78+ wl_shm_buffer_get_height(shm_buffer),
79+ format_shm_to_wld(wl_shm_buffer_get_format(shm_buffer)),
80+ wl_shm_buffer_get_stride(shm_buffer));
81 }
82
83+ if (!wld)
84+ goto error0;
85+
86+ if (!(buffer = malloc(sizeof *buffer)))
87+ goto error1;
88+
89+ swc_buffer_initialize(&buffer->base, wld);
90+ buffer->resource = resource;
91+ buffer->destroy_listener.notify = &handle_buffer_destroy;
92+ wl_resource_add_destroy_listener(resource,
93+ &buffer->destroy_listener);
94+
95 return &buffer->base;
96
97+ error1:
98+ wld_destroy_buffer(wld);
99 error0:
100 return NULL;
101 }