Example #1
0
// end of line
static void textbox_cursor_end ( textbox *tb )
{
    if ( tb->text == NULL ) {
        tb->cursor = 0;
        tb->update = TRUE;
        widget_queue_redraw ( WIDGET ( tb ) );
        return;
    }
    tb->cursor = ( int ) g_utf8_strlen ( tb->text, -1 );
    tb->update = TRUE;
    widget_queue_redraw ( WIDGET ( tb ) );
    // Stop blink!
    tb->blink = 2;
}
Example #2
0
void textbox_font ( textbox *tb, TextBoxFontType tbft )
{
    TextBoxFontType t = tbft & STATE_MASK;
    if ( tb == NULL ) {
        return;
    }
    // ACTIVE has priority over URGENT if both set.
    if ( t == ( URGENT | ACTIVE ) ) {
        t = ACTIVE;
    }
    switch ( ( tbft & FMOD_MASK ) )
    {
    case HIGHLIGHT:
        widget_set_state ( WIDGET ( tb ), theme_prop_names[t][1] );
        break;
    case ALT:
        widget_set_state ( WIDGET ( tb ), theme_prop_names[t][2] );
        break;
    default:
        widget_set_state ( WIDGET ( tb ), theme_prop_names[t][0] );
        break;
    }
    if ( tb->tbft != tbft || tb->widget.state == NULL ) {
        tb->update = TRUE;
        widget_queue_redraw ( WIDGET ( tb ) );
    }
    tb->tbft = tbft;
}
Example #3
0
void listview_set_selected ( listview *lv, unsigned int selected )
{
    if ( lv && lv->req_elements > 0 ) {
        lv->selected = MIN ( selected, lv->req_elements - 1 );
        widget_queue_redraw ( WIDGET ( lv ) );
    }
}
Example #4
0
void listview_set_num_elements ( listview *lv, unsigned int rows )
{
    lv->req_elements = rows;
    listview_set_selected ( lv, lv->selected );
    listview_recompute_elements ( lv );
    widget_queue_redraw ( WIDGET ( lv ) );
}
Example #5
0
// set the default text to display
void textbox_text ( textbox *tb, const char *text )
{
    tb->update = TRUE;
    g_free ( tb->text );
    const gchar *last_pointer = NULL;

    if ( g_utf8_validate ( text, -1, &last_pointer ) ) {
        tb->text = g_strdup ( text );
    }
    else {
        if ( last_pointer != NULL ) {
            // Copy string up to invalid character.
            tb->text = g_strndup ( text, ( last_pointer - text ) );
        }
        else {
            tb->text = g_strdup ( "Invalid UTF-8 string." );
        }
    }
    __textbox_update_pango_text ( tb );
    if ( tb->flags & TB_AUTOWIDTH ) {
        textbox_moveresize ( tb, tb->widget.x, tb->widget.y, tb->widget.w, tb->widget.h );
        if ( WIDGET ( tb )->parent ) {
            widget_update ( WIDGET ( tb )->parent );
        }
    }

    tb->cursor = MAX ( 0, MIN ( ( int ) g_utf8_strlen ( tb->text, -1 ), tb->cursor ) );
    widget_queue_redraw ( WIDGET ( tb ) );
}
Example #6
0
static void listview_resize ( widget *wid, short w, short h )
{
    listview *lv = (listview *) wid;
    lv->widget.w = MAX ( 0, w );
    lv->widget.h = MAX ( 0, h );
    int height       = lv->widget.h - widget_padding_get_padding_height ( WIDGET ( lv ) );
    int spacing_vert = distance_get_pixel ( lv->spacing, ORIENTATION_VERTICAL );
    lv->max_rows     = ( spacing_vert + height ) / ( lv->element_height + spacing_vert );
    lv->max_elements = lv->max_rows * lv->menu_columns;

    if ( lv->scrollbar->widget.index == 0 ) {
        widget_move ( WIDGET ( lv->scrollbar ),
                      widget_padding_get_left ( WIDGET ( lv ) ),
                      widget_padding_get_top  ( WIDGET ( lv ) ) );
    }
    else {
        widget_move ( WIDGET ( lv->scrollbar ),
                      lv->widget.w - widget_padding_get_right ( WIDGET ( lv ) ) - widget_get_width ( WIDGET ( lv->scrollbar ) ),
                      widget_padding_get_top ( WIDGET ( lv ) ) );
    }
    widget_resize (  WIDGET ( lv->scrollbar ), widget_get_width ( WIDGET ( lv->scrollbar ) ), height );

    listview_recompute_elements ( lv );
    widget_queue_redraw ( wid );
}
Example #7
0
// cursor handling for edit mode
void textbox_cursor ( textbox *tb, int pos )
{
    int length = ( tb->text == NULL ) ? 0 : g_utf8_strlen ( tb->text, -1 );
    tb->cursor = MAX ( 0, MIN ( length, pos ) );
    tb->update = TRUE;
    // Stop blink!
    tb->blink = 3;
    widget_queue_redraw ( WIDGET ( tb ) );
}
Example #8
0
void listview_nav_left ( listview *lv )
{
    if ( lv == NULL ) {
        return;
    }
    if ( lv->selected >= lv->max_rows ) {
        lv->selected -= lv->max_rows;
        widget_queue_redraw ( WIDGET ( lv ) );
    }
}
Example #9
0
void widget_set_state ( widget *widget, const char *state )
{
    if ( g_strcmp0 ( widget->state, state ) ) {
        widget->state = state;
        // Update border.
        widget->border = rofi_theme_get_padding ( widget, "border", widget->border );

        widget_queue_redraw ( widget );
    }
}
Example #10
0
static void listview_nav_down_int ( listview *lv )
{
    if ( lv == NULL ) {
        return;
    }
    if ( lv->req_elements == 0 || ( lv->selected == ( lv->req_elements - 1 ) && !lv->cycle ) ) {
        return;
    }
    lv->selected = lv->selected < lv->req_elements - 1 ? MIN ( lv->req_elements - 1, lv->selected + 1 ) : 0;

    widget_queue_redraw ( WIDGET ( lv ) );
}
Example #11
0
static void listview_nav_page_prev_int ( listview *lv )
{
    if ( lv == NULL ) {
        return;
    }
    if ( lv->selected < lv->max_elements ) {
        lv->selected = 0;
    }
    else{
        lv->selected -= ( lv->max_elements );
    }
    widget_queue_redraw ( WIDGET ( lv ) );
}
Example #12
0
void listview_nav_right ( listview *lv )
{
    if ( lv == NULL ) {
        return;
    }
    if ( ( lv->selected + lv->max_rows ) < lv->req_elements ) {
        lv->selected += lv->max_rows;
        widget_queue_redraw ( WIDGET ( lv ) );
    }
    else if ( lv->selected < ( lv->req_elements - 1 ) ) {
        // We do not want to move to last item, UNLESS the last column is only
        // partially filled, then we still want to move column and select last entry.
        // First check the column we are currently in.
        int col = lv->selected / lv->max_rows;
        // Check total number of columns.
        int ncol = lv->req_elements / lv->max_rows;
        // If there is an extra column, move.
        if ( col != ncol ) {
            lv->selected = lv->req_elements - 1;
            widget_queue_redraw ( WIDGET ( lv ) );
        }
    }
}
Example #13
0
static void listview_nav_up_int ( listview *lv )
{
    if ( lv == NULL ) {
        return;
    }
    if ( lv->req_elements == 0 || ( lv->selected == 0 && !lv->cycle ) ) {
        return;
    }
    if ( lv->selected == 0 ) {
        lv->selected = lv->req_elements;
    }
    lv->selected--;
    widget_queue_redraw ( WIDGET ( lv ) );
}
Example #14
0
static gboolean textbox_blink ( gpointer data )
{
    textbox *tb = (textbox *) data;
    if ( tb->blink < 2 ) {
        tb->blink  = !tb->blink;
        tb->update = TRUE;
        widget_queue_redraw ( WIDGET ( tb ) );
        rofi_view_queue_redraw ( );
    }
    else {
        tb->blink--;
    }
    return TRUE;
}
Example #15
0
static void listview_nav_page_next_int ( listview *lv )
{
    if ( lv == NULL ) {
        return;
    }
    if ( lv->req_elements == 0 ) {
        return;
    }
    lv->selected += ( lv->max_elements );
    if ( lv->selected >= lv->req_elements ) {
        lv->selected = lv->req_elements - 1;
    }
    widget_queue_redraw ( WIDGET ( lv ) );
}
Example #16
0
void widget_resize ( widget *widget, short w, short h )
{
    if ( widget != NULL  ) {
        if ( widget->resize != NULL ) {
            if ( widget->w != w || widget->h != h ) {
                widget->resize ( widget, w, h );
            }
        }
        else {
            widget->w = w;
            widget->h = h;
        }
        // On a resize we always want to udpate.
        widget_queue_redraw ( widget );
    }
}
Example #17
0
// within the parent handled auto width/height modes
void textbox_moveresize ( textbox *tb, int x, int y, int w, int h )
{
    unsigned int offset = ( tb->flags & TB_INDICATOR ) ? DOT_OFFSET : 0;
    if ( tb->flags & TB_AUTOWIDTH ) {
        pango_layout_set_width ( tb->layout, -1 );
        unsigned int offset = ( tb->flags & TB_INDICATOR ) ? DOT_OFFSET : 0;
        w = textbox_get_font_width ( tb ) + widget_padding_get_padding_width ( WIDGET ( tb ) ) + offset;
    }
    else {
        // set ellipsize
        if ( ( tb->flags & TB_EDITABLE ) == TB_EDITABLE ) {
            pango_layout_set_ellipsize ( tb->layout, PANGO_ELLIPSIZE_MIDDLE );
        }
        else if ( ( tb->flags & TB_WRAP ) != TB_WRAP ) {
            pango_layout_set_ellipsize ( tb->layout, PANGO_ELLIPSIZE_END );
        }
    }

    if ( tb->flags & TB_AUTOHEIGHT ) {
        // Width determines height!
        int tw = MAX ( 1, w );
        pango_layout_set_width ( tb->layout, PANGO_SCALE * ( tw - widget_padding_get_padding_width ( WIDGET ( tb ) ) - offset ) );
        int hd = textbox_get_height ( tb );
        h = MAX ( hd, h );
    }

    if ( x != tb->widget.x || y != tb->widget.y || w != tb->widget.w || h != tb->widget.h ) {
        tb->widget.x = x;
        tb->widget.y = y;
        tb->widget.h = MAX ( 1, h );
        tb->widget.w = MAX ( 1, w );
    }

    // We always want to update this
    pango_layout_set_width ( tb->layout, PANGO_SCALE * ( tb->widget.w - widget_padding_get_padding_width ( WIDGET ( tb ) ) - offset ) );
    tb->update = TRUE;
    widget_queue_redraw ( WIDGET ( tb ) );
}
Example #18
0
int main ( G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv )
{
//    box 20 by 40
    widget *wid= (widget*)g_malloc0(sizeof(widget)); 
    widget_resize ( wid, 20, 40);
    widget_move ( wid, 10, 10);
    // Getter, setter x pos
    //
    TASSERT( widget_get_x_pos ( wid )  == 10 );
    TASSERT( widget_get_y_pos ( wid )  == 10 );

    // Left of box
    TASSERT ( widget_intersect ( wid, 0, 0) == 0 );
    TASSERT ( widget_intersect ( wid, 0, 10) == 0 );
    TASSERT ( widget_intersect ( wid, 0, 25) == 0 );
    TASSERT ( widget_intersect ( wid, 0, 40) == 0 );
    TASSERT ( widget_intersect ( wid, 0, 50) == 0 );
    TASSERT ( widget_intersect ( wid, 9, 0) == 0 );
    TASSERT ( widget_intersect ( wid, 9, 10) == 0 );
    TASSERT ( widget_intersect ( wid, 9, 25) == 0 );
    TASSERT ( widget_intersect ( wid, 9, 40) == 0 );
    TASSERT ( widget_intersect ( wid, 9, 50) == 0 );
    TASSERT ( widget_intersect ( wid, 10, 0) == 0 );
    TASSERT ( widget_intersect ( wid, 10, 10) == 1 );
    TASSERT ( widget_intersect ( wid, 10, 25) == 1 );
    TASSERT ( widget_intersect ( wid, 10, 40) == 1 );
    TASSERT ( widget_intersect ( wid, 10, 50) == 0 );

    // Middle

    TASSERT ( widget_intersect ( wid, 25, 0) == 0 );
    TASSERT ( widget_intersect ( wid, 25, 10) == 1 );
    TASSERT ( widget_intersect ( wid, 25, 25) == 1 );
    TASSERT ( widget_intersect ( wid, 25, 40) == 1 );
    TASSERT ( widget_intersect ( wid, 25, 50) == 0 );

    // Right
    TASSERT ( widget_intersect ( wid, 29, 0) == 0 );
    TASSERT ( widget_intersect ( wid, 29, 10) == 1 );
    TASSERT ( widget_intersect ( wid, 29, 25) == 1 );
    TASSERT ( widget_intersect ( wid, 29, 40) == 1 );
    TASSERT ( widget_intersect ( wid, 29, 50) == 0 );

    TASSERT ( widget_intersect ( wid, 30, 0) == 0 );
    TASSERT ( widget_intersect ( wid, 30, 10) == 0 );
    TASSERT ( widget_intersect ( wid, 30, 25) == 0 );
    TASSERT ( widget_intersect ( wid, 30, 40) == 0 );
    TASSERT ( widget_intersect ( wid, 30, 50) == 0 );

    widget_move ( wid, 30, 30);
    // Left of box
    TASSERT ( widget_intersect ( wid, 10, 20) == 0 );
    TASSERT ( widget_intersect ( wid, 10, 30) == 0 );
    TASSERT ( widget_intersect ( wid, 10, 45) == 0 );
    TASSERT ( widget_intersect ( wid, 10, 60) == 0 );
    TASSERT ( widget_intersect ( wid, 10, 70) == 0 );
    TASSERT ( widget_intersect ( wid, 19, 20) == 0 );
    TASSERT ( widget_intersect ( wid, 19, 30) == 0 );
    TASSERT ( widget_intersect ( wid, 19, 45) == 0 );
    TASSERT ( widget_intersect ( wid, 19, 60) == 0 );
    TASSERT ( widget_intersect ( wid, 19, 70) == 0 );
    TASSERT ( widget_intersect ( wid, 30, 20) == 0 );
    TASSERT ( widget_intersect ( wid, 30, 30) == 1 );
    TASSERT ( widget_intersect ( wid, 30, 45) == 1 );
    TASSERT ( widget_intersect ( wid, 30, 60) == 1 );
    TASSERT ( widget_intersect ( wid, 30, 70) == 0 );

    // Middle

    TASSERT ( widget_intersect ( wid, 20+25,20+ 0) == 0 );
    TASSERT ( widget_intersect ( wid, 20+25,20+ 10) == 1 );
    TASSERT ( widget_intersect ( wid, 20+25,20+ 25) == 1 );
    TASSERT ( widget_intersect ( wid, 20+25,20+ 40) == 1 );
    TASSERT ( widget_intersect ( wid, 20+25,20+ 50) == 0 );

    TASSERT ( widget_intersect ( wid, 20+29, 20+0) == 0 );
    TASSERT ( widget_intersect ( wid, 20+29, 20+10) == 1 );
    TASSERT ( widget_intersect ( wid, 20+29, 20+25) == 1 );
    TASSERT ( widget_intersect ( wid, 20+29, 20+40) == 1 );
    TASSERT ( widget_intersect ( wid, 20+29, 20+50) == 0 );

    TASSERT ( widget_intersect ( wid, 20+30, 20+0) == 0 );
    TASSERT ( widget_intersect ( wid, 20+30, 20+10) == 0 );
    TASSERT ( widget_intersect ( wid, 20+30, 20+25) == 0 );
    TASSERT ( widget_intersect ( wid, 20+30, 20+40) == 0 );
    TASSERT ( widget_intersect ( wid, 20+30, 20+50) == 0 );

    // Right
    TASSERT ( widget_intersect ( wid, 20+29, 20+0) == 0 );
    TASSERT ( widget_intersect ( wid, 20+29, 20+10) == 1 );
    TASSERT ( widget_intersect ( wid, 20+29, 20+25) == 1 );
    TASSERT ( widget_intersect ( wid, 20+29, 20+40) == 1 );
    TASSERT ( widget_intersect ( wid, 20+29, 20+50) == 0 );

    TASSERT ( widget_intersect ( wid, 20+30, 20+0) == 0 );
    TASSERT ( widget_intersect ( wid, 20+30, 20+10) == 0 );
    TASSERT ( widget_intersect ( wid, 20+30, 20+25) == 0 );
    TASSERT ( widget_intersect ( wid, 20+30, 20+40) == 0 );
    TASSERT ( widget_intersect ( wid, 20+30, 20+50) == 0 );


    TASSERT ( widget_intersect ( wid, -100, -100) == 0);
    TASSERT ( widget_intersect ( wid, INT_MIN, INT_MIN) == 0);
    TASSERT ( widget_intersect ( wid, INT_MAX, INT_MAX) == 0);

    // Other wrappers.
    TASSERT ( widget_get_height ( wid ) ==  wid->h);
    TASSERT ( widget_get_width ( wid ) ==  wid->w);

    TASSERT ( widget_enabled ( wid ) == FALSE );
    widget_enable ( wid );
    TASSERT ( widget_enabled ( wid ) == TRUE );
    widget_disable ( wid );
    TASSERT ( widget_enabled ( wid ) == FALSE );
    // Null pointer tests.
    TASSERT ( widget_intersect ( NULL, 0, 0) == 0 );
    widget_move ( NULL, 0, 0 );
    TASSERT ( widget_get_height ( NULL ) ==  0);
    TASSERT ( widget_get_width ( NULL ) ==  0);
    TASSERT ( widget_enabled ( NULL ) == 0);
    widget_disable ( NULL );
    widget_enable ( NULL );
    widget_draw ( NULL, NULL );
    widget_free ( NULL );
    widget_resize ( NULL, 0, 0);
    widget_update ( NULL );
    widget_queue_redraw ( NULL );
    TASSERT (widget_need_redraw ( NULL ) == FALSE);
    widget_clicked ( NULL, NULL );
    widget_set_clicked_handler ( NULL, NULL, NULL );


    g_free(wid);
}