diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/st.c | 7 | ||||
-rw-r--r-- | src/wld/buffer.c | 2 | ||||
-rw-r--r-- | src/wld/buffered_surface.c | 2 | ||||
-rw-r--r-- | src/wld/color.c | 2 | ||||
-rw-r--r-- | src/wld/context.c | 2 | ||||
-rw-r--r-- | src/wld/drm-private.h | 46 | ||||
-rw-r--r-- | src/wld/drm.c | 4 | ||||
-rw-r--r-- | src/wld/drm.h | 52 | ||||
-rw-r--r-- | src/wld/dumb.c | 6 | ||||
-rw-r--r-- | src/wld/font.c | 2 | ||||
-rw-r--r-- | src/wld/intel/intel.c (renamed from src/wld/intel.c) | 18 | ||||
-rw-r--r-- | src/wld/nouveau/nouveau.c | 14 | ||||
-rw-r--r-- | src/wld/pixman.c | 4 | ||||
-rw-r--r-- | src/wld/pixman.h | 44 | ||||
-rw-r--r-- | src/wld/renderer.c | 2 | ||||
-rw-r--r-- | src/wld/surface.c | 2 | ||||
-rw-r--r-- | src/wld/wayland-drm.c | 10 | ||||
-rw-r--r-- | src/wld/wayland-private.h | 60 | ||||
-rw-r--r-- | src/wld/wayland-shm.c | 8 | ||||
-rw-r--r-- | src/wld/wayland.c | 6 | ||||
-rw-r--r-- | src/wld/wayland.h | 84 | ||||
-rw-r--r-- | src/wld/wld-private.h | 243 | ||||
-rw-r--r-- | src/wld/wld.h | 283 |
23 files changed, 47 insertions, 856 deletions
@@ -44,7 +44,6 @@ char *argv0; #include <libutil.h> #endif - /* Arbitrary sizes */ #define UTF_INVALID 0xFFFD #define UTF_SIZ 4 @@ -3203,8 +3202,12 @@ wlinit(void) registry = wl_display_get_registry(wl.dpy); wl_registry_add_listener(registry, ®listener, NULL); - wld.ctx = wld_wayland_create_context(wl.dpy, WLD_SHM); + wld.ctx = wld_wayland_create_context(wl.dpy, WLD_ANY); + if(!wld.ctx) + die("could not create wayland context"); wld.renderer = wld_create_renderer(wld.ctx); + if(!wld.renderer) + die("could not create wayland rendering context"); wl_display_roundtrip(wl.dpy); if (!wl.shm) diff --git a/src/wld/buffer.c b/src/wld/buffer.c index 46b1b3b..2426037 100644 --- a/src/wld/buffer.c +++ b/src/wld/buffer.c @@ -21,7 +21,7 @@ * SOFTWARE. */ -#include "wld-private.h" +#include "wld/wld-private.h" void buffer_initialize(struct buffer * buffer, const struct wld_buffer_impl * impl, diff --git a/src/wld/buffered_surface.c b/src/wld/buffered_surface.c index e3d9133..4687554 100644 --- a/src/wld/buffered_surface.c +++ b/src/wld/buffered_surface.c @@ -21,7 +21,7 @@ * SOFTWARE. */ -#include "wld-private.h" +#include "wld/wld-private.h" #include "interface/surface.h" IMPL(buffered_surface, wld_surface) diff --git a/src/wld/color.c b/src/wld/color.c index 88e791a..94785f8 100644 --- a/src/wld/color.c +++ b/src/wld/color.c @@ -46,7 +46,7 @@ SOFTWARE. ******************************************************************/ -#include "wld-private.h" +#include "wld/wld-private.h" #include <strings.h> diff --git a/src/wld/context.c b/src/wld/context.c index a735d40..af2d5bd 100644 --- a/src/wld/context.c +++ b/src/wld/context.c @@ -21,7 +21,7 @@ * SOFTWARE. */ -#include "wld-private.h" +#include "wld/wld-private.h" void context_initialize(struct wld_context * context, const struct wld_context_impl * impl) diff --git a/src/wld/drm-private.h b/src/wld/drm-private.h deleted file mode 100644 index 6c36088..0000000 --- a/src/wld/drm-private.h +++ /dev/null @@ -1,46 +0,0 @@ -/* wld: drm-private.h - * - * Copyright (c) 2013, 2014 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef WLD_DRM_PRIVATE_H -#define WLD_DRM_PRIVATE_H - -#include "wld-private.h" - -struct drm_driver -{ - const char * name; - bool (* device_supported)(uint32_t vendor_id, uint32_t device_id); - struct wld_context * (* create_context)(int drm_fd); -}; - -#if WITH_DRM_INTEL -extern const struct drm_driver intel_drm_driver; -#endif -#if WITH_DRM_NOUVEAU -extern const struct drm_driver nouveau_drm_driver; -#endif -extern const struct drm_driver dumb_drm_driver; -extern const struct wld_context_impl * dumb_context_impl; - -#endif - diff --git a/src/wld/drm.c b/src/wld/drm.c index 2768640..e2f6180 100644 --- a/src/wld/drm.c +++ b/src/wld/drm.c @@ -21,8 +21,8 @@ * SOFTWARE. */ -#include "drm.h" -#include "drm-private.h" +#include "wld/drm.h" +#include "wld/drm-private.h" #include <sys/sysmacros.h> diff --git a/src/wld/drm.h b/src/wld/drm.h deleted file mode 100644 index 20ee3e8..0000000 --- a/src/wld/drm.h +++ /dev/null @@ -1,52 +0,0 @@ -/* wld: drm.h - * - * Copyright (c) 2013, 2014 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef WLD_DRM_H -#define WLD_DRM_H - -#include <stdbool.h> -#include <stdint.h> - -#define WLD_DRM_ID (0x02 << 24) - -enum wld_drm_object_type -{ - WLD_DRM_OBJECT_HANDLE = WLD_DRM_ID, - WLD_DRM_OBJECT_PRIME_FD, -}; - -enum wld_drm_flags -{ - WLD_DRM_FLAG_SCANOUT = 0x1, - WLD_DRM_FLAG_TILED = 0x2 -}; - -/** - * Create a new WLD context from an opened DRM device file descriptor. - */ -struct wld_context * wld_drm_create_context(int fd); - -bool wld_drm_is_dumb(struct wld_context * context); - -#endif - diff --git a/src/wld/dumb.c b/src/wld/dumb.c index b08d098..340ba16 100644 --- a/src/wld/dumb.c +++ b/src/wld/dumb.c @@ -21,9 +21,9 @@ * SOFTWARE. */ -#include "drm-private.h" -#include "drm.h" -#include "pixman.h" +#include "wld/drm-private.h" +#include "wld/drm.h" +#include "wld/pixman.h" #include <fcntl.h> #include <unistd.h> diff --git a/src/wld/font.c b/src/wld/font.c index 36b8a07..a43c3e6 100644 --- a/src/wld/font.c +++ b/src/wld/font.c @@ -21,7 +21,7 @@ * SOFTWARE. */ -#include "wld-private.h" +#include "wld/wld-private.h" #include <fontconfig/fcfreetype.h> diff --git a/src/wld/intel.c b/src/wld/intel/intel.c index 78c3c0f..4ee2c2e 100644 --- a/src/wld/intel.c +++ b/src/wld/intel/intel.c @@ -21,11 +21,11 @@ * SOFTWARE. */ -#include "drm-private.h" -#include "drm.h" -#include "intel/batch.h" -#include "intel/blt.h" -#include "wld-private.h" +#include "wld/drm-private.h" +#include "wld/drm.h" +#include "batch.h" +#include "blt.h" +#include "wld/wld-private.h" #include <unistd.h> #include <intel_bufmgr.h> @@ -51,11 +51,11 @@ struct intel_buffer drm_intel_bo * bo; }; -#include "interface/context.h" -#include "interface/renderer.h" -#include "interface/buffer.h" +#include "../interface/context.h" +#include "../interface/renderer.h" +#include "../interface/buffer.h" #define DRM_DRIVER_NAME intel -#include "interface/drm.h" +#include "../interface/drm.h" IMPL(intel_context, wld_context) IMPL(intel_renderer, wld_renderer) IMPL(intel_buffer, wld_buffer) diff --git a/src/wld/nouveau/nouveau.c b/src/wld/nouveau/nouveau.c index 34829eb..7d2e364 100644 --- a/src/wld/nouveau/nouveau.c +++ b/src/wld/nouveau/nouveau.c @@ -26,9 +26,9 @@ * SOFTWARE. */ -#include "drm-private.h" -#include "drm.h" -#include "pixman.h" +#include "wld/drm-private.h" +#include "wld/drm.h" +#include "wld/pixman.h" #include "nv_object.xml.h" #include "g80_2d.xml.h" #include "g80_defs.xml.h" @@ -70,11 +70,11 @@ struct nouveau_buffer struct nouveau_bo * bo; }; -#include "interface/context.h" -#include "interface/renderer.h" -#include "interface/buffer.h" +#include "../interface/context.h" +#include "../interface/renderer.h" +#include "../interface/buffer.h" #define DRM_DRIVER_NAME nouveau -#include "interface/drm.h" +#include "../interface/drm.h" IMPL(nouveau_context, wld_context) IMPL(nouveau_renderer, wld_renderer) IMPL(nouveau_buffer, wld_buffer) diff --git a/src/wld/pixman.c b/src/wld/pixman.c index 5f14a7b..50a10ec 100644 --- a/src/wld/pixman.c +++ b/src/wld/pixman.c @@ -21,8 +21,8 @@ * SOFTWARE. */ -#include "pixman.h" -#include "wld-private.h" +#include "wld/pixman.h" +#include "wld/wld-private.h" #define PIXMAN_COLOR(c) { \ .alpha = ((c >> 24) & 0xff) * 0x101, \ diff --git a/src/wld/pixman.h b/src/wld/pixman.h deleted file mode 100644 index c864385..0000000 --- a/src/wld/pixman.h +++ /dev/null @@ -1,44 +0,0 @@ -/* wld: pixman.h - * - * Copyright (c) 2013, 2014 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef WLD_PIXMAN_H -#define WLD_PIXMAN_H - -#include <stdint.h> - -#define WLD_PIXMAN_ID (0x01 << 24) - -enum wld_pixman_object_type -{ - WLD_PIXMAN_OBJECT_IMAGE = WLD_PIXMAN_ID -}; - -extern struct wld_context * wld_pixman_context; - -static inline struct wld_context * wld_pixman_create_context() -{ - return wld_pixman_context; -} - -#endif - diff --git a/src/wld/renderer.c b/src/wld/renderer.c index a038095..b014eae 100644 --- a/src/wld/renderer.c +++ b/src/wld/renderer.c @@ -21,7 +21,7 @@ * SOFTWARE. */ -#include "wld-private.h" +#include "wld/wld-private.h" void default_fill_region(struct wld_renderer * renderer, uint32_t color, pixman_region32_t * region) diff --git a/src/wld/surface.c b/src/wld/surface.c index 3f936bd..9e678de 100644 --- a/src/wld/surface.c +++ b/src/wld/surface.c @@ -21,7 +21,7 @@ * SOFTWARE. */ -#include "wld-private.h" +#include "wld/wld-private.h" struct wld_surface * default_create_surface(struct wld_context * context, uint32_t width, uint32_t height, diff --git a/src/wld/wayland-drm.c b/src/wld/wayland-drm.c index 7e7fe4c..43695a3 100644 --- a/src/wld/wayland-drm.c +++ b/src/wld/wayland-drm.c @@ -21,12 +21,12 @@ * SOFTWARE. */ -#include "wayland.h" -#include "drm.h" +#include "wld/wayland.h" +#include "wld/drm.h" #include "wayland-drm-client-protocol.h" -#include "wayland-private.h" -#include "wld-private.h" -#include "drm-private.h" +#include "wld/wayland-private.h" +#include "wld/wld-private.h" +#include "wld/drm-private.h" #include <stdlib.h> #include <string.h> diff --git a/src/wld/wayland-private.h b/src/wld/wayland-private.h deleted file mode 100644 index f52e3ae..0000000 --- a/src/wld/wayland-private.h +++ /dev/null @@ -1,60 +0,0 @@ -/* wld: wayland-private.h - * - * Copyright (c) 2013, 2014 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef WLD_WAYLAND_PRIVATE_H -#define WLD_WAYLAND_PRIVATE_H - -#include "wld.h" - -struct buffer; -struct wl_display; -struct wl_event_queue; -struct wl_buffer; - -struct wayland_context -{ - struct wld_context base; - const struct wayland_impl * impl; - struct wl_display * display; - struct wl_event_queue * queue; -}; - -struct wayland_impl -{ - struct wayland_context * (* create_context)(struct wl_display * display, - struct wl_event_queue * queue); - bool (* has_format)(struct wld_context * context, uint32_t format); -}; - -#if WITH_WAYLAND_DRM -extern const struct wayland_impl drm_wayland_impl; -#endif - -#if WITH_WAYLAND_SHM -extern const struct wayland_impl shm_wayland_impl; -#endif - -bool wayland_buffer_add_exporter(struct buffer * buffer, struct wl_buffer * wl); - -#endif - diff --git a/src/wld/wayland-shm.c b/src/wld/wayland-shm.c index 520eb2c..19840f6 100644 --- a/src/wld/wayland-shm.c +++ b/src/wld/wayland-shm.c @@ -23,10 +23,10 @@ #define _GNU_SOURCE /* Required for mkostemp */ -#include "wayland.h" -#include "wayland-private.h" -#include "wld-private.h" -#include "pixman.h" +#include "wld/wayland.h" +#include "wld/wayland-private.h" +#include "wld/wld-private.h" +#include "wld/pixman.h" #include <fcntl.h> #include <stdlib.h> diff --git a/src/wld/wayland.c b/src/wld/wayland.c index 40a4b34..b6a0d3c 100644 --- a/src/wld/wayland.c +++ b/src/wld/wayland.c @@ -21,9 +21,9 @@ * SOFTWARE. */ -#include "wayland.h" -#include "wayland-private.h" -#include "wld-private.h" +#include "wld/wayland.h" +#include "wld/wayland-private.h" +#include "wld/wld-private.h" #include <stdlib.h> #include <wayland-client.h> diff --git a/src/wld/wayland.h b/src/wld/wayland.h deleted file mode 100644 index 3127ee6..0000000 --- a/src/wld/wayland.h +++ /dev/null @@ -1,84 +0,0 @@ -/* wld: wayland.h - * - * Copyright (c) 2013, 2014 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef WLD_WAYLAND_H -#define WLD_WAYLAND_H - -#include <stdbool.h> -#include <stdint.h> - -struct wl_display; -struct wl_surface; - -#define WLD_WAYLAND_ID (0x3 << 24) - -enum wld_wayland_interface_id -{ - /** - * Give up on trying any new interfaces. This can be considered as a - * sentinel for wld_wayland_create_context. - */ - WLD_NONE = -2, - - /** - * Try any available interface. - */ - WLD_ANY = -1, - WLD_DRM, - WLD_SHM -}; - -enum wld_wayland_object_type -{ - WLD_WAYLAND_OBJECT_BUFFER = WLD_WAYLAND_ID -}; - -/** - * Create a new WLD context which uses various available Wayland interfaces - * (such as wl_shm and wl_drm) to create wl_buffers backed by implementations - * specific to the interface. - * - * You can specify the particular interface you want to use by specifying them - * as arguments. Interfaces will be tried in the order they are given. - * - * The last argument must be either WLD_NONE or WLD_ANY. - * - * @see enum wld_wayland_interface_id - */ -struct wld_context * wld_wayland_create_context - (struct wl_display * display, enum wld_wayland_interface_id id, ...); - -struct wld_surface * wld_wayland_create_surface(struct wld_context * context, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags, - struct wl_surface * surface); - -/** - * Check if the wayland implementation supports a particular pixel format. - * - * @see enum wld_format - */ -bool wld_wayland_has_format(struct wld_context * context, uint32_t format); - -#endif - diff --git a/src/wld/wld-private.h b/src/wld/wld-private.h deleted file mode 100644 index e812b11..0000000 --- a/src/wld/wld-private.h +++ /dev/null @@ -1,243 +0,0 @@ -/* wld: wld-private.h - * - * Copyright (c) 2013, 2014 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef WLD_PRIVATE_H -#define WLD_PRIVATE_H - -#include "wld.h" - -#include <assert.h> -#include <stdbool.h> -#include <stdint.h> -#include <ft2build.h> -#include FT_FREETYPE_H -#include FT_BITMAP_H - -#define ARRAY_LENGTH(array) (sizeof (array) / sizeof (array)[0]) -#if ENABLE_DEBUG -# define DEBUG(format, ...) \ - fprintf(stderr, "# %s: " format, __func__, ## __VA_ARGS__) -#else -# define DEBUG(format, ...) -#endif - -#define EXPORT __attribute__((visibility("default"))) -#define CONTAINER_OF(ptr, type, member) \ - ((type *)((uintptr_t) ptr - offsetof(type, member))) -#define IMPL(impl_type, base_type) \ - static inline struct impl_type * impl_type(struct base_type * object) \ - { \ - assert(object->impl == &base_type ## _impl); \ - return (struct impl_type *) object; \ - } - -struct wld_font_context -{ - FT_Library library; -}; - -struct glyph -{ - FT_Bitmap bitmap; - - /** - * The offset from the origin to the top left corner of the bitmap. - */ - int16_t x, y; - - /** - * The width to advance to the origin of the next character. - */ - uint16_t advance; -}; - -struct font -{ - struct wld_font base; - - struct wld_font_context * context; - FT_Face face; - struct glyph ** glyphs; -}; - -struct wld_context_impl -{ - struct wld_renderer * (* create_renderer)(struct wld_context * context); - struct buffer * (* create_buffer)(struct wld_context * context, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - struct buffer * (* import_buffer)(struct wld_context * context, - uint32_t type, union wld_object object, - uint32_t width, uint32_t height, - uint32_t format, uint32_t pitch); - struct wld_surface * (* create_surface)(struct wld_context * context, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - void (* destroy)(struct wld_context * context); -}; - -struct wld_renderer_impl -{ - uint32_t (* capabilities)(struct wld_renderer * renderer, - struct buffer * buffer); - bool (* set_target)(struct wld_renderer * renderer, struct buffer * buffer); - void (* fill_rectangle)(struct wld_renderer * renderer, - uint32_t color, int32_t x, int32_t y, - uint32_t width, uint32_t height); - void (* fill_region)(struct wld_renderer * renderer, - uint32_t color, pixman_region32_t * region); - void (* copy_rectangle)(struct wld_renderer * renderer, struct buffer * src, - int32_t dst_x, int32_t dst_y, - int32_t src_x, int32_t src_y, - uint32_t width, uint32_t height); - void (* copy_region)(struct wld_renderer * renderer, struct buffer * src, - int32_t dst_x, int32_t dst_y, - pixman_region32_t * region); - void (* draw_text)(struct wld_renderer * renderer, - struct font * font, uint32_t color, - int32_t x, int32_t y, const char * text, uint32_t length, - struct wld_extents * extents); - void (* flush)(struct wld_renderer * renderer); - void (* destroy)(struct wld_renderer * renderer); -}; - -struct buffer -{ - struct wld_buffer base; - - unsigned references, map_references; - struct wld_exporter * exporters; - struct wld_destructor * destructors; -}; - -struct wld_buffer_impl -{ - bool (* map)(struct buffer * buffer); - bool (* unmap)(struct buffer * buffer); - void (* destroy)(struct buffer * buffer); -}; - -struct wld_surface_impl -{ - pixman_region32_t * (* damage)(struct wld_surface * surface, - pixman_region32_t * damage); - struct buffer * (* back)(struct wld_surface * surface); - struct buffer * (* take)(struct wld_surface * surface); - bool (* release)(struct wld_surface * surface, struct buffer * buffer); - bool (* swap)(struct wld_surface * surface); - void (* destroy)(struct wld_surface * surface); -}; - -struct buffer_socket -{ - const struct buffer_socket_impl * impl; -}; - -struct buffer_socket_impl -{ - bool (* attach)(struct buffer_socket * socket, struct buffer * buffer); - void (* process)(struct buffer_socket * socket); - void (* destroy)(struct buffer_socket * socket); -}; - -bool font_ensure_glyph(struct font * font, FT_UInt glyph_index); - -/** - * Returns the number of bytes per pixel for the given format. - */ -static inline uint8_t format_bytes_per_pixel(enum wld_format format) -{ - switch (format) - { - case WLD_FORMAT_ARGB8888: - case WLD_FORMAT_XRGB8888: - return 4; - default: - return 0; - } -} - -static inline pixman_format_code_t format_wld_to_pixman(uint32_t format) -{ - switch (format) - { - case WLD_FORMAT_ARGB8888: - return PIXMAN_a8r8g8b8; - case WLD_FORMAT_XRGB8888: - return PIXMAN_x8r8g8b8; - default: - return 0; - } -} - -static inline uint32_t format_pixman_to_wld(pixman_format_code_t format) -{ - switch (format) - { - case PIXMAN_a8r8g8b8: - return WLD_FORMAT_ARGB8888; - case PIXMAN_x8r8g8b8: - return WLD_FORMAT_XRGB8888; - default: - return 0; - } -} - -/** - * This default fill_region method is implemented in terms of fill_rectangle. - */ -void default_fill_region(struct wld_renderer * renderer, uint32_t color, - pixman_region32_t * region); - -/** - * This default copy_region method is implemented in terms of copy_rectangle. - */ -void default_copy_region(struct wld_renderer * renderer, struct buffer * buffer, - int32_t dst_x, int32_t dst_y, - pixman_region32_t * region); - -struct wld_surface * default_create_surface(struct wld_context * context, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct wld_surface * buffered_surface_create(struct wld_context * context, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags, - struct buffer_socket * socket); - -void context_initialize(struct wld_context * context, - const struct wld_context_impl * impl); - -void renderer_initialize(struct wld_renderer * renderer, - const struct wld_renderer_impl * impl); - -void buffer_initialize(struct buffer * buffer, - const struct wld_buffer_impl * impl, - uint32_t width, uint32_t height, - uint32_t format, uint32_t pitch); - -void surface_initialize(struct wld_surface * surface, - const struct wld_surface_impl * impl); - -#endif - diff --git a/src/wld/wld.h b/src/wld/wld.h deleted file mode 100644 index c36081c..0000000 --- a/src/wld/wld.h +++ /dev/null @@ -1,283 +0,0 @@ -/* wld: wld.h - * - * Copyright (c) 2013, 2014 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef WLD_H -#define WLD_H - -#include <stdbool.h> -#include <stdint.h> -#include <pixman.h> -#include <fontconfig/fontconfig.h> - -#define WLD_USER_ID (0xff << 24) - -#define __WLD_FOURCC(a, b, c, d) ( (a) \ - | ((b) << 8) \ - | ((c) << 16) \ - | ((d) << 24) ) - -/** - * Supported pixel formats. - * - * These formats can safely be interchanged with GBM and wl_drm formats. - */ -enum wld_format -{ - WLD_FORMAT_XRGB8888 = __WLD_FOURCC('X', 'R', '2', '4'), - WLD_FORMAT_ARGB8888 = __WLD_FOURCC('A', 'R', '2', '4') -}; - -enum wld_flags -{ - WLD_FLAG_MAP = 0x1 << 16 -}; - -bool wld_lookup_named_color(const char * name, uint32_t * color); - -/**** WLD Context ****/ - -enum wld_object_type -{ - WLD_OBJECT_DATA -}; - -union wld_object -{ - void * ptr; - uint32_t u32; - int i; -}; - -struct wld_context -{ - const struct wld_context_impl * const impl; -}; - -struct wld_renderer * wld_create_renderer(struct wld_context * context); - -struct wld_buffer * wld_create_buffer(struct wld_context * context, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct wld_buffer * wld_import_buffer(struct wld_context * context, - uint32_t type, union wld_object object, - uint32_t width, uint32_t height, - uint32_t format, uint32_t pitch); - -struct wld_surface * wld_create_surface(struct wld_context * context, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -void wld_destroy_context(struct wld_context * context); - -/**** Font Handling ****/ - -struct wld_extents -{ - uint32_t advance; -}; - -struct wld_font -{ - uint32_t ascent, descent; - uint32_t height; - uint32_t max_advance; -}; - -/** - * Create a new font context. - * - * This sets up the underlying FreeType library. - */ -struct wld_font_context * wld_font_create_context(); - -/** - * Destroy a font context. - */ -void wld_font_destroy_context(struct wld_font_context * context); - -/** - * Open a new font from the given fontconfig match. - */ -struct wld_font * wld_font_open_pattern(struct wld_font_context * context, - FcPattern * match); - -/** - * Open a new font from a fontconfig pattern string. - */ -struct wld_font * wld_font_open_name(struct wld_font_context * context, - const char * name); - -/** - * Close a font. - */ -void wld_font_close(struct wld_font * font); - -/** - * Check if the given font has a particular character (in UTF-32), and if so, - * load the glyph. - */ -bool wld_font_ensure_char(struct wld_font * font, uint32_t character); - -/** - * Calculate the text extents of the given UTF-8 string. - * - * @param length The maximum number of bytes in the string to process - */ -void wld_font_text_extents_n(struct wld_font * font, - const char * text, int32_t length, - struct wld_extents * extents); - -static inline void wld_font_text_extents(struct wld_font * font, - const char * text, - struct wld_extents * extents) -{ - wld_font_text_extents_n(font, text, INT32_MAX, extents); -} - -/**** Buffers ****/ - -struct wld_exporter -{ - bool (* export)(struct wld_exporter * exporter, struct wld_buffer * buffer, - uint32_t type, union wld_object * object); - struct wld_exporter * next; -}; - -struct wld_destructor -{ - void (* destroy)(struct wld_destructor * destructor); - struct wld_destructor * next; -}; - -struct wld_buffer -{ - const struct wld_buffer_impl * const impl; - - uint32_t width, height, pitch; - enum wld_format format; - pixman_region32_t damage; - void * map; -}; - -bool wld_map(struct wld_buffer * buffer); -bool wld_unmap(struct wld_buffer * buffer); - -bool wld_export(struct wld_buffer * buffer, - uint32_t type, union wld_object * object); - -void wld_buffer_add_exporter(struct wld_buffer * buffer, - struct wld_exporter * exporter); - -void wld_buffer_add_destructor(struct wld_buffer * buffer, - struct wld_destructor * destructor); - -/** - * Increase the reference count of a buffer. - */ -void wld_buffer_reference(struct wld_buffer * buffer); - -/** - * Decrease the reference count of a buffer. - * - * When the reference count drops to zero, the buffer will be destroyed. - */ -void wld_buffer_unreference(struct wld_buffer * buffer); - -/**** Surfaces ****/ - -struct wld_surface -{ - const struct wld_surface_impl * const impl; -}; - -pixman_region32_t * wld_surface_damage(struct wld_surface * surface, - pixman_region32_t * new_damage); - -struct wld_buffer * wld_surface_take(struct wld_surface * surface); - -void wld_surface_release(struct wld_surface * surface, - struct wld_buffer * buffer); - -bool wld_swap(struct wld_surface * surface); - -void wld_destroy_surface(struct wld_surface * surface); - -/**** Renderers ****/ - -struct wld_renderer -{ - const struct wld_renderer_impl * const impl; - struct wld_buffer * target; -}; - -enum wld_capability -{ - WLD_CAPABILITY_READ = 1<<0, - WLD_CAPABILITY_WRITE = 1<<1, -}; - -void wld_destroy_renderer(struct wld_renderer * renderer); - -uint32_t wld_capabilities(struct wld_renderer * renderer, - struct wld_buffer * buffer); - -bool wld_set_target_buffer(struct wld_renderer * renderer, - struct wld_buffer * buffer); - -bool wld_set_target_surface(struct wld_renderer * renderer, - struct wld_surface * surface); - -void wld_fill_rectangle(struct wld_renderer * renderer, uint32_t color, - int32_t x, int32_t y, uint32_t width, uint32_t height); - -void wld_fill_region(struct wld_renderer * renderer, uint32_t color, - pixman_region32_t * region); - -void wld_copy_rectangle(struct wld_renderer * renderer, - struct wld_buffer * buffer, - int32_t dst_x, int32_t dst_y, - int32_t src_x, int32_t src_y, - uint32_t width, uint32_t height); - -void wld_copy_region(struct wld_renderer * renderer, - struct wld_buffer * buffer, - int32_t dst_x, int32_t dst_y, pixman_region32_t * region); - -/** - * Draw a UTF-8 text string to the given buffer. - * - * @param length The maximum number of bytes in the string to process. If - * length is -1, then draw until a NULL byte is found. - * @param extents If not NULL, will be initialized to the extents of the - * drawn text - */ -void wld_draw_text(struct wld_renderer * renderer, - struct wld_font * font, uint32_t color, - int32_t x, int32_t y, const char * text, uint32_t length, - struct wld_extents * extents); - -void wld_flush(struct wld_renderer * renderer); - -#endif - |