This commit is contained in:
Nishi 2025-12-19 08:52:48 +09:00
commit b9b549afcd
Signed by: nishi
GPG key ID: 27EF69B208EB9343
9 changed files with 160 additions and 7 deletions

View file

@ -15,8 +15,8 @@ file(GLOB CLIENT_SRC client/*.c)
add_executable(af_server ${SERVER_SRC})
add_executable(af_client ${CLIENT_SRC})
target_include_directories(af_server PRIVATE include)
target_include_directories(af_client PRIVATE include)
target_include_directories(af_server PRIVATE include ${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(af_client PRIVATE include ${CMAKE_CURRENT_BINARY_DIR})
target_compile_definitions(af_server PRIVATE AF_SERVER)
target_compile_definitions(af_client PRIVATE AF_CLIENT)
@ -24,9 +24,16 @@ target_compile_definitions(af_client PRIVATE AF_CLIENT)
target_link_libraries(af_server PRIVATE fishsoup)
target_link_libraries(af_client PRIVATE fishsoup Mw glad)
configure_file(include/af_config.h.in af_config.h)
install(
TARGETS af_server af_client
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(
FILES logo.png
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/assaultfish
)

8
client/gl.c Normal file
View file

@ -0,0 +1,8 @@
#include <af_common.h>
void gl_init(void){
}
void gl_render(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}

View file

@ -2,6 +2,13 @@
MwWidget root, window, opengl;
static const MwRect sizes[] ={
{0, 0, 640, 480},
{0, 0, 800, 600},
{0, 0, 1024, 768},
{0, 0, 1280, 1024},
};
static void resize(MwWidget handle, void* user, void* client) {
int ww = MwGetInteger(window, MwNwidth);
int wh = MwGetInteger(window, MwNheight);
@ -15,7 +22,7 @@ static void resize(MwWidget handle, void* user, void* client) {
}
static void tick(MwWidget handle, void* user, void* client) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gl_render();
MwOpenGLSwapBuffer(opengl);
}
@ -24,18 +31,48 @@ static void* gl_load(const char* name) {
return MwOpenGLGetProcAddress(opengl, name);
}
int main() {
int main(int argc, char** argv) {
MwSizeHints sh;
MwRect rc;
int i;
MwLibraryInit();
root = MwVaCreateWidget(NULL, "root", NULL, 0, 0, 0, 0,
MwNwaitMS, 15,
NULL);
window = MwVaCreateWidget(MwWindowClass, "main", root, MwDEFAULT, MwDEFAULT, 800, 600,
window = MwVaCreateWidget(MwWindowClass, "main", root, 0, 0, 640, 480,
MwNtitle, "AssaultFish",
NULL);
opengl = MwCreateWidget(MwOpenGLClass, "opengl", window, 0, 0, 800, 600);
MwGetScreenSize(window, &rc);
for(i = sizeof(sizes) / sizeof(sizes[0]) - 1; i >= 0; i--){
if(sizes[i].width < rc.width && sizes[i].height < rc.height){
sh.min_width = sh.max_width = sizes[i].width;
sh.min_height = sh.max_height = sizes[i].height;
break;
}
}
for(i = 1; i < argc; i++){
if(strcmp(argv[i], "--width") == 0 && (i + 1) < argc){
sh.min_width = sh.max_width = atoi(argv[i + 1]);
}else if(strcmp(argv[i], "--height") == 0 && (i + 1) < argc){
sh.min_height = sh.max_height = atoi(argv[i + 1]);
}
}
MwVaApply(window,
MwNsizeHints, &sh,
MwNx, (rc.width - sh.max_width) / 2,
MwNy, (rc.height - sh.max_height) / 2,
MwNwidth, sh.max_width,
MwNheight, sh.max_height,
NULL);
opengl = MwCreateWidget(MwOpenGLClass, "opengl", window, 0, 0, sh.max_width, sh.max_height);
MwOpenGLMakeCurrent(opengl);
@ -43,6 +80,9 @@ int main() {
resize(window, NULL, NULL);
gl_init();
ui_init();
MwAddUserHandler(window, MwNresizeHandler, resize, NULL);
MwAddUserHandler(root, MwNtickHandler, tick, NULL);

78
client/ui.c Normal file
View file

@ -0,0 +1,78 @@
#include <af_common.h>
MwWidget ui_notice(int width, int height){
if(width == 0 && height == 0){
width = 400;
height = 300;
}
return MwVaCreateWidget(MwFrameClass, "notice", window, (MwGetInteger(window, MwNwidth) - width) / 2, (MwGetInteger(window, MwNheight) - height) / 2, width, height,
MwNhasBorder, 1,
MwNinverted, 0,
NULL);
}
void ui_notice_destroy(MwWidget widget){
MwDestroyWidget(widget);
}
static void ui_login(void){
MwWidget wnd = ui_notice(0, 0);
int bw = MwDefaultBorderWidth(wnd);
MwWidget join = MwVaCreateWidget(MwButtonClass, "join", wnd, MwGetInteger(wnd, MwNwidth) - bw - 10 - 96, MwGetInteger(wnd, MwNheight) - bw - 10 - 24, 96, 24,
MwNtext, "Join",
NULL);
MwWidget box = MwVaCreateWidget(MwBoxClass, "box", wnd, bw, bw, MwGetInteger(wnd, MwNwidth) - bw * 2, MwGetInteger(wnd, MwNheight) - bw * 2 - 10 - 24,
MwNorientation, MwVERTICAL,
MwNmargin, 10,
MwNpadding, 10,
NULL);
MwWidget icon = MwVaCreateWidget(MwImageClass, "icon", box, 0, 0, 0, 0,
MwNfillArea, 0,
MwNfixedSize, 100,
NULL);
MwWidget entrybox[3];
MwLLPixmap px = MwLoadImage(wnd, DATAROOTDIR "/assaultfish/logo.png");
const char* labels[3] = {
"Username",
"Hostname",
"Port"
};
const char* entries[3] = {
"JohnDoe",
"127.0.0.1",
"",
};
int i;
char buf[16];
sprintf(buf, "%d", AF_DEFAULT_PORT);
entries[2] = buf;
for(i = 0; i < 3; i++){
entrybox[i] = MwVaCreateWidget(MwBoxClass, "entrybox", box, 0, 0, 0, 0,
MwNfixedSize, 24,
MwNmargin, 10,
NULL);
MwVaCreateWidget(MwLabelClass, "label", entrybox[i], 0, 0, 0, 0,
MwNfixedSize, 100,
MwNtext, labels[i],
MwNalignment, MwALIGNMENT_END,
NULL);
MwVaCreateWidget(MwEntryClass, "entry", entrybox[i], 0, 0, 0, 0,
MwNtext, entries[i],
NULL);
}
MwVaApply(icon,
MwNpixmap, px,
NULL);
}
void ui_init(void){
MwToggleDarkTheme(root, 1);
ui_login();
}

2
external/milsko vendored

@ -1 +1 @@
Subproject commit 75749697ba25330127fdca110fda9098d65719e3
Subproject commit bfa0a5811ec066be64f756e88f8ba1ee4553e5a7

View file

@ -5,4 +5,16 @@
#include <Mw/Milsko.h>
#include <Mw/Widget/OpenGL.h>
/* main.c */
extern MwWidget root, window, opengl;
/* gl.c */
void gl_init(void);
void gl_render(void);
/* ui.c */
MwWidget ui_notice(int width, int height);
void ui_notice_destroy(MwWidget widget);
void ui_init(void);
#endif

View file

@ -7,6 +7,8 @@
#include <fishsoup.h>
#include <af_config.h>
#ifdef AF_SERVER
#include <af_server.h>
#endif

6
include/af_config.h.in Normal file
View file

@ -0,0 +1,6 @@
#ifndef __AF_CONFIG_H__
#define __AF_CONFIG_H__
#define DATAROOTDIR "@CMAKE_INSTALL_FULL_DATAROOTDIR@"
#endif

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB