mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-18 13:54:36 -05:00
#219: Implement continious scroll
This commit is contained in:
parent
99515f986e
commit
d2567a6884
8 changed files with 58 additions and 13 deletions
|
@ -149,4 +149,5 @@ Settings config = {
|
||||||
.dpi = -1,
|
.dpi = -1,
|
||||||
.threads = 1,
|
.threads = 1,
|
||||||
.scrollbar_width = 8,
|
.scrollbar_width = 8,
|
||||||
|
.scroll_method = 0,
|
||||||
};
|
};
|
||||||
|
|
|
@ -229,6 +229,9 @@ Filter the list by setting text in input bar to *filter*
|
||||||
|
|
||||||
Load alternative configuration file.
|
Load alternative configuration file.
|
||||||
|
|
||||||
|
`-scroll-method` *method*
|
||||||
|
|
||||||
|
Select the scrolling method. 0: Per page, 1: continuous.
|
||||||
|
|
||||||
### Theming
|
### Theming
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "ROFI\-MANPAGE" "" "January 2016" "" ""
|
.TH "ROFI\-MANPAGE" "" "February 2016" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBrofi\fR \- A window switcher, run launcher, ssh dialog and dmenu replacement
|
\fBrofi\fR \- A window switcher, run launcher, ssh dialog and dmenu replacement
|
||||||
|
@ -325,6 +325,12 @@ Filter the list by setting text in input bar to \fIfilter\fR
|
||||||
.P
|
.P
|
||||||
Load alternative configuration file\.
|
Load alternative configuration file\.
|
||||||
.
|
.
|
||||||
|
.P
|
||||||
|
\fB\-scroll\-method\fR \fImethod\fR
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
Select the scrolling method\. 0: Per page, 1: continuous\.
|
||||||
|
.
|
||||||
.SS "Theming"
|
.SS "Theming"
|
||||||
All colors are either hex #rrggbb values or X11 color names\. \fB\-bg\fR
|
All colors are either hex #rrggbb values or X11 color names\. \fB\-bg\fR
|
||||||
.
|
.
|
||||||
|
|
|
@ -118,6 +118,8 @@ rofi.dpi: 101
|
||||||
rofi.threads: 8
|
rofi.threads: 8
|
||||||
! Scrollbar width
|
! Scrollbar width
|
||||||
rofi.scrollbar-width: 8
|
rofi.scrollbar-width: 8
|
||||||
|
! Scrolling method. (0: Page, 1: Centered)
|
||||||
|
rofi.scroll-method: 0
|
||||||
! Pidfile location
|
! Pidfile location
|
||||||
rofi.pid: /tmp/1000-runtime-dir/rofi.pid
|
rofi.pid: /tmp/1000-runtime-dir/rofi.pid
|
||||||
! Keybinding
|
! Keybinding
|
||||||
|
|
|
@ -149,6 +149,7 @@ typedef struct _Settings
|
||||||
/** Number threads (1 to disable) */
|
/** Number threads (1 to disable) */
|
||||||
unsigned int threads;
|
unsigned int threads;
|
||||||
unsigned int scrollbar_width;
|
unsigned int scrollbar_width;
|
||||||
|
unsigned int scroll_method;
|
||||||
} Settings;
|
} Settings;
|
||||||
/** Global Settings structure. */
|
/** Global Settings structure. */
|
||||||
extern Settings config;
|
extern Settings config;
|
||||||
|
|
|
@ -42,15 +42,15 @@ typedef struct
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TB_AUTOHEIGHT = 1 << 0,
|
TB_AUTOHEIGHT = 1 << 0,
|
||||||
TB_AUTOWIDTH = 1 << 1,
|
TB_AUTOWIDTH = 1 << 1,
|
||||||
TB_LEFT = 1 << 16,
|
TB_LEFT = 1 << 16,
|
||||||
TB_RIGHT = 1 << 17,
|
TB_RIGHT = 1 << 17,
|
||||||
TB_CENTER = 1 << 18,
|
TB_CENTER = 1 << 18,
|
||||||
TB_EDITABLE = 1 << 19,
|
TB_EDITABLE = 1 << 19,
|
||||||
TB_MARKUP = 1 << 20,
|
TB_MARKUP = 1 << 20,
|
||||||
TB_WRAP = 1 << 21,
|
TB_WRAP = 1 << 21,
|
||||||
TB_PASSWORD = 1 << 22,
|
TB_PASSWORD = 1 << 22,
|
||||||
} TextboxFlags;
|
} TextboxFlags;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
|
@ -664,9 +664,10 @@ inline static void rofi_view_nav_last ( RofiViewState * state )
|
||||||
state->update = TRUE;
|
state->update = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rofi_view_draw ( RofiViewState *state, cairo_t *d )
|
static unsigned int rofi_scroll_per_page ( RofiViewState * state )
|
||||||
{
|
{
|
||||||
unsigned int i, offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
// selected row is always visible.
|
// selected row is always visible.
|
||||||
// If selected is visible do not scroll.
|
// If selected is visible do not scroll.
|
||||||
if ( ( ( state->selected - ( state->last_offset ) ) < ( state->max_elements ) ) && ( state->selected >= ( state->last_offset ) ) ) {
|
if ( ( ( state->selected - ( state->last_offset ) ) < ( state->max_elements ) ) && ( state->selected >= ( state->last_offset ) ) ) {
|
||||||
|
@ -684,6 +685,35 @@ static void rofi_view_draw ( RofiViewState *state, cairo_t *d )
|
||||||
// Set the position
|
// Set the position
|
||||||
scrollbar_set_handle ( state->scrollbar, page * state->max_elements );
|
scrollbar_set_handle ( state->scrollbar, page * state->max_elements );
|
||||||
}
|
}
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int rofi_scroll_continious ( RofiViewState * state )
|
||||||
|
{
|
||||||
|
unsigned int middle = state->menu_lines / 2;
|
||||||
|
unsigned int offset = 0;
|
||||||
|
if ( state->selected > middle ) {
|
||||||
|
if ( state->selected < ( state->filtered_lines - middle ) ) {
|
||||||
|
offset = state->selected - middle;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
offset = state->filtered_lines - state->menu_lines;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
state->rchanged = TRUE;
|
||||||
|
scrollbar_set_handle ( state->scrollbar, offset );
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rofi_view_draw ( RofiViewState *state, cairo_t *d )
|
||||||
|
{
|
||||||
|
unsigned int i, offset = 0;
|
||||||
|
if ( config.scroll_method == 1 ) {
|
||||||
|
offset = rofi_scroll_continious ( state );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
offset = rofi_scroll_per_page ( state );
|
||||||
|
}
|
||||||
// Re calculate the boxes and sizes, see if we can move this in the menu_calc*rowscolumns
|
// Re calculate the boxes and sizes, see if we can move this in the menu_calc*rowscolumns
|
||||||
// Get number of remaining lines to display.
|
// Get number of remaining lines to display.
|
||||||
unsigned int a_lines = MIN ( ( state->filtered_lines - offset ), state->max_elements );
|
unsigned int a_lines = MIN ( ( state->filtered_lines - offset ), state->max_elements );
|
||||||
|
@ -907,6 +937,7 @@ static void rofi_view_resize ( RofiViewState *state )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
state->max_rows = MAX ( 1, ( h / element_height ) );
|
state->max_rows = MAX ( 1, ( h / element_height ) );
|
||||||
|
state->menu_lines = state->max_rows;
|
||||||
state->max_elements = state->max_rows * config.menu_columns;
|
state->max_elements = state->max_rows * config.menu_columns;
|
||||||
// Free boxes no longer needed.
|
// Free boxes no longer needed.
|
||||||
for ( unsigned int i = state->max_elements; i < last_length; i++ ) {
|
for ( unsigned int i = state->max_elements; i < last_length; i++ ) {
|
||||||
|
|
|
@ -138,7 +138,8 @@ static XrmOption xrmOptions[] = {
|
||||||
{ xrm_Boolean, "fake-transparency", { .num = &config.fake_transparency }, NULL, "Fake transparency" },
|
{ xrm_Boolean, "fake-transparency", { .num = &config.fake_transparency }, NULL, "Fake transparency" },
|
||||||
{ xrm_SNumber, "dpi", { .snum = &config.dpi }, NULL, "DPI" },
|
{ xrm_SNumber, "dpi", { .snum = &config.dpi }, NULL, "DPI" },
|
||||||
{ xrm_Number, "threads", { .num = &config.threads }, NULL, "Threads to use for string matching" },
|
{ xrm_Number, "threads", { .num = &config.threads }, NULL, "Threads to use for string matching" },
|
||||||
{ xrm_Number, "scrollbar-width", { .num = &config.scrollbar_width }, NULL, "Scrollbar width" }
|
{ xrm_Number, "scrollbar-width", { .num = &config.scrollbar_width }, NULL, "Scrollbar width" },
|
||||||
|
{ xrm_Number, "scroll-method", { .num = &config.scroll_method }, NULL, "Scrolling method. (0: Page, 1: Centered)" }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Dynamic options.
|
// Dynamic options.
|
||||||
|
|
Loading…
Reference in a new issue