Selaa lähdekoodia

Show spinner while capturing and processing an image

Benjamin Schaaf 4 vuotta sitten
vanhempi
commit
21547ed210
2 muutettua tiedostoa jossa 26 lisäystä ja 3 poistoa
  1. 17 3
      camera.glade
  2. 9 0
      main.c

+ 17 - 3
camera.glade

@@ -238,11 +238,25 @@
                         <property name="can-focus">True</property>
                         <property name="receives-default">True</property>
                         <child>
-                          <object class="GtkImage" id="thumb_last">
-                            <property name="width-request">24</property>
-                            <property name="height-request">24</property>
+                          <object class="GtkStack" id="open_last_stack">
                             <property name="visible">True</property>
                             <property name="can-focus">False</property>
+                            <child>
+                              <object class="GtkImage" id="thumb_last">
+                                <property name="width-request">24</property>
+                                <property name="height-request">24</property>
+                                <property name="visible">True</property>
+                                <property name="can-focus">False</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkSpinner" id="process_spinner">
+                                <property name="width-request">24</property>
+                                <property name="height-request">24</property>
+                                <property name="visible">True</property>
+                                <property name="can-focus">False</property>
+                              </object>
+                            </child>
                           </object>
                         </child>
                       </object>

+ 9 - 0
main.c

@@ -53,7 +53,9 @@ GtkWidget *preview;
 GtkWidget *error_box;
 GtkWidget *error_message;
 GtkWidget *main_stack;
+GtkWidget *open_last_stack;
 GtkWidget *thumb_last;
+GtkWidget *process_spinner;
 GtkWidget *control_box;
 GtkWidget *control_name;
 GtkAdjustment *control_slider;
@@ -181,6 +183,9 @@ capture_completed(const char *fname)
 
 	gtk_image_set_from_surface(GTK_IMAGE(thumb_last), thumb);
 
+	gtk_spinner_stop(GTK_SPINNER(process_spinner));
+	gtk_stack_set_visible_child(GTK_STACK(open_last_stack), thumb_last);
+
 	cairo_surface_destroy(thumb);
 	return false;
 }
@@ -350,6 +355,8 @@ on_open_directory_clicked(GtkWidget *widget, gpointer user_data)
 void
 on_shutter_clicked(GtkWidget *widget, gpointer user_data)
 {
+	gtk_spinner_start(GTK_SPINNER(process_spinner));
+	gtk_stack_set_visible_child(GTK_STACK(open_last_stack), process_spinner);
 	mp_io_pipeline_capture();
 }
 
@@ -542,7 +549,9 @@ main(int argc, char *argv[])
 	error_box = GTK_WIDGET(gtk_builder_get_object(builder, "error_box"));
 	error_message = GTK_WIDGET(gtk_builder_get_object(builder, "error_message"));
 	main_stack = GTK_WIDGET(gtk_builder_get_object(builder, "main_stack"));
+	open_last_stack = GTK_WIDGET(gtk_builder_get_object(builder, "open_last_stack"));
 	thumb_last = GTK_WIDGET(gtk_builder_get_object(builder, "thumb_last"));
+	process_spinner = GTK_WIDGET(gtk_builder_get_object(builder, "process_spinner"));
 	control_box = GTK_WIDGET(gtk_builder_get_object(builder, "control_box"));
 	control_name = GTK_WIDGET(gtk_builder_get_object(builder, "control_name"));
 	control_slider =