aboutsummaryrefslogtreecommitdiffstats
path: root/swaybg
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2018-04-02 22:48:13 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2018-04-04 18:47:48 -0400
commitb32bf595aeae7f8ac68354e45a80c0438374ec17 (patch)
treeb93185d2ac4b7081b9d0651eaaadeae21de48929 /swaybg
parentMove swaybg background rendering into common/ (diff)
downloadsway-b32bf595aeae7f8ac68354e45a80c0438374ec17.tar.gz
sway-b32bf595aeae7f8ac68354e45a80c0438374ec17.tar.zst
sway-b32bf595aeae7f8ac68354e45a80c0438374ec17.zip
Initial swaylock port
Diffstat (limited to 'swaybg')
-rw-r--r--swaybg/main.c28
1 files changed, 8 insertions, 20 deletions
diff --git a/swaybg/main.c b/swaybg/main.c
index ffefcd08..679b8c20 100644
--- a/swaybg/main.c
+++ b/swaybg/main.c
@@ -64,15 +64,17 @@ bool is_valid_color(const char *color) {
64} 64}
65 65
66static void render_frame(struct swaybg_state *state) { 66static void render_frame(struct swaybg_state *state) {
67 state->current_buffer = get_next_buffer(state->shm, state->buffers, 67 int buffer_width = state->width * state->scale,
68 state->width * state->scale, state->height * state->scale); 68 buffer_height = state->height * state->scale;
69 state->current_buffer = get_next_buffer(state->shm,
70 state->buffers, buffer_width, buffer_height);
69 cairo_t *cairo = state->current_buffer->cairo; 71 cairo_t *cairo = state->current_buffer->cairo;
70 if (state->args->mode == BACKGROUND_MODE_SOLID_COLOR) { 72 if (state->args->mode == BACKGROUND_MODE_SOLID_COLOR) {
71 cairo_set_source_u32(cairo, state->context.color); 73 cairo_set_source_u32(cairo, state->context.color);
72 cairo_paint(cairo); 74 cairo_paint(cairo);
73 } else { 75 } else {
74 render_background_image(cairo, state->context.image, 76 render_background_image(cairo, state->context.image,
75 state->args->mode, state->width, state->height, state->scale); 77 state->args->mode, buffer_width, buffer_height);
76 } 78 }
77 79
78 wl_surface_set_buffer_scale(state->surface, state->scale); 80 wl_surface_set_buffer_scale(state->surface, state->scale);
@@ -193,24 +195,10 @@ int main(int argc, const char **argv) {
193 args.output_idx = atoi(argv[1]); 195 args.output_idx = atoi(argv[1]);
194 args.path = argv[2]; 196 args.path = argv[2];
195 197
196 args.mode = BACKGROUND_MODE_STRETCH; 198 args.mode = parse_background_mode(argv[3]);
197 if (strcmp(argv[3], "stretch") == 0) { 199 if (args.mode == BACKGROUND_MODE_INVALID) {
198 args.mode = BACKGROUND_MODE_STRETCH;
199 } else if (strcmp(argv[3], "fill") == 0) {
200 args.mode = BACKGROUND_MODE_FILL;
201 } else if (strcmp(argv[3], "fit") == 0) {
202 args.mode = BACKGROUND_MODE_FIT;
203 } else if (strcmp(argv[3], "center") == 0) {
204 args.mode = BACKGROUND_MODE_CENTER;
205 } else if (strcmp(argv[3], "tile") == 0) {
206 args.mode = BACKGROUND_MODE_TILE;
207 } else if (strcmp(argv[3], "solid_color") == 0) {
208 args.mode = BACKGROUND_MODE_SOLID_COLOR;
209 } else {
210 wlr_log(L_ERROR, "Unsupported background mode: %s", argv[3]);
211 return 1; 200 return 1;
212 } 201 }
213
214 if (!prepare_context(&state)) { 202 if (!prepare_context(&state)) {
215 return 1; 203 return 1;
216 } 204 }
@@ -244,10 +232,10 @@ int main(int argc, const char **argv) {
244 zwlr_layer_surface_v1_set_exclusive_zone(state.layer_surface, -1); 232 zwlr_layer_surface_v1_set_exclusive_zone(state.layer_surface, -1);
245 zwlr_layer_surface_v1_add_listener(state.layer_surface, 233 zwlr_layer_surface_v1_add_listener(state.layer_surface,
246 &layer_surface_listener, &state); 234 &layer_surface_listener, &state);
247 state.run_display = true;
248 wl_surface_commit(state.surface); 235 wl_surface_commit(state.surface);
249 wl_display_roundtrip(state.display); 236 wl_display_roundtrip(state.display);
250 237
238 state.run_display = true;
251 while (wl_display_dispatch(state.display) != -1 && state.run_display) { 239 while (wl_display_dispatch(state.display) != -1 && state.run_display) {
252 // This space intentionally left blank 240 // This space intentionally left blank
253 } 241 }