static HRESULT draw_item(header_theme_t *theme, cairo_t *cr, int state_id, int width, int height)
{
    GtkStyleContext *context;
    GtkStateFlags state;
    GtkWidget *widget;

    assert(theme != NULL);

    widget = pgtk_tree_view_column_get_button(
        pgtk_tree_view_get_column((GtkTreeView *)theme->treeview, 1));
    context = pgtk_widget_get_style_context(widget);
    pgtk_style_context_save(context);

    if (state_id == HIS_HOT)
        state = GTK_STATE_FLAG_PRELIGHT;
    else if (state_id == HIS_PRESSED)
        state = GTK_STATE_FLAG_ACTIVE;
    else
        state = GTK_STATE_FLAG_NORMAL;

    pgtk_style_context_set_state(context, state);

    pgtk_render_background(context, cr, 0, 0, width, height);
    pgtk_render_frame(context, cr, 0, 0, width, height);

    pgtk_style_context_restore(context);

    return S_OK;
}
示例#2
0
文件: combobox.c 项目: vindo-app/wine
static HRESULT draw_button(combobox_theme_t *theme, cairo_t *cr, int part_id, int state_id,
                           int width, int height)
{
    GtkStateFlags state = get_dropdown_button_state_flags(state_id);
    GtkStyleContext *context;
    int arrow_x, arrow_y, arrow_width;

    assert(theme != NULL);

    context = pgtk_widget_get_style_context(theme->button);
    pgtk_style_context_save(context);

    pgtk_style_context_set_state(context, state);

    /* Render with another size to remove a gap */
    if (part_id == CP_DROPDOWNBUTTONLEFT)
    {
        pgtk_render_background(context, cr, -2, -2, width + 2, height + 4);
        pgtk_render_frame(context, cr, -2, -2, width + 2, height + 4);
    }
    else
    {
        pgtk_render_background(context, cr, 0, -2, width + 2, height + 4);
        pgtk_render_frame(context, cr, 0, -2, width + 2, height + 4);
    }

    pgtk_style_context_restore(context);

    context = pgtk_widget_get_style_context(theme->arrow);
    pgtk_style_context_save(context);

    pgtk_style_context_set_state(context, state);

    arrow_width = theme->arrow_size * theme->arrow_scaling;
    arrow_x = (width - arrow_width + 3) / 2;
    arrow_y = (height - arrow_width) / 2;

    pgtk_render_arrow(context, cr, G_PI, arrow_x, arrow_y, arrow_width);

    pgtk_style_context_restore(context);

    return S_OK;
}
示例#3
0
static HRESULT draw_dialog(uxgtk_theme_t *theme, cairo_t *cr, int state_id, int width, int height)
{
    GtkStyleContext *context;

    assert(theme != NULL);

    context = pgtk_widget_get_style_context(theme->window);

    pgtk_render_background(context, cr, 0, 0, width, height);

    return S_OK;
}
示例#4
0
uxgtk_theme_t *uxgtk_window_theme_create(void)
{
    window_theme_t *theme;
    GtkStyleContext *context;

    TRACE("()\n");

    theme = malloc(sizeof(window_theme_t));
    memset(theme, 0, sizeof(window_theme_t));

    uxgtk_theme_init(&theme->base, &window_vtable);

    context = pgtk_widget_get_style_context(theme->base.window);
    pgtk_style_context_add_class(context, GTK_STYLE_CLASS_BACKGROUND);

    return &theme->base;
}
static HRESULT draw_checkbox(button_theme_t *theme, cairo_t *cr, int state_id)
{
    GtkStateFlags state = get_checkbox_state_flags(state_id);
    GtkStyleContext *context;

    assert(theme != NULL);

    context = pgtk_widget_get_style_context(theme->check);
    pgtk_style_context_save(context);

    pgtk_style_context_set_state(context, state);
    pgtk_style_context_add_class(context, GTK_STYLE_CLASS_CHECK);

    pgtk_render_check(context, cr, 0, 0, theme->indicator_size, theme->indicator_size);

    pgtk_style_context_restore(context);

    return S_OK;
}
static HRESULT draw_radio(button_theme_t *theme, cairo_t *cr, int state_id)
{
    GtkStateFlags state = get_radio_button_state_flags(state_id);
    GtkStyleContext *context;

    assert(theme != NULL);

    context = pgtk_widget_get_style_context(get_radio(theme));
    pgtk_style_context_save(context);

    pgtk_style_context_set_state(context, state);
    pgtk_style_context_add_class(context, GTK_STYLE_CLASS_RADIO);

    pgtk_render_option(context, cr, 0, 0, theme->indicator_size, theme->indicator_size);

    pgtk_style_context_restore(context);

    return S_OK;
}
示例#7
0
文件: combobox.c 项目: vindo-app/wine
static HRESULT draw_border(combobox_theme_t *theme, cairo_t *cr, int state_id, int width, int height)
{
    GtkStateFlags state = get_border_state_flags(state_id);
    GtkStyleContext *context;

    assert(theme != NULL);

    context = pgtk_widget_get_style_context(theme->entry);
    pgtk_style_context_save(context);

    pgtk_style_context_set_state(context, state);

    pgtk_render_background(context, cr, 0, 0, width, height);
    pgtk_render_frame(context, cr, 0, 0, width, height);

    pgtk_style_context_restore(context);

    return S_OK;
}
static HRESULT draw_button(button_theme_t *theme, cairo_t *cr, int state_id, int width, int height)
{
    GtkStateFlags state = get_push_button_state_flags(state_id);
    GtkStyleContext *context;

    assert(theme != NULL);

    context = pgtk_widget_get_style_context(get_button(theme));
    pgtk_style_context_save(context);

    pgtk_style_context_set_state(context, state);

    if (state_id == PBS_DEFAULTED)
        pgtk_style_context_add_class(context, GTK_STYLE_CLASS_DEFAULT);

    pgtk_render_background(context, cr, 0, 0, width, height);
    pgtk_render_frame(context, cr, 0, 0, width, height);

    pgtk_style_context_restore(context);

    return S_OK;
}
static HRESULT get_border_color(button_theme_t *theme, int part_id, int state_id, GdkRGBA *rgba)
{
    GtkStateFlags state;
    GtkStyleContext *context;

    switch (part_id)
    {
        case BP_PUSHBUTTON:
            state = get_push_button_state_flags(state_id);
            break;

        case BP_RADIOBUTTON:
            state = get_radio_button_state_flags(state_id);
            break;

        case BP_CHECKBOX:
            state = get_checkbox_state_flags(state_id);
            break;

        case BP_GROUPBOX:
            state = get_groupbox_state_flags(state_id);
            break;

        default:
            FIXME("Unsupported button part %d.\n", part_id);
            return E_NOTIMPL;
    }

    context = pgtk_widget_get_style_context(get_frame(theme));

    pgtk_style_context_save(context);

    pgtk_style_context_add_class(context, GTK_STYLE_CLASS_FRAME);
    pgtk_style_context_get_border_color(context, state, rgba);

    pgtk_style_context_restore(context);

    return S_OK;
}
static HRESULT get_text_color(button_theme_t *theme, int part_id, int state_id, GdkRGBA *rgba)
{
    GtkWidget *widget;
    GtkStateFlags state;
    GtkStyleContext *context;

    switch (part_id)
    {
        case BP_PUSHBUTTON:
            widget = get_button_label(theme);
            state = get_push_button_state_flags(state_id);
            break;

        case BP_RADIOBUTTON:
            widget = get_radio_label(theme);
            state = get_radio_button_state_flags(state_id);
            break;

        case BP_CHECKBOX:
            widget = get_check_label(theme);
            state = get_checkbox_state_flags(state_id);
            break;

        case BP_GROUPBOX:
            widget = get_label(theme);
            state = get_groupbox_state_flags(state_id);
            break;

        default:
            FIXME("Unsupported button part %d.\n", part_id);
            return E_NOTIMPL;
    }

    context = pgtk_widget_get_style_context(widget);
    pgtk_style_context_get_color(context, state, rgba);

    return S_OK;
}
示例#11
0
static HRESULT get_text_color(uxgtk_theme_t *theme, int part_id, int state_id, GdkRGBA *rgba)
{
    GtkStateFlags state;
    GtkStyleContext *context;

    assert(theme != NULL);

    switch (part_id)
    {
        case WP_DIALOG:
            state = GTK_STATE_FLAG_NORMAL;
            context = pgtk_widget_get_style_context(theme->window);
            break;

        default:
            FIXME("Unsupported window part %d.\n", part_id);
            return E_NOTIMPL;
    }

    pgtk_style_context_get_color(context, state, rgba);

    return S_OK;
}