image: port to new class system

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2009-08-17 16:38:56 +02:00
parent 0eb0c49592
commit a916f2cd55
29 changed files with 122 additions and 92 deletions

View File

@ -26,8 +26,6 @@
#include <unistd.h> #include <unistd.h>
#include <signal.h> #include <signal.h>
#include <ev.h>
#include <xcb/xtest.h> #include <xcb/xtest.h>
#include <xcb/xcb_event.h> #include <xcb/xcb_event.h>
@ -42,6 +40,7 @@
#include "property.h" #include "property.h"
#include "screen.h" #include "screen.h"
#include "titlebar.h" #include "titlebar.h"
#include "luaa.h"
#include "common/version.h" #include "common/version.h"
#include "common/atoms.h" #include "common/atoms.h"
#include "common/xcursor.h" #include "common/xcursor.h"

View File

@ -22,6 +22,7 @@
#include "button.h" #include "button.h"
#include "luaa.h" #include "luaa.h"
#include "key.h" #include "key.h"
#include "common/luaobject.h"
/** Create a new mouse button bindings. /** Create a new mouse button bindings.
* \param L The Lua VM state. * \param L The Lua VM state.

View File

@ -29,6 +29,7 @@
#include "systray.h" #include "systray.h"
#include "property.h" #include "property.h"
#include "spawn.h" #include "spawn.h"
#include "luaa.h"
#include "common/atoms.h" #include "common/atoms.h"
#include "common/xutil.h" #include "common/xutil.h"

View File

@ -24,7 +24,7 @@
#include "mouse.h" #include "mouse.h"
#include "stack.h" #include "stack.h"
#include "common/luaclass.h" #include "common/luaobject.h"
#define CLIENT_SELECT_INPUT_EVENT_MASK (XCB_EVENT_MASK_STRUCTURE_NOTIFY \ #define CLIENT_SELECT_INPUT_EVENT_MASK (XCB_EVENT_MASK_STRUCTURE_NOTIFY \
| XCB_EVENT_MASK_PROPERTY_CHANGE \ | XCB_EVENT_MASK_PROPERTY_CHANGE \

1
ewmh.c
View File

@ -31,6 +31,7 @@
#include "client.h" #include "client.h"
#include "widget.h" #include "widget.h"
#include "wibox.h" #include "wibox.h"
#include "luaa.h"
#include "common/atoms.h" #include "common/atoms.h"
#include "common/buffer.h" #include "common/buffer.h"
#include "common/xutil.h" #include "common/xutil.h"

View File

@ -20,6 +20,7 @@
*/ */
#include "structs.h" #include "structs.h"
#include "luaa.h"
#define HANDLE_HOOK(L, h) \ #define HANDLE_HOOK(L, h) \
do { \ do { \

140
image.c
View File

@ -19,11 +19,28 @@
* *
*/ */
#include "structs.h"
#include "common/tokenize.h"
#include "common/xutil.h"
#include <xcb/xcb_image.h> #include <xcb/xcb_image.h>
#include <Imlib2.h>
#include "structs.h"
#include "luaa.h"
#include "common/luaobject.h"
struct image
{
LUA_OBJECT_HEADER
/** Imlib2 image */
Imlib_Image image;
/** Image data */
uint8_t *data;
/** Flag telling if the image is up to date or needs computing before
* drawing */
bool isupdated;
};
LUA_OBJECT_FUNCS(image_class, image_t, image)
static int static int
luaA_image_gc(lua_State *L) luaA_image_gc(lua_State *L)
{ {
@ -729,68 +746,73 @@ luaA_image_insert(lua_State *L)
return 0; return 0;
} }
/** Image object.
* \param L The Lua VM state.
* \return The number of elements pushed on stack.
* \luastack
* \lvalue An image
* \lfield width The image width.
* \lfield height The image height.
*/
static int static int
luaA_image_index(lua_State *L) luaA_image_get_width(lua_State *L, image_t *image)
{ {
if(luaA_usemetatable(L, 1, 2)) lua_pushnumber(L, image_getwidth(image));
return 1;
image_t *image = luaA_checkudata(L, 1, &image_class);
size_t len;
const char *attr = luaL_checklstring(L, 2, &len);
switch(a_tokenize(attr, len))
{
case A_TK_WIDTH:
lua_pushnumber(L, image_getwidth(image));
break;
case A_TK_HEIGHT:
lua_pushnumber(L, image_getheight(image));
break;
case A_TK_ALPHA:
imlib_context_set_image(image->image);
lua_pushboolean(L, imlib_image_has_alpha());
break;
default:
return 0;
}
return 1; return 1;
} }
const struct luaL_reg awesome_image_methods[] = static int
luaA_image_get_height(lua_State *L, image_t *image)
{ {
LUA_CLASS_METHODS(image) lua_pushnumber(L, image_getheight(image));
{ "__call", luaA_image_new }, return 1;
{ "argb32", luaA_image_argb32_new }, }
{ NULL, NULL }
}; static int
const struct luaL_reg awesome_image_meta[] = luaA_image_get_alpha(lua_State *L, image_t *image)
{ {
LUA_OBJECT_META(image) imlib_context_set_image(image->image);
{ "__index", luaA_image_index }, lua_pushboolean(L, imlib_image_has_alpha());
{ "rotate", luaA_image_rotate }, return 1;
{ "orientate", luaA_image_orientate }, }
{ "crop", luaA_image_crop },
{ "crop_and_scale", luaA_image_crop_and_scale }, void
{ "save", luaA_image_save }, image_class_setup(lua_State *L)
{ "insert", luaA_image_insert }, {
/* draw on images, whee! */ static const struct luaL_reg image_methods[] =
{ "draw_pixel", luaA_image_draw_pixel }, {
{ "draw_line", luaA_image_draw_line }, LUA_CLASS_METHODS(image)
{ "draw_rectangle", luaA_image_draw_rectangle }, { "__call", luaA_image_new },
{ "draw_rectangle_gradient", luaA_image_draw_rectangle_gradient }, { "argb32", luaA_image_argb32_new },
{ "draw_circle", luaA_image_draw_circle }, { NULL, NULL }
{ "__gc", luaA_image_gc }, };
{ NULL, NULL }
}; static const struct luaL_reg image_meta[] =
{
LUA_OBJECT_META(image)
LUA_CLASS_META
{ "rotate", luaA_image_rotate },
{ "orientate", luaA_image_orientate },
{ "crop", luaA_image_crop },
{ "crop_and_scale", luaA_image_crop_and_scale },
{ "save", luaA_image_save },
{ "insert", luaA_image_insert },
/* draw on images, whee! */
{ "draw_pixel", luaA_image_draw_pixel },
{ "draw_line", luaA_image_draw_line },
{ "draw_rectangle", luaA_image_draw_rectangle },
{ "draw_rectangle_gradient", luaA_image_draw_rectangle_gradient },
{ "draw_circle", luaA_image_draw_circle },
{ "__gc", luaA_image_gc },
{ NULL, NULL }
};
luaA_class_setup(L, &image_class, "image", (lua_class_allocator_t) image_new,
image_methods, image_meta);
luaA_class_add_property(&image_class, A_TK_WIDTH,
NULL,
(lua_class_propfunc_t) luaA_image_get_width,
NULL);
luaA_class_add_property(&image_class, A_TK_HEIGHT,
NULL,
(lua_class_propfunc_t) luaA_image_get_height,
NULL);
luaA_class_add_property(&image_class, A_TK_ALPHA,
NULL,
(lua_class_propfunc_t) luaA_image_get_alpha,
NULL);
}
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 // vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80

25
image.h
View File

@ -1,7 +1,7 @@
/* /*
* image.h - image object header * image.h - image object header
* *
* Copyright © 2008 Julien Danjou <julien@danjou.info> * Copyright © 2008-2009 Julien Danjou <julien@danjou.info>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -22,27 +22,12 @@
#ifndef AWESOME_IMAGE_H #ifndef AWESOME_IMAGE_H
#define AWESOME_IMAGE_H #define AWESOME_IMAGE_H
#include <Imlib2.h> #include <xcb/xcb.h>
#include "common/util.h"
#include "common/luaobject.h"
#include "common/luaclass.h" #include "common/luaclass.h"
typedef struct typedef struct image image_t;
{
LUA_OBJECT_HEADER
/** Imlib2 image */
Imlib_Image image;
/** Image data */
uint8_t *data;
/** Flag telling if the image is up to date or needs computing before
* drawing */
bool isupdated;
} image_t;
lua_class_t image_class;
LUA_OBJECT_FUNCS(image_class, image_t, image)
void image_class_setup(lua_State *);
int image_new_from_argb32(int, int, uint32_t *); int image_new_from_argb32(int, int, uint32_t *);
uint8_t * image_getdata(image_t *); uint8_t * image_getdata(image_t *);
int image_getwidth(image_t *); int image_getwidth(image_t *);
@ -50,5 +35,7 @@ int image_getheight(image_t *);
xcb_pixmap_t image_to_1bit_pixmap(image_t *, xcb_drawable_t); xcb_pixmap_t image_to_1bit_pixmap(image_t *, xcb_drawable_t);
lua_class_t image_class;
#endif #endif
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 // vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80

3
key.c
View File

@ -28,8 +28,9 @@
#include <X11/XF86keysym.h> #include <X11/XF86keysym.h>
#include "structs.h" #include "structs.h"
#include "luaa.h"
#include "common/xutil.h" #include "common/xutil.h"
#include "common/tokenize.h" #include "common/luaobject.h"
/** Grab key on a window. /** Grab key on a window.
* \param win The window. * \param win The window.

2
key.h
View File

@ -22,7 +22,7 @@
#ifndef AWESOME_KEY_H #ifndef AWESOME_KEY_H
#define AWESOME_KEY_H #define AWESOME_KEY_H
#include "luaa.h" #include "common/luaobject.h"
typedef struct keyb_t typedef struct keyb_t
{ {

View File

@ -24,6 +24,7 @@
#include "structs.h" #include "structs.h"
#include "keygrabber.h" #include "keygrabber.h"
#include "key.h" #include "key.h"
#include "luaa.h"
#include "common/xutil.h" #include "common/xutil.h"
/** Grab the keyboard. /** Grab the keyboard.

5
luaa.c
View File

@ -51,8 +51,6 @@ extern const struct luaL_reg awesome_hooks_lib[];
extern const struct luaL_reg awesome_keygrabber_lib[]; extern const struct luaL_reg awesome_keygrabber_lib[];
extern const struct luaL_reg awesome_mousegrabber_lib[]; extern const struct luaL_reg awesome_mousegrabber_lib[];
extern const struct luaL_reg awesome_root_lib[]; extern const struct luaL_reg awesome_root_lib[];
extern const struct luaL_reg awesome_image_methods[];
extern const struct luaL_reg awesome_image_meta[];
extern const struct luaL_reg awesome_mouse_methods[]; extern const struct luaL_reg awesome_mouse_methods[];
extern const struct luaL_reg awesome_mouse_meta[]; extern const struct luaL_reg awesome_mouse_meta[];
extern const struct luaL_reg awesome_screen_methods[]; extern const struct luaL_reg awesome_screen_methods[];
@ -737,8 +735,7 @@ luaA_init(xdgHandle* xdg)
button_class_setup(L); button_class_setup(L);
/* Export image */ /* Export image */
luaA_class_setup(L, &image_class, "image", (lua_class_allocator_t) image_new, image_class_setup(L);
awesome_image_methods, awesome_image_meta);
/* Export tag */ /* Export tag */
tag_class_setup(L); tag_class_setup(L);

1
luaa.h
View File

@ -30,6 +30,7 @@
#include <basedir.h> #include <basedir.h>
#include "draw.h" #include "draw.h"
#include "common/lualib.h"
#define luaA_deprecate(L, repl) \ #define luaA_deprecate(L, repl) \
luaA_warn(L, "%s: This function is deprecated and will be removed, see %s", \ luaA_warn(L, "%s: This function is deprecated and will be removed, see %s", \

View File

@ -24,6 +24,7 @@
#include "client.h" #include "client.h"
#include "structs.h" #include "structs.h"
#include "wibox.h" #include "wibox.h"
#include "luaa.h"
#include "common/tokenize.h" #include "common/tokenize.h"
#include "common/xutil.h" #include "common/xutil.h"

View File

@ -1,7 +1,7 @@
/* /*
* mousegrabber.c - mouse pointer grabbing * mousegrabber.c - mouse pointer grabbing
* *
* Copyright © 2008 Julien Danjou <julien@danjou.info> * Copyright © 2008-2009 Julien Danjou <julien@danjou.info>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -24,6 +24,7 @@
#include "structs.h" #include "structs.h"
#include "mouse.h" #include "mouse.h"
#include "mousegrabber.h" #include "mousegrabber.h"
#include "luaa.h"
#include "common/xcursor.h" #include "common/xcursor.h"
#include "common/xutil.h" #include "common/xutil.h"

View File

@ -26,9 +26,10 @@
#include "client.h" #include "client.h"
#include "ewmh.h" #include "ewmh.h"
#include "wibox.h" #include "wibox.h"
#include "window.h"
#include "luaa.h"
#include "common/atoms.h" #include "common/atoms.h"
#include "common/xutil.h" #include "common/xutil.h"
#include "window.h"
void void
property_update_wm_transient_for(client_t *c, xcb_get_property_reply_t *reply) property_update_wm_transient_for(client_t *c, xcb_get_property_reply_t *reply)

1
root.c
View File

@ -24,6 +24,7 @@
#include "structs.h" #include "structs.h"
#include "button.h" #include "button.h"
#include "wibox.h" #include "wibox.h"
#include "luaa.h"
#include "common/xcursor.h" #include "common/xcursor.h"
#include "common/tokenize.h" #include "common/tokenize.h"
#include "common/xutil.h" #include "common/xutil.h"

View File

@ -30,6 +30,7 @@
#include "client.h" #include "client.h"
#include "widget.h" #include "widget.h"
#include "wibox.h" #include "wibox.h"
#include "luaa.h"
#include "common/xutil.h" #include "common/xutil.h"
static inline area_t static inline area_t

View File

@ -25,11 +25,14 @@
#define SN_API_NOT_YET_FROZEN #define SN_API_NOT_YET_FROZEN
#include <libsn/sn.h> #include <libsn/sn.h>
#include <ev.h>
#include <xcb/xcb_icccm.h> #include <xcb/xcb_icccm.h>
#include <xcb/xcb_keysyms.h> #include <xcb/xcb_keysyms.h>
#include "config.h" #include "config.h"
#include "key.h" #include "key.h"
#include "draw.h"
#include "common/xembed.h" #include "common/xembed.h"
typedef struct wibox_t wibox_t; typedef struct wibox_t wibox_t;

1
tag.c
View File

@ -24,6 +24,7 @@
#include "client.h" #include "client.h"
#include "ewmh.h" #include "ewmh.h"
#include "widget.h" #include "widget.h"
#include "luaa.h"
/** Tag type */ /** Tag type */
struct tag struct tag

View File

@ -24,6 +24,7 @@
#include "structs.h" #include "structs.h"
#include "luaa.h" #include "luaa.h"
#include "timer.h" #include "timer.h"
#include "common/luaobject.h"
typedef struct typedef struct
{ {

View File

@ -1,7 +1,7 @@
/* /*
* titlebar.c - titlebar management * titlebar.c - titlebar management
* *
* Copyright © 2008 Julien Danjou <julien@danjou.info> * Copyright © 2008-2009 Julien Danjou <julien@danjou.info>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -26,6 +26,7 @@
#include "widget.h" #include "widget.h"
#include "wibox.h" #include "wibox.h"
#include "screen.h" #include "screen.h"
#include "luaa.h"
/** Get a client by its titlebar. /** Get a client by its titlebar.
* \param titlebar The titlebar. * \param titlebar The titlebar.

View File

@ -27,6 +27,7 @@
#include "client.h" #include "client.h"
#include "screen.h" #include "screen.h"
#include "window.h" #include "window.h"
#include "luaa.h"
#include "common/xcursor.h" #include "common/xcursor.h"
#include "common/xutil.h" #include "common/xutil.h"

View File

@ -23,6 +23,7 @@
#define AWESOME_WIBOX_H #define AWESOME_WIBOX_H
#include "widget.h" #include "widget.h"
#include "common/luaobject.h"
/** Wibox types */ /** Wibox types */
typedef enum typedef enum

View File

@ -29,6 +29,7 @@
#include "widget.h" #include "widget.h"
#include "wibox.h" #include "wibox.h"
#include "client.h" #include "client.h"
#include "luaa.h"
#include "common/atoms.h" #include "common/atoms.h"
#include "common/xutil.h" #include "common/xutil.h"

View File

@ -23,6 +23,7 @@
#include <math.h> #include <math.h>
#include "widget.h" #include "widget.h"
#include "luaa.h"
#include "common/tokenize.h" #include "common/tokenize.h"
typedef enum typedef enum

View File

@ -1,7 +1,7 @@
/* /*
* imagebox.c - imagebox widget * imagebox.c - imagebox widget
* *
* Copyright © 2008 Julien Danjou <julien@danjou.info> * Copyright © 2008-2009 Julien Danjou <julien@danjou.info>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -20,6 +20,7 @@
*/ */
#include "widget.h" #include "widget.h"
#include "luaa.h"
#include "titlebar.h" #include "titlebar.h"
/** The imagebox private data structure */ /** The imagebox private data structure */

View File

@ -20,8 +20,9 @@
* *
*/ */
#include "common/tokenize.h"
#include "widget.h" #include "widget.h"
#include "luaa.h"
#include "common/tokenize.h"
/** Progressbar bar data structure */ /** Progressbar bar data structure */
typedef struct typedef struct

View File

@ -21,6 +21,7 @@
#include "widget.h" #include "widget.h"
#include "wibox.h" #include "wibox.h"
#include "luaa.h"
#include "common/tokenize.h" #include "common/tokenize.h"
/** The textbox private data structure */ /** The textbox private data structure */