【问题标题】:Resize grip in GTK2在 GTK2 中调整夹点大小
【发布时间】:2017-01-26 13:50:09
【问题描述】:

我正在编写一个 GTK2 应用程序。我想在窗口的右下角添加调整大小,but the API does not provide any functions to do sogtk_window_set_has_resize_grip() 仅限于 GTK3)。但是,我可以看到许多使用 GTK2 编写的带有调整大小的程序(旧版本的 Pluma、Caja 和 Geany 等)。我曾尝试查看 Pluma 的源代码并在全局范围内搜索“grip”、“resize_grip”和“resize”等关键字,但在这两种情况下都没有得到任何结果。我会很感激详细介绍如何在 GTK2 中实现调整大小的答案。

【问题讨论】:

  • 我的窗户被夹住了,我不需要做任何事情。
  • @oldtechaa 好吧,我没有,但我可以看到我系统上的其他应用程序有它,所以我想肯定有他们正在做的事情我没有。我正在运行 Ubuntu MATE 16.04。

标签: c gtk gtk2


【解决方案1】:
static gboolean resize_expose(GtkWidget *area, GdkEventExpose *ev, GdkWindowEdge edge) {
  gint size = MIN(area->allocation.width, area->allocation.height);

  gtk_paint_resize_grip(area->style, area->window,
      gtk_widget_get_state(area),
      &ev->area, area, "grip", edge,
      area->allocation.width - size, area->allocation.height - size,
      size, size);

  return TRUE;
}

static gboolean resize_button(GtkWidget *area, GdkEventButton *ev, GdkWindowEdge edge) {
  if (ev->type != GDK_BUTTON_PRESS)
    return TRUE;

  switch (ev->button) {
  case 1:
    gtk_window_begin_resize_drag(GTK_WINDOW(gtk_widget_get_toplevel(area)), edge,
        ev->button, ev->x_root, ev->y_root, ev->time);
    break;
  case 2:
    gtk_window_begin_move_drag(GTK_WINDOW(gtk_widget_get_toplevel(area)),
        ev->button, ev->x_root, ev->y_root, ev->time);
    break;
  }

  return TRUE;
}

void create_grip(GtkWidget *parent_or_window) {
  GtkWidget *area = gtk_drawing_area_new();
  gtk_widget_set_size_request(area, 18, 18);
  gtk_widget_add_events(area, GDK_BUTTON_PRESS_MASK);
  gtk_box_pack_end(GTK_BOX(parent_or_window), area, FALSE, FALSE, 0);
  g_signal_connect(area, "expose_event", G_CALLBACK(grip_expose),
      GINT_TO_POINTER(GDK_WINDOW_EDGE_SOUTH_EAST));
  g_signal_connect(area, "button_press_event", G_CALLBACK(grip_button),
      GINT_TO_POINTER(GDK_WINDOW_EDGE_SOUTH_EAST));
}

【讨论】:

  • 请也解释一下你的答案,以便大家从你的答案中学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多