[Textbox] Add a 'get_cursor_x_pos' function.

This commit is contained in:
Dave Davenport 2022-10-27 22:22:11 +02:00
parent 3d3af82b54
commit 62ebb863ed
2 changed files with 24 additions and 4 deletions

View File

@ -76,6 +76,8 @@ typedef struct {
double yalign;
double xalign;
int cursor_x_pos;
TBFontConfig *tbfc;
PangoEllipsizeMode emode;
@ -335,5 +337,12 @@ void textbox_cursor_end(textbox *tb);
* Set the ellipsizing mode used on the string.
*/
void textbox_set_ellipsize(textbox *tb, PangoEllipsizeMode mode);
/**
* @param tb Handle to the textbox
*
* @returns the position of the cursor (0 if no cursor).
*/
int textbox_get_cursor_x_pos(const textbox *tb);
/**@}*/
#endif // ROFI_TEXTBOX_H

View File

@ -525,7 +525,7 @@ static void textbox_draw(widget *wid, cairo_t *draw) {
// draw the cursor
rofi_theme_get_color(WIDGET(tb), "text-color", draw);
if (tb->flags & TB_EDITABLE && tb->blink) {
if (tb->flags & TB_EDITABLE) {
// We want to place the cursor based on the text shown.
const char *text = pango_layout_get_text(tb->layout);
// Clamp the position, should not be needed, but we are paranoid.
@ -538,9 +538,14 @@ static void textbox_draw(widget *wid, cairo_t *draw) {
int cursor_y = pos.y / PANGO_SCALE;
int cursor_height = pos.height / PANGO_SCALE;
int cursor_width = 2;
cairo_rectangle(draw, x + cursor_x, y + cursor_y, cursor_width,
cursor_height);
cairo_fill(draw);
if ((x + cursor_x) != tb->cursor_x_pos) {
tb->cursor_x_pos = x + cursor_x;
}
if (tb->blink) {
cairo_rectangle(draw, x + cursor_x, y + cursor_y, cursor_width,
cursor_height);
cairo_fill(draw);
}
}
}
@ -993,3 +998,9 @@ void textbox_set_ellipsize(textbox *tb, PangoEllipsizeMode mode) {
}
}
}
int textbox_get_cursor_x_pos(const textbox *tb) {
if (tb == NULL) {
return 0;
}
return tb->cursor_x_pos;
}