繁体   English   中英

调整GTK2中的握柄大小

[英]Resize grip in GTK2

我正在编写GTK2应用程序。 我想在窗口的右下角添加大小调整夹点, 但是API没有提供任何功能gtk_window_set_has_resize_grip()仅限于GTK3)。 但是,我可以看到许多使用GTK2编写的带有调整大小手柄的程序(Pluma,Caja和Geany的较旧版本)。 我尝试查看Pluma的源代​​码,并在全局范围内搜索“ grip”,“ resize_grip”和“ resize”之类的关键字,但是在任何情况下都没有结果。 我希望能得到一个详细回答如何在GTK2中实现调整大小抓地力​​的答案。

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));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM