mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-18 13:54:36 -05:00
[Textbox] Cursor goes over, not under. allow cursor outline.
This commit is contained in:
parent
0ff6ff21c3
commit
3d73cf2554
3 changed files with 41 additions and 19 deletions
|
@ -1537,6 +1537,12 @@ The text appears to the right of the tab stop position (other alignments are not
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
\fBcursor-color\fP: The color used to draw the cursor.
|
\fBcursor-color\fP: The color used to draw the cursor.
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
|
\fBcursor-outline\fP: Enable a border (outline) around the cursor. (Boolean)
|
||||||
|
.IP \(bu 2
|
||||||
|
\fBcursor-outline-width\fP: The width of the border around the cursor. (Double)
|
||||||
|
.IP \(bu 2
|
||||||
|
\fBcursor-outline-color\fP: The color to use for the cursor outline. (Color)
|
||||||
|
.IP \(bu 2
|
||||||
\fBtext-outline\fP: Enable a border (outline) around the text. (Boolean)
|
\fBtext-outline\fP: Enable a border (outline) around the text. (Boolean)
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
\fBtext-outline-width\fP: The width of the border around the text. (Double)
|
\fBtext-outline-width\fP: The width of the border around the text. (Double)
|
||||||
|
|
|
@ -951,6 +951,9 @@ The following properties are currently supported:
|
||||||
The text appears to the right of the tab stop position (other alignments are not supported yet).
|
The text appears to the right of the tab stop position (other alignments are not supported yet).
|
||||||
* **cursor-width**: The width of the cursor.
|
* **cursor-width**: The width of the cursor.
|
||||||
* **cursor-color**: The color used to draw the cursor.
|
* **cursor-color**: The color used to draw the cursor.
|
||||||
|
* **cursor-outline**: Enable a border (outline) around the cursor. (Boolean)
|
||||||
|
* **cursor-outline-width**: The width of the border around the cursor. (Double)
|
||||||
|
* **cursor-outline-color**: The color to use for the cursor outline. (Color)
|
||||||
* **text-outline**: Enable a border (outline) around the text. (Boolean)
|
* **text-outline**: Enable a border (outline) around the text. (Boolean)
|
||||||
* **text-outline-width**: The width of the border around the text. (Double)
|
* **text-outline-width**: The width of the border around the text. (Double)
|
||||||
* **text-outline-color**: The color to use for the text outline. (Color)
|
* **text-outline-color**: The color to use for the text outline. (Color)
|
||||||
|
|
|
@ -518,6 +518,28 @@ static void textbox_draw(widget *wid, cairo_t *draw) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// draw the text
|
||||||
|
cairo_save(draw);
|
||||||
|
cairo_reset_clip(draw);
|
||||||
|
|
||||||
|
gboolean show_outline =
|
||||||
|
rofi_theme_get_boolean(WIDGET(tb), "text-outline", FALSE);
|
||||||
|
if (tb->show_placeholder) {
|
||||||
|
rofi_theme_get_color(WIDGET(tb), "placeholder-color", draw);
|
||||||
|
show_outline = FALSE;
|
||||||
|
}
|
||||||
|
pango_cairo_show_layout(draw, tb->layout);
|
||||||
|
|
||||||
|
if (show_outline) {
|
||||||
|
rofi_theme_get_color(WIDGET(tb), "text-outline-color", draw);
|
||||||
|
double width = rofi_theme_get_double(WIDGET(tb), "text-outline-width", 0.5);
|
||||||
|
pango_cairo_layout_path(draw, tb->layout);
|
||||||
|
cairo_set_line_width(draw, width);
|
||||||
|
cairo_stroke(draw);
|
||||||
|
}
|
||||||
|
|
||||||
|
cairo_restore(draw);
|
||||||
|
|
||||||
// draw the cursor
|
// draw the cursor
|
||||||
if (tb->flags & TB_EDITABLE) {
|
if (tb->flags & TB_EDITABLE) {
|
||||||
// We want to place the cursor based on the text shown.
|
// We want to place the cursor based on the text shown.
|
||||||
|
@ -544,29 +566,20 @@ static void textbox_draw(widget *wid, cairo_t *draw) {
|
||||||
rofi_theme_get_color(WIDGET(tb), "cursor-color", draw);
|
rofi_theme_get_color(WIDGET(tb), "cursor-color", draw);
|
||||||
cairo_rectangle(draw, x + cursor_x, y + cursor_y, cursor_pixel_width,
|
cairo_rectangle(draw, x + cursor_x, y + cursor_y, cursor_pixel_width,
|
||||||
cursor_height);
|
cursor_height);
|
||||||
cairo_fill(draw);
|
if (rofi_theme_get_boolean(WIDGET(tb), "cursor-outline", FALSE)) {
|
||||||
cairo_restore(draw);
|
cairo_fill_preserve(draw);
|
||||||
}
|
rofi_theme_get_color(WIDGET(tb), "cursor-outline-color", draw);
|
||||||
}
|
double width =
|
||||||
|
rofi_theme_get_double(WIDGET(tb), "cursor-outline-width", 0.5);
|
||||||
// draw the text
|
|
||||||
cairo_save(draw);
|
|
||||||
cairo_reset_clip(draw);
|
|
||||||
if (tb->show_placeholder) {
|
|
||||||
rofi_theme_get_color(WIDGET(tb), "placeholder-color", draw);
|
|
||||||
}
|
|
||||||
pango_cairo_show_layout(draw, tb->layout);
|
|
||||||
|
|
||||||
if (rofi_theme_get_boolean(WIDGET(tb), "text-outline", FALSE)) {
|
|
||||||
rofi_theme_get_color(WIDGET(tb), "text-outline-color", draw);
|
|
||||||
double width = rofi_theme_get_double(WIDGET(tb), "text-outline-width", 0.5);
|
|
||||||
pango_cairo_layout_path(draw, tb->layout);
|
|
||||||
cairo_set_line_width(draw, width);
|
cairo_set_line_width(draw, width);
|
||||||
cairo_stroke(draw);
|
cairo_stroke(draw);
|
||||||
|
} else {
|
||||||
|
cairo_fill(draw);
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_restore(draw);
|
cairo_restore(draw);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// cursor handling for edit mode
|
// cursor handling for edit mode
|
||||||
void textbox_cursor(textbox *tb, int pos) {
|
void textbox_cursor(textbox *tb, int pos) {
|
||||||
|
|
Loading…
Reference in a new issue