mirror of
https://github.com/labwc/labwc.git
synced 2026-03-13 05:33:47 -04:00
theme: Implement window.label.text.justify
Crosses off 6.12.1 Signed-off-by: Joshua Ashton <joshua@froggi.es>
This commit is contained in:
parent
140c245880
commit
8b8e37c268
3 changed files with 51 additions and 2 deletions
|
|
@ -10,6 +10,12 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <wlr/render/wlr_renderer.h>
|
#include <wlr/render/wlr_renderer.h>
|
||||||
|
|
||||||
|
enum lab_justification {
|
||||||
|
LAB_JUSTIFY_LEFT,
|
||||||
|
LAB_JUSTIFY_CENTER,
|
||||||
|
LAB_JUSTIFY_RIGHT,
|
||||||
|
};
|
||||||
|
|
||||||
struct theme {
|
struct theme {
|
||||||
int border_width;
|
int border_width;
|
||||||
int padding_height;
|
int padding_height;
|
||||||
|
|
@ -22,6 +28,7 @@ struct theme {
|
||||||
|
|
||||||
float window_active_label_text_color[4];
|
float window_active_label_text_color[4];
|
||||||
float window_inactive_label_text_color[4];
|
float window_inactive_label_text_color[4];
|
||||||
|
enum lab_justification window_label_text_justify;
|
||||||
|
|
||||||
/* buttons */
|
/* buttons */
|
||||||
float window_active_button_iconify_unpressed_image_color[4];
|
float window_active_button_iconify_unpressed_image_color[4];
|
||||||
|
|
|
||||||
29
src/ssd.c
29
src/ssd.c
|
|
@ -148,8 +148,24 @@ center_vertically(struct wlr_box *box, struct wlr_texture *texture)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
box->y += (box->height - texture->height) / 2;
|
box->y += (box->height - texture->height) / 2;
|
||||||
box->width = texture->width;
|
}
|
||||||
box->height = texture->height;
|
|
||||||
|
static void
|
||||||
|
center_horizontally(struct view *view, struct wlr_box *box, struct wlr_texture *texture)
|
||||||
|
{
|
||||||
|
if (!texture) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
box->x = view->x + (view->w - texture->width) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
justify_right(struct view *view, struct wlr_box *box, struct wlr_texture *texture)
|
||||||
|
{
|
||||||
|
if (!texture) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
box->x = view->x + (box->width - texture->width);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_box
|
struct wlr_box
|
||||||
|
|
@ -175,6 +191,15 @@ ssd_visible_box(struct view *view, enum ssd_part_type type)
|
||||||
case LAB_SSD_PART_TITLE:
|
case LAB_SSD_PART_TITLE:
|
||||||
box = ssd_box(view, type);
|
box = ssd_box(view, type);
|
||||||
center_vertically(&box, view->title.active);
|
center_vertically(&box, view->title.active);
|
||||||
|
if (theme->window_label_text_justify == LAB_JUSTIFY_CENTER) {
|
||||||
|
center_horizontally(view, &box, view->title.active);
|
||||||
|
} else if (theme->window_label_text_justify == LAB_JUSTIFY_RIGHT) {
|
||||||
|
justify_right(view, &box, view->title.active);
|
||||||
|
}
|
||||||
|
if (view->title.active) {
|
||||||
|
box.width = view->title.active->width;
|
||||||
|
box.height = view->title.active->height;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case LAB_SSD_PART_CORNER_TOP_LEFT:
|
case LAB_SSD_PART_CORNER_TOP_LEFT:
|
||||||
box = ssd_box(view, type);
|
box = ssd_box(view, type);
|
||||||
|
|
|
||||||
17
src/theme.c
17
src/theme.c
|
|
@ -17,6 +17,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <wlr/util/box.h>
|
#include <wlr/util/box.h>
|
||||||
#include <wlr/util/log.h>
|
#include <wlr/util/log.h>
|
||||||
|
#include <strings.h>
|
||||||
#include "common/dir.h"
|
#include "common/dir.h"
|
||||||
#include "common/font.h"
|
#include "common/font.h"
|
||||||
#include "common/string-helpers.h"
|
#include "common/string-helpers.h"
|
||||||
|
|
@ -61,6 +62,18 @@ parse_hexstr(const char *hex, float *rgba)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum lab_justification
|
||||||
|
parse_justification(const char *str)
|
||||||
|
{
|
||||||
|
if (!strcasecmp(str, "Center")) {
|
||||||
|
return LAB_JUSTIFY_CENTER;
|
||||||
|
} else if (!strcasecmp(str, "Right")) {
|
||||||
|
return LAB_JUSTIFY_RIGHT;
|
||||||
|
} else {
|
||||||
|
return LAB_JUSTIFY_LEFT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We generally use Openbox defaults, but if no theme file can be found it's
|
* We generally use Openbox defaults, but if no theme file can be found it's
|
||||||
* better to populate the theme variables with some sane values as no-one
|
* better to populate the theme variables with some sane values as no-one
|
||||||
|
|
@ -87,6 +100,7 @@ theme_builtin(struct theme *theme)
|
||||||
|
|
||||||
parse_hexstr("#000000", theme->window_active_label_text_color);
|
parse_hexstr("#000000", theme->window_active_label_text_color);
|
||||||
parse_hexstr("#000000", theme->window_inactive_label_text_color);
|
parse_hexstr("#000000", theme->window_inactive_label_text_color);
|
||||||
|
theme->window_label_text_justify = parse_justification("Left");
|
||||||
|
|
||||||
parse_hexstr("#000000",
|
parse_hexstr("#000000",
|
||||||
theme->window_active_button_iconify_unpressed_image_color);
|
theme->window_active_button_iconify_unpressed_image_color);
|
||||||
|
|
@ -164,6 +178,9 @@ entry(struct theme *theme, const char *key, const char *value)
|
||||||
if (match(key, "window.inactive.label.text.color")) {
|
if (match(key, "window.inactive.label.text.color")) {
|
||||||
parse_hexstr(value, theme->window_inactive_label_text_color);
|
parse_hexstr(value, theme->window_inactive_label_text_color);
|
||||||
}
|
}
|
||||||
|
if (match(key, "window.label.text.justify")) {
|
||||||
|
theme->window_label_text_justify = parse_justification(value);
|
||||||
|
}
|
||||||
|
|
||||||
/* universal button */
|
/* universal button */
|
||||||
if (match(key, "window.active.button.unpressed.image.color")) {
|
if (match(key, "window.active.button.unpressed.image.color")) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue