예제 #1
0
static void
kinetic_scrolling_changed (GtkToggleButton *toggle_button,
                           gpointer         data)
{
  GtkScrolledWindow *swindow = data;
  gboolean enabled = gtk_toggle_button_get_active (toggle_button);

  gtk_scrolled_window_set_kinetic_scrolling (swindow, enabled);
}
예제 #2
0
static void budgie_track_list_init(BudgieTrackList *self)
{
        GtkWidget *page;
        GtkWidget *info_box;
        GtkWidget *image;
        GtkWidget *label;
        
        GtkWidget *list;
        GtkWidget *scroll;

        GtkCellRenderer *renderer;
        GtkTreeViewColumn *column;
        
        GtkStyleContext *style;

        page = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
        gtk_container_set_border_width(GTK_CONTAINER(page), 0);
        /* Don't forget to add us to the stack. */

        /* Info box stores image, count, etc. */
        info_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
        gtk_box_pack_start(GTK_BOX(page), info_box, FALSE, FALSE, 0);
        gtk_widget_set_valign(info_box, GTK_ALIGN_FILL);

        /* Image for album art */
        image = gtk_image_new();
        gtk_widget_set_halign(image, GTK_ALIGN_START);
        gtk_widget_set_valign(image, GTK_ALIGN_CENTER);
        g_object_set(image, "margin-top", 20, NULL);
        g_object_set(image, "margin-left", 20, NULL);
        g_object_set(image, "margin-right", 20, NULL);
        gtk_box_pack_start(GTK_BOX(info_box), image, FALSE, FALSE, 0);
        gtk_image_set_pixel_size(GTK_IMAGE(image), 256);
        self->image = image;

        /* Album, etc, */
        label = gtk_label_new("");
        gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
        gtk_label_set_max_width_chars(GTK_LABEL(label), 30);
        gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
        g_object_set(label, "margin-bottom", 10,
                "margin-left", 5, NULL);
        self->current_label = label;
        gtk_box_pack_start(GTK_BOX(info_box), label, FALSE, FALSE, 0);
        style = gtk_widget_get_style_context(label);
        
        /* Count label */
        label = gtk_label_new("");
        self->count_label = label;
        gtk_box_pack_start(GTK_BOX(info_box), label, FALSE, FALSE, 0);
        gtk_widget_set_valign(label, GTK_ALIGN_END);
        style = gtk_widget_get_style_context(label);
        gtk_style_context_add_class(style, "info-label");

        /* Construct the track list box. */
        self->store = gtk_list_store_new(BUDGIE_TRACK_LIST_DB_NUM_FIELDS,
                G_TYPE_STRING, /* Title */
                G_TYPE_INT, /* Track no */
                G_TYPE_STRING, /* Artist/author */
                G_TYPE_STRING, /* Album */
                G_TYPE_STRING, /* Band */
                G_TYPE_STRING, /* Genre */
                G_TYPE_STRING, /* File path */
                G_TYPE_STRING, /* MIME type */
                G_TYPE_POINTER, /* MediaInfo */
                G_TYPE_STRING /* Now-playing */
                );

        /* Append tracks to a pretty listbox */
        list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(self->store));
        gtk_tree_view_set_activate_on_single_click(GTK_TREE_VIEW(list), TRUE);
        g_object_set(G_OBJECT(list), "headers-visible", FALSE, NULL);

        /* Add columns for the list. */
        renderer = gtk_cell_renderer_pixbuf_new();
        column = gtk_tree_view_column_new_with_attributes("  ",
                renderer,
                "icon-name", BUDGIE_TRACK_LIST_DB_PLAYING,
                NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);

        /* Title */
        renderer = gtk_cell_renderer_text_new();
        column = gtk_tree_view_column_new_with_attributes("Title",
                renderer,
                "text", BUDGIE_TRACK_LIST_DB_TITLE,
                NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);

        /* Artist */
        renderer = gtk_cell_renderer_text_new();
        column = gtk_tree_view_column_new_with_attributes("Artist",
                renderer,
                "text", BUDGIE_TRACK_LIST_DB_ARTIST,
                NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);

        gtk_widget_set_halign(list, GTK_ALIGN_FILL);
        self->list = list;

        /* Scroller for the listbox */
        scroll = gtk_scrolled_window_new(NULL, NULL);
        gtk_scrolled_window_set_kinetic_scrolling(GTK_SCROLLED_WINDOW(scroll),
                TRUE);
        gtk_container_add(GTK_CONTAINER(scroll), list);
        gtk_box_pack_start(GTK_BOX(page), scroll, TRUE, TRUE, 0);
        g_object_set(scroll, "margin-top", 20, NULL);
        gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll),
                GTK_SHADOW_NONE);

        /* Add the page to this container. */
        gtk_container_add(GTK_CONTAINER(self), page);
}
예제 #3
0
static void
kinetic_scrolling (void)
{
  GtkWidget *window, *swindow, *grid;
  GtkWidget *label;
  GtkWidget *button_grid, *button;
  GtkWidget *treeview;
  GtkCellRenderer *renderer;
  GtkListStore *store;
  GtkWidget *textview;
  gint i;

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_set_border_width (GTK_CONTAINER (window), 5);
  gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
  g_signal_connect (window, "delete_event",
                    G_CALLBACK (gtk_main_quit), NULL);

  grid = gtk_grid_new ();

  label = gtk_label_new ("Non scrollable widget using viewport");
  gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
  gtk_widget_set_hexpand (label, TRUE);
  gtk_widget_show (label);

  label = gtk_label_new ("Scrollable widget: TreeView");
  gtk_grid_attach (GTK_GRID (grid), label, 1, 0, 1, 1);
  gtk_widget_set_hexpand (label, TRUE);
  gtk_widget_show (label);

  label = gtk_label_new ("Scrollable widget: TextView");
  gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1);
  gtk_widget_set_hexpand (label, TRUE);
  gtk_widget_show (label);

  button_grid = gtk_grid_new ();
  for (i = 0; i < 80; i++)
    {
      gchar *label = g_strdup_printf ("Button number %d", i);

      button = gtk_button_new_with_label (label);
      gtk_grid_attach (GTK_GRID (button_grid), button, 0, i, 1, 1);
      gtk_widget_set_hexpand (button, TRUE);
      gtk_widget_show (button);
      g_signal_connect (button, "clicked",
                        G_CALLBACK (on_button_clicked),
                        GINT_TO_POINTER (i));
      g_free (label);
    }

  swindow = gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_kinetic_scrolling (GTK_SCROLLED_WINDOW (swindow), TRUE);
  gtk_scrolled_window_set_capture_button_press (GTK_SCROLLED_WINDOW (swindow), TRUE);
  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (swindow), button_grid);
  gtk_widget_show (button_grid);

  gtk_grid_attach (GTK_GRID (grid), swindow, 0, 1, 1, 1);
  gtk_widget_show (swindow);

  treeview = gtk_tree_view_new ();
  gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (treeview),
                                          GDK_BUTTON1_MASK,
                                          row_targets,
                                          G_N_ELEMENTS (row_targets),
                                          GDK_ACTION_MOVE | GDK_ACTION_COPY);
  gtk_tree_view_enable_model_drag_dest (GTK_TREE_VIEW (treeview),
                                        row_targets,
                                        G_N_ELEMENTS (row_targets),
                                        GDK_ACTION_MOVE | GDK_ACTION_COPY);

  renderer = gtk_cell_renderer_text_new ();
  g_object_set (renderer, "editable", TRUE, NULL);
  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
                                               0, "Title",
                                               renderer,
                                               "text", 0,
                                               NULL);
  store = gtk_list_store_new (1, G_TYPE_STRING);
  for (i = 0; i < 80; i++)
    {
      GtkTreeIter iter;
      gchar *label = g_strdup_printf ("Row number %d", i);

      gtk_list_store_append (store, &iter);
      gtk_list_store_set (store, &iter, 0, label, -1);
      g_free (label);
    }
  gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
  g_object_unref (store);

  swindow = gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_kinetic_scrolling (GTK_SCROLLED_WINDOW (swindow), TRUE);
  gtk_scrolled_window_set_capture_button_press (GTK_SCROLLED_WINDOW (swindow), TRUE);
  gtk_container_add (GTK_CONTAINER (swindow), treeview);
  gtk_widget_show (treeview);

  gtk_grid_attach (GTK_GRID (grid), swindow, 1, 1, 1, 1);
  gtk_widget_set_hexpand (swindow, TRUE);
  gtk_widget_set_vexpand (swindow, TRUE);
  gtk_widget_show (swindow);

  textview = gtk_text_view_new ();
  swindow = gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_kinetic_scrolling (GTK_SCROLLED_WINDOW (swindow), TRUE);
  gtk_scrolled_window_set_capture_button_press (GTK_SCROLLED_WINDOW (swindow), TRUE);
  gtk_container_add (GTK_CONTAINER (swindow), textview);
  gtk_widget_show (textview);

  gtk_grid_attach (GTK_GRID (grid), swindow, 2, 1, 1, 1);
  gtk_widget_set_hexpand (swindow, TRUE);
  gtk_widget_set_vexpand (swindow, TRUE);
  gtk_widget_show (swindow);

  gtk_container_add (GTK_CONTAINER (window), grid);
  gtk_widget_show (grid);

  gtk_widget_show (window);
}