diff --git a/app/scrcpy.1 b/app/scrcpy.1 index b3c57064..55b7a631 100644 --- a/app/scrcpy.1 +++ b/app/scrcpy.1 @@ -131,13 +131,13 @@ Set a custom window title. .BI "\-\-window\-x " value Set the initial window horizontal position. -Default is -1 (automatic).\n +Default is "auto".\n .TP .BI "\-\-window\-y " value Set the initial window vertical position. -Default is -1 (automatic).\n +Default is "auto".\n .TP .BI "\-\-window\-width " value diff --git a/app/src/cli.c b/app/src/cli.c index 4b093c49..48876a29 100644 --- a/app/src/cli.c +++ b/app/src/cli.c @@ -1,5 +1,6 @@ #include "cli.h" +#include #include #include #include @@ -116,11 +117,11 @@ scrcpy_print_usage(const char *arg0) { "\n" " --window-x value\n" " Set the initial window horizontal position.\n" - " Default is -1 (automatic).\n" + " Default is \"auto\".\n" "\n" " --window-y value\n" " Set the initial window vertical position.\n" - " Default is -1 (automatic).\n" + " Default is \"auto\".\n" "\n" " --window-width value\n" " Set the initial window width.\n" @@ -302,8 +303,16 @@ parse_lock_video_orientation(const char *s, int8_t *lock_video_orientation) { static bool parse_window_position(const char *s, int16_t *position) { + // special value for "auto" + static_assert(WINDOW_POSITION_UNDEFINED == -0x8000); + + if (!strcmp(s, "auto")) { + *position = WINDOW_POSITION_UNDEFINED; + return true; + } + long value; - bool ok = parse_integer_arg(s, &value, false, -1, 0x7FFF, + bool ok = parse_integer_arg(s, &value, false, -0x7FFF, 0x7FFF, "window position"); if (!ok) { return false; diff --git a/app/src/scrcpy.h b/app/src/scrcpy.h index e29298f2..014f2cfe 100644 --- a/app/src/scrcpy.h +++ b/app/src/scrcpy.h @@ -21,8 +21,8 @@ struct scrcpy_options { uint32_t bit_rate; uint16_t max_fps; int8_t lock_video_orientation; - int16_t window_x; - int16_t window_y; + int16_t window_x; // WINDOW_POSITION_UNDEFINED for "auto" + int16_t window_y; // WINDOW_POSITION_UNDEFINED for "auto" uint16_t window_width; uint16_t window_height; bool show_touches; @@ -51,8 +51,8 @@ struct scrcpy_options { .bit_rate = DEFAULT_BIT_RATE, \ .max_fps = 0, \ .lock_video_orientation = DEFAULT_LOCK_VIDEO_ORIENTATION, \ - .window_x = -1, \ - .window_y = -1, \ + .window_x = WINDOW_POSITION_UNDEFINED, \ + .window_y = WINDOW_POSITION_UNDEFINED, \ .window_width = 0, \ .window_height = 0, \ .show_touches = false, \ diff --git a/app/src/screen.c b/app/src/screen.c index beb10754..03e2c3a1 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -186,8 +186,10 @@ screen_init_rendering(struct screen *screen, const char *window_title, window_flags |= SDL_WINDOW_BORDERLESS; } - int x = window_x != -1 ? window_x : (int) SDL_WINDOWPOS_UNDEFINED; - int y = window_y != -1 ? window_y : (int) SDL_WINDOWPOS_UNDEFINED; + int x = window_x != WINDOW_POSITION_UNDEFINED + ? window_x : (int) SDL_WINDOWPOS_UNDEFINED; + int y = window_y != WINDOW_POSITION_UNDEFINED + ? window_y : (int) SDL_WINDOWPOS_UNDEFINED; screen->window = SDL_CreateWindow(window_title, x, y, window_size.width, window_size.height, window_flags); diff --git a/app/src/screen.h b/app/src/screen.h index 2346ff15..c31f32c5 100644 --- a/app/src/screen.h +++ b/app/src/screen.h @@ -8,6 +8,8 @@ #include "config.h" #include "common.h" +#define WINDOW_POSITION_UNDEFINED (-0x8000) + struct video_buffer; struct screen { @@ -53,6 +55,7 @@ void screen_init(struct screen *screen); // initialize screen, create window, renderer and texture (window is hidden) +// window_x and window_y accept WINDOW_POSITION_UNDEFINED bool screen_init_rendering(struct screen *screen, const char *window_title, struct size frame_size, bool always_on_top,