Gtk3: 可以移动任意小部件的鼠标运动区域吗?

Gtk3: Is it possible to shift the mouse motion area for an arbitrary widget?

提问人:snuk182 提问时间:9/20/2023 更新时间:9/20/2023 访问量:15

问:

我实现了一个GtkCellRenderer来在TreeView单元格中绘制一个任意的Widget。在其他非常基本的实现部分中,我的render()


static void my_cell_renderer_render(GtkCellRenderer *cell, cairo_t *ctx,
        GtkWidget *widget, const GdkRectangle *background_area,
        const GdkRectangle *cell_area, GtkCellRendererState state) {
    GdkRectangle allo;
    gint calc_width = 0;
    gint calc_height = 0;

    cairo_save(ctx);

    if (cell) {
        MyCellRenderer *rc = MY_CELL_RENDERER(cell);
        if (GTK_IS_WIDGET(rc->cell)) {
            gtk_widget_get_size_request(rc->cell, &calc_width, &calc_height);
    
            allo.x = MAX(cell_area->x, 0);
            allo.y = MAX(cell_area->y, 0);
            allo.width = calc_width;
            allo.height = calc_height;

            gtk_widget_size_allocate(rc->cell, &allo);
            cairo_translate(ctx, allo.x, allo.y);
            gtk_widget_draw(rc->cell, ctx);
        }
    }
    cairo_restore(ctx);
}

在我启用标头之前,它完全可以正常工作。使用标题时,表格看起来没问题,但鼠标悬停区域向上移动了一行,就好像没有标题行一样。下面的屏幕截图显示该按钮由鼠标突出显示,该鼠标位于其上方的一行。Item #2,2

enter image description here

有没有办法移动项目单元格小部件的鼠标运动区域?

注意:也会接受一个通用的答案,我自己根据我的情况进行调整。

NBB:是的,我需要这个作为 + 组合,而不是 .GtkTreeViewGtkCellRendererGtkGrid

gtk3 gtktreeview 单元渲染器

评论

0赞 samnoon 9/20/2023
嗨,这可能会有所帮助:stackoverflow.com/a/43774077/8188682

答: 暂无答案