From 482d6a89e0425d2a70ea7a4268b0f598c857fa77 Mon Sep 17 00:00:00 2001 From: Alvarito050506 Date: Tue, 6 Jul 2021 15:26:10 -0300 Subject: [PATCH] v0.12.0 I guess --- Makefile | 14 +++++++------- res/doc/gmcpil/CHANGELOG.txt | 4 ++++ screenshot.png | Bin 28342 -> 26380 bytes src/config.c | 8 +++++++- src/features.c | 30 +++++++++++++++--------------- src/include/config.h | 26 ++++++++++++++++++++++++-- src/include/mcpil.h | 2 -- src/mcpil.c | 3 +-- src/play.c | 16 ++++------------ 9 files changed, 62 insertions(+), 41 deletions(-) diff --git a/Makefile b/Makefile index 8a9630e..9e4f632 100644 --- a/Makefile +++ b/Makefile @@ -21,18 +21,18 @@ # ifdef USE_CLANG +ifeq ($(origin CC),default) CC:=clang -ARM_CC:=clang -target arm-linux-gnueabihf +endif +STRIP?=llvm-strip LDFLAGS:=-fuse-ld=lld -STRIP:=llvm-strip -ARM_STRIP:=${STRIP} ARCH:=$(shell $(CC) -dumpmachine | grep -Eo "arm|aarch|86|x86_64") else +ifeq ($(origin CC),default) CC:=gcc -ARM_CC:=arm-linux-gnueabihf-gcc +endif +STRIP?=strip LDFLAGS:= -STRIP:=strip -ARM_STRIP:=arm-linux-gnueabihf-strip ARCH:=$(shell $(CC) -print-multiarch | grep -Eo "arm|aarch|86|x86_64") endif @@ -40,7 +40,7 @@ VERSION:=0.12.0 OBJS:=$(patsubst %,build/%.o,mcpil config features play servers) -CFLAGS:=-DGMCPIL_VERSION=\"v$(VERSION)\" -I./src/include -Wall -Wno-address-of-packed-member -Wno-pointer-to-int-cast -Wno-unused-result +CFLAGS+=-DGMCPIL_VERSION=\"v$(VERSION)\" -I./src/include -Wall -Wno-address-of-packed-member -Wno-pointer-to-int-cast -Wno-unused-result CFLAGS+=$(shell pkg-config --cflags gtk+-3.0 json-glib-1.0) LDFLAGS+=-Wl,--no-undefined $(shell pkg-config --libs gtk+-3.0 json-glib-1.0) diff --git a/res/doc/gmcpil/CHANGELOG.txt b/res/doc/gmcpil/CHANGELOG.txt index f6633bd..9d08595 100644 --- a/res/doc/gmcpil/CHANGELOG.txt +++ b/res/doc/gmcpil/CHANGELOG.txt @@ -1,3 +1,7 @@ +v0.12.0: + + New, fancy GUI. + + Lots of "refactoring". + v0.11.1: + Internal code changes. + First official amd64 build. diff --git a/screenshot.png b/screenshot.png index b2363d72029f5830db18ab3aa7a7863b528f72b6..2df238763949f789b670b2782bdadb875df3923e 100644 GIT binary patch literal 26380 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 #include @@ -35,6 +37,7 @@ struct __attribute__((packed)) GMCPILConfigPrivate gchar* last_profile; gchar* hud; gchar* hide; + gchar* last_featc; gchar* filename; }; @@ -47,6 +50,7 @@ enum PROP_LAST_PROFILE, PROP_HUD, PROP_HIDE, + PROP_LAST_FEATC, PROP_LAST }; @@ -72,6 +76,7 @@ static void gmcpil_config_class_init(GMCPILConfigClass* klass) GMCPIL_GLIB_PROPERTY("last_profile", "Last profile", "Last selected profile", PROP_LAST_PROFILE); GMCPIL_GLIB_PROPERTY("hud", "Gallium HUD", "Gallium HUD options", PROP_HUD); GMCPIL_GLIB_PROPERTY("hide", "Hide launcher", "Hide launcher on launch", PROP_HIDE); + GMCPIL_GLIB_PROPERTY("last_featc", "Last feature count", "Last MCPI-Reborn feature count", PROP_LAST_FEATC); return; } @@ -112,9 +117,10 @@ static void gmcpil_config_finalize(GObject* obj) GMCPIL_GETTER_SETTER(username); GMCPIL_GETTER_SETTER(features); GMCPIL_GETTER_SETTER(distance); -GMCPIL_GETTER_SETTER(last_profile); +GMCPIL_INT_GETTER_SETTER(last_profile); GMCPIL_GETTER_SETTER(hud); GMCPIL_GETTER_SETTER(hide); +GMCPIL_INT_GETTER_SETTER(last_featc); static void gmcpil_config_set_property(GObject* obj, guint prop_id, const GValue* value, GParamSpec* pspec) { diff --git a/src/features.c b/src/features.c index 96beaa2..649994a 100644 --- a/src/features.c +++ b/src/features.c @@ -67,9 +67,9 @@ static int get_features() static int set_feature_envs(int feat) { int i = 0; - static int sz[3] = {1, 1, 1}; - static int len[3] = {0, 0, 0}; - static int tmp[3] = {0, 0, 0}; + int sz[3] = {1, 1, 1}; + int len[3] = {0, 0, 0}; + int tmp[3] = {0, 0, 0}; while (i < 3) { @@ -78,16 +78,13 @@ static int set_feature_envs(int feat) i++; continue; } - if (i == 2) + if (i == 2 && (FEAT_CMP(feat, "Fancy Graphics") + || FEAT_CMP(feat, "Smooth Lighting") + || FEAT_CMP(feat, "Animated Water") + || FEAT_CMP(feat, "Disable gui_blocks Atlas"))) { - if (FEAT_CMP(feat, "Fancy Graphics") - || FEAT_CMP(feat, "Smooth Lighting") - || FEAT_CMP(feat, "Animated Water") - || FEAT_CMP(feat, "Disable gui_blocks Atlas")) - { - i++; - continue; - } + i++; + continue; } if (FEAT_INT(feat) == TRUE || (i >= 2 && i <= 3 && FEAT_CMP(feat, "Force Mob Spawning"))) { @@ -178,6 +175,7 @@ static void toggle_cb(__attribute__((unused)) GtkWidget* check, void* udata) TAB(Features, features_cb, { int i = 0; int last_profile; + int last_featc; char* tmp; char* features_buff; GtkWidget* feature_check; @@ -187,6 +185,8 @@ TAB(Features, features_cb, { featc = 0; featc = get_features(); + last_featc = gmcpil_config_get_last_featc(config); + last_profile = gmcpil_config_get_last_profile(config); features_envs[1] = (char*)malloc(1); features_envs[2] = (char*)malloc(1); @@ -202,7 +202,7 @@ TAB(Features, features_cb, { if (features_buff != NULL) { i = 0; - while (i < featc) + while (i < last_featc) { FEAT_BOOL(i) = FALSE; i++; @@ -210,7 +210,7 @@ TAB(Features, features_cb, { i = 0; tmp = strtok(features_buff, "|"); - while (tmp != NULL && i < featc) + while (tmp != NULL && i < last_featc) { feature = get_feature(tmp); if (feature != NULL) @@ -244,8 +244,8 @@ TAB(Features, features_cb, { } features_cb(NULL, (void*)TRUE); + gmcpil_config_set_last_featc(config, featc); gmcpil_config_set_features(config, features_envs[4]); - last_profile = SAFE_ATOI(gmcpil_config_get_last_profile(config)); setenv("MCPI_FEATURE_FLAGS", features_envs[last_profile], 1); gtk_container_add(GTK_CONTAINER(scroll), vbox); gtk_box_pack_start(GTK_BOX(tab), scroll, TRUE, TRUE, 0); diff --git a/src/include/config.h b/src/include/config.h index 3ba24ef..867d02f 100644 --- a/src/include/config.h +++ b/src/include/config.h @@ -35,6 +35,7 @@ G_BEGIN_DECLS #define VALID_JSON_ARGS(dst, name, parent) \ (parent.node != NULL || dst != NULL || name != NULL || JSON_NODE_HOLDS_OBJECT(parent.node) || parent.obj == NULL) +#define SAFE_ATOI(str) strtol(str ? str : "", NULL, 10) #define GMCPIL_GETTER(name) gchar* gmcpil_config_get_ ## name (GMCPILConfig* self) \ { \ @@ -51,7 +52,26 @@ G_BEGIN_DECLS return; \ } +#define GMCPIL_INT_GETTER(name) gint gmcpil_config_get_ ## name (GMCPILConfig* self) \ +{ \ + GMCPILConfigPrivate* private; \ + private = GMCPIL_CONFIG_PRIVATE(self); \ + return SAFE_ATOI(private->name); \ +} + +#define GMCPIL_INT_SETTER(name) void gmcpil_config_set_ ## name (GMCPILConfig* self, const gint name) \ +{ \ + char* tmp; \ + GMCPILConfigPrivate* private; \ + asprintf(&tmp, "%i", name); \ + private = GMCPIL_CONFIG_PRIVATE(self); \ + private->name = g_strdup((gchar*)tmp); \ + free(tmp); \ + return; \ +} + #define GMCPIL_GETTER_SETTER(name) GMCPIL_GETTER(name); GMCPIL_SETTER(name); +#define GMCPIL_INT_GETTER_SETTER(name) GMCPIL_INT_GETTER(name); GMCPIL_INT_SETTER(name); #define GMCPIL_GLIB_PROPERTY(id, name, description, prop) \ pspec = g_param_spec_string(id, name, description, NULL, G_PARAM_READWRITE); \ @@ -84,16 +104,18 @@ GMCPILConfig* gmcpil_config_new(gchar* filename); void gmcpil_config_set_username(GMCPILConfig* self, const gchar* username); void gmcpil_config_set_features(GMCPILConfig* self, const gchar* features); void gmcpil_config_set_distance(GMCPILConfig* self, const gchar* distance); -void gmcpil_config_set_last_profile(GMCPILConfig* self, const gchar* last_profile); +void gmcpil_config_set_last_profile(GMCPILConfig* self, const gint last_profile); void gmcpil_config_set_hud(GMCPILConfig* self, const gchar* hud); void gmcpil_config_set_hide(GMCPILConfig* self, const gchar* hide); +void gmcpil_config_set_last_featc(GMCPILConfig* self, const gint last_featc); gchar* gmcpil_config_get_username(GMCPILConfig* self); gchar* gmcpil_config_get_features(GMCPILConfig* self); gchar* gmcpil_config_get_distance(GMCPILConfig* self); -gchar* gmcpil_config_get_last_profile(GMCPILConfig* self); +gint gmcpil_config_get_last_profile(GMCPILConfig* self); gchar* gmcpil_config_get_hud(GMCPILConfig* self); gchar* gmcpil_config_get_hide(GMCPILConfig* self); +gint gmcpil_config_get_last_featc(GMCPILConfig* self); int gmcpil_config_save(GMCPILConfig* self); diff --git a/src/include/mcpil.h b/src/include/mcpil.h index 7ba62ec..99d855f 100644 --- a/src/include/mcpil.h +++ b/src/include/mcpil.h @@ -27,7 +27,6 @@ #include #define STR(str) #str -#define SAFE_ATOI(str) strtol(str ? str : "", NULL, 10) #define FEAT_BOOL(i) (features[i][0]) #define FEAT_INT(i) ((int)features[i][0]) @@ -48,7 +47,6 @@ g_signal_connect(button, "clicked", G_CALLBACK(button_cb), cb_udata); \ return tab; \ } -//gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(STR(name_str))); #define GMCPIL_REPO_URL "https://github.com/MCPI-Revival/gMCPIL" #define GMCPIL_COPYRIGHT "Copyright 2021 MCPI-Revival contributors" diff --git a/src/mcpil.c b/src/mcpil.c index 0801394..7689403 100644 --- a/src/mcpil.c +++ b/src/mcpil.c @@ -91,7 +91,6 @@ void activate_cb(GtkApplication* app, __attribute__((unused)) void* udata) Play_tab(stack); Features_tab(stack); Servers_tab(stack); - //Settings_tab(stack); gtk_box_pack_start(GTK_BOX(switcher_box), switcher, TRUE, FALSE, 0); gtk_box_pack_end(GTK_BOX(switcher_box), about_button, TRUE, FALSE, 2); @@ -116,7 +115,7 @@ int main(int argc, char* argv[]) /* This is cursed, but it works:tm: */ setenv("GTK_THEME", "Adwaita:dark", 1); - asprintf(&config_path, "%s/.minecraft-pi/gmcpil.json", getenv("HOME")); + asprintf(&config_path, "%s/.gmcpil.json", getenv("HOME")); config = gmcpil_config_new(config_path); free(config_path); diff --git a/src/play.c b/src/play.c index 07b11cc..4a11d15 100644 --- a/src/play.c +++ b/src/play.c @@ -67,10 +67,9 @@ static int get_distance(char* str) return -1; } -static void settings_cb(__attribute__((unused)) GtkWidget* button, void* udata) +static void settings_cb(__attribute__((unused)) GtkWidget* button, __attribute__((unused)) void* udata) { int profile; - char tmp[2] = {0x00, 0x00}; const char* username; const char* distance; const char* hud; @@ -78,11 +77,6 @@ static void settings_cb(__attribute__((unused)) GtkWidget* button, void* udata) GtkEntryBuffer* username_buff; GtkEntryBuffer* hud_buff; - if ((int)udata == TRUE) - { - goto profile; - } - username_buff = gtk_entry_get_buffer(GTK_ENTRY(settings_box.username_entry)); hud_buff = gtk_entry_get_buffer(GTK_ENTRY(settings_box.hud_entry)); @@ -106,12 +100,10 @@ static void settings_cb(__attribute__((unused)) GtkWidget* button, void* udata) gmcpil_config_set_hide(config, "FALSE"); } -profile: profile = gtk_combo_box_get_active(GTK_COMBO_BOX(settings_box.profile_combo)); setenv("MCPI_FEATURE_FLAGS", features_envs[profile], 1); - tmp[0] = profile + 0x30; - gmcpil_config_set_last_profile(config, tmp); + gmcpil_config_set_last_profile(config, profile); gmcpil_config_save(config); return; } @@ -129,7 +121,7 @@ static void launch_cb(__attribute__((unused)) GtkWidget* button, __attribute__(( GPid pid; GError* err = NULL; - settings_cb(NULL, (void*)(intptr_t)TRUE); + settings_cb(NULL, NULL); g_spawn_async(NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH, NULL, NULL, &pid, &err); if (err != NULL) @@ -226,7 +218,7 @@ TAB(Play, settings_cb, { profile_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); profile_label = gtk_label_new("Profile"); profile_combo = gtk_combo_box_text_new(); - last_profile = SAFE_ATOI(gmcpil_config_get_last_profile(config)); + last_profile = gmcpil_config_get_last_profile(config); while (i < 5) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(profile_combo), profile_names[i]);