Mercurial > molko
changeset 354:2dbe1cf6b544
js: add color bindings
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 21 Oct 2021 13:45:36 +0200 |
parents | 975bd174a3b1 |
children | 3b2eed504c61 |
files | src/libmlk-core-js/CMakeLists.txt src/libmlk-core-js/core/js-color.c src/libmlk-core-js/core/js-color.h src/mlk-run/main.c |
diffstat | 4 files changed, 116 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/libmlk-core-js/CMakeLists.txt Thu Oct 21 08:23:50 2021 +0200 +++ b/src/libmlk-core-js/CMakeLists.txt Thu Oct 21 13:45:36 2021 +0200 @@ -24,6 +24,8 @@ ${libmlk-core-js_SOURCE_DIR}/core/js-animation.h ${libmlk-core-js_SOURCE_DIR}/core/js-clock.c ${libmlk-core-js_SOURCE_DIR}/core/js-clock.h + ${libmlk-core-js_SOURCE_DIR}/core/js-color.c + ${libmlk-core-js_SOURCE_DIR}/core/js-color.h ${libmlk-core-js_SOURCE_DIR}/core/js-core.c ${libmlk-core-js_SOURCE_DIR}/core/js-core.h ${libmlk-core-js_SOURCE_DIR}/core/js-event.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/libmlk-core-js/core/js-color.c Thu Oct 21 13:45:36 2021 +0200 @@ -0,0 +1,85 @@ +/* + * js-color.c -- core color binding + * + * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <assert.h> + +#include <core/color.h> + +#include "js-color.h" + +static inline unsigned int +component(duk_context *ctx, duk_idx_t ind, const char *prop, unsigned int def) +{ + unsigned int value = 0; + + if (duk_is_object(ctx, 0)) { + duk_get_prop_string(ctx, 0, prop); + value = duk_get_uint_default(ctx, -1, def); + duk_pop(ctx); + } else + value = duk_get_uint_default(ctx, ind, def); + + return value; +} + +static duk_ret_t +Color_fromRGB(duk_context *ctx) +{ + const unsigned int r = component(ctx, 0, "r", 0); + const unsigned int g = component(ctx, 1, "g", 0); + const unsigned int b = component(ctx, 2, "b", 0); + const unsigned int a = component(ctx, 3, "a", 255); + + duk_push_number(ctx, COLOR_HEX(r, g, b, a)); + + return 1; +} + +static duk_ret_t +Color_toRGB(duk_context *ctx) +{ + const unsigned long hex = duk_require_uint(ctx, 0); + + duk_push_object(ctx); + duk_push_uint(ctx, COLOR_R(hex)); + duk_put_prop_string(ctx, -2, "r"); + duk_push_uint(ctx, COLOR_G(hex)); + duk_put_prop_string(ctx, -2, "g"); + duk_push_uint(ctx, COLOR_B(hex)); + duk_put_prop_string(ctx, -2, "b"); + duk_push_uint(ctx, COLOR_A(hex)); + duk_put_prop_string(ctx, -2, "a"); + + return 1; +} + +static const duk_function_list_entry functions[] = { + { "fromRGB", Color_fromRGB, DUK_VARARGS }, + { "toRGB", Color_toRGB, 1 }, + { NULL, NULL, 0 } +}; + +void +js_color_bind(duk_context *ctx) +{ + assert(ctx); + + duk_push_object(ctx); + duk_put_function_list(ctx, -1, functions); + duk_put_global_string(ctx, "Color"); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/libmlk-core-js/core/js-color.h Thu Oct 21 13:45:36 2021 +0200 @@ -0,0 +1,27 @@ +/* + * js-color.h -- core color binding + * + * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef MLK_CORE_JS_COLOR_H +#define MLK_CORE_JS_COLOR_H + +#include <duktape.h> + +void +js_color_bind(duk_context *); + +#endif /* !MLK_CORE_JS_COLOR_H */
--- a/src/mlk-run/main.c Thu Oct 21 08:23:50 2021 +0200 +++ b/src/mlk-run/main.c Thu Oct 21 13:45:36 2021 +0200 @@ -28,6 +28,7 @@ #include <core/js-animation.h> #include <core/js-clock.h> +#include <core/js-color.h> #include <core/js-core.h> #include <core/js-event.h> #include <core/js-font.h> @@ -59,6 +60,7 @@ { js_animation_bind(ctx); js_clock_bind(ctx); + js_color_bind(ctx); js_core_bind(ctx, &vfs); js_event_bind(ctx); js_font_bind(ctx);