mirror of
				https://github.com/swaywm/sway.git
				synced 2025-10-29 05:40:18 -04:00 
			
		
		
		
	Initial swaylock port
This commit is contained in:
		
							parent
							
								
									a28730edee
								
							
						
					
					
						commit
						b32bf595ae
					
				
					 6 changed files with 327 additions and 758 deletions
				
			
		|  | @ -4,6 +4,24 @@ | ||||||
| #include "background-image.h" | #include "background-image.h" | ||||||
| #include "cairo.h" | #include "cairo.h" | ||||||
| 
 | 
 | ||||||
|  | enum background_mode parse_background_mode(const char *mode) { | ||||||
|  | 	if (strcmp(mode, "stretch") == 0) { | ||||||
|  | 		return BACKGROUND_MODE_STRETCH; | ||||||
|  | 	} else if (strcmp(mode, "fill") == 0) { | ||||||
|  | 		return BACKGROUND_MODE_FILL; | ||||||
|  | 	} else if (strcmp(mode, "fit") == 0) { | ||||||
|  | 		return BACKGROUND_MODE_FIT; | ||||||
|  | 	} else if (strcmp(mode, "center") == 0) { | ||||||
|  | 		return BACKGROUND_MODE_CENTER; | ||||||
|  | 	} else if (strcmp(mode, "tile") == 0) { | ||||||
|  | 		return BACKGROUND_MODE_TILE; | ||||||
|  | 	} else if (strcmp(mode, "solid_color") == 0) { | ||||||
|  | 		return BACKGROUND_MODE_SOLID_COLOR; | ||||||
|  | 	} | ||||||
|  | 	wlr_log(L_ERROR, "Unsupported background mode: %s", mode); | ||||||
|  | 	return BACKGROUND_MODE_INVALID; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| cairo_surface_t *load_background_image(const char *path) { | cairo_surface_t *load_background_image(const char *path) { | ||||||
| 	cairo_surface_t *image; | 	cairo_surface_t *image; | ||||||
| #ifdef HAVE_GDK_PIXBUF | #ifdef HAVE_GDK_PIXBUF | ||||||
|  | @ -35,8 +53,7 @@ cairo_surface_t *load_background_image(const char *path) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void render_background_image(cairo_t *cairo, cairo_surface_t *image, | void render_background_image(cairo_t *cairo, cairo_surface_t *image, | ||||||
| 		enum background_mode mode, int buffer_width, int buffer_height, | 		enum background_mode mode, int buffer_width, int buffer_height) { | ||||||
| 		int buffer_scale) { |  | ||||||
| 	double width = cairo_image_surface_get_width(image); | 	double width = cairo_image_surface_get_width(image); | ||||||
| 	double height = cairo_image_surface_get_height(image); | 	double height = cairo_image_surface_get_height(image); | ||||||
| 
 | 
 | ||||||
|  | @ -93,6 +110,7 @@ void render_background_image(cairo_t *cairo, cairo_surface_t *image, | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 	case BACKGROUND_MODE_SOLID_COLOR: | 	case BACKGROUND_MODE_SOLID_COLOR: | ||||||
|  | 	case BACKGROUND_MODE_INVALID: | ||||||
| 		assert(0); | 		assert(0); | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -9,11 +9,12 @@ enum background_mode { | ||||||
| 	BACKGROUND_MODE_CENTER, | 	BACKGROUND_MODE_CENTER, | ||||||
| 	BACKGROUND_MODE_TILE, | 	BACKGROUND_MODE_TILE, | ||||||
| 	BACKGROUND_MODE_SOLID_COLOR, | 	BACKGROUND_MODE_SOLID_COLOR, | ||||||
|  | 	BACKGROUND_MODE_INVALID, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | enum background_mode parse_background_mode(const char *mode); | ||||||
| cairo_surface_t *load_background_image(const char *path); | cairo_surface_t *load_background_image(const char *path); | ||||||
| void render_background_image(cairo_t *cairo, cairo_surface_t *image, | void render_background_image(cairo_t *cairo, cairo_surface_t *image, | ||||||
| 		enum background_mode mode, int buffer_width, int buffer_height, | 		enum background_mode mode, int buffer_width, int buffer_height); | ||||||
| 		int buffer_scale); |  | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -35,6 +35,7 @@ gdk_pixbuf     = dependency('gdk-pixbuf-2.0', required: false) | ||||||
| pixman         = dependency('pixman-1') | pixman         = dependency('pixman-1') | ||||||
| libcap         = dependency('libcap') | libcap         = dependency('libcap') | ||||||
| libinput       = dependency('libinput') | libinput       = dependency('libinput') | ||||||
|  | libpam         = cc.find_library('libpam') | ||||||
| math           = cc.find_library('m') | math           = cc.find_library('m') | ||||||
| rt             = cc.find_library('rt') | rt             = cc.find_library('rt') | ||||||
| git = find_program('git', required: false) | git = find_program('git', required: false) | ||||||
|  | @ -105,6 +106,7 @@ subdir('swaymsg') | ||||||
| subdir('client') | subdir('client') | ||||||
| subdir('swaybg') | subdir('swaybg') | ||||||
| subdir('swaybar') | subdir('swaybar') | ||||||
|  | subdir('swaylock') | ||||||
| 
 | 
 | ||||||
| config = configuration_data() | config = configuration_data() | ||||||
| config.set('sysconfdir', join_paths(prefix, sysconfdir)) | config.set('sysconfdir', join_paths(prefix, sysconfdir)) | ||||||
|  |  | ||||||
|  | @ -64,15 +64,17 @@ bool is_valid_color(const char *color) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void render_frame(struct swaybg_state *state) { | static void render_frame(struct swaybg_state *state) { | ||||||
| 	state->current_buffer = get_next_buffer(state->shm, state->buffers, | 	int buffer_width = state->width * state->scale, | ||||||
| 		state->width * state->scale, state->height * state->scale); | 		buffer_height = state->height * state->scale; | ||||||
|  | 	state->current_buffer = get_next_buffer(state->shm, | ||||||
|  | 			state->buffers, buffer_width, buffer_height); | ||||||
| 	cairo_t *cairo = state->current_buffer->cairo; | 	cairo_t *cairo = state->current_buffer->cairo; | ||||||
| 	if (state->args->mode == BACKGROUND_MODE_SOLID_COLOR) { | 	if (state->args->mode == BACKGROUND_MODE_SOLID_COLOR) { | ||||||
| 		cairo_set_source_u32(cairo, state->context.color); | 		cairo_set_source_u32(cairo, state->context.color); | ||||||
| 		cairo_paint(cairo); | 		cairo_paint(cairo); | ||||||
| 	} else { | 	} else { | ||||||
| 		render_background_image(cairo, state->context.image, | 		render_background_image(cairo, state->context.image, | ||||||
| 				state->args->mode, state->width, state->height, state->scale); | 				state->args->mode, buffer_width, buffer_height); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	wl_surface_set_buffer_scale(state->surface, state->scale); | 	wl_surface_set_buffer_scale(state->surface, state->scale); | ||||||
|  | @ -193,24 +195,10 @@ int main(int argc, const char **argv) { | ||||||
| 	args.output_idx = atoi(argv[1]); | 	args.output_idx = atoi(argv[1]); | ||||||
| 	args.path = argv[2]; | 	args.path = argv[2]; | ||||||
| 
 | 
 | ||||||
| 	args.mode = BACKGROUND_MODE_STRETCH; | 	args.mode = parse_background_mode(argv[3]); | ||||||
| 	if (strcmp(argv[3], "stretch") == 0) { | 	if (args.mode == BACKGROUND_MODE_INVALID) { | ||||||
| 		args.mode = BACKGROUND_MODE_STRETCH; |  | ||||||
| 	} else if (strcmp(argv[3], "fill") == 0) { |  | ||||||
| 		args.mode = BACKGROUND_MODE_FILL; |  | ||||||
| 	} else if (strcmp(argv[3], "fit") == 0) { |  | ||||||
| 		args.mode = BACKGROUND_MODE_FIT; |  | ||||||
| 	} else if (strcmp(argv[3], "center") == 0) { |  | ||||||
| 		args.mode = BACKGROUND_MODE_CENTER; |  | ||||||
| 	} else if (strcmp(argv[3], "tile") == 0) { |  | ||||||
| 		args.mode = BACKGROUND_MODE_TILE; |  | ||||||
| 	} else if (strcmp(argv[3], "solid_color") == 0) { |  | ||||||
| 		args.mode = BACKGROUND_MODE_SOLID_COLOR; |  | ||||||
| 	} else { |  | ||||||
| 		wlr_log(L_ERROR, "Unsupported background mode: %s", argv[3]); |  | ||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	if (!prepare_context(&state)) { | 	if (!prepare_context(&state)) { | ||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
|  | @ -244,10 +232,10 @@ int main(int argc, const char **argv) { | ||||||
| 	zwlr_layer_surface_v1_set_exclusive_zone(state.layer_surface, -1); | 	zwlr_layer_surface_v1_set_exclusive_zone(state.layer_surface, -1); | ||||||
| 	zwlr_layer_surface_v1_add_listener(state.layer_surface, | 	zwlr_layer_surface_v1_add_listener(state.layer_surface, | ||||||
| 			&layer_surface_listener, &state); | 			&layer_surface_listener, &state); | ||||||
| 	state.run_display = true; |  | ||||||
| 	wl_surface_commit(state.surface); | 	wl_surface_commit(state.surface); | ||||||
| 	wl_display_roundtrip(state.display); | 	wl_display_roundtrip(state.display); | ||||||
| 
 | 
 | ||||||
|  | 	state.run_display = true; | ||||||
| 	while (wl_display_dispatch(state.display) != -1 && state.run_display) { | 	while (wl_display_dispatch(state.display) != -1 && state.run_display) { | ||||||
| 		// This space intentionally left blank
 | 		// This space intentionally left blank
 | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
							
								
								
									
										1010
									
								
								swaylock/main.c
									
										
									
									
									
								
							
							
						
						
									
										1010
									
								
								swaylock/main.c
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										18
									
								
								swaylock/meson.build
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								swaylock/meson.build
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | ||||||
|  | executable( | ||||||
|  | 	'swaylock', | ||||||
|  | 	'main.c', | ||||||
|  | 	include_directories: [sway_inc], | ||||||
|  | 	dependencies: [ | ||||||
|  | 		cairo, | ||||||
|  | 		client_protos, | ||||||
|  | 		gdk_pixbuf, | ||||||
|  | 		libpam, | ||||||
|  | 		math, | ||||||
|  | 		pango, | ||||||
|  | 		pangocairo, | ||||||
|  | 		wayland_client, | ||||||
|  | 		wlroots, | ||||||
|  | 	], | ||||||
|  | 	link_with: [lib_sway_common, lib_sway_client], | ||||||
|  | 	install: true | ||||||
|  | ) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Drew DeVault
						Drew DeVault