some Widget Systems need a total re-write

Reporter: time-killer-games  |  Status: open  |  Last Modified: March 27, 2019, 06:21:36 AM

I'm leaving this issue as a reminder to myself that all the current Widget Systems need a total re-write. This will later act as a checklist as I very gradually complete each long-term goal listed down below:

  • Windows Widgets needs UTF-8 support and needs 100% consistent compatibility with the other Widget Systems and GameMaker, (right now it currently has several GML and EDL functions left out that the other system do have). We need this to be GM compatible and cross-platform with the other systems, with full Unicode support. Right now, none of this is the case. We even have that redundant get_number function in there when really that function should be renamed and replace get_integer because in GM get_integer takes and returns a double, it does not take or return an int. Some dialogs will run out of space and strings displayed will be truncated because the dialogs do not automatically resize to fit their contents, which is pretty sloppy and lazy, in my honest opinion. When this is done, we will also get rid of DlgMod, because that Widget System never really worked anyway, to begin with, and it's eating up space on the repository, so I'd rather just assume it gets removed. Can I get an "Amen"?

  • OsaScript needs to be re-written from being C popen() calls launching AppleScript via the osascript terminal command to being written in C++ linked to native Objective-C or Swift. Swift is probably better, but I already know Objective-C and AppleScript and can't be arsed to learn yet another fucked up language invented and/or preferred by Apple. Needs support for a dropdown box to let the user select from multiple file filters defined by the developer for the "open" and "save as" file dialogs.

  • Zenity and KDialog need a clean break from the Tiny File Dialogs dependency. I have already done this with my extension for GameMaker Studio 2. Now I just need to format that code to comply with Josh's standards so it can be implemented into ENIGMA. Originally, the plan was to replace Zenity and KDialog with native GTK+ and KDE code, but I realized this has licensing issues as GTK+ is GPL and KDE is based on Qt which is also GPL. Since we are looking to form a linking exception for the games produced with ENIGMA, I do not want our Widgets Systems forcing our users to share the source code of their games in order to legally distribute them. Alas, GPL rules do not apply to Zenity or KDialog as they are techincally not a part of ENIGMA's internal source code, nor does ENIGMA link to them in the form of a shared library; Zenity and KDialog are not shared libraries, but rather, command line executables, and the Widget Systems themselves simply execute them from C popen() calls and then read the returning output. Therefore, these systems are still highly preferred as your games can remain closed-source once Josh gets that linking exception sorted out...

  • <
time-killer-games  
@RobertBColton When we get this list of tasks completely finished is it ok if you could post an announcement about it? Basically, just to let all users know the widgets at that point will be considered 100% cross-platform and stable on Windows, Mac, and Linux, as well as outlining the new set of functions available which I can write the summary for. It's refreshing to see I'm already half way done with the list!
RobertBColton  

That's fine, I won't have too much to add to what you've stated. If you want to author the announcement as a forum post, you can, and I have the power to move it to announcements without asking anybody. Please include a high-level overview of what's better, share relevant commits, go into detail, be positive. Follow existing announcements as a general rule.

You can post it anywhere, General ENIGMA is fine, and I'll be able to move it. Wait until you're ready though so people don't preemptively hijack the topic.

time-killer-games  

Will do! Thanks man! :D
Please sign in to post comments, or you can view this issue on GitHub.