Альтернатива устаревшему gtk_alignment_new - PullRequest
0 голосов
/ 07 ноября 2019

Я использовал виджет GtkAlignment для управления выравниванием и размером его дочернего виджета. Но gtk_alignment_new устарела с версии 3.14 и не должна использоваться во вновь создаваемом коде. Какие функции я должен использовать в качестве альтернативы, чтобы код был gtk3 + совместимым?

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {

  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *halign;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "Tooltip");
  gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
  gtk_container_set_border_width(GTK_CONTAINER(window), 15);

  button = gtk_button_new_with_label("Button");
  gtk_widget_set_tooltip_text(button, "Button widget");

  halign = gtk_alignment_new(0, 0, 0, 0);
  gtk_container_add(GTK_CONTAINER(halign), button);
  gtk_container_add(GTK_CONTAINER(window), halign);  

  gtk_widget_show_all(window);

  g_signal_connect(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);  

  gtk_main();

  return 0;
}

1 Ответ

2 голосов
/ 08 ноября 2019

Как предлагается в комментарии, используйте вместо них следующие две функции:

  • void gtk_widget_set_halign (GtkWidget *widget, GtkAlign align); Устанавливает горизонтальное выравнивание виджета.

  • gtk_widget_get_valign (GtkWidget *widget); Устанавливает вертикальное выравнивание виджета.

Типы перечисления GtkAlign следующие:

  • GTK_ALIGN_START: «начало» макета. По вертикали это верх, по горизонтали это влево / вправо в соответствии с LTR / RTL

  • GTK_ALIGN_END: напротив GTK_ALIGN_START

  • GTK_ALIGN_CENTER: Середина макета

  • GTK_ALIGN_FILL: занять все доступное пространство

для масштабирования GTK_ALIGN_FILL.

Таким образом, совместим с gtk3 +альтернативой для вашего кода является следующее:

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {

  GtkWidget *window;
  GtkWidget *button;    

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "Tooltip");
  gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);

  gtk_container_set_border_width(GTK_CONTAINER(window), 15);

  button = gtk_button_new_with_label("Button");
  gtk_widget_set_tooltip_text(button, "Button widget");

  gtk_widget_set_halign (button, GTK_ALIGN_START);
  gtk_widget_set_valign (button, GTK_ALIGN_START);

  gtk_container_add (GTK_CONTAINER (window), button);
  g_signal_connect(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);
  gtk_widget_show_all(window);
  gtk_main();

  return 0;
}
...