diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 31c4fb0..7215853 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,12 +32,16 @@ deploy:package: script: - mkdir out # package - cd build + - mkdir -p applications + - cp ../resource/config/*.desktop applications + - mkdir -p icons/hicolor/256x256/apps + - cp ../univerxel.png icons/hicolor/256x256/apps - cp ../resource/config/full.toml config.toml - - tar cfz ../out/full-nux64.tar.gz univerxel config.toml content + - tar cfz ../out/full-nux64.tar.gz univerxel applications/fr.wadza.univerxel.desktop config.toml icons content - cp ../resource/config/client.toml config.toml - - tar cfz ../out/client-nux64.tar.gz univerxel-client config.toml content/shaders content/textures + - tar cfz ../out/client-nux64.tar.gz univerxel-client applications/fr.wadza.univerxel.client.desktop config.toml icons content/shaders content/textures - cp ../resource/config/server.toml config.toml - - tar cfz ../out/server-nux64.tar.gz univerxel-server config.toml content/cert.pem content/key.pem content/zstd.dict + - tar cfz ../out/server-nux64.tar.gz univerxel-server applications/fr.wadza.univerxel.server.desktop config.toml icons content/cert.pem content/key.pem content/zstd.dict - cd ../out # deploy - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file full-nux64.tar.gz ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/Univerxel/$CI_COMMIT_TAG/Univerxel-$CI_COMMIT_TAG-nux64.tar.gz' - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file client-nux64.tar.gz ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/Univerxel-client/$CI_COMMIT_TAG/Univerxel-client-$CI_COMMIT_TAG-nux64.tar.gz' diff --git a/CMakeLists.txt b/CMakeLists.txt index ac3a080..7487922 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,20 +76,26 @@ else() set(CORE_LIBS ${CORE_LIBS} picoquic-core pthread dl) endif() +if (WIN32) + set(ICON univerxel.rc) +elseif (APPLE) + set(ICON univerxel.icns) +endif() + # All in one exec -add_executable(univerxel "src/main.cpp" ${CORE_SOURCES} ${CLIENT_SOURCES} ${SERVER_SOURCES}) +add_executable(univerxel "src/main.cpp" ${ICON} ${CORE_SOURCES} ${CLIENT_SOURCES} ${SERVER_SOURCES}) target_compile_features(univerxel PUBLIC cxx_std_17) target_link_libraries(univerxel ${CORE_LIBS} ${CLIENT_LIBS} ${SERVER_LIBS}) target_include_directories(univerxel PRIVATE ${CORE_HEADERS} ${CLIENT_HEADERS} ${SERVER_HEADERS}) # Standalone server -add_executable(univerxel-server EXCLUDE_FROM_ALL "src/server.cpp" ${CORE_SOURCES} ${SERVER_SOURCES}) +add_executable(univerxel-server EXCLUDE_FROM_ALL "src/server.cpp" ${ICON} ${CORE_SOURCES} ${SERVER_SOURCES}) target_compile_features(univerxel-server PUBLIC cxx_std_17) target_link_libraries(univerxel-server ${CORE_LIBS} ${SERVER_LIBS}) target_include_directories(univerxel-server PRIVATE ${CORE_HEADERS} ${SERVER_HEADERS}) # Dumb client -add_executable(univerxel-client EXCLUDE_FROM_ALL "src/client.cpp" ${CORE_SOURCES} ${CLIENT_SOURCES}) +add_executable(univerxel-client EXCLUDE_FROM_ALL "src/client.cpp" ${ICON} ${CORE_SOURCES} ${CLIENT_SOURCES}) target_compile_features(univerxel-client PUBLIC cxx_std_17) target_link_libraries(univerxel-client ${CORE_LIBS} ${CLIENT_LIBS}) target_include_directories(univerxel-client PRIVATE ${CORE_HEADERS} ${CLIENT_HEADERS}) @@ -110,3 +116,15 @@ add_custom_target(docs WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Build doc." ) + +if (APPLE) + set_target_properties(univerxel PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Univerxel") + set_target_properties(univerxel-client PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Univerxel Client") + set_target_properties(univerxel-server PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Univerxel Server") + set_source_files_properties(univerxel.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + set_target_properties(univerxel univerxel-client PROPERTIES + MACOSX_BUNDLE_SHORT_VERSION_STRING ${GLFW_VERSION} + MACOSX_BUNDLE_LONG_VERSION_STRING ${GLFW_VERSION} + MACOSX_BUNDLE_ICON_FILE univerxel.icns + MACOSX_BUNDLE_INFO_PLIST "resource/config/Info.plist.in") +endif() \ No newline at end of file diff --git a/resource/config/Info.plist.in b/resource/config/Info.plist.in new file mode 100644 index 0000000..684ad79 --- /dev/null +++ b/resource/config/Info.plist.in @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${MACOSX_BUNDLE_EXECUTABLE_NAME} + CFBundleGetInfoString + ${MACOSX_BUNDLE_INFO_STRING} + CFBundleIconFile + ${MACOSX_BUNDLE_ICON_FILE} + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLongVersionString + ${MACOSX_BUNDLE_LONG_VERSION_STRING} + CFBundleName + ${MACOSX_BUNDLE_BUNDLE_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleSignature + ???? + CFBundleVersion + ${MACOSX_BUNDLE_BUNDLE_VERSION} + CSResourcesFileMapped + + LSRequiresCarbon + + NSHumanReadableCopyright + ${MACOSX_BUNDLE_COPYRIGHT} + NSHighResolutionCapable + + + diff --git a/resource/config/fr.wadza.univerxel.client.desktop b/resource/config/fr.wadza.univerxel.client.desktop new file mode 100644 index 0000000..5b98599 --- /dev/null +++ b/resource/config/fr.wadza.univerxel.client.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Univerxel Client +TryExec=univerxel-client +Exec=univerxel-client %u +Terminal=true +Type=Application +Icon=univerxel +Categories=Game;Network; +Keywords=game;online; +StartupNotify=true +Actions=Composer; diff --git a/resource/config/fr.wadza.univerxel.desktop b/resource/config/fr.wadza.univerxel.desktop new file mode 100644 index 0000000..e590747 --- /dev/null +++ b/resource/config/fr.wadza.univerxel.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Univerxel +TryExec=univerxel +Exec=univerxel %u +Terminal=true +Type=Application +Icon=univerxel +Categories=Game;Network; +Keywords=game;online; +StartupNotify=true +Actions=Composer; diff --git a/resource/config/fr.wadza.univerxel.server.desktop b/resource/config/fr.wadza.univerxel.server.desktop new file mode 100644 index 0000000..f8fd1c6 --- /dev/null +++ b/resource/config/fr.wadza.univerxel.server.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Univerxel Server +TryExec=univerxel-server +Exec=univerxel-server %u +Terminal=true +Type=Application +Icon=univerxel +Categories=Game;Network; +Keywords=game;online; +StartupNotify=true +Actions=Composer; diff --git a/src/client/Window.cpp b/src/client/Window.cpp index 04071f1..a10e389 100644 --- a/src/client/Window.cpp +++ b/src/client/Window.cpp @@ -6,6 +6,7 @@ #include #include #include "../core/utils/logger.hpp" +#include "logo.cxx" /// Default floating window width constexpr auto DEFAULT_WIDTH = 1280; @@ -84,6 +85,7 @@ bool Window::create(const CreateInfo &opt) { glfwSetFramebufferSizeCallback(ptr, opt.pfnResize); glfwSetWindowTitle(ptr, APP_NAME); + glfwSetWindowIcon(ptr, 1, &LOGO); glfwSetWindowAttrib(ptr, GLFW_RESIZABLE, true); setTargetFPS(opt.fps); diff --git a/src/client/logo.cxx b/src/client/logo.cxx new file mode 100644 index 0000000..2f778b9 --- /dev/null +++ b/src/client/logo.cxx @@ -0,0 +1,297 @@ +static const unsigned char LOGO_DATA[48 * 48 * 4 + 1] = + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\025\020\037(\034\026'\362\010\005\031\375\011\006\033\375\007\004" + "\025\362%\037\060)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\016#I\027" + "\022(\377\013\010\035\377\033\026,\377\012\007\033\377\011\006\032J\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000:)b\000\026\017>\034\030\021;\217gJu%\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\020\014$g\017\013%\377\024\017.\377\021\015$\377\017\013" + "!\377\017\013!i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\014%%\025" + "\020%\217\061)B\034\010\005\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\010\000M\071\206\007\060$iz\034\025" + "J\363\033\024@\377\032\022?\313\023\015\071\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\034\024\066\205\023\015.\377\036\026\066\377\016\012#\377\013\007\037\377\025\017" + "%\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\017&\010\022\015'\312\012\007\035" + "\377\012\007\035\363\012\007\036{\010\006\033\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\375\020\013\062U\015\011,\063\014\011*\205\024\017\061\312" + "\027\021-\365\027\021/\377\015\011(\377\033\025\062\377\030\021.\377\016\011#\377\022\016" + "(\377\024\016\062\365\025\020\071\312\021\015.\206\015\012*\063\070/NT\030\021;\375+$B" + "\377\025\020/\377\022\015\061\377\013\010%\377\012\007!M\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\037\030\\\004" + "&\035T\332$\034O\377$\034O\377\027\023D\377\037\030E\377\017\012/\373\023\016\065\376" + "\030\022\065\377K\377\060%c\377\035\026I\332\014\011'\004" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\003\000\030\023Jp\027\022E\377+\036N\377\"\031L\377!\031G\377\031" + "\022:\377\022\015\065\377\023\016\060\377#\034=\377\020\014\061\377\021\014/\377\020\013" + ",\377\022\014\060\377\020\014&\377\023\016'\377\013\010#\377\013\010$\377%\032;\377\015" + "\012*\377\031\023\065\377\024\016\070\377\022\016\067\377!\031@\377\037\027I\377\276\264" + "\334\377|j\260p\001\001\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000&\033U\025\033\024G\370&\034M\377" + "'\037R\377(\037P\377\024\016\071\377/\"A\377\036\030\065\377)!@\377\032\023\070\377" + "\020\014.\377\012\010\040\377\034\023,\377\013\010!\377\016\012#\377\032\024*\377\031\024" + ".\377\017\012,\377\026\020/\377\030\022\070\377\023\016\070\377\026\022;\377\031\023\067" + "\377\063'X\377O?|\371dR\237\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\001\000\016\010+\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\033\023M\015+!`\265\033" + "\023J\377\036\026J\377\030\022G\377D\065_\377.&M\377:-R\377\023\016\061\377\021\015" + "/\377\022\015\062\377\015\012+\376-\"<\363\014\010\037\351\010\006\032\351\010\005\031\363" + "\011\007\036\376!\032\070\377%\035:\377\021\015'\377\025\017\066\377\031\022;\377\026\021" + ":\377\024\015\066\377\040\030B\377\027\017\067\377\027\020-\265\017\011+\015\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\005\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\015\011,\007\020\013\061\231\031\022>M\014\012\065\004\003\002\007\000\000" + "\000\000\000/\"Z\015$\033R\302TG\177\377cY\207\377$\034Q\377\033\024D\377\"\030C\377" + "\035\026B\377$\033?\377\016\012-\362\016\013\060\243)\035DW\015\011.$\012\007#\037\034\027" + ".'\007\005\031'\021\013$\037\011\007\037$\017\012/W\015\011%\243\025\017*\362\021\014\063\377" + "\025\016<\377J>e\377(\034F\377\023\016\066\377\021\014/\377)\036=\377\017\011,\303\020" + "\012.\015\000\000\000\000\000\000\001\000\026\020\064\004\017\011$M\026\017!\231\005\003\026\007\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\010-\000\016\013(y\031\024\065\377.\040F\377\031" + "\023@\332\032\023Hq\037\026P\025\034\025L\264$\034P\377)\036W\377\036\026P\377\060$Q\377" + "\037\030E\377)\036K\377>(]\361\026\020<~\021\014\061\036\017\013\061_\020\014\062\261\020" + "\014\060\352\031\022\061\374\027\020'\377\016\012\"\377\020\014&\374\017\013*\352\013\010" + "$\261\011\007\037`\014\011(\036\021\014\067~\033\023F\361*\037M\377\025\017<\377\040\031@" + "\377\036\026?\377\024\015\061\377\021\013/\377\037\025<\265\022\013\060\025\026\016\064p" + "\017\012)\332\017\012&\377\021\014\036\377\017\012\036{\010\005\027\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\015\012+\033\032\024\063\362\031\022\063\377\027\021;\377\037\027M\377" + ")\036S\377\070(Y\371\035\027L\377\036\027H\377!\030K\377\027\021@\377\030\021C\377," + "\037L\377.\040O\275\237|\255&\032\023=q\040\031;\351\026\021\066\377\034\025\071\377" + "\021\014\062\354\033\026\071\304\040\030\070\256\035\027\070\255\021\015(\304\027\021\060" + "\354\012\007\037\377\033\024+\377\013\010#\351\016\012.r\037\027J%<\060`\275\034\025I\377" + "\033\023I\377(\034O\377\037\027<\377\037\027:\377\034\023<\377\037\030=\371WHp\377\024" + "\014/\377\030\021.\377\040\027.\377\034\023)\363\017\012\040\034\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\022\015\064\216\023\016\063\377\021\014\063\377\030\021A\377&\034X\377$" + "\034P\377\031\022D\377!\031N\377\037\031H\377\026\020@\377\031\022C\377\033\024C\377" + "\031\023@\226\034\023L(\040\030P\311\027\021;\377\022\015\062\366\032\023\070\232!\032;" + "\071\017\015\064\005\017\013\061\000\000\000\000\000\000\000\000\000\013\006\040\000\012\007#\005\011\007\036\071\023" + "\016(\231\030\023\061\365\021\014\065\377\030\021B\312\030\021D(!\027R\226%\033N\377&" + "\033Q\377&\033F\377!\027<\377\025\016\064\377\031\022:\377\032\021;\377!\027\067\377" + "\021\013.\377#\033\067\377\015\010\037\377\031\022&\217\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\025\020<%\023\016\071\312\033\024;\377\026\020@\377\032\023F\377\032\024E\377\036" + "\027H\377#\032O\377\036\026K\377\035\026K\377\031\024G\377\030\022D\226\032\024K\063a" + "R\205\350!\031O\377\021\015\065\266\021\014\065\"\016\011/\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\007&\000\017\012.!.&L\265*\037T\377" + "%\035U\350\036\026P\064\037\026L\226\034\024J\377\037\027D\377\062&N\377\034\023\071\377" + "\031\022\067\377$\030B\377I\065X\377\030\021\064\377\035\025\067\377\024\015)\313\012\006" + "\032%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\014\064\010\024\016\071\222(\035" + "G\375\033\024D\377#\034G\377\033\024C\377&\035Q\377-\040Z\377\037\027L\377=-[\275" + "=\061](\033\024E\350&\034[\376\036\027R\203\023\016;\003\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030" + "\023D\003\035\025K\202#\032U\376\031\023G\350\037\026P(\035\024J\275-#N\377\031\022=\377" + "!\030A\377$\033E\377#\030C\377#\032?\377\060\"E\375XDe\223lW\205\010\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\010\063\000#\034BT\022\016\070" + "\373\026\021A\377\025\020@\377(\035S\377*\037]\377(\036Z\361O\067e&#\032N\311&\035" + "T\377&\035T\203!\027T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\030U\000C\061" + "g\203\062$S\377\060!_\312\037\027R%%\033O\361&\033K\377.\037P\377\033\024I\377\040" + "\030P\377,!U\373\036\024JU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\014\064\063\023\016:\376\030\023H\377\034\025J\377" + ".\"Y\377G\071r\377g[\217~\036\026Sq?\060g\377.\"_\266K\071p\003\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\020[\003\037\027Q\265/\"f\377\062&o" + "r%\033\\~%\033W\377G\065i\377\032\023H\377%\032W\377<*b\376F/m\064\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\021" + "B\205\026\021A\377\033\026I\377\037\031N\377+\"V\377,![\362'\034`\036<-s\351/$p\366" + "~i\236\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000$\033^!=+q\365\071+s\351\062$j\037&\034^\362-\040_\377!\030V\377$\032U\377" + "\061!U\377\064\040`\206\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\027\023F\000\027\022C\312\027\022E\377#\034Q\377\061\200\377;.}\261\067+{W<-v\377\071+o\377-\"g\377(\034\\\377" + "%\032X\365\037\026P\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\004\022(\021\015&I\024\016" + "\065g\026\021@\206\034\025L\254!\030V\377\035\025M\377\060'X\377=\061j\377,\040]\376" + "\037\027U$/$i\352D\065\201\355\066+{\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\070,}\005=\061\205\354;.\202" + "\352\067+|$@\061\204\376p`\237\377\067)w\377\066'q\377\065'o\377\060$e\255I\064" + "k\206&\032Rh\066(YJ\227\377F\066\215';/\200\351\067*y\377F\065\203\377" + "<-\177\377?.\201\377\066'u\377:)w\377\065't\377F\061q\377%\032S\374\027\020\065" + "\375\024\016\060\377-#F\377+\037M\377\036\026O\377\036\026S\377C\067j\377'\034\\\377" + "\067+o\377<.}\351+!j',!g\377A\060t\256\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`M\256" + "\256ZH\251\377PB\236'I;\221\351VC\226\377B\062\207\377B\062\205\377C\061\205" + "\377A\061\177\377O=\203\377J\067\177\377;,z\377;+q\374\030\021\066\361\025\017:" + "\377\032\022E\377!\030O\377\037\026P\377\062%[\377\040\027O\377\071)i\377\063's\377" + "\070+z\363\070*z\037/$n\374)\037e\304*\040h\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000bK\266\000u]\302\304" + "\232\202\320\374cN\266\037\\J\256\363SB\237\377K;\227\377M\071\217\377>-\177" + "\377\061$n\377,\037g\377>.o\377]L\217\377D\061\204\361aSs(\027\020>I\033\022Fh!" + "\027R\206!\030Q\255\033\024K\377\062'^\377.\"h\377Q<\201\377A.z\376\071*{$\063'" + "t\352+\040g\355\060\040i\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jR\300\005w_\305\354rY\301\352TE\247" + "$VE\250\376UD\245\377_J\252\377Q?\226\377N;\210\377\061#m\255+\035c\206-\040" + "_g\064%pIK\067\217(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\026S\013'\033]\365+\037^\377" + "/#g\377R>\202\377@.x\377A/|X\061%n\261+\037e\377\061!j:\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jQ\273" + "\071t]\310\377nV\301\261hS\273WbN\262\377]J\255\377YF\243\377B\060\205\377" + "=+}\365=+~\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000;(j\000-\037c\312,\037a\377\064'k\377\062$p\377\062$n\377\061#l\244/!h_\060!i" + "\377\071&r\232A,|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000WA\245\000VA\243\231~f\302\377\214t\321_\206n\322\243qZ\303" + "\377`K\260\377R?\232\377<+s\377,\035`\312/\036h\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000+\034\\\205)\033]\377\062#g\377" + "\064$m\377\064%m\377.\036c\362\061\040g\036\070%n\351\067#k\366\063\035`\"\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000eJ\263!j" + "O\262\365~c\304\351\205o\323\037\200j\317\362nV\300\377^I\257\377I\066\220" + "\377E\065y\377M>u\206\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\026Q\063!\024L\376\"\024L\377)\031S\377-\034]\377" + "\063!d\377\071$m~\065\040gq\061\035`\377.\030S\266\060\030K\003\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000|a\307\003sY\301\265y\\\302\377\245\213" + "\324r\223|\331~\210q\322\377sY\267\377VA\234\377E\062\210\377>+x\376-\034b" + "\064\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000*\032V\000%\027QT#\025M\373\031\017<\377\036\021=\377)\027I\377*\030T\377R?y\362\063" + "\034b&\062\034`\311;#f\377\060\031V\203(\017;\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\202c\307\000\225w\323\203\204i\315\377}b\311\311\216u\325&\221y\326" + "\361\204k\315\377lS\263\377R;\225\377A,\201\377@+x\373<,lU\000\000C\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G!hq;\033T\351K\"h\377S+|\377`;\227\355b<\227\304" + "jB\242\256c\071\226\256k<\231\304\201U\265\354oC\243\377mB\242\377c\071\223" + "\351mB\235r\205[\267&\242|\326\275\255\215\340\377\252\211\335\377\235}\327" + "\377\230}\323\377\204j\306\377[B\237\377A*}\371;%p\377\064\037g\377\062\036a" + "\377\064\"b\377)\032Y\363&\030R\034\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\015\063" + "\000\022\012-z\025\014\062\377\023\011)\377\016\006\032\332\007\004\014q\013\005\023\025#\016\063" + "\264,\022A\377<\031T\377M\"i\377Y,\177\377P'v\377U,\200\377f;\225\361a\066\223" + "~V,\177\036D\035[_T's\261c\065\220\352l@\231\374k?\234\377n?\232\377\260\177" + "\276\374i\071\217\352b\065\216\261uG\252_\223h\306\036\207b\266~uK\250\361\230" + "l\311\377\236x\324\377\235w\322\377\211g\303\377L\061}\377cI\250\377S<\230" + "\265H/\200\025A(pp\062\034a\331\060\034]\377.\035Y\377/\034V{\"\030T\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\006\034\007\012\005\026\231\015\005\031M\026\011&\004\000" + "\000\000\000\000\000\000\000*\021>\015;\031U\302d\065\201\377yB\233\377t?\240\377Z*z\377r\070" + "\225\377\206L\257\377\200E\253\377u;\234\362h\061\212\244|=\237Xx\071\225$" + "\201L\245\037j;\220'i\067\224'\221U\256\037o;\230$i\067\224W\215Z\275\243\245" + "u\323\362\204Z\262\377\214\\\275\377\207U\265\377\204T\266\377\214b\301\377" + "nK\245\377B(_\377;%h\303[A\240\015\000\000\000\000\001\000\004\000/\030Z\004-\030\\L)\030Y\231" + "(\026S\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\004\017\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Y*~\015\206L\257\265\215O\270\377" + "\202D\254\377w:\227\377\216M\265\377\237a\302\377\243b\302\377\232S\271\377" + "\221N\266\377\210D\251\377s\065\216\376{;\231\363u:\230\351\177J\254\351~" + "I\257\363r>\237\376t?\240\377\216Z\275\377\264\213\327\377\234k\313\377\217" + "[\275\377\205J\257\377zC\244\377vF\245\377lF\241\377R\061{\265\017\006\027\015" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000+\032\\\000\001\000\003\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\225Q\274\025\230W\276\370\231V\276\377\241c\300\377" + "\237^\301\377\247i\306\377\260q\312\377\245d\300\377\240[\276\377\230W\272" + "\377\232Y\273\377\223P\264\377q\066\215\377p\070\222\377{D\240\377t;\230\377" + "s:\227\377\213P\265\377\223^\277\377\226b\305\377\222\\\275\377\204I\255" + "\377\203P\250\377o>\233\377i?\232\371Z\064\215\025\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\014\003\020\000\236W\275p\242`\303\377\247d\304\377\262r\312\377\273\200\321\377" + "\257o\307\377\267{\315\377\274\202\326\377\257r\313\377\276\206\330\377\257" + "u\312\377\227S\260\377n\062\202\377Y&k\377\177O\224\377h/\201\377g\062}\377" + "\221S\266\377\232^\300\377\230^\300\377\232d\301\377\220Q\270\377}A\244\377" + "r?\236\377c\065\220\377zV\233p\023\013\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\243W\272\004\243Y" + "\272\331\247e\303\377\252h\304\377\271z\317\377\305\211\331\377\266w\314" + "\373\246b\276\376\256r\312\377\264x\317\377\271\177\323\377\255q\311\377" + "\240]\274\377\205B\237\377o\062\202\377](p\377j/}\377p\064\212\377\215H\260" + "\377\214F\255\377\226U\272\376\226\\\276\373\212J\262\377\215K\261\377\212" + "K\261\377d\062\215\377X/~\332M$t\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\250c\275L\247]\271\377\247" + "b\276\377\262r\312\377\272{\317\377\312\230\334\375\337\300\352U\250d\301" + "\063\261t\315\205\261t\314\312\255s\313\365\242b\300\377\244c\303\377\223" + "Q\257\377\227R\262\377\216N\246\377\235c\263\377\213K\243\365\222N\264\312" + "\206A\244\206\225O\266\063\217M\267T\205G\255\375z>\242\377\202A\247\377\202" + "H\237\377[\060~\377M%uM\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\246^\273\000\253h\300\231\251b\274\377\246Z" + "\270\377\263t\312\377\265u\313\377\260p\307\223\315\214\332\000\000\000\000\000\006\002" + "\010\000\243a\301\000\254o\310\013\302\214\332\254\315\233\342\377\317\233\342" + "\377\313\227\337\377\264y\316\377\271\207\320\255\306\230\321\013\222L\265" + "\000\004\001\006\000\000\000\000\000\216L\266\000z=\237\222k\061\213\377q\067\224\377{B\227\377" + "h<\204\377Y\063z\231J#p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\013\003\016\000\256o\305\007\252d\275z\247]\271\363\257" + "o\306\377\264r\310\313\257h\301\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\313\227\343\205\316\232\346\377\305\216\337\377\305\216\337\377\304\216" + "\335\377\272\201\326\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000n\062\217" + "\010g.\201\312r\066\224\377w\071\225\363f.\207zS%v\007\002\001\005\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\246`\271\000\247b\275\034\253k\301\217\265u\312%\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\312\227\344g\312\225\343\377\303\215\340\377\304\217" + "\340\377\311\224\340\377\307\221\336h\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000g.\201$q\063\216\217p\064\220\034z\070\226\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\323\245\347I\323\242\350\377\316\233\345\377\310\224" + "\341\377\311\224\340\377\310\222\336I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\322\242\350'\322\243\350\361\312\230\344\375\275\207\333\375" + "\253n\307\361\257t\312(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"; + +static const struct GLFWimage LOGO = {48, 48, (unsigned char*)LOGO_DATA}; \ No newline at end of file diff --git a/univerxel.icns b/univerxel.icns new file mode 100644 index 0000000..85c0f05 Binary files /dev/null and b/univerxel.icns differ diff --git a/univerxel.ico b/univerxel.ico new file mode 100644 index 0000000..1907e16 Binary files /dev/null and b/univerxel.ico differ diff --git a/univerxel.png b/univerxel.png new file mode 100644 index 0000000..ce516e4 --- /dev/null +++ b/univerxel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a47c1411335348ac149fe32292ece268d649212134dea0c25c3c702f8c90525 +size 91238 diff --git a/univerxel.rc b/univerxel.rc new file mode 100644 index 0000000..c91d121 --- /dev/null +++ b/univerxel.rc @@ -0,0 +1,28 @@ + +UNIVERXEL ICON "univerxel.ico" + +VS_VERSION_INFO VERSIONINFO +FILEVERSION 0,0,1,0 +PRODUCTVERSION 0,0,1,0 + +EGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */ + BEGIN + VALUE "CompanyName", "Shu" + VALUE "FileVersion", "0,0,1,0" + VALUE "LegalCopyright", "MIT" + VALUE "ProductName", "Univerxel" + VALUE "ProductVersion", "0,0,1,0" + VER_SPECIAL_BUILD_LINE + VER_PRIVATE_BUILD_LINE + END + + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 0x04B0 + END +END