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);