static void file_selector_init (FileSelector *actor) { actor->priv = FILE_SELECTOR_GET_PRIVATE (actor); actor->priv->is_standby = TRUE; actor->priv->dialog = gtk_file_chooser_dialog_new ("Choose File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); clutter_actor_set_reactive (CLUTTER_ACTOR (actor), TRUE); g_signal_connect (actor, "button-press-event", G_CALLBACK (show_dialog), NULL); clutter_text_set_max_length (CLUTTER_TEXT (actor), 0); }
static ClutterActor * create_entry (const ClutterColor *color, const gchar *text, PangoAttrList *attrs, gunichar password_char, gint max_length) { ClutterActor *retval = clutter_text_new_full (NULL, text, color); ClutterColor selection = { 0, }; ClutterColor selected_text = { 0x00, 0x00, 0xff, 0xff }; clutter_actor_set_reactive (retval, TRUE); clutter_color_darken (color, &selection); clutter_text_set_editable (CLUTTER_TEXT (retval), TRUE); clutter_text_set_selectable (CLUTTER_TEXT (retval), TRUE); clutter_text_set_activatable (CLUTTER_TEXT (retval), TRUE); clutter_text_set_single_line_mode (CLUTTER_TEXT (retval), TRUE); clutter_text_set_password_char (CLUTTER_TEXT (retval), password_char); clutter_text_set_cursor_color (CLUTTER_TEXT (retval), &selection); clutter_text_set_max_length (CLUTTER_TEXT (retval), max_length); clutter_text_set_selected_text_color (CLUTTER_TEXT (retval), &selected_text); clutter_actor_set_background_color (retval, CLUTTER_COLOR_LightGray); if (attrs) clutter_text_set_attributes (CLUTTER_TEXT (retval), attrs); g_signal_connect (retval, "activate", G_CALLBACK (on_entry_activate), NULL); g_signal_connect (retval, "captured-event", G_CALLBACK (on_captured_event), NULL); return retval; }
static void load_controls (UserInterface * ui) { // Check icon files exist gchar *vid_panel_png; gchar *icon_files[6]; gchar *duration_str; gint c; ClutterColor control_color1 = { 0x12, 0x12, 0x12, 0xff }; ClutterColor control_color2 = { 0xcc, 0xcc, 0xcc, 0xff }; ClutterLayoutManager *controls_layout; ClutterLayoutManager *main_box_layout; ClutterLayoutManager *info_box_layout; ClutterLayoutManager *bottom_box_layout; ClutterLayoutManager *volume_box_layout; ClutterLayoutManager *seek_box_layout; ClutterLayoutManager *vol_int_box_layout; ClutterActor *seek_box; ClutterActor *bottom_box; ClutterActor *vol_int_box; GError *error = NULL; vid_panel_png = g_strdup_printf ("%s%s", SNAPPY_DATA_DIR, "/vid-panel.png"); ui->play_png = g_strdup_printf ("%s%s", SNAPPY_DATA_DIR, "/media-actions-start.png"); ui->pause_png = g_strdup_printf ("%s%s", SNAPPY_DATA_DIR, "/media-actions-pause.png"); ui->volume_low_png = g_strdup_printf ("%s%s", SNAPPY_DATA_DIR, "/audio-volume-low.png"); ui->volume_high_png = g_strdup_printf ("%s%s", SNAPPY_DATA_DIR, "/audio-volume-high.png"); ui->segment_png = g_strdup_printf ("%s%s", SNAPPY_DATA_DIR, "/media-actions-segment-point.png"); icon_files[0] = vid_panel_png; icon_files[1] = ui->play_png; icon_files[2] = ui->pause_png; icon_files[3] = ui->volume_low_png; icon_files[4] = ui->volume_high_png; icon_files[5] = ui->segment_png; for (c = 0; c < 6; c++) { if (!g_file_test (icon_files[c], G_FILE_TEST_EXISTS)) { g_print ("Icon file doesn't exist, are you sure you have " " installed snappy correctly?\nThis file needed is: %s\n", icon_files[c]); } } // Controls layout management controls_layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FIXED, CLUTTER_BIN_ALIGNMENT_FIXED); ui->control_box = clutter_box_new (controls_layout); // Controls background ui->control_bg = clutter_texture_new_from_file (vid_panel_png, &error); if (!ui->control_bg && error) g_debug ("Clutter error: %s\n", error->message); if (error) { g_error_free (error); error = NULL; } g_free (vid_panel_png); clutter_container_add_actor (CLUTTER_CONTAINER (ui->control_box), ui->control_bg); // Controls play toggle main_box_layout = clutter_box_layout_new (); clutter_box_layout_set_vertical (CLUTTER_BOX_LAYOUT (main_box_layout), FALSE); ui->main_box = clutter_box_new (main_box_layout); ui->control_play_toggle = clutter_texture_new_from_file (ui->pause_png, &error); if (!ui->control_play_toggle && error) g_debug ("Clutter error: %s\n", error->message); if (error) { g_error_free (error); error = NULL; } clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (main_box_layout), ui->control_play_toggle, FALSE, /* expand */ FALSE, /* x-fill */ FALSE, /* y-fill */ CLUTTER_BOX_ALIGNMENT_START, /* x-align */ CLUTTER_BOX_ALIGNMENT_CENTER); /* y-align */ clutter_container_add_actor (CLUTTER_CONTAINER (ui->control_box), ui->main_box); g_assert (ui->control_bg && ui->control_play_toggle); // Controls title info_box_layout = clutter_box_layout_new (); clutter_box_layout_set_vertical (CLUTTER_BOX_LAYOUT (info_box_layout), TRUE); ui->info_box = clutter_box_new (info_box_layout); ui->control_title = clutter_text_new_full ("Sans 32px", cut_long_filename (ui->filename, ui->title_length), &control_color1); clutter_text_set_max_length (CLUTTER_TEXT (ui->control_title), ui->title_length); clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (info_box_layout), ui->control_title, TRUE, /* expand */ FALSE, /* x-fill */ FALSE, /* y-fill */ CLUTTER_BOX_ALIGNMENT_CENTER, /* x-align */ CLUTTER_BOX_ALIGNMENT_START); /* y-align */ // Controls seek seek_box_layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FIXED, CLUTTER_BIN_ALIGNMENT_FIXED); seek_box = clutter_box_new (seek_box_layout); // In point ui->in_point = clutter_texture_new_from_file (ui->segment_png, &error); if (!ui->in_point && error) g_debug ("Clutter error: %s\n", error->message); if (error) { g_error_free (error); error = NULL; } clutter_container_add_actor (CLUTTER_CONTAINER (seek_box), ui->in_point); // background box rectangle shows as the border ui->control_seek1 = clutter_rectangle_new_with_color (&control_color1); clutter_container_add_actor (CLUTTER_CONTAINER (seek_box), ui->control_seek1); // smaller background rectangle inside seek1 to create a border ui->control_seek2 = clutter_rectangle_new_with_color (&control_color2); clutter_container_add_actor (CLUTTER_CONTAINER (seek_box), ui->control_seek2); // progress rectangle ui->control_seekbar = clutter_rectangle_new_with_color (&control_color1); clutter_container_add_actor (CLUTTER_CONTAINER (seek_box), ui->control_seekbar); clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (info_box_layout), seek_box, TRUE, /* expand */ FALSE, /* x-fill */ FALSE, /* y-fill */ CLUTTER_BOX_ALIGNMENT_CENTER, /* x-align */ CLUTTER_BOX_ALIGNMENT_CENTER); /* y-align */ // Out point ui->out_point = clutter_texture_new_from_file (ui->segment_png, &error); if (!ui->out_point && error) g_debug ("Clutter error: %s\n", error->message); if (error) { g_error_free (error); error = NULL; } clutter_container_add_actor (CLUTTER_CONTAINER (seek_box), ui->out_point); // Controls bottom box bottom_box_layout = clutter_box_layout_new (); clutter_box_layout_set_vertical (CLUTTER_BOX_LAYOUT (bottom_box_layout), FALSE); bottom_box = clutter_box_new (bottom_box_layout); // Controls volume box volume_box_layout = clutter_box_layout_new (); clutter_box_layout_set_vertical (CLUTTER_BOX_LAYOUT (volume_box_layout), FALSE); clutter_box_layout_set_spacing (CLUTTER_BOX_LAYOUT (volume_box_layout), 0); ui->volume_box = clutter_box_new (volume_box_layout); clutter_box_pack (CLUTTER_BOX (bottom_box), ui->volume_box, "x-align", CLUTTER_BOX_ALIGNMENT_START, "expand", TRUE, NULL); // Controls volume low ui->volume_low = clutter_texture_new_from_file (ui->volume_low_png, &error); if (!ui->volume_low && error) g_debug ("Clutter error: %s\n", error->message); if (error) { g_error_free (error); error = NULL; } clutter_box_pack (CLUTTER_BOX (ui->volume_box), ui->volume_low, "x-align", CLUTTER_BOX_ALIGNMENT_START, NULL); // Controls volume intensity vol_int_box_layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FIXED, CLUTTER_BIN_ALIGNMENT_FIXED); vol_int_box = clutter_box_new (vol_int_box_layout); ui->vol_int_bg = clutter_rectangle_new_with_color (&control_color1); clutter_container_add_actor (CLUTTER_CONTAINER (vol_int_box), ui->vol_int_bg); ui->vol_int = clutter_rectangle_new_with_color (&control_color1); clutter_container_add_actor (CLUTTER_CONTAINER (vol_int_box), ui->vol_int); clutter_box_pack (CLUTTER_BOX (ui->volume_box), vol_int_box, "x-fill", FALSE, "y-fill", FALSE, "y-align", CLUTTER_BOX_ALIGNMENT_CENTER, NULL); // Controls volume high ui->volume_high = clutter_texture_new_from_file (ui->volume_high_png, &error); if (!ui->volume_high && error) g_debug ("Clutter error: %s\n", error->message); if (error) { g_error_free (error); error = NULL; } clutter_box_pack (CLUTTER_BOX (ui->volume_box), ui->volume_high, "x-align", CLUTTER_BOX_ALIGNMENT_END, NULL); // Controls position text duration_str = g_strdup_printf (" 0:00:00/%s", ui->duration_str); ui->control_pos = clutter_text_new_full ("Sans 22px", duration_str, &control_color1); clutter_box_pack (CLUTTER_BOX (bottom_box), ui->control_pos, "x-align", CLUTTER_BOX_ALIGNMENT_END, "expand", TRUE, NULL); clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (info_box_layout), bottom_box, TRUE, /* expand */ FALSE, /* x-fill */ FALSE, /* y-fill */ CLUTTER_BOX_ALIGNMENT_CENTER, /* x-align */ CLUTTER_BOX_ALIGNMENT_END); /* y-align */ clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (main_box_layout), ui->info_box, FALSE, /* expand */ TRUE, /* x-fill */ FALSE, /* y-fill */ CLUTTER_BOX_ALIGNMENT_END, /* x-align */ CLUTTER_BOX_ALIGNMENT_CENTER); /* y-align */ clutter_actor_lower_bottom (ui->control_bg); size_change (CLUTTER_STAGE (ui->stage), ui); }