Add landscape layers

This commit is contained in:
Stacy Harper 2021-08-26 19:20:20 +02:00 committed by John Sullivan
parent 450d43ff44
commit e100aafb05
4 changed files with 48 additions and 4 deletions

View File

@ -29,5 +29,13 @@ static enum layout_id layers[] = {
NumLayouts //signals the last item, may not be omitted NumLayouts //signals the last item, may not be omitted
}; };
/* layers is an ordered list of layouts, used to cycle through */
static enum layout_id landscape_layers[] = {
Landscape, //First layout is the default layout on startup
Special,
Emoji,
NumLayouts //signals the last item, may not be omitted
};
#endif // config_def_h_INCLUDED #endif // config_def_h_INCLUDED

View File

@ -97,7 +97,14 @@ void kbd_init(struct kbd *kb, struct layout * layouts, char * layer_names_list)
} }
fprintf(stderr, "Found %d layers\n",i); fprintf(stderr, "Found %d layers\n",i);
kb->layout = &kb->layouts[kb->layers[kb->layer_index]]; enum layout_id layer;
if (kb->landscape) {
layer = kb->landscape_layers[kb->layer_index];
} else {
layer = kb->layers[kb->layer_index];
}
kb->layout = &kb->layouts[layer];
kb->prevlayout = kb->layout; kb->prevlayout = kb->layout;
/* upload keymap */ /* upload keymap */
@ -236,10 +243,21 @@ kbd_press_key(struct kbd *kb, struct key *k, uint32_t time) {
case NextLayer: case NextLayer:
//switch to the next layout in the layer sequence //switch to the next layout in the layer sequence
kb->layer_index++; kb->layer_index++;
if (kb->layers[kb->layer_index] == NumLayouts) { enum layout_id layer;
kb->layer_index = 0; if (kb->landscape) {
layer = kb->landscape_layers[kb->layer_index];
} else {
layer = kb->layers[kb->layer_index];
} }
kbd_switch_layout(kb, &kb->layouts[kb->layers[kb->layer_index]]); if (layer == NumLayouts) {
kb->layer_index = 0;
if (kb->landscape) {
layer = kb->landscape_layers[kb->layer_index];
} else {
layer = kb->layers[kb->layer_index];
}
}
kbd_switch_layout(kb, &kb->layouts[layer]);
break; break;
case BackLayer: case BackLayer:
//switch to the previously active layout //switch to the previously active layout

View File

@ -84,6 +84,7 @@ struct kbd {
bool print; bool print;
uint32_t w, h, s; uint32_t w, h, s;
bool landscape;
uint8_t mods; uint8_t mods;
uint8_t compose; uint8_t compose;
struct key *last_press; struct key *last_press;
@ -92,6 +93,7 @@ struct kbd {
struct layout *layouts; struct layout *layouts;
enum layout_id *layers; enum layout_id *layers;
enum layout_id *landscape_layers;
struct drwsurf *surf; struct drwsurf *surf;
struct zwp_virtual_keyboard_v1 *vkbd; struct zwp_virtual_keyboard_v1 *vkbd;

16
main.c
View File

@ -238,6 +238,21 @@ seat_handle_name(void *data, struct wl_seat *wl_seat, const char *name) {}
static void static void
display_handle_geometry(void *data, struct wl_output *wl_output, int x, int y, int physical_width, int physical_height, int subpixel, const char *make, const char *model, int transform) display_handle_geometry(void *data, struct wl_output *wl_output, int x, int y, int physical_width, int physical_height, int subpixel, const char *make, const char *model, int transform)
{ {
if (transform % 2 == 0) {
keyboard.landscape = false;
} else {
keyboard.landscape = true;
}
enum layout_id layer;
if (keyboard.landscape) {
layer = keyboard.landscape_layers[0];
} else {
layer = keyboard.layers[0];
}
keyboard.layout = &keyboard.layouts[layer];
keyboard.prevlayout = keyboard.layout;
} }
static void static void
@ -379,6 +394,7 @@ main(int argc, char **argv) {
/* keyboard settings */ /* keyboard settings */
keyboard.layers = (enum layout_id *) &layers; keyboard.layers = (enum layout_id *) &layers;
keyboard.landscape_layers = (enum layout_id *) &landscape_layers;
keyboard.scheme = scheme; keyboard.scheme = scheme;
keyboard.layer_index = 0; keyboard.layer_index = 0;
keyboard.scheme1 = scheme1; keyboard.scheme1 = scheme1;