diff --git a/.gitignore b/.gitignore index e94df01..be6c140 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ thirdparty/scintilla/ thirdparty/lexilla/ ui/generated/ cmake-build-debug/ +flatpak-build/ crapForLater/ *~ diff --git a/CMakeLists.txt b/CMakeLists.txt index f7085f6..7bc845e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,10 +73,15 @@ include_directories( add_definitions( -Wall + -Wno-unknown-pragmas -O0 ${GTK3_CFLAGS} ) +#set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES LINK_SEARCH_START_STATIC ON) +#set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES LINK_SEARCH_END_STATIC ON) +#target_link_options(${CMAKE_PROJECT_NAME} PRIVATE -static-libgcc -static-libstdc++ -static) + target_link_libraries(${CMAKE_PROJECT_NAME} -rdynamic ${CMAKE_SOURCE_DIR}/thirdparty/scintilla/bin/scintilla.a @@ -85,3 +90,5 @@ target_link_libraries(${CMAKE_PROJECT_NAME} -lm -lstdc++ ) + +#target_link_options(${CMAKE_PROJECT_NAME} PRIVATE -static-libgcc -static-libstdc++) diff --git a/buildDeps.sh b/buildDeps.sh index 2e661dd..2a36bd1 100644 --- a/buildDeps.sh +++ b/buildDeps.sh @@ -1,16 +1,19 @@ #!/bin/bash pushd thirdparty + # Scintilla [[ -d scintilla ]] && rm -rf scintilla tar xzf scintilla531.tgz pushd scintilla/gtk GTK3=1 make popd + # Lexilla [[ -d lexilla ]] && rm -rf lexilla tar xzf lexilla520.tgz pushd lexilla/src make popd + popd diff --git a/buildFlatpak.sh b/buildFlatpak.sh new file mode 100644 index 0000000..631ce71 --- /dev/null +++ b/buildFlatpak.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +flatpak install --user flathub org.gnome.Platform//3.26 org.gnome.Sdk//3.26 + +flatpak-builder flatpak-build flatpak.yaml diff --git a/flatpak.yaml b/flatpak.yaml new file mode 100644 index 0000000..4852401 --- /dev/null +++ b/flatpak.yaml @@ -0,0 +1,31 @@ +app-id: com.kangaroopunch.JoeyDev +runtime: org.gnome.Platform +runtime-version: '3.26' +sdk: org.gnome.Sdk +command: joeydev +modules: + - name: joeydev + buildsystem: cmake-ninja + #config-opts: + sources: + - type: dir + path: include + - type: dir + path: src + - type: dir + path: thirdparty + - type: dir + path: ui + - type: dir + path: tools + - type: file + path: buildDeps.sh + - type: file + path: CMakeLists.txt +finish-args: + - --share=ipc + - --socket=fallback-x11 + - --socket=wayland + - --filesystem=host + - --share=network + - --device=dri diff --git a/include/common.h b/include/common.h index eddfcfb..ddcc20f 100644 --- a/include/common.h +++ b/include/common.h @@ -45,7 +45,7 @@ // Allocation helpers. #define NEW(t) (t*)calloc(1, sizeof(t)) // Add check for NULL and die here. -#define DEL(v) {if(v!=NULL) {free(v); v=NULL;}} +#define DEL(v) do { if (v != NULL) { free(v); v = NULL; } break; } while(1) // Must be the first element of all userData structs. diff --git a/src/vecparse.c b/src/vecparse.c index fc70800..ee57e2d 100644 --- a/src/vecparse.c +++ b/src/vecparse.c @@ -20,6 +20,10 @@ */ +#pragma clang diagnostic push +#pragma ide diagnostic ignored "EmptyDeclOrStmt" + + #include #include "common.h" #include "vecparse.h" @@ -716,11 +720,14 @@ int vecparser(char *programIn, VecByteCodeT *bytecode) { } // Unwind variables array if needed. + /* if (variables != NULL) { while (arrlen(variables) > 0) { arrdel(variables, 0); } } + */ + arrfree(variables); // Unwind unresolved array if needed. if (unresolved != NULL) { @@ -764,3 +771,6 @@ int vecparser(char *programIn, VecByteCodeT *bytecode) { return result; } + + +#pragma clang diagnostic pop diff --git a/src/vector.c b/src/vector.c index 37f4988..c86bf05 100644 --- a/src/vector.c +++ b/src/vector.c @@ -21,6 +21,7 @@ #pragma clang diagnostic push +//#pragma ide diagnostic ignored "EmptyDeclOrStmt" #pragma ide diagnostic ignored "cppcoreguidelines-narrowing-conversions" #pragma ide diagnostic ignored "hicpp-multiway-paths-covered" @@ -348,6 +349,8 @@ EVENT gboolean drawVectorImageMotionEvent(GtkWidget *widget, GdkEventMotion *eve int temp; char buffer[8]; + (void)widget; + // If we're in a drawing action, bail out of this. if (self->clickState != CLICK_NONE) return FALSE; @@ -416,7 +419,7 @@ EVENT void editorVectorNotify(GtkWidget *sciWidget, gint ctrlID, struct SCNotifi } // Release bytecode. - if (byteCode.bytes != NULL) DEL(byteCode.bytes); + DEL(byteCode.bytes); // Mark text dirty. SCN_SAVEPOINTLEFT isn't being reliable. setDirty(self, TRUE); } @@ -552,7 +555,7 @@ static void loadTraceImage(VectorDataT *self, char *filename) { cairo_surface_t *temp; cairo_t *cr; - if (self->tracename != NULL) DEL(self->tracename); + DEL(self->tracename); self->tracename = strdup(filename); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(self->fileVectorTraceImage), filename); @@ -673,7 +676,7 @@ EVENT void menuVectorFileNew(GtkWidget *object, gpointer userData) { gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(self->fileVectorTraceImage)); } // Clear any filename. - if (self->filename != NULL) DEL(self->filename); + DEL(self->filename); // Refresh widget. gtk_widget_queue_draw(self->drawVectorImage); // Mark clean. @@ -711,7 +714,7 @@ EVENT void menuVectorFileOpen(GtkWidget *object, gpointer userData) { setDirty(self, FALSE); menuVectorFileNew(object, userData); - if (self->filename != NULL) DEL(self->filename); + DEL(self->filename); self->filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); in = fopen(self->filename, "rt"); @@ -740,7 +743,7 @@ EVENT void menuVectorFileOpen(GtkWidget *object, gpointer userData) { count++; } fclose(in); - if (line != NULL) DEL(line); + DEL(line); SSM(SCI_ADDTEXT, strlen(self->buffer), (sptr_t)self->buffer); //SSM(SCI_CONVERTEOLS, SC_EOL_CR, 0); status(self, "Image loaded."); @@ -787,17 +790,15 @@ EVENT void menuVectorFileSave(GtkWidget *object, gpointer userData) { fprintf(out, "------------------------------------------------------------------------------\n"); fprintf(out, "%s\n", code); fclose(out); - // Release code. - DEL(code); status(self, "Saved."); // We're clean now. setDirty(self, FALSE); } else { - // Release code. - DEL(code); - //***TODO*** Something bad happened. } + + // Release code. + DEL(code); } } @@ -816,7 +817,7 @@ EVENT void menuVectorFileSaveAs(GtkWidget *object, gpointer userData) { gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { - if (self->filename != NULL) DEL(self->filename); + DEL(self->filename); self->filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); menuVectorFileSave(object, self); } @@ -855,9 +856,7 @@ static void renderBytecode(VecByteCodeT *bytecode, VectorDataT *self) { debug("-----------------------------------\n"); // Clear collected points array. - while (arrlen(self->pointList) > 0) { - arrdel(self->pointList, 0); - } + arrfree(self->pointList); // Reset JoeyLib draw state. jlPaletteDefault(self->jlc); @@ -1144,14 +1143,10 @@ static void renderBytecode(VecByteCodeT *bytecode, VectorDataT *self) { debug("Points: %ld\n", arrlen(self->pointList)); // Clear variables. - while (arrlen(self->variables) > 0) { - arrdel(self->variables, 0); - } + arrfree(self->variables); // Clear stack. - while (arrlen(stack) > 0) { - arrdel(stack, 0); - } + arrfree(stack); // Refresh widget. gtk_widget_queue_draw(self->drawVectorImage); @@ -1554,11 +1549,11 @@ static void winVectorDelete(gpointer userData) { cairo_surface_destroy(self->surface); cairo_surface_destroy(self->scaled); cairo_surface_destroy(self->target); - if (self->trace != NULL) cairo_surface_destroy(self->trace); - if (self->filename != NULL) DEL(self->filename); - if (self->title != NULL) DEL(self->title); - if (self->tracename != NULL) DEL(self->tracename); - if (self->buffer != NULL) DEL(self->buffer); + if (self->trace != NULL) cairo_surface_destroy(self->trace); + DEL(self->filename); + DEL(self->title); + DEL(self->tracename); + DEL(self->buffer); DEL(self); }