Skip to content

Commit 0db82e8

Browse files
[lib] update
1 parent c289eb3 commit 0db82e8

27 files changed

+1025
-324
lines changed

CMakeLists.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,7 @@ add_library(moduletsunami SHARED
762762
src/lib/hui/Controls/ToolItemSeparatorWin.cpp
763763
src/lib/hui/Controls/ToolItemToggleButtonGtk.cpp
764764
src/lib/hui/Controls/ToolItemToggleButtonWin.cpp
765+
src/lib/hui/_kaba_export.cpp
765766
src/lib/hui/Application.cpp
766767
src/lib/hui/Callback.cpp
767768
src/lib/hui/Clipboard.cpp
@@ -883,6 +884,7 @@ add_library(moduletsunami SHARED
883884
src/lib/net/BinaryBuffer.cpp
884885
src/lib/net/net.cpp
885886
src/lib/net/Socket.cpp
887+
src/lib/nix/_kaba_export.cpp
886888
src/lib/nix/nix.cpp
887889
src/lib/nix/nix_buffer.cpp
888890
src/lib/nix/nix_draw.cpp
@@ -892,6 +894,7 @@ add_library(moduletsunami SHARED
892894
src/lib/nix/nix_textures.cpp
893895
src/lib/nix/nix_vertexbuffer.cpp
894896
src/lib/nix/nix_view.cpp
897+
src/lib/os/app.cpp
895898
src/lib/os/CommandLineParser.cpp
896899
src/lib/os/config.cpp
897900
src/lib/os/date.cpp
@@ -1114,7 +1117,7 @@ add_library(moduletsunami SHARED
11141117
target_include_directories(moduletsunami PUBLIC ${INCLUDE_DIRECTORIES})
11151118
target_link_directories(moduletsunami PUBLIC ${LINK_DIRECTORIES})
11161119
target_compile_options(moduletsunami PUBLIC ${COMPILE_OPTIONS})
1117-
target_compile_definitions(moduletsunami PUBLIC ${COMPILE_DEFINITIONS} INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
1120+
target_compile_definitions(moduletsunami PUBLIC ${COMPILE_DEFINITIONS} SOURCE_ROOT="${CMAKE_SOURCE_DIR}" INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
11181121
target_link_libraries(moduletsunami PUBLIC ${DEPS})
11191122
if (NOT WIN32)
11201123
target_compile_options(moduletsunami PUBLIC -fvisibility=hidden)
@@ -1318,6 +1321,7 @@ add_executable(tsunami WIN32
13181321
src/lib/hui/Controls/ToolItemSeparatorWin.cpp
13191322
src/lib/hui/Controls/ToolItemToggleButtonGtk.cpp
13201323
src/lib/hui/Controls/ToolItemToggleButtonWin.cpp
1324+
src/lib/hui/_kaba_export.cpp
13211325
src/lib/hui/Application.cpp
13221326
src/lib/hui/Callback.cpp
13231327
src/lib/hui/Clipboard.cpp
@@ -1439,6 +1443,7 @@ add_executable(tsunami WIN32
14391443
src/lib/net/BinaryBuffer.cpp
14401444
src/lib/net/net.cpp
14411445
src/lib/net/Socket.cpp
1446+
src/lib/nix/_kaba_export.cpp
14421447
src/lib/nix/nix.cpp
14431448
src/lib/nix/nix_buffer.cpp
14441449
src/lib/nix/nix_draw.cpp
@@ -1448,6 +1453,7 @@ add_executable(tsunami WIN32
14481453
src/lib/nix/nix_textures.cpp
14491454
src/lib/nix/nix_vertexbuffer.cpp
14501455
src/lib/nix/nix_view.cpp
1456+
src/lib/os/app.cpp
14511457
src/lib/os/CommandLineParser.cpp
14521458
src/lib/os/config.cpp
14531459
src/lib/os/date.cpp
@@ -1669,7 +1675,7 @@ add_executable(tsunami WIN32
16691675
target_include_directories(tsunami PUBLIC ${INCLUDE_DIRECTORIES})
16701676
target_link_directories(tsunami PUBLIC ${LINK_DIRECTORIES})
16711677
target_compile_options(tsunami PUBLIC ${COMPILE_OPTIONS})
1672-
target_compile_definitions(tsunami PUBLIC ${COMPILE_DEFINITIONS} INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
1678+
target_compile_definitions(tsunami PUBLIC ${COMPILE_DEFINITIONS} SOURCE_ROOT="${CMAKE_SOURCE_DIR}" INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
16731679
target_link_libraries(tsunami PUBLIC ${DEPS})
16741680
target_include_directories(tsunami PUBLIC src)
16751681
target_include_directories(tsunami PUBLIC src/lib)

plugins/synthesizer/Font.kaba

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ struct MidiFont
2222
for s in sub
2323
s.song = new Song(s, DEFAULT_SAMPLE_RATE)
2424
song = weak(s.song)
25-
s.storage.load(s.song, hui.app_directory | "Midi Fonts/{{name}}.nami")
25+
s.storage.load(s.song, os.app_directory_dynamic | "Midi Fonts/{{name}}.nami")
2626

2727
func mut instruments(session: Session) -> string[]
2828
load(session)
@@ -70,7 +70,7 @@ class FontList as @noauto
7070

7171
#string[] find_drumsets()
7272
func mut update()
73-
let list = os.fs.search(hui.app_directory | "Midi Fonts", "*.nami", "f")
73+
let list = os.fs.search(os.app_directory_dynamic | "Midi Fonts", "*.nami", "f")
7474
for e in list
7575
let name = str(e)[:-5]
7676
for x in find(name)

src/lib/hui/Application.cpp

Lines changed: 28 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
#include <gtk/gtk.h>
2323

24+
#include "../os/app.h"
25+
2426
#ifdef OS_WINDOWS
2527
#include <windows.h>
2628
#endif
@@ -43,12 +45,8 @@ GtkApplication *Application::application = nullptr;
4345
base::map<string, string> Application::_properties_;
4446

4547
Flags Application::flags = Flags::NONE;
46-
Path Application::filename;
47-
Path Application::directory;
48-
Path Application::directory_static;
49-
Path Application::initial_working_directory;
50-
bool Application::installed;
5148
bool Application::adwaita_started = false;
49+
bool Application::allowed = true;
5250

5351
Array<string> Application::_args;
5452

@@ -87,46 +85,51 @@ void _init_global_css_classes_() {
8785
#endif
8886
}
8987

88+
void init_low_level() {
89+
_InitInput_();
90+
new(&Application::_properties_) base::map<string, string>();
91+
92+
separator = "\\";
93+
_using_language_ = false;
94+
}
95+
9096
Application::Application(const string &app_name, const string &def_lang, Flags _flags) {
97+
init_low_level();
9198
flags = _flags;
9299

93100
#ifdef HUI_API_GTK
94101
g_set_prgname(app_name.c_str());
95102
#endif
96103

97-
guess_directories(_args, app_name);
104+
os::app::detect(_args, app_name);
98105

99106

100-
_InitInput_();
101-
102-
separator = "\\";
103-
_using_language_ = false;
104107
if ((flags & Flags::NO_ERROR_HANDLER) == 0)
105108
SetDefaultErrorHandler(nullptr);
106109

107-
if (os::fs::exists(directory | "config.txt"))
108-
config.load(directory | "config.txt");
110+
if (os::fs::exists(os::app::directory_dynamic | "config.txt"))
111+
config.load(os::app::directory_dynamic | "config.txt");
109112

110113

111114
if ((flags & Flags::DONT_LOAD_RESOURCE) == 0)
112-
load_resource(directory_static | "hui_resources.txt");
115+
load_resource(os::app::directory_static | "hui_resources.txt");
113116

114117
if (def_lang.num > 0)
115118
set_language(config.get_str("Language", def_lang));
116119

117120

118121
// default "logo" used for "about" dialog (full path)
119122
#if defined(OS_LINUX) || defined(OS_MAC)
120-
if (os::fs::exists(directory_static | "icons" | "hicolor" | "scalable" | "apps" | (app_name + ".svg")))
121-
set_property("logo", str(directory_static | "icons" | "hicolor" | "scalable" | "apps" | (app_name + ".svg")));
122-
else if (os::fs::exists(directory_static | "icon.svg"))
123-
set_property("logo", str(directory_static | "icon.svg"));
123+
if (os::fs::exists(os::app::directory_static | "icons" | "hicolor" | "scalable" | "apps" | (app_name + ".svg")))
124+
set_property("logo", str(os::app::directory_static | "icons" | "hicolor" | "scalable" | "apps" | (app_name + ".svg")));
125+
else if (os::fs::exists(os::app::directory_static | "icon.svg"))
126+
set_property("logo", str(os::app::directory_static | "icon.svg"));
124127
else
125128
#endif
126-
if (os::fs::exists(directory_static | "icon.png"))
127-
set_property("logo", str(directory_static | "icon.png"));
128-
else if (os::fs::exists(directory_static | "icon.ico"))
129-
set_property("logo", str(directory_static | "icon.ico"));
129+
if (os::fs::exists(os::app::directory_static | "icon.png"))
130+
set_property("logo", str(os::app::directory_static | "icon.png"));
131+
else if (os::fs::exists(os::app::directory_static | "icon.ico"))
132+
set_property("logo", str(os::app::directory_static | "icon.ico"));
130133

131134
// default "icon" used for windows (just name)
132135
set_property("icon", app_name);
@@ -136,7 +139,7 @@ Application::~Application() {
136139
//foreachb(Window *w, _all_windows_)
137140
// delete(w);
138141
if (config.changed)
139-
config.save(directory | "config.txt");
142+
config.save(os::app::directory_dynamic | "config.txt");
140143
if ((msg_inited) /*&& (HuiMainLevel == 0)*/)
141144
msg_end();
142145

@@ -160,67 +163,6 @@ Path strip_dev_dirs(const Path &p) {
160163
return p;
161164
}
162165

163-
// filename -> executable file
164-
// directory ->
165-
// NONINSTALLED: binary dir
166-
// INSTALLED: ~/.MY_APP/ <<< now always this
167-
// directory_static ->
168-
// NONINSTALLED: binary dir/static/
169-
// INSTALLED: /usr/local/share/MY_APP/
170-
// initial_working_directory -> working dir before running this program
171-
void Application::guess_directories(const Array<string> &arg, const string &app_name) {
172-
173-
initial_working_directory = os::fs::current_directory();
174-
installed = false;
175-
176-
177-
// executable file
178-
#if defined(OS_LINUX) || defined(OS_MAC) || defined(OS_MINGW) //defined(__GNUC__) || defined(OS_LINUX)
179-
if (arg.num > 0)
180-
filename = arg[0];
181-
#else // OS_WINDOWS
182-
char *ttt = nullptr;
183-
int r = _get_pgmptr(&ttt);
184-
filename = ttt;
185-
hui_win_instance = (void*)GetModuleHandle(nullptr);
186-
#endif
187-
188-
189-
// first, assume a local/non-installed version
190-
directory = initial_working_directory; //strip_dev_dirs(filename.parent());
191-
directory_static = directory | "static";
192-
193-
#ifdef INSTALL_PREFIX
194-
// our build system should define this:
195-
Path prefix = INSTALL_PREFIX;
196-
#else
197-
// oh no... fall-back
198-
Path prefix = "/usr/local";
199-
#endif
200-
201-
#if defined(OS_LINUX) || defined(OS_MAC) || defined(OS_MINGW) //defined(__GNUC__) || defined(OS_LINUX)
202-
// installed version?
203-
if (filename.is_in(prefix) or (filename.str().find("/") < 0)) {
204-
installed = true;
205-
directory_static = prefix | "share" | app_name;
206-
}
207-
208-
// inside an AppImage?
209-
if (getenv("APPIMAGE")) {
210-
installed = true;
211-
directory_static = Path(getenv("APPDIR")) | "usr" | "share" | app_name;
212-
}
213-
214-
// inside MacOS bundle?
215-
if (str(filename).find(".app/Contents/MacOS/") >= 0) {
216-
installed = true;
217-
directory_static = filename.parent().parent() | "Resources";
218-
}
219-
220-
directory = format("%s/.%s/", getenv("HOME"), app_name);
221-
os::fs::create_directory(directory);
222-
#endif
223-
}
224166

225167
#if GTK_CHECK_VERSION(4,0,0)
226168
static bool keep_running = true;
@@ -246,7 +188,7 @@ static void on_gtk_application_activate(GApplication *_g_app, gpointer user_data
246188

247189
// add local icon theme
248190
auto icon_theme = gtk_icon_theme_get_for_display(gdk_display_get_default());
249-
gtk_icon_theme_add_search_path(icon_theme, str(Application::directory_static | "icons").c_str());
191+
gtk_icon_theme_add_search_path(icon_theme, str(os::app::directory_static | "icons").c_str());
250192

251193
if (_run_after_gui_init_func_)
252194
_run_after_gui_init_func_();
@@ -324,6 +266,8 @@ void Application::set_property(const string &name, const string &value) {
324266
}
325267

326268
string Application::get_property(const string &name) {
269+
if (!_properties_.contains(name))
270+
return "";
327271
try {
328272
return _properties_[name];
329273
} catch(...) {

src/lib/hui/Application.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ class Application : public VirtualBase {
5151
int run();
5252
static void do_single_main_loop();
5353

54-
static void guess_directories(const Array<string> &arg, const string &app_name);
55-
5654

5755

5856
static void _cdecl about_box(Window *win);
@@ -61,13 +59,9 @@ class Application : public VirtualBase {
6159

6260
static base::map<string, string> _properties_;
6361

64-
static Path filename;
65-
static Path directory; // dir of changeable files (ie. ~/.app/)
66-
static Path directory_static; // dir of static files (ie. /usr/shar/app)
67-
static Path initial_working_directory;
68-
static bool installed; // installed into system folders?
6962
static bool adwaita_started;
7063
static Flags flags;
64+
static bool allowed;
7165

7266
static Array<string> _args;
7367

@@ -78,12 +72,14 @@ class Application : public VirtualBase {
7872
}
7973

8074
#define HUI_EXECUTE(APP_CLASS) \
81-
int hui_main(const Array<string> &args) { \
75+
namespace os::app { \
76+
int main(const Array<string> &args) { \
8277
APP_CLASS::_args = args; \
8378
APP_CLASS *app = new APP_CLASS; \
8479
int r = app->try_execute(args); \
8580
delete app; \
8681
return r; \
82+
} \
8783
}
8884

8985
#endif /* HUIAPPLICATION_H_ */

src/lib/hui/MenuGtk.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
#include <gtk/gtk.h>
1212

13+
#include "../os/app.h"
14+
1315
#ifdef HUGE
1416
#undef HUGE
1517
#endif
@@ -231,7 +233,7 @@ GtkIconTheme *get_hui_icon_theme() {
231233
if (!hui_icon_theme) {
232234
hui_icon_theme = gtk_icon_theme_new();
233235
#if GTK_CHECK_VERSION(4,0,0)
234-
gtk_icon_theme_add_search_path(hui_icon_theme, sys_str_f(Application::directory_static | "icons"));
236+
gtk_icon_theme_add_search_path(hui_icon_theme, sys_str_f(os::app::directory_static | "icons"));
235237
/*gtk_icon_theme_add_search_path(hui_icon_theme, sys_str_f(Application::directory_static | "icons" | "64x64"));
236238
gtk_icon_theme_add_search_path(hui_icon_theme, sys_str_f(Application::directory_static | "icons" | "48x48"));
237239
gtk_icon_theme_add_search_path(hui_icon_theme, sys_str_f(Application::directory_static | "icons" | "32x32"));*/
@@ -348,7 +350,7 @@ GtkWidget *get_gtk_image_x(const string &image, IconSize size, GtkWidget *widget
348350
// if ((img->filename[0] == '/') or (img->filename[1] == ':'))
349351
// return gtk_image_new_from_file(sys_str_f(img->filename));
350352
// relative
351-
return gtk_image_new_from_file(sys_str_f(Application::directory_static | image));
353+
return gtk_image_new_from_file(sys_str_f(os::app::directory_static | image));
352354
}
353355
}
354356
void *get_gtk_image(const string &image, IconSize size) {

0 commit comments

Comments
 (0)