Open Collective
Open Collective
Loading
January 2022 Development Notes For Embroidermodder 2
Published on January 29, 2022 by Robin Swift

Hi backers,

since the last update development has been focused on mostly not user-facing aspects of the program. This is what we planned in the timetable, aiming to release the libembroidery library for the end of the month.

The idea being that if we can fix an API for libembroidery early, it will focus development into a program that remains more consistent by the height of the Summer.

Unfortunately, this was too ambitious. But we can discuss what has changed, and why a later date is better than focusing on hitting this milestone.

Broad Development Goals

We want:
  1. A small codebase.
  2. A separation of code and data in procedural style.
  3. A separation of basic library functions from GUI code.
  4. A build system without non-standard dependencies (i.e. not including windows.h, X11, GL).
  5. A software that runs without installation
  6. A software that can keep records of its state that can be loaded on reboot
To meet these goals we are making a C/FreeGLUT application:
  1. Runs on more systems because it has less (and less high level) dependencies.
  2. Requires less specialist knowledge from our potential new developers of Qt, C++ and the build system.
  3. Compiles with less faff since the only dependencies are the graphics libraries of the host system (meeting broad development goal 4).
Other decisions made to meet these goals are detailed below.

The New Settings System

In the attempt to convert the mostly C++ codebase to C, we developed a basic system for storing the data of Embroidermodder (including all the icons) as a single JSON file weighing in at about 6Mb.

This allows the second broad development goal to be met.

Reducing Reliance on Qt5

The FreeGLUT variant of the code (in gui.c) will eventually be the software.

The broad development goals should make that very complex change a sequence of smaller, less complex changes. For example: breaking apart highly object-oriented code that relies on high level Qt function calls into data and code and then seperating out the code parts into C and C++ functions.

Color Palettes

Using a custom script we converted all the icons into xpm, then using another reduced their palettes down to 16 colors + transparency.

This hasn't affected their appearance significantly, and makes making a global GUI palette feasible. With a global GUI palette we can make icon themes be a simple remap of the palette.

Conclusion

Overall, the software is easier to understand. But not easy enough for it to be worth committing to extensive documentation that will likely have to change. This also makes deciding on a API difficult.

Based on this, a short term aim can be writing more high level documentation like this update to clarify (even just to the team) why we made the decisions we have.

Cheers,

Robin Swift
The Embroidermodder Team