# HG changeset patch # User Mike Becker # Date 1760384262 -7200 # Node ID 7845f5872bed903519eae3552fa8da10cb5c1ae0 # Parent 97a1a7fb4f1a05a0f620ae24a9abb62af7f8bea5 start a sub-project to implement a texture atlas editor diff -r 97a1a7fb4f1a -r 7845f5872bed .hgignore --- a/.hgignore Thu Oct 09 19:22:21 2025 +0200 +++ b/.hgignore Mon Oct 13 21:37:42 2025 +0200 @@ -2,5 +2,6 @@ nbproject/ build/ dist/ +toolkit/ shader/.*\.h config.mk diff -r 97a1a7fb4f1a -r 7845f5872bed Makefile --- a/Makefile Thu Oct 09 19:22:21 2025 +0200 +++ b/Makefile Mon Oct 13 21:37:42 2025 +0200 @@ -23,7 +23,7 @@ # POSSIBILITY OF SUCH DAMAGE. # -all: snake +all: snake tools snake: build/lib/libascension.a FORCE @cd demo/snake && $(MAKE) @@ -31,6 +31,9 @@ build/lib/libascension.a: config.mk FORCE @cd src && $(MAKE) +tools: config.mk FORCE + cd tools && $(MAKE) + clean: rm -f -R build diff -r 97a1a7fb4f1a -r 7845f5872bed configure --- a/configure Thu Oct 09 19:22:21 2025 +0200 +++ b/configure Mon Oct 13 21:37:42 2025 +0200 @@ -112,6 +112,7 @@ Optional Features: --enable-asan Enable address sanitization. + --enable-tools Enable compilation of tools. __EOF__ } @@ -152,6 +153,7 @@ if true \ ; then SRCDIR=`pwd` + TOOLKIT_HOME="${TOOLKIT_HOME:=/usr}" fi # features @@ -183,6 +185,8 @@ "--release") BUILD_TYPE="release" ;; "--enable-asan") FEATURE_ASAN=on ;; "--disable-asan") unset FEATURE_ASAN ;; + "--enable-tools") FEATURE_TOOLS=on ;; + "--disable-tools") unset FEATURE_TOOLS ;; "-"*) echo "unknown option: $ARG"; abort_configure ;; esac done @@ -343,6 +347,64 @@ dep_checked_sdl3_ttf=1 return 0 } +dependency_error_gtk3() +{ + print_check_msg "$dep_checked_gtk3" "checking for gtk3... " + # dependency gtk3 + while true + do + if [ -z "$PKG_CONFIG" ]; then + break + fi + if test_pkg_config "gtk+-3.0" "" "" "" ; then + TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk+-3.0`" + TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk+-3.0`" + else + break + fi + TEMP_CFLAGS="$TEMP_CFLAGS -DUI_GTK3" + TEMP_LDFLAGS="$TEMP_LDFLAGS -lpthread" + print_check_msg "$dep_checked_gtk3" "yes\n" + dep_checked_gtk3=1 + return 1 + done + + print_check_msg "$dep_checked_gtk3" "no\n" + dep_checked_gtk3=1 + return 0 +} +dependency_error_toolkit() +{ + print_check_msg "$dep_checked_toolkit" "checking for toolkit... " + # dependency toolkit + while true + do + if test -n "$TOOLKIT_HOME" > /dev/null ; then + : + else + break + fi + if test -f "$TOOLKIT_HOME/lib/libuitk.a" > /dev/null ; then + : + else + break + fi + if test -f "$TOOLKIT_HOME/include/ui/ui.h" > /dev/null ; then + : + else + break + fi + TEMP_CFLAGS="$TEMP_CFLAGS -I$TOOLKIT_HOME/include" + TEMP_LDFLAGS="$TEMP_LDFLAGS $TOOLKIT_HOME/lib/libuitk.a" + print_check_msg "$dep_checked_toolkit" "yes\n" + dep_checked_toolkit=1 + return 1 + done + + print_check_msg "$dep_checked_toolkit" "no\n" + dep_checked_toolkit=1 + return 0 +} dependency_error_glew() { print_check_msg "$dep_checked_glew" "checking for glew... " @@ -555,6 +617,52 @@ echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" fi +echo >> "$TEMP_DIR/flags.mk" +echo "configuring target: tools" +echo "# flags for target tools" >> "$TEMP_DIR/flags.mk" +TEMP_CFLAGS= +TEMP_CXXFLAGS= +TEMP_LDFLAGS= + +if dependency_error_toolkit; then + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED toolkit " + ERROR=1 +fi +if dependency_error_gtk3; then + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED gtk3 " + ERROR=1 +fi +if dependency_error_ucx; then + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ucx " + ERROR=1 +fi + +# Features +if [ -n "$FEATURE_TOOLS" ]; then + if [ -n "$DISABLE_FEATURE_TOOLS" ]; then + unset FEATURE_TOOLS + fi +fi +if [ -n "$FEATURE_TOOLS" ]; then + : +else + : + cat >> "$TEMP_DIR/make.mk" << __EOF__ +NO_TOOLS=1 +__EOF__ +fi + + +if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then + echo "TOOLS_CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" +fi +if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then + echo "TOOLS_CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" +fi +if [ -n "${TEMP_LDFLAGS}" ]; then + echo "TOOLS_LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" +fi + # final result if [ $ERROR -ne 0 ]; then @@ -633,6 +741,11 @@ else echo " asan: off" fi +if [ -n "$FEATURE_TOOLS" ]; then +echo " tools: on" +else +echo " tools: off" +fi echo # generate the config.mk file diff -r 97a1a7fb4f1a -r 7845f5872bed make/project.xml --- a/make/project.xml Thu Oct 09 19:22:21 2025 +0200 +++ b/make/project.xml Mon Oct 13 21:37:42 2025 +0200 @@ -2,6 +2,7 @@ pwd + ${TOOLKIT_HOME:=/usr} c @@ -35,6 +36,20 @@ -fsanitize=address + + test -n "$TOOLKIT_HOME" + test -f "$TOOLKIT_HOME/lib/libuitk.a" + test -f "$TOOLKIT_HOME/include/ui/ui.h" + -I$TOOLKIT_HOME/include + $TOOLKIT_HOME/lib/libuitk.a + + + + gtk+-3.0 + -DUI_GTK3 + -lpthread + + Enable address sanitization. @@ -42,5 +57,14 @@ ucx,sdl3,sdl3_ttf,sdl3_image,glew + + + Enable compilation of tools. + + NO_TOOLS=1 + + + toolkit,gtk3,ucx + diff -r 97a1a7fb4f1a -r 7845f5872bed tools/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/Makefile Mon Oct 13 21:37:42 2025 +0200 @@ -0,0 +1,47 @@ +# Copyright 2025 Mike Becker. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +include ../config.mk + +BUILD_DIR=../build/tools + +all: + @if test -z "$(NO_TOOLS)"; then \ + $(MAKE) tools; \ + else \ + echo "Tools compilation skipped."; \ + fi + +tools: atlas-editor + +$(BUILD_DIR): + mkdir -p $@ + +atlas-editor: $(BUILD_DIR) $(BUILD_DIR)/atlas-editor + @echo "Texture atlas editor compiled and linked." + +$(BUILD_DIR)/atlas-editor: atlas-editor.c + $(CC) -o $@ $(TOOLS_CFLAGS) $^ $(TOOLS_LDFLAGS) + diff -r 97a1a7fb4f1a -r 7845f5872bed tools/atlas-editor.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/atlas-editor.c Mon Oct 13 21:37:42 2025 +0200 @@ -0,0 +1,46 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * Copyright 2025 Mike Becker. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +static void application_startup([[maybe_unused]] UiEvent *event, [[maybe_unused]] void *data) { + UiObject *window = ui_window("Ascension - Texture Atlas Editor", NULL); + + ui_show(window); +} + +int main(int argc, char** argv) { + ui_init("asc_atlas_editor", argc, argv); + ui_onstartup(application_startup, NULL); + + ui_set_property("ui.gtk.window.showtitle", "sidebar"); + ui_set_property("ui.gtk.window.appmenu.position", "rightpanel"); + + ui_main(); + + return 0; +}