[cheese] window: remove initial black bars (at least for 4:3 webcams)



commit dd1efbf7000c1331d05014cfde3b9abc3e985ca1
Author: Filippo Argiolas <filippo argiolas gmail com>
Date:   Tue May 26 08:48:05 2009 +0200

    window: remove initial black bars (at least for 4:3 webcams)
    
    Set a size request on the drawing area, get the requisition computed on
    the main window and use it as default size. Then the first size request
    can be removed and the window will keep the size we requested.
    Handy trick to set default size of the drawing area without limiting its
    minimum size.
---
 data/cheese.glade   |    4 ----
 data/cheese.ui      |    4 ----
 src/cheese-window.c |   17 ++++++++++++++++-
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/data/cheese.glade b/data/cheese.glade
index 36342c2..9a61eba 100644
--- a/data/cheese.glade
+++ b/data/cheese.glade
@@ -4,8 +4,6 @@
   <!-- interface-naming-policy toplevel-contextual -->
   <widget class="GtkWindow" id="cheese_window">
     <property name="title" translatable="yes">Cheese</property>
-    <property name="default_width">640</property>
-    <property name="default_height">670</property>
     <property name="icon_name">cheese</property>
     <child>
       <widget class="GtkVBox" id="main_vbox">
@@ -41,8 +39,6 @@
                     </child>
                     <child>
                       <widget class="GtkDrawingArea" id="video_screen">
-                        <property name="width_request">320</property>
-                        <property name="height_request">240</property>
                         <property name="visible">True</property>
                       </widget>
                       <packing>
diff --git a/data/cheese.ui b/data/cheese.ui
index 1e38dd3..008eb26 100644
--- a/data/cheese.ui
+++ b/data/cheese.ui
@@ -4,8 +4,6 @@
   <!-- interface-naming-policy toplevel-contextual -->
   <object class="GtkWindow" id="cheese_window">
     <property name="title" translatable="yes">Cheese</property>
-    <property name="default_width">640</property>
-    <property name="default_height">670</property>
     <property name="icon_name">cheese</property>
     <child>
       <object class="GtkVBox" id="main_vbox">
@@ -41,8 +39,6 @@
                     </child>
                     <child>
                       <object class="GtkDrawingArea" id="video_screen">
-                        <property name="width_request">320</property>
-                        <property name="height_request">240</property>
                         <property name="visible">True</property>
                       </object>
                       <packing>
diff --git a/src/cheese-window.c b/src/cheese-window.c
index 0712926..fd5727b 100644
--- a/src/cheese-window.c
+++ b/src/cheese-window.c
@@ -61,6 +61,8 @@
 #define FULLSCREEN_POPUP_HEIGHT    40
 #define FULLSCREEN_TIMEOUT         5 * 1000
 #define FULLSCREEN_EFFECTS_TIMEOUT 15
+#define DEFAULT_WINDOW_WIDTH 600
+#define DEFAULT_WINDOW_HEIGHT 450
 
 typedef enum
 {
@@ -1661,6 +1663,8 @@ cheese_window_create_window (CheeseWindow *cheese_window)
   cheese_window->thumb_view = cheese_thumb_view_new ();
   cheese_window->thumb_nav  = eog_thumb_nav_new (cheese_window->thumb_view, TRUE);
   gtk_container_add (GTK_CONTAINER (cheese_window->thumb_scrollwindow), cheese_window->thumb_nav);
+  /* show the scroll window to get it included in the size requisition done later */
+  gtk_widget_show_all (cheese_window->thumb_scrollwindow);
 
   char *gconf_effects;
   g_object_get (cheese_window->gconf, "gconf_prop_selected_effects", &gconf_effects, NULL);
@@ -1951,6 +1955,7 @@ setup_camera (CheeseWindow *cheese_window)
   gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture), TRUE);
   gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture_fullscreen), TRUE);
   gtk_action_group_set_sensitive (cheese_window->actions_effects, TRUE);
+
   gdk_threads_leave ();
 }
 
@@ -1978,7 +1983,6 @@ cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server)
   cheese_window_create_window (cheese_window);
   gtk_action_group_set_sensitive (cheese_window->actions_effects, FALSE);
 
-  gtk_widget_show_all (cheese_window->window);
   ephy_spinner_start (EPHY_SPINNER (cheese_window->throbber));
 
   gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook), 2);
@@ -1986,6 +1990,17 @@ cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server)
   cheese_window->webcam_mode = WEBCAM_MODE_PHOTO;
   cheese_window->recording   = FALSE;
 
+  /* handy trick to set default size of the drawing area while not
+   * limiting its minimum size, thanks Owen! */
+  GtkRequisition req;
+  gtk_widget_set_size_request (cheese_window->screen,
+                               DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT);
+  gtk_widget_size_request (cheese_window->window, &req);
+  gtk_window_set_default_size (GTK_WINDOW (cheese_window->window), req.width, req.height);
+  gtk_widget_set_size_request (cheese_window->screen, -1, -1);
+
+  gtk_widget_show_all (cheese_window->window);
+
   /* Run cam setup in its own thread */
   GError *error = NULL;
   if (!g_thread_create ((GThreadFunc) setup_camera, cheese_window, FALSE, &error))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]