Compare commits
2 Commits
c68deabd09
...
62a7f58342
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62a7f58342 | ||
|
|
031e37f6e3 |
33
INSTALL.linux-static
Normal file
33
INSTALL.linux-static
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
Compile on older container to get binary that runs on older OS too (SDL doesn't compile on older than 20.04):
|
||||||
|
docker run -v .:/SDLRousku -it --rm ubuntu:20.04
|
||||||
|
On Linux, install the packages listed at
|
||||||
|
https://github.com/libsdl-org/SDL/blob/main/docs/README-linux.md#build-dependencies
|
||||||
|
|
||||||
|
in addition apt install xdd nasm libwayland-dev
|
||||||
|
|
||||||
|
mkdir vendored
|
||||||
|
cd vendored
|
||||||
|
git clone https://github.com/libsdl-org/SDL.git
|
||||||
|
cd SDL
|
||||||
|
cmake -S . -B build -DBUILD_SHARED_LIBS=OFF
|
||||||
|
cmake --build build
|
||||||
|
|
||||||
|
git clone https://github.com/libsdl-org/SDL_image.git
|
||||||
|
cd SDL_image/external
|
||||||
|
./download.sh
|
||||||
|
cd ..
|
||||||
|
cmake -S . -B build -DBUILD_SHARED_LIBS=OFF -DSDLIMAGE_VENDORED=ON -DCMAKE_PREFIX_PATH=../SDL/build
|
||||||
|
cmake --build build
|
||||||
|
|
||||||
|
git clone https://github.com/libsdl-org/SDL_ttf.git
|
||||||
|
cd SDL_ttf/external/
|
||||||
|
./download.sh
|
||||||
|
cd ..
|
||||||
|
cmake -S . -B build -DBUILD_SHARED_LIBS=OFF -DSDLTTF_VENDORED=ON -DCMAKE_PREFIX_PATH=../SDL/build
|
||||||
|
cmake --build build
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AppImage:
|
||||||
|
make install DESTDIR=AppDir
|
||||||
|
appimage-builder
|
||||||
@@ -120,3 +120,6 @@ package() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
|
x86_64-w64-mingw32-make -f Makefile.mingw
|
||||||
|
x86_64-w64-mingw32-strip Rousku.exe
|
||||||
|
|||||||
23
Makefile
23
Makefile
@@ -8,7 +8,7 @@ NEW_DIALOG_OBJECTS = Dialog Item Button Checkbox DropDownList Scrollbar Listbox
|
|||||||
OBJECTS=main Animal Sound $(addprefix NewDialogs/,$(NEW_DIALOG_OBJECTS))
|
OBJECTS=main Animal Sound $(addprefix NewDialogs/,$(NEW_DIALOG_OBJECTS))
|
||||||
EXECUTABLE=Rousku
|
EXECUTABLE=Rousku
|
||||||
|
|
||||||
all: $(EXECUTABLE)
|
all: embed_data.h menu_png.h $(EXECUTABLE)
|
||||||
|
|
||||||
$(EXECUTABLE): $(OBJECTS:%=%.o)
|
$(EXECUTABLE): $(OBJECTS:%=%.o)
|
||||||
$(CXX) $^ $(LDFLAGS) -o $@
|
$(CXX) $^ $(LDFLAGS) -o $@
|
||||||
@@ -20,6 +20,25 @@ $(EXECUTABLE): $(OBJECTS:%=%.o)
|
|||||||
$(CXX) $(CXXFLAGS) $< -o $@
|
$(CXX) $(CXXFLAGS) $< -o $@
|
||||||
$(CXX) -MM $(CXXFLAGS) $*.cpp > $*.d
|
$(CXX) -MM $(CXXFLAGS) $*.cpp > $*.d
|
||||||
|
|
||||||
|
embed_data.h:
|
||||||
|
@echo "Generating embed_data.h..."
|
||||||
|
@{ \
|
||||||
|
find skin -name "*.png"; \
|
||||||
|
find skin -name "*.wav"; \
|
||||||
|
find skin -name "*.tsk"; \
|
||||||
|
} | while read n; do \
|
||||||
|
xxd -i "$$n"; \
|
||||||
|
done > embed_data.h
|
||||||
|
|
||||||
|
menu_png.h:
|
||||||
|
xxd -i menu.png > menu_png.h
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm `find . -name "*.o"` `find . -name "*.d"` $(EXECUTABLE)
|
rm `find . -name "*.o"` `find . -name "*.d"` embed_data.h menu_png.h $(EXECUTABLE)
|
||||||
|
|
||||||
|
install:
|
||||||
|
mkdir -p $(DESTDIR)/usr/bin/
|
||||||
|
cp $(EXECUTABLE) $(DESTDIR)/usr/bin/$(EXECUTABLE)
|
||||||
|
mkdir -p $(DESTDIR)/usr/share/icons/
|
||||||
|
cp skin/Tavallinen/paikka/1.png $(DESTDIR)/usr/share/icons/rousku.png
|
||||||
|
|||||||
45
Makefile.linux-static
Normal file
45
Makefile.linux-static
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
CXX=g++
|
||||||
|
|
||||||
|
# needs "override" because x86_64-w64-mingw32-make sets these as cmdline parameters
|
||||||
|
override CXXFLAGS += -c -Wall -Ivendored/SDL/include -Ivendored/SDL_image/include -Ivendored/SDL_ttf/include
|
||||||
|
#override LDFLAGS += $(shell pkg-config --libs sdl3 sdl3-ttf sdl3-image)
|
||||||
|
override LDFLAGS += -Wl,-Bstatic vendored/SDL/build/libSDL3.a vendored/SDL_image/build/libSDL3_image.a vendored/SDL_ttf/build/libSDL3_ttf.a -Wl,-Bdynamic -lpthread -ldl -static-libgcc -static-libstdc++
|
||||||
|
|
||||||
|
NEW_DIALOG_OBJECTS = Dialog Item Button Checkbox DropDownList Scrollbar Listbox Frame DlgDropDownList DlgMainMenu
|
||||||
|
OBJECTS=main Animal Sound $(addprefix NewDialogs/,$(NEW_DIALOG_OBJECTS))
|
||||||
|
EXECUTABLE=Rousku
|
||||||
|
|
||||||
|
all: embed_data.h menu_png.h $(EXECUTABLE)
|
||||||
|
|
||||||
|
$(EXECUTABLE): $(OBJECTS:%=%.o)
|
||||||
|
$(CXX) $^ $(LDFLAGS) -o $@
|
||||||
|
|
||||||
|
# pull in dependency info for *existing* .o files
|
||||||
|
-include $(OBJECTS:%=%.d)
|
||||||
|
|
||||||
|
%.o: %.cpp
|
||||||
|
$(CXX) $(CXXFLAGS) $< -o $@
|
||||||
|
$(CXX) -MM $(CXXFLAGS) $*.cpp > $*.d
|
||||||
|
|
||||||
|
embed_data.h:
|
||||||
|
@echo "Generating embed_data.h..."
|
||||||
|
@{ \
|
||||||
|
find skin -name "*.png"; \
|
||||||
|
find skin -name "*.wav"; \
|
||||||
|
find skin -name "*.tsk"; \
|
||||||
|
} | while read n; do \
|
||||||
|
xxd -i "$$n"; \
|
||||||
|
done > embed_data.h
|
||||||
|
|
||||||
|
menu_png.h:
|
||||||
|
xxd -i menu.png > menu_png.h
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm `find . -name "*.o"` `find . -name "*.d"` embed_data.h menu_png.h $(EXECUTABLE)
|
||||||
|
|
||||||
|
install:
|
||||||
|
mkdir -p $(DESTDIR)/usr/bin/
|
||||||
|
cp $(EXECUTABLE) $(DESTDIR)/usr/bin/$(EXECUTABLE)
|
||||||
|
mkdir -p $(DESTDIR)/usr/share/icons/
|
||||||
|
cp skin/Tavallinen/paikka/1.png $(DESTDIR)/usr/share/icons/rousku.png
|
||||||
37
main.cpp
37
main.cpp
@@ -8,6 +8,35 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
class Tray {
|
||||||
|
private:
|
||||||
|
SDL_Tray *tray;
|
||||||
|
SDL_TrayMenu *menu;
|
||||||
|
SDL_TrayEntry *entry_open;
|
||||||
|
SDL_TrayEntry *entry_quit;
|
||||||
|
public:
|
||||||
|
Tray(SDL_Surface *icon, DlgMainMenu *dlg_menu) {
|
||||||
|
tray = SDL_CreateTray(icon, "Rousku");
|
||||||
|
menu = SDL_CreateTrayMenu(tray);
|
||||||
|
entry_open = SDL_InsertTrayEntryAt(menu, -1, "Avaa valikko", SDL_TRAYENTRY_BUTTON);
|
||||||
|
entry_quit = SDL_InsertTrayEntryAt(menu, -1, "Sulje Rousku", SDL_TRAYENTRY_BUTTON);
|
||||||
|
SDL_SetTrayEntryCallback(entry_open, callback_open, dlg_menu);
|
||||||
|
SDL_SetTrayEntryCallback(entry_quit, callback_quit, NULL);
|
||||||
|
}
|
||||||
|
~Tray() {
|
||||||
|
SDL_DestroyTray(tray);
|
||||||
|
}
|
||||||
|
static void callback_open(void *userdata, SDL_TrayEntry *invoker) {
|
||||||
|
DlgMainMenu *dlg_menu = (DlgMainMenu *) userdata;
|
||||||
|
dlg_menu->setExit(false);
|
||||||
|
}
|
||||||
|
static void callback_quit(void *userdata, SDL_TrayEntry *invoker) {
|
||||||
|
SDL_Event e;
|
||||||
|
e.type = SDL_EVENT_QUIT;
|
||||||
|
SDL_PushEvent(&e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
if (!SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO)) {
|
if (!SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO)) {
|
||||||
SDL_Log("Could not init SDL %s", SDL_GetError());
|
SDL_Log("Could not init SDL %s", SDL_GetError());
|
||||||
@@ -73,6 +102,9 @@ int main(int argc, char **argv) {
|
|||||||
// Get MOUSE_DOWN event when clicking unfocused window
|
// Get MOUSE_DOWN event when clicking unfocused window
|
||||||
SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1");
|
SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1");
|
||||||
|
|
||||||
|
SDL_Surface *icon_sfe = rousku.getPreviewSurface();
|
||||||
|
Tray *tray = new Tray(icon_sfe, dlg_menu);
|
||||||
|
|
||||||
while (!dlg_menu->isAppExit()) {
|
while (!dlg_menu->isAppExit()) {
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
SDL_zero(event);
|
SDL_zero(event);
|
||||||
@@ -128,6 +160,9 @@ int main(int argc, char **argv) {
|
|||||||
string changed_setting = dlg_menu->getChangedSetting();
|
string changed_setting = dlg_menu->getChangedSetting();
|
||||||
if (changed_setting == "skin_list") {
|
if (changed_setting == "skin_list") {
|
||||||
rousku.readSkin(dlg_menu->getSkin());
|
rousku.readSkin(dlg_menu->getSkin());
|
||||||
|
icon_sfe = rousku.getPreviewSurface();
|
||||||
|
delete tray;
|
||||||
|
tray = new Tray(icon_sfe, dlg_menu);
|
||||||
rousku.setSpecialState(drop);
|
rousku.setSpecialState(drop);
|
||||||
}
|
}
|
||||||
Uint64 delay = rousku.step(SDL_GetTicks(), press);
|
Uint64 delay = rousku.step(SDL_GetTicks(), press);
|
||||||
@@ -189,6 +224,8 @@ int main(int argc, char **argv) {
|
|||||||
SDL_Delay(delay);
|
SDL_Delay(delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete tray;
|
||||||
|
|
||||||
SDL_DestroyWindow(sdl_window);
|
SDL_DestroyWindow(sdl_window);
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
TTF_Quit();
|
TTF_Quit();
|
||||||
|
|||||||
Reference in New Issue
Block a user