]> granicus.if.org Git - handbrake/commitdiff
LinGui: simplify preview overlay
authorjstebbins <jstebbins.hb@gmail.com>
Wed, 29 Jul 2015 22:30:58 +0000 (22:30 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Wed, 29 Jul 2015 22:30:58 +0000 (22:30 +0000)
Don't use gdk_display_supports_composite or gdk_window_set_composited.
They have been deprecated.

Unfortunately, this means I lose some functionality.  I can give the HUD
round corners or I can make it translucent.  It appears there is no way
to do both in the latest gtk+-3 :(

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@7384 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/Makefile.am
gtk/src/composite_example.c [deleted file]
gtk/src/ghb-3.12.ui
gtk/src/ghb-3.14.ui
gtk/src/ghb.ui
gtk/src/ghbcompositor.c [deleted file]
gtk/src/ghbcompositor.h [deleted file]
gtk/src/main.c
gtk/src/preview.c

index e72ba59aff2db2f73ac96ae0c3e0a6d91312cd4b..21801977d45624be91322177fbb8748bc7f64d21 100644 (file)
@@ -73,8 +73,6 @@ ghb_SOURCES = \
        renderer_button.c \
        ghbcellrenderertext.c \
        ghbcellrenderertext.h \
-       ghbcompositor.c \
-       ghbcompositor.h \
        ghb-dvd.c \
        ghb-dvd.h \
        marshalers.c \
diff --git a/gtk/src/composite_example.c b/gtk/src/composite_example.c
deleted file mode 100644 (file)
index 7918b30..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#include <gtk/gtk.h>
-#include "ghbcompositor.h"
-
-// GhbCompositor example
-int
-main(gint argc, gchar *argv[])
-{
-    GtkWidget *window;
-    GtkWidget *blender;
-    GtkWidget *eb_bottom;
-    GtkWidget *eb_top1;
-    GtkWidget *eb_top2;
-    GtkWidget *eb_top3;
-    GtkWidget *bottom;
-    GtkWidget *top1;
-    GtkWidget *top2;
-    GtkWidget *top3;
-    GtkWidget *table;
-    GtkWidget *image;
-
-    gtk_init(&argc, &argv);
-
-    // Make the top level window
-    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-
-    // Only widgets that have a GdkDrawing area can be composited
-    // These would be GtkEventBox or GtkDrawingArea
-    // Create the widgets that will be composited
-    eb_bottom = gtk_event_box_new();
-    eb_top1 = gtk_event_box_new();
-    eb_top2 = gtk_event_box_new();
-    eb_top3 = gtk_event_box_new();
-
-    // Create the compositor
-    blender = ghb_compositor_new();
-
-    // Create an button to put on the bottom layer
-    bottom = gtk_button_new_with_label("Bottom");
-    image = gtk_image_new_from_stock("gtk-help", 6);
-    gtk_button_set_image(GTK_BUTTON(bottom), image);
-
-    // The button must be placed inside an event box since
-    // buttons do not have their own window.
-    gtk_container_add(GTK_CONTAINER(eb_bottom), bottom);
-
-    // Create the buttons that will be visible on the top layer
-    top1 = gtk_button_new_with_label("Top 1");
-    top2 = gtk_button_new_with_label("Top 2");
-    top3 = gtk_button_new_with_label("Top 3");
-
-    // The buttons must be placed inside an event box since
-    // buttons do not have their own window.
-    gtk_container_add(GTK_CONTAINER(eb_top1), top1);
-    gtk_container_add(GTK_CONTAINER(eb_top2), top2);
-    gtk_container_add(GTK_CONTAINER(eb_top3), top3);
-
-    // Create the table that will be the top layer
-    // Using a layout widget gives flexibility in the layout of the layer
-    table = gtk_table_new(3, 3, TRUE);
-    gtk_table_attach(GTK_TABLE(table), eb_top1, 0, 1, 0, 1, 0, 0, 0, 0);
-    gtk_table_attach(GTK_TABLE(table), eb_top2, 1, 2, 1, 2, 0, 0, 0, 0);
-    gtk_table_attach(GTK_TABLE(table), eb_top3, 2, 3, 2, 3, 0, 0, 0, 0);
-
-    // Add the blender to the main window.
-    gtk_container_add(GTK_CONTAINER(window), blender);
-
-    // Set the blenders zlist, with opacity values
-    // Bottom layer is opaque, top layer 60%
-    ghb_compositor_zlist_insert(GHB_COMPOSITOR(blender), eb_bottom, 1, 1);
-    ghb_compositor_zlist_insert(GHB_COMPOSITOR(blender), table, 2, 0.6);
-
-    // Start the show
-    gtk_widget_show_all(window);
-
-    gtk_main();
-    return 0;
-}
-
index 6b886d6c1c15b9393c74551c3bb4d00f8388ac4d..5163cb9860441324b39cd7cba449126d14fdb60e 100644 (file)
@@ -8131,243 +8131,259 @@ Setting this to 0 means there is no maximum height.</property>
       <action-widget response="-5">preset_ok</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkDrawingArea" id="preview_image">
-    <property name="visible">True</property>
-    <property name="app_paintable">True</property>
-    <property name="can_focus">False</property>
-    <property name="halign">center</property>
-    <property name="valign">center</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK</property>
-    <signal name="leave-notify-event" handler="preview_leave_cb" swapped="no"/>
-    <signal name="motion-notify-event" handler="preview_motion_cb" swapped="no"/>
-  </object>
   <object class="GtkAdjustment" id="preview_progress_adj">
     <property name="upper">100</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
-  <object class="GtkEventBox" id="preview_hud">
-    <property name="visible">True</property>
-    <property name="app_paintable">True</property>
+  <object class="GtkWindow" id="preview_window">
     <property name="can_focus">False</property>
-    <property name="halign">center</property>
-    <property name="valign">end</property>
-    <property name="margin-bottom">30</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
-    <signal name="enter-notify-event" handler="hud_enter_cb" swapped="no"/>
-    <signal name="size-allocate" handler="preview_hud_size_alloc_cb" swapped="no"/>
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property>
+    <property name="title" translatable="yes">Preview</property>
+    <property name="resizable">False</property>
+    <property name="window_position">center</property>
+    <property name="type_hint">utility</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="transient_for">hb_window</property>
+    <signal name="configure-event" handler="preview_configure_cb" swapped="no"/>
+    <signal name="delete-event" handler="preview_window_delete_cb" swapped="no"/>
     <child>
-      <object class="GtkBox" id="vbox35">
-        <property name="orientation">vertical</property>
+      <object class="GtkBox" id="preview_window_box">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="margin-top">5</property>
-        <property name="margin-bottom">5</property>
-        <property name="margin-left">10</property>
-        <property name="margin-right">10</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
         <child>
-          <object class="GtkScale" id="preview_frame">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="tooltip_text" translatable="yes">Select preview frames.</property>
-            <property name="adjustment">adjustment19</property>
-            <property name="digits">0</property>
-            <property name="value_pos">bottom</property>
-            <signal name="value-changed" handler="preview_frame_value_changed_cb" swapped="no"/>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkBox" id="live_preview_box">
-            <property name="orientation">horizontal</property>
+          <object class="GtkLayout" id="preview_image">
             <property name="visible">True</property>
+            <property name="app_paintable">True</property>
             <property name="can_focus">False</property>
-            <property name="spacing">5</property>
+            <property name="halign">center</property>
+            <property name="valign">center</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK</property>
+            <signal name="leave-notify-event" handler="preview_leave_cb" swapped="no"/>
+            <signal name="motion-notify-event" handler="preview_motion_cb" swapped="no"/>
+            <signal name="draw" handler="preview_draw_cb" swapped="no"/>
             <child>
-              <object class="GtkButton" id="live_preview_play">
-                <property name="height_request">30</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Encode and play a short sequence of video starting from the current preview position.</property>
-                <property name="relief">none</property>
-                <signal name="clicked" handler="live_preview_start_cb" swapped="no"/>
-                <child>
-                  <object class="GtkImage" id="live_preview_play_image">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="icon_name">gtk-media-play</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkScale" id="live_preview_progress">
-                <property name="can_focus">True</property>
-                <property name="adjustment">preview_progress_adj</property>
-                <property name="draw_value">False</property>
-                <property name="value_pos">right</property>
-                <signal name="value-changed" handler="live_preview_seek_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkBox" id="live_progress_box">
+              <object class="GtkBox" id="preview_hud_box">
                 <property name="orientation">vertical</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <object class="GtkProgressBar" id="live_encode_progress">
-                    <property name="height_request">20</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkBox" id="hbox26">
-            <property name="orientation">horizontal</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="spacing">10</property>
-            <child>
-              <object class="GtkBox" id="live_preview_duration_box">
-                <property name="orientation">horizontal</property>
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="spacing">2</property>
                 <child>
-                  <object class="GtkLabel" id="label37">
+                  <object class="GtkEventBox" id="preview_hud">
                     <property name="visible">True</property>
+                    <property name="app_paintable">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">&lt;b&gt;Duration:&lt;/b&gt;</property>
-                    <property name="use_markup">True</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkSpinButton" id="live_duration">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="tooltip_text" translatable="yes">Set the duration of the live preview in seconds.</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="adjustment">adjustment21</property>
-                    <property name="numeric">True</property>
-                    <signal name="value-changed" handler="preview_duration_changed_cb" swapped="no"/>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
+                    <property name="hexpand-set">True</property>
+                    <property name="vexpand-set">True</property>
+                    <property name="halign">center</property>
+                    <property name="valign">end</property>
+                    <property name="margin-bottom">30</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK</property>
+                    <signal name="enter-notify-event" handler="hud_enter_cb" swapped="no"/>
+                    <signal name="leave-notify-event" handler="hud_leave_cb" swapped="no"/>
+                    <signal name="size-allocate" handler="hud_size_alloc_cb" swapped="no"/>
+                    <child>
+                      <object class="GtkBox" id="vbox35">
+                        <property name="orientation">vertical</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin-top">5</property>
+                        <property name="margin-bottom">5</property>
+                        <property name="margin-left">10</property>
+                        <property name="margin-right">10</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <child>
+                          <object class="GtkScale" id="preview_frame">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="tooltip_text" translatable="yes">Select preview frames.</property>
+                            <property name="adjustment">adjustment19</property>
+                            <property name="digits">0</property>
+                            <property name="value_pos">bottom</property>
+                            <signal name="value-changed" handler="preview_frame_value_changed_cb" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="live_preview_box">
+                            <property name="orientation">horizontal</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">5</property>
+                            <child>
+                              <object class="GtkButton" id="live_preview_play">
+                                <property name="height_request">30</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <property name="tooltip_text" translatable="yes">Encode and play a short sequence of video starting from the current preview position.</property>
+                                <property name="relief">none</property>
+                                <signal name="clicked" handler="live_preview_start_cb" swapped="no"/>
+                                <child>
+                                  <object class="GtkImage" id="live_preview_play_image">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="icon_name">gtk-media-play</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkScale" id="live_preview_progress">
+                                <property name="can_focus">True</property>
+                                <property name="adjustment">preview_progress_adj</property>
+                                <property name="draw_value">False</property>
+                                <property name="value_pos">right</property>
+                                <signal name="value-changed" handler="live_preview_seek_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="live_progress_box">
+                                <property name="orientation">vertical</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkProgressBar" id="live_encode_progress">
+                                    <property name="height_request">20</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="hbox26">
+                            <property name="orientation">horizontal</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">10</property>
+                            <child>
+                              <object class="GtkBox" id="live_preview_duration_box">
+                                <property name="orientation">horizontal</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">2</property>
+                                <child>
+                                  <object class="GtkLabel" id="label37">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">&lt;b&gt;Duration:&lt;/b&gt;</property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkSpinButton" id="live_duration">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">Set the duration of the live preview in seconds.</property>
+                                    <property name="primary_icon_activatable">False</property>
+                                    <property name="secondary_icon_activatable">False</property>
+                                    <property name="adjustment">adjustment21</property>
+                                    <property name="numeric">True</property>
+                                    <signal name="value-changed" handler="preview_duration_changed_cb" swapped="no"/>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="preview_show_crop">
+                                <property name="label" translatable="yes">Show Crop</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="tooltip_text" translatable="yes">Show Cropped area of the preview</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="show_crop_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkToggleButton" id="preview_fullscreen">
+                                <property name="label" translatable="yes">Fullscreen</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="tooltip_text" translatable="yes">View Fullscreen Preview</property>
+                                <property name="relief">none</property>
+                                <signal name="toggled" handler="fullscreen_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="preview_show_crop">
-                <property name="label" translatable="yes">Show Crop</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Show Cropped area of the preview</property>
-                <property name="halign">start</property>
-                <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="show_crop_changed_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkToggleButton" id="preview_fullscreen">
-                <property name="label" translatable="yes">Fullscreen</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">View Fullscreen Preview</property>
-                <property name="relief">none</property>
-                <signal name="toggled" handler="fullscreen_clicked_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
         </child>
       </object>
     </child>
   </object>
-  <object class="GtkWindow" id="preview_window">
-    <property name="can_focus">False</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property>
-    <property name="title" translatable="yes">Preview</property>
-    <property name="resizable">False</property>
-    <property name="window_position">center</property>
-    <property name="type_hint">utility</property>
-    <property name="skip_taskbar_hint">True</property>
-    <property name="skip_pager_hint">True</property>
-    <property name="transient_for">hb_window</property>
-    <signal name="configure-event" handler="preview_configure_cb" swapped="no"/>
-    <signal name="delete-event" handler="preview_window_delete_cb" swapped="no"/>
-    <child>
-      <object class="GtkBox" id="preview_window_box">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-    </child>
-  </object>
   <object class="GtkFileChooserDialog" id="source_dialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
index 000ad6867ac183b86bea3c1166cecb3f3b5f0fea..e5c3d5f35ed6aff8e94e27933a808f7702f4152d 100644 (file)
@@ -8139,243 +8139,263 @@ Setting this to 0 means there is no maximum height.</property>
       <action-widget response="-5">preset_ok</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkDrawingArea" id="preview_image">
-    <property name="visible">True</property>
-    <property name="app_paintable">True</property>
-    <property name="can_focus">False</property>
-    <property name="halign">center</property>
-    <property name="valign">center</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK</property>
-    <signal name="leave-notify-event" handler="preview_leave_cb" swapped="no"/>
-    <signal name="motion-notify-event" handler="preview_motion_cb" swapped="no"/>
-  </object>
   <object class="GtkAdjustment" id="preview_progress_adj">
     <property name="upper">100</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
-  <object class="GtkEventBox" id="preview_hud">
-    <property name="visible">True</property>
-    <property name="app_paintable">True</property>
+  <object class="GtkWindow" id="preview_window">
     <property name="can_focus">False</property>
-    <property name="halign">center</property>
-    <property name="valign">end</property>
-    <property name="margin-bottom">30</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
-    <signal name="enter-notify-event" handler="hud_enter_cb" swapped="no"/>
-    <signal name="size-allocate" handler="preview_hud_size_alloc_cb" swapped="no"/>
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property>
+    <property name="title" translatable="yes">Preview</property>
+    <property name="resizable">False</property>
+    <property name="window_position">center</property>
+    <property name="type_hint">utility</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="transient_for">hb_window</property>
+    <signal name="configure-event" handler="preview_configure_cb" swapped="no"/>
+    <signal name="delete-event" handler="preview_window_delete_cb" swapped="no"/>
     <child>
-      <object class="GtkBox" id="vbox35">
-        <property name="orientation">vertical</property>
+      <object class="GtkBox" id="preview_window_box">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="margin-top">5</property>
-        <property name="margin-bottom">5</property>
-        <property name="margin-start">10</property>
-        <property name="margin-end">10</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
         <child>
-          <object class="GtkScale" id="preview_frame">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="tooltip_text" translatable="yes">Select preview frames.</property>
-            <property name="adjustment">adjustment19</property>
-            <property name="digits">0</property>
-            <property name="value_pos">bottom</property>
-            <signal name="value-changed" handler="preview_frame_value_changed_cb" swapped="no"/>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkBox" id="live_preview_box">
-            <property name="orientation">horizontal</property>
+          <object class="GtkLayout" id="preview_image">
             <property name="visible">True</property>
+            <property name="app_paintable">True</property>
             <property name="can_focus">False</property>
-            <property name="spacing">5</property>
+            <property name="halign">center</property>
+            <property name="valign">center</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK</property>
+            <signal name="leave-notify-event" handler="preview_leave_cb" swapped="no"/>
+            <signal name="motion-notify-event" handler="preview_motion_cb" swapped="no"/>
+            <signal name="draw" handler="preview_draw_cb" swapped="no"/>
             <child>
-              <object class="GtkButton" id="live_preview_play">
-                <property name="height_request">30</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Encode and play a short sequence of video starting from the current preview position.</property>
-                <property name="relief">none</property>
-                <signal name="clicked" handler="live_preview_start_cb" swapped="no"/>
-                <child>
-                  <object class="GtkImage" id="live_preview_play_image">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="icon_name">gtk-media-play</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkScale" id="live_preview_progress">
-                <property name="can_focus">True</property>
-                <property name="adjustment">preview_progress_adj</property>
-                <property name="draw_value">False</property>
-                <property name="value_pos">right</property>
-                <signal name="value-changed" handler="live_preview_seek_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkBox" id="live_progress_box">
+              <object class="GtkBox" id="preview_hud_box">
                 <property name="orientation">vertical</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
                 <child>
-                  <object class="GtkProgressBar" id="live_encode_progress">
-                    <property name="height_request">20</property>
-                    <property name="visible">True</property>
+                  <object class="GtkEventBox" id="preview_hud">
+                    <property name="visible">False</property>
+                    <property name="app_paintable">True</property>
                     <property name="can_focus">False</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkBox" id="hbox26">
-            <property name="orientation">horizontal</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="spacing">10</property>
-            <child>
-              <object class="GtkBox" id="live_preview_duration_box">
-                <property name="orientation">horizontal</property>
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="spacing">2</property>
-                <child>
-                  <object class="GtkLabel" id="label37">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">&lt;b&gt;Duration:&lt;/b&gt;</property>
-                    <property name="use_markup">True</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkSpinButton" id="live_duration">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="tooltip_text" translatable="yes">Set the duration of the live preview in seconds.</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="adjustment">adjustment21</property>
-                    <property name="numeric">True</property>
-                    <signal name="value-changed" handler="preview_duration_changed_cb" swapped="no"/>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
+                    <property name="hexpand-set">True</property>
+                    <property name="vexpand-set">True</property>
+                    <property name="halign">center</property>
+                    <property name="valign">end</property>
+                    <property name="margin-bottom">30</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK</property>
+                    <signal name="enter-notify-event" handler="hud_enter_cb" swapped="no"/>
+                    <signal name="leave-notify-event" handler="hud_leave_cb" swapped="no"/>
+                    <signal name="size-allocate" handler="hud_size_alloc_cb" swapped="no"/>
+                    <child>
+                      <object class="GtkBox" id="vbox35">
+                        <property name="orientation">vertical</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin-top">5</property>
+                        <property name="margin-bottom">5</property>
+                        <property name="margin-start">10</property>
+                        <property name="margin-end">10</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <child>
+                          <object class="GtkScale" id="preview_frame">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="tooltip_text" translatable="yes">Select preview frames.</property>
+                            <property name="adjustment">adjustment19</property>
+                            <property name="digits">0</property>
+                            <property name="value_pos">bottom</property>
+                            <signal name="value-changed" handler="preview_frame_value_changed_cb" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="live_preview_box">
+                            <property name="orientation">horizontal</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">5</property>
+                            <child>
+                              <object class="GtkButton" id="live_preview_play">
+                                <property name="height_request">30</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <property name="tooltip_text" translatable="yes">Encode and play a short sequence of video starting from the current preview position.</property>
+                                <property name="relief">none</property>
+                                <signal name="clicked" handler="live_preview_start_cb" swapped="no"/>
+                                <child>
+                                  <object class="GtkImage" id="live_preview_play_image">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="icon_name">gtk-media-play</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkScale" id="live_preview_progress">
+                                <property name="can_focus">True</property>
+                                <property name="adjustment">preview_progress_adj</property>
+                                <property name="draw_value">False</property>
+                                <property name="value_pos">right</property>
+                                <signal name="value-changed" handler="live_preview_seek_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="live_progress_box">
+                                <property name="orientation">vertical</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkProgressBar" id="live_encode_progress">
+                                    <property name="height_request">20</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="hbox26">
+                            <property name="orientation">horizontal</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">10</property>
+                            <child>
+                              <object class="GtkBox" id="live_preview_duration_box">
+                                <property name="orientation">horizontal</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">2</property>
+                                <child>
+                                  <object class="GtkLabel" id="label37">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">&lt;b&gt;Duration:&lt;/b&gt;</property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkSpinButton" id="live_duration">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">Set the duration of the live preview in seconds.</property>
+                                    <property name="primary_icon_activatable">False</property>
+                                    <property name="secondary_icon_activatable">False</property>
+                                    <property name="adjustment">adjustment21</property>
+                                    <property name="numeric">True</property>
+                                    <signal name="value-changed" handler="preview_duration_changed_cb" swapped="no"/>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="preview_show_crop">
+                                <property name="label" translatable="yes">Show Crop</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="tooltip_text" translatable="yes">Show Cropped area of the preview</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="show_crop_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkToggleButton" id="preview_fullscreen">
+                                <property name="label" translatable="yes">Fullscreen</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="tooltip_text" translatable="yes">View Fullscreen Preview</property>
+                                <property name="relief">none</property>
+                                <signal name="toggled" handler="fullscreen_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </object>
               <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="preview_show_crop">
-                <property name="label" translatable="yes">Show Crop</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Show Cropped area of the preview</property>
-                <property name="halign">start</property>
-                <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="show_crop_changed_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkToggleButton" id="preview_fullscreen">
-                <property name="label" translatable="yes">Fullscreen</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">View Fullscreen Preview</property>
-                <property name="relief">none</property>
-                <signal name="toggled" handler="fullscreen_clicked_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
+                <property name="x">0</property>
+                <property name="y">0</property>
               </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
         </child>
       </object>
     </child>
   </object>
-  <object class="GtkWindow" id="preview_window">
-    <property name="can_focus">False</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property>
-    <property name="title" translatable="yes">Preview</property>
-    <property name="resizable">False</property>
-    <property name="window_position">center</property>
-    <property name="type_hint">utility</property>
-    <property name="skip_taskbar_hint">True</property>
-    <property name="skip_pager_hint">True</property>
-    <property name="transient_for">hb_window</property>
-    <signal name="configure-event" handler="preview_configure_cb" swapped="no"/>
-    <signal name="delete-event" handler="preview_window_delete_cb" swapped="no"/>
-    <child>
-      <object class="GtkBox" id="preview_window_box">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-    </child>
-  </object>
   <object class="GtkFileChooserDialog" id="source_dialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
index 03524f78efcc0e16c0774e3d0c1b61972e8b7afd..27c6b5ccf574278fe108a2b334d226d3e2aac628 100644 (file)
@@ -8131,243 +8131,259 @@ Setting this to 0 means there is no maximum height.</property>
       <action-widget response="-5">preset_ok</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkDrawingArea" id="preview_image">
-    <property name="visible">True</property>
-    <property name="app_paintable">True</property>
-    <property name="can_focus">False</property>
-    <property name="halign">center</property>
-    <property name="valign">center</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK</property>
-    <signal name="leave-notify-event" handler="preview_leave_cb" swapped="no"/>
-    <signal name="motion-notify-event" handler="preview_motion_cb" swapped="no"/>
-  </object>
   <object class="GtkAdjustment" id="preview_progress_adj">
     <property name="upper">100</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
-  <object class="GtkEventBox" id="preview_hud">
-    <property name="visible">True</property>
-    <property name="app_paintable">True</property>
+  <object class="GtkWindow" id="preview_window">
     <property name="can_focus">False</property>
-    <property name="halign">center</property>
-    <property name="valign">end</property>
-    <property name="margin-bottom">30</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
-    <signal name="enter-notify-event" handler="hud_enter_cb" swapped="no"/>
-    <signal name="size-allocate" handler="preview_hud_size_alloc_cb" swapped="no"/>
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property>
+    <property name="title" translatable="yes">Preview</property>
+    <property name="resizable">False</property>
+    <property name="window_position">center</property>
+    <property name="type_hint">utility</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="transient_for">hb_window</property>
+    <signal name="configure-event" handler="preview_configure_cb" swapped="no"/>
+    <signal name="delete-event" handler="preview_window_delete_cb" swapped="no"/>
     <child>
-      <object class="GtkBox" id="vbox35">
-        <property name="orientation">vertical</property>
+      <object class="GtkBox" id="preview_window_box">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="margin-top">5</property>
-        <property name="margin-bottom">5</property>
-        <property name="margin-left">10</property>
-        <property name="margin-right">10</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
         <child>
-          <object class="GtkScale" id="preview_frame">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="tooltip_text" translatable="yes">Select preview frames.</property>
-            <property name="adjustment">adjustment19</property>
-            <property name="digits">0</property>
-            <property name="value_pos">bottom</property>
-            <signal name="value-changed" handler="preview_frame_value_changed_cb" swapped="no"/>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkBox" id="live_preview_box">
-            <property name="orientation">horizontal</property>
+          <object class="GtkLayout" id="preview_image">
             <property name="visible">True</property>
+            <property name="app_paintable">True</property>
             <property name="can_focus">False</property>
-            <property name="spacing">5</property>
+            <property name="halign">center</property>
+            <property name="valign">center</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK</property>
+            <signal name="leave-notify-event" handler="preview_leave_cb" swapped="no"/>
+            <signal name="motion-notify-event" handler="preview_motion_cb" swapped="no"/>
+            <signal name="draw" handler="preview_draw_cb" swapped="no"/>
             <child>
-              <object class="GtkButton" id="live_preview_play">
-                <property name="height_request">30</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Encode and play a short sequence of video starting from the current preview position.</property>
-                <property name="relief">none</property>
-                <signal name="clicked" handler="live_preview_start_cb" swapped="no"/>
-                <child>
-                  <object class="GtkImage" id="live_preview_play_image">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="icon_name">gtk-media-play</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkScale" id="live_preview_progress">
-                <property name="can_focus">True</property>
-                <property name="adjustment">preview_progress_adj</property>
-                <property name="draw_value">False</property>
-                <property name="value_pos">right</property>
-                <signal name="value-changed" handler="live_preview_seek_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkBox" id="live_progress_box">
+              <object class="GtkBox" id="preview_hud_box">
                 <property name="orientation">vertical</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <object class="GtkProgressBar" id="live_encode_progress">
-                    <property name="height_request">20</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkBox" id="hbox26">
-            <property name="orientation">horizontal</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="spacing">10</property>
-            <child>
-              <object class="GtkBox" id="live_preview_duration_box">
-                <property name="orientation">horizontal</property>
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="spacing">2</property>
                 <child>
-                  <object class="GtkLabel" id="label37">
+                  <object class="GtkEventBox" id="preview_hud">
                     <property name="visible">True</property>
+                    <property name="app_paintable">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">&lt;b&gt;Duration:&lt;/b&gt;</property>
-                    <property name="use_markup">True</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkSpinButton" id="live_duration">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="tooltip_text" translatable="yes">Set the duration of the live preview in seconds.</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="adjustment">adjustment21</property>
-                    <property name="numeric">True</property>
-                    <signal name="value-changed" handler="preview_duration_changed_cb" swapped="no"/>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
+                    <property name="hexpand-set">True</property>
+                    <property name="vexpand-set">True</property>
+                    <property name="halign">center</property>
+                    <property name="valign">end</property>
+                    <property name="margin-bottom">30</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK</property>
+                    <signal name="enter-notify-event" handler="hud_enter_cb" swapped="no"/>
+                    <signal name="leave-notify-event" handler="hud_leave_cb" swapped="no"/>
+                    <signal name="size-allocate" handler="hud_size_alloc_cb" swapped="no"/>
+                    <child>
+                      <object class="GtkBox" id="vbox35">
+                        <property name="orientation">vertical</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin-top">5</property>
+                        <property name="margin-bottom">5</property>
+                        <property name="margin-left">10</property>
+                        <property name="margin-right">10</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <child>
+                          <object class="GtkScale" id="preview_frame">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="tooltip_text" translatable="yes">Select preview frames.</property>
+                            <property name="adjustment">adjustment19</property>
+                            <property name="digits">0</property>
+                            <property name="value_pos">bottom</property>
+                            <signal name="value-changed" handler="preview_frame_value_changed_cb" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="live_preview_box">
+                            <property name="orientation">horizontal</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">5</property>
+                            <child>
+                              <object class="GtkButton" id="live_preview_play">
+                                <property name="height_request">30</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <property name="tooltip_text" translatable="yes">Encode and play a short sequence of video starting from the current preview position.</property>
+                                <property name="relief">none</property>
+                                <signal name="clicked" handler="live_preview_start_cb" swapped="no"/>
+                                <child>
+                                  <object class="GtkImage" id="live_preview_play_image">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="icon_name">gtk-media-play</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkScale" id="live_preview_progress">
+                                <property name="can_focus">True</property>
+                                <property name="adjustment">preview_progress_adj</property>
+                                <property name="draw_value">False</property>
+                                <property name="value_pos">right</property>
+                                <signal name="value-changed" handler="live_preview_seek_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="live_progress_box">
+                                <property name="orientation">vertical</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkProgressBar" id="live_encode_progress">
+                                    <property name="height_request">20</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="hbox26">
+                            <property name="orientation">horizontal</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">10</property>
+                            <child>
+                              <object class="GtkBox" id="live_preview_duration_box">
+                                <property name="orientation">horizontal</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">2</property>
+                                <child>
+                                  <object class="GtkLabel" id="label37">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">&lt;b&gt;Duration:&lt;/b&gt;</property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkSpinButton" id="live_duration">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">Set the duration of the live preview in seconds.</property>
+                                    <property name="primary_icon_activatable">False</property>
+                                    <property name="secondary_icon_activatable">False</property>
+                                    <property name="adjustment">adjustment21</property>
+                                    <property name="numeric">True</property>
+                                    <signal name="value-changed" handler="preview_duration_changed_cb" swapped="no"/>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="preview_show_crop">
+                                <property name="label" translatable="yes">Show Crop</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="tooltip_text" translatable="yes">Show Cropped area of the preview</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="show_crop_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkToggleButton" id="preview_fullscreen">
+                                <property name="label" translatable="yes">Fullscreen</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="tooltip_text" translatable="yes">View Fullscreen Preview</property>
+                                <property name="relief">none</property>
+                                <signal name="toggled" handler="fullscreen_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="preview_show_crop">
-                <property name="label" translatable="yes">Show Crop</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Show Cropped area of the preview</property>
-                <property name="halign">start</property>
-                <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="show_crop_changed_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkToggleButton" id="preview_fullscreen">
-                <property name="label" translatable="yes">Fullscreen</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">View Fullscreen Preview</property>
-                <property name="relief">none</property>
-                <signal name="toggled" handler="fullscreen_clicked_cb" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
         </child>
       </object>
     </child>
   </object>
-  <object class="GtkWindow" id="preview_window">
-    <property name="can_focus">False</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property>
-    <property name="title" translatable="yes">Preview</property>
-    <property name="resizable">False</property>
-    <property name="window_position">center</property>
-    <property name="type_hint">utility</property>
-    <property name="skip_taskbar_hint">True</property>
-    <property name="skip_pager_hint">True</property>
-    <property name="transient_for">hb_window</property>
-    <signal name="configure-event" handler="preview_configure_cb" swapped="no"/>
-    <signal name="delete-event" handler="preview_window_delete_cb" swapped="no"/>
-    <child>
-      <object class="GtkBox" id="preview_window_box">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-    </child>
-  </object>
   <object class="GtkFileChooserDialog" id="source_dialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
diff --git a/gtk/src/ghbcompositor.c b/gtk/src/ghbcompositor.c
deleted file mode 100644 (file)
index 4e7353d..0000000
+++ /dev/null
@@ -1,713 +0,0 @@
-/* "Borrowed" from: */
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include "ghbcompat.h"
-#include "ghbcompositor.h"
-
-enum {
-    PROP_0,
-};
-
-enum {
-    CHILD_PROP_0,
-    CHILD_PROP_Z_POS,
-    CHILD_PROP_OPACITY
-};
-
-#define GHB_COMPOSITOR_GET_PRIVATE(obj)  G_TYPE_INSTANCE_GET_PRIVATE((obj), GHB_TYPE_COMPOSITOR, GhbCompositorPrivate)
-
-static void     ghb_compositor_finalize      (GObject        *object);
-static void     ghb_compositor_realize       (GtkWidget      *widget);
-static void     ghb_compositor_unrealize     (GtkWidget      *widget);
-static void     ghb_compositor_size_allocate (GtkWidget      *widget,
-                                             GtkAllocation   *allocation);
-static gboolean ghb_compositor_draw          (GtkWidget      *widget,
-                                             cairo_t         *cr);
-static void ghb_compositor_get_preferred_width(GtkWidget      *widget,
-                                             gint            *minimum_size,
-                                             gint            *natural_size);
-static void ghb_compositor_get_preferred_height(GtkWidget      *widget,
-                                             gint            *minimum_size,
-                                             gint            *natural_size);
-static void     ghb_compositor_set_property  (GObject        *object,
-                                             guint            prop_id,
-                                             const GValue    *value,
-                                             GParamSpec      *pspec);
-static void     ghb_compositor_get_property  (GObject        *object,
-                                             guint            prop_id,
-                                             GValue          *value,
-                                             GParamSpec      *pspec);
-static void     ghb_compositor_add          (GtkContainer    *container,
-                                             GtkWidget       *widget);
-static void     ghb_compositor_remove       (GtkContainer    *container,
-                                             GtkWidget       *widget);
-static void     ghb_compositor_forall       (GtkContainer    *container,
-                                             gboolean         include_internals,
-                                             GtkCallback      callback,
-                                             gpointer         data);
-static GType    ghb_compositor_child_type   (GtkContainer    *container);
-static void     ghb_compositor_set_child_property  (GtkContainer *container,
-                                             GtkWidget       *child,
-                                             guint            prop_id,
-                                             const GValue    *value,
-                                             GParamSpec      *pspec);
-static void     ghb_compositor_get_child_property  (GtkContainer *container,
-                                             GtkWidget       *child,
-                                             guint            prop_id,
-                                             GValue          *value,
-                                             GParamSpec      *pspec);
-
-G_DEFINE_TYPE (GhbCompositor, ghb_compositor, GTK_TYPE_BIN)
-
-static void
-ghb_compositor_class_init (GhbCompositorClass *class)
-{
-    GObjectClass *gobject_class = G_OBJECT_CLASS (class);
-    GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
-    GtkContainerClass *container_class = GTK_CONTAINER_CLASS (class);
-
-    gobject_class->finalize = ghb_compositor_finalize;
-
-    gobject_class->set_property = ghb_compositor_set_property;
-    gobject_class->get_property = ghb_compositor_get_property;
-
-    widget_class->draw = ghb_compositor_draw;
-    widget_class->get_preferred_width = ghb_compositor_get_preferred_width;
-    widget_class->get_preferred_height = ghb_compositor_get_preferred_height;
-    widget_class->size_allocate = ghb_compositor_size_allocate;
-
-    widget_class->realize = ghb_compositor_realize;
-    widget_class->unrealize = ghb_compositor_unrealize;
-
-    container_class->add = ghb_compositor_add;
-    container_class->remove = ghb_compositor_remove;
-    container_class->forall = ghb_compositor_forall;
-    container_class->child_type = ghb_compositor_child_type;
-    container_class->set_child_property = ghb_compositor_set_child_property;
-    container_class->get_child_property = ghb_compositor_get_child_property;
-
-    gtk_container_class_install_child_property (container_class,
-                        CHILD_PROP_Z_POS,
-                        g_param_spec_uint ("z-pos",
-                            "Position in Z-List",
-                            "Sets the blending order of the child.",
-                            0, 65535, 0,
-                            G_PARAM_READWRITE));
-
-    gtk_container_class_install_child_property (container_class,
-                        CHILD_PROP_OPACITY,
-                        g_param_spec_double ("opacity",
-                            "Opacity",
-                            "Sets the opacity of the child.",
-                            0.0, 1.0, 1.0,
-                            G_PARAM_READWRITE));
-
-}
-
-static GType
-ghb_compositor_child_type(GtkContainer *container)
-{
-    return GTK_TYPE_WIDGET;
-}
-
-static void
-ghb_compositor_get_property (
-    GObject    *object,
-    guint       prop_id,
-    GValue     *value,
-    GParamSpec *pspec)
-{
-    switch (prop_id)
-    {
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-ghb_compositor_set_property (
-    GObject      *object,
-    guint         prop_id,
-    const GValue *value,
-    GParamSpec   *pspec)
-{
-    switch (prop_id)
-    {
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static gint
-zsort(gconstpointer a, gconstpointer b)
-{
-    GhbCompositorChild *cca, *ccb;
-
-    cca = (GhbCompositorChild*)a;
-    ccb = (GhbCompositorChild*)b;
-
-    return (cca->z_pos - ccb->z_pos);
-}
-
-static void
-ghb_compositor_set_child_property(
-    GtkContainer *container,
-    GtkWidget    *child,
-    guint         prop_id,
-    const GValue *value,
-    GParamSpec   *pspec)
-{
-    GhbCompositor *compositor;
-    GhbCompositorChild *cc;
-    GList *link;
-
-    compositor = GHB_COMPOSITOR(container);
-
-    for (link = compositor->children; link != NULL; link = link->next)
-    {
-        cc = (GhbCompositorChild*)link->data;
-        if (cc->widget == child)
-            break;
-    }
-    if (link == NULL)
-    {
-        GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID(container, prop_id, pspec);
-        return;
-    }
-
-    switch (prop_id)
-    {
-    case CHILD_PROP_Z_POS:
-    {
-        cc->z_pos = g_value_get_uint(value);
-        compositor->children = g_list_sort(compositor->children, zsort);
-    } break;
-    case CHILD_PROP_OPACITY:
-    {
-        cc->opacity = g_value_get_double(value);
-    } break;
-    default:
-        GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID(container, prop_id, pspec);
-        break;
-    }
-
-    if (gtk_widget_get_visible (child) &&
-        gtk_widget_get_visible (GTK_WIDGET(compositor)))
-    {
-        gtk_widget_queue_resize (child);
-    }
-
-}
-
-static void
-ghb_compositor_get_child_property(
-    GtkContainer *container,
-    GtkWidget    *child,
-    guint         prop_id,
-    GValue       *value,
-    GParamSpec   *pspec)
-{
-    GhbCompositor *compositor;
-    GhbCompositorChild *cc;
-    GList *link;
-
-    compositor = GHB_COMPOSITOR(container);
-
-    for (link = compositor->children; link != NULL; link = link->next)
-    {
-        cc = (GhbCompositorChild*)link->data;
-        if (cc->widget == child)
-            break;
-    }
-    if (link == NULL)
-    {
-        GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID(container, prop_id, pspec);
-        return;
-    }
-
-    switch (prop_id)
-    {
-    case CHILD_PROP_Z_POS:
-    {
-        g_value_set_uint(value, cc->z_pos);
-    } break;
-    case CHILD_PROP_OPACITY:
-    {
-        g_value_set_double(value, cc->opacity);
-    } break;
-    default:
-        GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID(container, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-ghb_compositor_init (GhbCompositor *compositor)
-{
-    gtk_widget_set_has_window(GTK_WIDGET(compositor), TRUE);
-}
-
-GtkWidget*
-ghb_compositor_new (void)
-{
-    return GTK_WIDGET(g_object_new (GHB_TYPE_COMPOSITOR, NULL));
-}
-
-#if 0
-static void
-showtype(const gchar *msg, GtkWidget *widget)
-{
-    GType type;
-    gchar *str;
-
-    type = G_OBJECT_TYPE(widget);
-    if (type == GTK_TYPE_DRAWING_AREA)
-        str = "drawing area";
-    else if (type == GTK_TYPE_ALIGNMENT)
-        str = "alignment";
-    else if (type == GTK_TYPE_EVENT_BOX)
-        str = "event box";
-    else if (type == GTK_TYPE_EVENT_BOX)
-        str = "event box";
-    else
-        str = "unknown";
-    g_message("%s: %s", msg, str);
-}
-#endif
-
-static void
-find_drawables(GtkWidget *widget, gpointer data)
-{
-    GList *drawables, **pdrawables;
-    pdrawables = (GList**)data;
-    drawables = *pdrawables;
-
-    if (gtk_widget_get_has_window(widget))
-    {
-        drawables = g_list_append(drawables, widget);
-        *pdrawables = drawables;
-        return;
-    }
-    if (GTK_IS_CONTAINER(widget))
-    {
-        gtk_container_forall(GTK_CONTAINER(widget), find_drawables, data);
-    }
-}
-
-
-/**
- * ghb_compositor_zlist_insert:
- * @compositor: a #GhbCompositor
- * @child: widgets to insert
- * @z_pos: position
- * @opacity: global opacity for this widget
- *
- * Insert in the given position of the zlist in the compositor.
- * All children in the zlist must have associated GdkDrawable's
- * This means they must be GtkDrawingArea or GtkEventBox
- *
- **/
-void
-ghb_compositor_zlist_insert (
-    GhbCompositor *compositor,
-    GtkWidget *child,
-    gint z_pos,
-    gdouble opacity)
-{
-    GhbCompositorChild *cc;
-    GdkDisplay *display;
-
-    g_return_if_fail (GHB_IS_COMPOSITOR (compositor));
-    g_return_if_fail (GTK_IS_WIDGET (child));
-    g_return_if_fail (gtk_widget_get_parent(child) == NULL);
-
-    gtk_widget_set_parent(child, GTK_WIDGET(compositor));
-
-    display = gtk_widget_get_display (GTK_WIDGET(compositor));
-
-    cc = g_new(GhbCompositorChild, 1);
-    cc->widget = child;
-    cc->z_pos = z_pos;
-    cc->opacity = opacity;
-    cc->drawables = NULL;
-    compositor->children = g_list_insert_sorted(
-                                compositor->children, cc, zsort);
-
-    if (gdk_display_supports_composite(display))
-    {
-        GList *link;
-
-        cc->drawables = NULL;
-        find_drawables(cc->widget, &cc->drawables);
-
-        for (link = cc->drawables; link != NULL; link = link->next)
-        {
-            gtk_widget_realize(GTK_WIDGET(link->data));
-            gdk_window_set_composited(gtk_widget_get_window(GTK_WIDGET(link->data)), TRUE);
-        }
-    }
-}
-
-static void
-ghb_compositor_add(GtkContainer *container, GtkWidget *child)
-{
-    GhbCompositor *compositor = GHB_COMPOSITOR(container);
-    GhbCompositorChild *cc;
-    gint z_pos = 0;
-    GList *last = g_list_last(compositor->children);
-
-    if (last != NULL)
-    {
-        cc = (GhbCompositorChild*)last->data;
-        z_pos = cc->z_pos + 1;
-    }
-    ghb_compositor_zlist_insert(compositor, child, z_pos, 1.0);
-}
-
-static void
-ghb_compositor_remove(GtkContainer *container, GtkWidget *child)
-{
-    GhbCompositor *compositor = GHB_COMPOSITOR(container);
-    GhbCompositorChild *cc;
-    GList *link;
-
-    for (link = compositor->children; link != NULL; link = link->next)
-    {
-        cc = (GhbCompositorChild*)link->data;
-        if (cc->widget == child)
-        {
-            gboolean was_visible = gtk_widget_get_visible( child );
-            gtk_widget_unparent(child);
-            compositor->children = g_list_remove_link(
-                                            compositor->children, link);
-            g_list_free(link);
-            g_free(cc);
-
-            if (was_visible && gtk_widget_get_visible (GTK_WIDGET(container)))
-                gtk_widget_queue_resize(GTK_WIDGET(container));
-            break;
-        }
-    }
-}
-
-static void
-ghb_compositor_forall(
-    GtkContainer *container,
-    gboolean      include_internals,
-    GtkCallback   callback,
-    gpointer      data)
-{
-    GhbCompositor *compositor = GHB_COMPOSITOR (container);
-    GhbCompositorChild *cc;
-    GList *link, *next;
-
-    for (link = compositor->children; link != NULL; )
-    {
-        // The callback may cause the link to be removed from the list.
-        // So find next before calling callback
-        next = link->next;
-        cc = (GhbCompositorChild*)link->data;
-        (*callback)(cc->widget, data);
-        link = next;
-    }
-}
-
-static void
-ghb_compositor_finalize (GObject *object)
-{
-    GhbCompositor *compositor = GHB_COMPOSITOR (object);
-    GhbCompositorChild *cc;
-    GList *link;
-
-    for (link = compositor->children; link != NULL; link = link->next)
-    {
-        cc = (GhbCompositorChild*)link->data;
-        g_list_free(cc->drawables);
-        g_free(cc);
-    }
-    g_list_free(compositor->children);
-    G_OBJECT_CLASS (ghb_compositor_parent_class)->finalize (object);
-}
-
-
-static void
-ghb_compositor_realize (GtkWidget *widget)
-{
-    GdkWindowAttr attributes;
-    gint attributes_mask;
-    gint border_width;
-    gboolean visible_window;
-
-    gtk_widget_set_realized(widget, TRUE);
-
-    border_width = gtk_container_get_border_width(GTK_CONTAINER (widget));
-
-    GtkAllocation allocation;
-    gtk_widget_get_allocation(widget, &allocation);
-
-    attributes.x = allocation.x + border_width;
-    attributes.y = allocation.y + border_width;
-    attributes.width = allocation.width - 2*border_width;
-    attributes.height = allocation.height - 2*border_width;
-    attributes.window_type = GDK_WINDOW_CHILD;
-    attributes.event_mask = gtk_widget_get_events (widget)
-            | GDK_BUTTON_MOTION_MASK
-            | GDK_BUTTON_PRESS_MASK
-            | GDK_BUTTON_RELEASE_MASK
-            | GDK_EXPOSURE_MASK
-            | GDK_ENTER_NOTIFY_MASK
-            | GDK_LEAVE_NOTIFY_MASK;
-
-    visible_window = gtk_widget_get_has_window(widget);
-
-    GdkWindow *window;
-    if (visible_window)
-    {
-        attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
-        attributes.visual = gtk_widget_get_visual (widget);
-        attributes.wclass = GDK_INPUT_OUTPUT;
-
-
-        window = gdk_window_new(gtk_widget_get_parent_window (widget),
-                                &attributes, attributes_mask);
-        gtk_widget_set_window(widget, window);
-        gdk_window_set_user_data(window, widget);
-    }
-    else
-    {
-        window = gtk_widget_get_parent_window (widget);
-        gtk_widget_set_window(widget, window);
-        g_object_ref (window);
-    }
-}
-
-static void
-ghb_compositor_unrealize (GtkWidget *widget)
-{
-    GTK_WIDGET_CLASS (ghb_compositor_parent_class)->unrealize (widget);
-}
-
-static void
-ghb_compositor_get_preferred_width(
-        GtkWidget *widget,
-        gint *minimum_size,
-        gint *natural_size)
-{
-    GhbCompositor *compositor = GHB_COMPOSITOR (widget);
-    GList *link;
-    GhbCompositorChild *cc;
-    gint width = 0;
-    GtkRequisition min_size, size;
-
-    for (link = compositor->children; link != NULL; link = link->next)
-    {
-        cc = (GhbCompositorChild*)link->data;
-        if (gtk_widget_get_visible(cc->widget))
-        {
-            gtk_widget_get_preferred_size(cc->widget, &min_size, &size);
-            width = MAX(MAX(min_size.width, size.width), width);
-        }
-    }
-
-    *minimum_size = width + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2;
-    *natural_size = width + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2;
-}
-
-static void
-ghb_compositor_get_preferred_height(
-        GtkWidget *widget,
-        gint *minimum_size,
-        gint *natural_size)
-{
-    GhbCompositor *compositor = GHB_COMPOSITOR (widget);
-    GList *link;
-    GhbCompositorChild *cc;
-    gint height = 0;
-    GtkRequisition min_size, size;
-
-    for (link = compositor->children; link != NULL; link = link->next)
-    {
-        cc = (GhbCompositorChild*)link->data;
-        if (gtk_widget_get_visible(cc->widget))
-        {
-            gtk_widget_get_preferred_size(cc->widget, &min_size, &size);
-            height = MAX(MAX(min_size.height, size.height), height);
-        }
-    }
-
-    *minimum_size = height + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2;
-    *natural_size = height + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2;
-}
-
-static void
-ghb_compositor_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
-{
-    GhbCompositor *compositor;
-    GtkAllocation child_allocation;
-    GhbCompositorChild *cc;
-    GList *link;
-
-    gtk_widget_set_allocation(widget, allocation);
-    compositor = GHB_COMPOSITOR (widget);
-
-    if (!gtk_widget_get_has_window(widget))
-    {
-        child_allocation.x = allocation->x +
-                         gtk_container_get_border_width(GTK_CONTAINER(widget));
-        child_allocation.y = allocation->y +
-                         gtk_container_get_border_width(GTK_CONTAINER(widget));
-    }
-    else
-    {
-        child_allocation.x = 0;
-        child_allocation.y = 0;
-    }
-
-    child_allocation.width = MAX (allocation->width -
-                 gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2, 0);
-    child_allocation.height = MAX (allocation->height -
-                 gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2, 0);
-
-    if (gtk_widget_get_realized(widget))
-    {
-        if (gtk_widget_get_has_window(widget))
-        {
-            gdk_window_move_resize (gtk_widget_get_window(widget),
-                allocation->x + gtk_container_get_border_width(GTK_CONTAINER (widget)),
-                allocation->y + gtk_container_get_border_width(GTK_CONTAINER (widget)),
-                child_allocation.width,
-                child_allocation.height);
-        }
-    }
-    for (link = compositor->children; link != NULL; link = link->next)
-    {
-        cc = (GhbCompositorChild*)link->data;
-        if (gtk_widget_get_realized (cc->widget))
-            gtk_widget_size_allocate (cc->widget, &child_allocation);
-    }
-}
-
-#if 0
-static void showrects(cairo_region_t *region)
-{
-    cairo_rectangle_int_t rect;
-    int ii;
-    int count = cairo_region_num_rectangles(region);
-
-    printf("rect count %d\n", count);
-    for (ii = 0; ii < count; ii++)
-    {
-        cairo_region_get_rectangle(region, ii, &rect);
-        printf("rect %d: %d,%d %dx%d\n",
-                ii, rect.x, rect.y, rect.width, rect.height);
-    }
-}
-#endif
-
-static void
-ghb_compositor_blend (GtkWidget *widget, cairo_t *cr)
-{
-    GhbCompositor *compositor = GHB_COMPOSITOR (widget);
-    GList *link, *draw;
-    cairo_region_t *region;
-    GtkWidget *child;
-    GhbCompositorChild *cc;
-
-    if (compositor->children == NULL) return;
-    /* create a cairo context to draw to the window */
-
-    for (link = compositor->children; link != NULL; link = link->next)
-    {
-        cc = (GhbCompositorChild*)link->data;
-        for (draw = cc->drawables; draw != NULL; draw = draw->next)
-        {
-            GtkAllocation child_alloc;
-
-            /* get our child */
-            child = GTK_WIDGET(draw->data);
-
-            if (
-//!gtk_cairo_should_draw_window(cr, gtk_widget_get_window(child)) ||
-                !gtk_widget_get_visible(cc->widget) ||
-                !gtk_widget_get_visible(child))
-                continue;
-
-            gtk_widget_get_allocation(child, &child_alloc);
-            cairo_save(cr);
-
-            /* the source data is the (composited) event box */
-            gdk_cairo_set_source_window(cr, gtk_widget_get_window(child),
-                                        child_alloc.x,
-                                        child_alloc.y);
-
-            cairo_rectangle_int_t rect;
-
-            rect.x = child_alloc.x;
-            rect.y = child_alloc.y;
-            rect.width = child_alloc.width;
-            rect.height = child_alloc.height;
-
-            /* draw no more than our expose event intersects our child */
-            region = cairo_region_create_rectangle(&rect);
-
-            cairo_region_t *dregion = gdk_window_get_visible_region(
-                                            gtk_widget_get_window(child));
-            cairo_region_translate(dregion, child_alloc.x, child_alloc.y);
-            cairo_region_intersect(region, dregion);
-            cairo_region_destroy(dregion);
-
-            gdk_cairo_region(cr, region);
-            cairo_region_destroy(region);
-            cairo_clip(cr);
-
-            /* composite, with an opacity */
-            cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
-            cairo_paint_with_alpha(cr, cc->opacity);
-
-            cairo_restore(cr);
-        }
-    }
-    /* we're done */
-}
-
-static gboolean
-ghb_compositor_draw(GtkWidget *widget, cairo_t *cr)
-{
-    if (gtk_widget_is_drawable(widget))
-    {
-        if (gtk_widget_get_has_window(widget))
-            ghb_compositor_blend (widget, cr);
-
-    }
-    GTK_WIDGET_CLASS(ghb_compositor_parent_class)->draw(widget, cr);
-
-    return FALSE;
-}
diff --git a/gtk/src/ghbcompositor.h b/gtk/src/ghbcompositor.h
deleted file mode 100644 (file)
index 7f6914e..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/* "Borrowed" from: */
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
- */
-#ifndef __GHB_COMPOSITOR_H__
-#define __GHB_COMPOSITOR_H__
-
-
-#include <gtk/gtk.h>
-
-
-G_BEGIN_DECLS
-
-#define GHB_TYPE_COMPOSITOR              (ghb_compositor_get_type ())
-#define GHB_COMPOSITOR(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GHB_TYPE_COMPOSITOR, GhbCompositor))
-#define GHB_COMPOSITOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GHB_TYPE_COMPOSITOR, GhbCompositorClass))
-#define GHB_IS_COMPOSITOR(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GHB_TYPE_COMPOSITOR))
-#define GHB_IS_COMPOSITOR_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GHB_TYPE_COMPOSITOR))
-#define GHB_COMPOSITOR_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GHB_TYPE_COMPOSITOR, GhbCompositorClass))
-
-typedef struct _GhbCompositor       GhbCompositor;
-typedef struct _GhbCompositorClass  GhbCompositorClass;
-typedef struct _GhbCompositorChild  GhbCompositorChild;
-
-struct _GhbCompositor
-{
-    GtkBin       bin;
-    GList        *children;
-};
-
-struct _GhbCompositorClass
-{
-    GtkBinClass parent_class;
-};
-
-struct _GhbCompositorChild
-{
-    GtkWidget *widget;
-    GList     *drawables;
-    guint      z_pos;
-    gdouble    opacity;
-};
-
-GType      ghb_compositor_get_type           (void) G_GNUC_CONST;
-GtkWidget* ghb_compositor_new                (void);
-void       ghb_compositor_zlist_insert       (GhbCompositor *compositor,
-                                              GtkWidget *child,
-                                              gint z_pos, gdouble opacity);
-
-G_END_DECLS
-
-#endif /* __GHB_COMPOSITOR_H__ */
index 2ccee63c3347eddf538e6b477bb9534dd2c2be30..255bcae9abdcbd46d5634e851f921596b18ddf8c 100644 (file)
@@ -66,7 +66,6 @@
 #include "resources.h"
 #include "presets.h"
 #include "preview.h"
-#include "ghbcompositor.h"
 #include "ui_res.h"
 
 
@@ -912,8 +911,8 @@ main(int argc, char *argv[])
 
     // Since GtkBuilder no longer assigns object ids to widget names
     // Assign a few that are necessary for style overrides to work
-    GtkWidget *widget;
 #if defined(_NO_UPDATE_CHECK)
+    GtkWidget *widget;
     widget = GHB_WIDGET(ud->builder, "check_updates_box");
     gtk_widget_hide(widget);
 #endif
@@ -929,51 +928,6 @@ main(int argc, char *argv[])
     gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_show_crop"), "preview_show_crop");
     gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_fullscreen"), "preview_fullscreen");
     gtk_widget_set_name(GHB_WIDGET(ud->builder, "activity_view"), "activity_view");
-    widget = GHB_WIDGET(ud->builder, "preview_hud");
-    gtk_widget_set_name(widget, "preview_hud");
-    widget = GHB_WIDGET(ud->builder, "preview_window");
-    gtk_widget_set_name(widget, "preview_window");
-
-    // Set up the "hud" control overlay for the preview window
-    GtkWidget *preview_box, *draw, *hud, *blender;
-
-    preview_box = GHB_WIDGET(ud->builder, "preview_window_box");
-    draw = GHB_WIDGET(ud->builder, "preview_image");
-    hud = GHB_WIDGET(ud->builder, "preview_hud");
-
-#if 0 // GTK_CHECK_VERSION(3, 0, 0)
-    // This uses the new GtkOverlay widget.
-    //
-    // Unfortunately, GtkOverlay is broken in a couple of ways.
-    //
-    // First, it doesn't respect gtk_widget_shape_combine_region()
-    // on it's child overlays.  It appears to just ignore the clip
-    // mask of the child.
-    //
-    // Second, it doesn't respect window opacity.
-    //
-    // So for now, I'll just continue using my home-grown overlay
-    // widget (GhbCompositor).
-    blender = gtk_overlay_new();
-    gtk_container_add(GTK_CONTAINER(preview_box), blender);
-    gtk_container_add(GTK_CONTAINER(blender), draw);
-    gtk_widget_set_valign (hud, GTK_ALIGN_END);
-    gtk_widget_set_halign (hud, GTK_ALIGN_CENTER);
-    gtk_overlay_add_overlay(GTK_OVERLAY(blender), hud);
-
-    g_signal_connect(G_OBJECT(blender), "get-child-position",
-                    G_CALLBACK(position_overlay_cb), ud);
-
-    gtk_widget_show(blender);
-#else
-    // Set up compositing for hud
-    blender = ghb_compositor_new();
-
-    gtk_container_add(GTK_CONTAINER(preview_box), blender);
-    ghb_compositor_zlist_insert(GHB_COMPOSITOR(blender), draw, 1, 1);
-    ghb_compositor_zlist_insert(GHB_COMPOSITOR(blender), hud, 2, .85);
-    gtk_widget_show(blender);
-#endif
 
     // Redirect stderr to the activity window
     ghb_preview_init(ud);
index b4bcc4fe2a46c5a2dcdd39e313729ac733d86b25..656bd18a52e813008b45b5e316d011442f1ab059 100644 (file)
@@ -77,9 +77,6 @@ static GstBusSyncReply create_window(GstBus *bus, GstMessage *msg,
                 gpointer data);
 #endif
 
-G_MODULE_EXPORT gboolean preview_expose_cb(GtkWidget *widget, GdkEventExpose *event,
-                signal_user_data_t *ud);
-
 void
 ghb_screen_par(signal_user_data_t *ud, gint *par_n, gint *par_d)
 {
@@ -152,6 +149,27 @@ ghb_par_scale(signal_user_data_t *ud, gint *width, gint *height, gint par_n, gin
         *height = *height * den / num;
 }
 
+static GdkWindow*
+preview_window(GtkWidget *widget)
+{
+    return gtk_layout_get_bin_window(GTK_LAYOUT(widget));
+}
+
+void
+preview_set_size(signal_user_data_t *ud, int width, int height)
+{
+    GtkWidget *widget;
+
+    widget = GHB_WIDGET (ud->builder, "preview_image");
+    gtk_widget_set_size_request(widget, width, height);
+    gtk_layout_set_size(GTK_LAYOUT(widget), width, height);
+    widget = GHB_WIDGET (ud->builder, "preview_hud_box");
+    gtk_widget_set_size_request(widget, width, height);
+
+    ud->preview->width = width;
+    ud->preview->height = height;
+}
+
 void
 ghb_preview_init(signal_user_data_t *ud)
 {
@@ -160,20 +178,18 @@ ghb_preview_init(signal_user_data_t *ud)
     ud->preview = g_malloc0(sizeof(preview_t));
     ud->preview->view = GHB_WIDGET(ud->builder, "preview_image");
     gtk_widget_realize(ud->preview->view);
-    g_signal_connect(G_OBJECT(ud->preview->view), "draw",
-                    G_CALLBACK(preview_expose_cb), ud);
 
     ud->preview->pause = TRUE;
     ud->preview->encode_frame = -1;
     ud->preview->live_id = -1;
-    widget = GHB_WIDGET (ud->builder, "preview_button_image");
+    widget = GHB_WIDGET(ud->builder, "preview_button_image");
     gtk_widget_get_size_request(widget, &ud->preview->button_width, &ud->preview->button_height);
 
 #if defined(_ENABLE_GST)
     GstBus *bus;
     GstElement *xover;
 
-    if (!gdk_window_ensure_native(gtk_widget_get_window(ud->preview->view)))
+    if (!gdk_window_ensure_native(preview_window(ud->preview->view)))
     {
         g_message("Couldn't create native window for GstXOverlay. Disabling live preview.");
         GtkWidget *widget = GHB_WIDGET(ud->builder, "live_preview_box");
@@ -182,11 +198,19 @@ ghb_preview_init(signal_user_data_t *ud)
         gtk_widget_hide (widget);
         return;
     }
+    widget = GHB_WIDGET(ud->builder, "preview_hud");
+    gtk_widget_realize(widget);
+    // Use a native window for the HUD.  Client side windows don't get
+    // updated properly as video changes benieth them.
+    if (!gdk_window_ensure_native(gtk_widget_get_window(widget)))
+    {
+        g_message("Couldn't create native window for HUD.");
+    }
 
 #if !defined(_WIN32)
-    ud->preview->xid = GDK_WINDOW_XID(gtk_widget_get_window(ud->preview->view));
+    ud->preview->xid = GDK_WINDOW_XID(preview_window(ud->preview->view));
 #else
-    ud->preview->xid = GDK_WINDOW_HWND(gtk_widget_get_window(ud->preview->view));
+    ud->preview->xid = GDK_WINDOW_HWND(preview_window(ud->preview->view));
 #endif
     ud->preview->play = gst_element_factory_make("playbin", "play");
     xover = gst_element_factory_make("gconfvideosink", "xover");
@@ -331,9 +355,7 @@ caps_set(GstCaps *caps, signal_user_data_t *ud)
 
         if (width != ud->preview->width || height != ud->preview->height)
         {
-            gtk_widget_set_size_request(ud->preview->view, width, height);
-            ud->preview->width = width;
-            ud->preview->height = height;
+            preview_set_size(ud, width, height);
         }
     }
 }
@@ -909,14 +931,10 @@ live_preview_seek_cb(GtkWidget *widget, signal_user_data_t *ud)
 #endif
 }
 
-static void _draw_pixbuf(GdkWindow *window, GdkPixbuf *pixbuf)
+static void _draw_pixbuf(cairo_t *cr, GdkPixbuf *pixbuf)
 {
-    cairo_t *cr;
-
-    cr = gdk_cairo_create(window);
     gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
     cairo_paint(cr);
-    cairo_destroy(cr);
 }
 
 void
@@ -965,11 +983,9 @@ ghb_set_preview_image(signal_user_data_t *ud)
     if (preview_width != ud->preview->width ||
         preview_height != ud->preview->height)
     {
-        gtk_widget_set_size_request(widget, preview_width, preview_height);
-        ud->preview->width = preview_width;
-        ud->preview->height = preview_height;
+        preview_set_size(ud, preview_width, preview_height);
     }
-    _draw_pixbuf(gtk_widget_get_window(widget), ud->preview->pix);
+    gtk_widget_queue_draw(widget);
 
     gchar *text = g_strdup_printf("%d x %d", width, height);
     widget = GHB_WIDGET (ud->builder, "preview_dims");
@@ -1000,6 +1016,75 @@ ghb_set_preview_image(signal_user_data_t *ud)
     }
 }
 
+static cairo_region_t*
+curved_rect_mask(GtkWidget *widget)
+{
+    GdkWindow *window;
+    cairo_region_t *shape;
+    cairo_surface_t *surface;
+    cairo_t *cr;
+    double w, h;
+    int radius;
+
+    if (!gtk_widget_get_realized(widget))
+        return NULL;
+
+    window = gtk_widget_get_window(widget);
+    w = gdk_window_get_width(window);
+    h = gdk_window_get_height(window);
+    if (w <= 50 || h <= 50)
+        return NULL;
+    radius = h / 4;
+    surface = gdk_window_create_similar_surface(window,
+                                                CAIRO_CONTENT_COLOR_ALPHA,
+                                                w, h);
+    cr = cairo_create (surface);
+
+    if (radius > w / 2)
+        radius = w / 2;
+    if (radius > h / 2)
+        radius = h / 2;
+
+    // fill shape with black
+    cairo_save(cr);
+    cairo_rectangle (cr, 0, 0, w, h);
+    cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+    cairo_fill (cr);
+    cairo_restore (cr);
+
+    cairo_move_to  (cr, 0, radius);
+    cairo_curve_to (cr, 0 , 0, 0 , 0, radius, 0);
+    cairo_line_to (cr, w - radius, 0);
+    cairo_curve_to (cr, w, 0, w, 0, w, radius);
+    cairo_line_to (cr, w , h - radius);
+    cairo_curve_to (cr, w, h, w, h, w - radius, h);
+    cairo_line_to (cr, 0 + radius, h);
+    cairo_curve_to (cr, 0, h, 0, h, 0, h - radius);
+
+    cairo_close_path(cr);
+
+    cairo_set_source_rgb(cr, 1, 1, 1);
+    cairo_fill(cr);
+
+    cairo_destroy(cr);
+    shape = gdk_cairo_region_create_from_surface(surface);
+    cairo_surface_destroy(surface);
+
+    return shape;
+}
+
+static void
+hud_update_shape(GtkWidget *widget)
+{
+    cairo_region_t *shape;
+    shape = curved_rect_mask(widget);
+    if (shape != NULL)
+    {
+        gtk_widget_shape_combine_region(widget, shape);
+        cairo_region_destroy(shape);
+    }
+}
+
 #if defined(_ENABLE_GST)
 #if GST_CHECK_VERSION(1, 0, 0)
 G_MODULE_EXPORT gboolean
@@ -1052,33 +1137,10 @@ delayed_expose_cb(signal_user_data_t *ud)
 #endif
 #endif
 
-#if 0 // GTK_CHECK_VERSION(3, 0, 0)
-//
-// Only needed if the problems with GtkOverlay are ever resolved
-//
 G_MODULE_EXPORT gboolean
-position_overlay_cb(
-    GtkWidget *overlay,
+preview_draw_cb(
     GtkWidget *widget,
-    GdkRectangle *rect,
-    signal_user_data_t *ud)
-{
-    GtkRequisition min_size, size;
-    gtk_widget_get_preferred_size(widget, &min_size, &size);
-
-    rect->width = MAX(min_size.width, size.width);
-    rect->height = MAX(min_size.height, size.height);
-    rect->x = MAX(0, ud->preview->width / 2 - rect->width / 2);
-    rect->y = MAX(0, ud->preview->height - rect->height - 50);
-
-    return TRUE;
-}
-#endif
-
-G_MODULE_EXPORT gboolean
-preview_expose_cb(
-    GtkWidget *widget,
-    GdkEventExpose *event,
+    cairo_t *cr,
     signal_user_data_t *ud)
 {
 #if defined(_ENABLE_GST)
@@ -1101,9 +1163,8 @@ preview_expose_cb(
             // cleaned up here. But a delayed gst_x_overlay_expose()
             // takes care of it.
             g_idle_add((GSourceFunc)delayed_expose_cb, ud);
-            return FALSE;
         }
-        return TRUE;
+        return FALSE;
     }
 #else
     if (ud->preview->live_enabled && ud->preview->state == PREVIEW_STATE_LIVE)
@@ -1124,19 +1185,17 @@ preview_expose_cb(
             // cleaned up here. But a delayed gst_x_overlay_expose()
             // takes care of it.
             g_idle_add((GSourceFunc)delayed_expose_cb, ud);
-            return FALSE;
         }
-        return TRUE;
+        return FALSE;
     }
 #endif
 #endif
 
     if (ud->preview->pix != NULL)
     {
-        _draw_pixbuf(gtk_widget_get_window(ud->preview->view), ud->preview->pix);
-        //_draw_pixbuf(gtk_widget_get_window(widget), ud->preview->pix);
+        _draw_pixbuf(cr, ud->preview->pix);
     }
-    return TRUE;
+    return FALSE;
 }
 
 G_MODULE_EXPORT void
@@ -1293,13 +1352,14 @@ hud_timeout(signal_user_data_t *ud)
     return FALSE;
 }
 
+static gboolean in_hud = FALSE;
+
 G_MODULE_EXPORT gboolean
 hud_enter_cb(
     GtkWidget *widget,
     GdkEventCrossing *event,
     signal_user_data_t *ud)
 {
-    g_debug("hud_enter_cb()");
     if (hud_timeout_id != 0)
     {
         GMainContext *mc;
@@ -1311,8 +1371,22 @@ hud_enter_cb(
             g_source_destroy(source);
     }
     widget = GHB_WIDGET(ud->builder, "preview_hud");
-    gtk_widget_show(widget);
+    if (!gtk_widget_get_visible(widget))
+    {
+        gtk_widget_show(widget);
+    }
     hud_timeout_id = 0;
+    in_hud = TRUE;
+    return FALSE;
+}
+
+G_MODULE_EXPORT gboolean
+hud_leave_cb(
+    GtkWidget *widget,
+    GdkEventCrossing *event,
+    signal_user_data_t *ud)
+{
+    in_hud = FALSE;
     return FALSE;
 }
 
@@ -1322,7 +1396,6 @@ preview_leave_cb(
     GdkEventCrossing *event,
     signal_user_data_t *ud)
 {
-    g_debug("hud_leave_cb()");
     if (hud_timeout_id != 0)
     {
         GMainContext *mc;
@@ -1343,7 +1416,6 @@ preview_motion_cb(
     GdkEventMotion *event,
     signal_user_data_t *ud)
 {
-    //g_debug("hud_motion_cb %d", hud_timeout_id);
     if (hud_timeout_id != 0)
     {
         GMainContext *mc;
@@ -1359,78 +1431,20 @@ preview_motion_cb(
     {
         gtk_widget_show(widget);
     }
-    hud_timeout_id = g_timeout_add_seconds(4, (GSourceFunc)hud_timeout, ud);
+    if (!in_hud)
+    {
+        hud_timeout_id = g_timeout_add_seconds(4, (GSourceFunc)hud_timeout, ud);
+    }
     return FALSE;
 }
 
-cairo_region_t*
-ghb_curved_rect_mask(gint width, gint height, gint radius)
-{
-    cairo_region_t *shape;
-    cairo_surface_t *surface;
-    cairo_t *cr;
-    double w, h;
-
-    if (!width || !height)
-        return NULL;
-
-    surface = cairo_image_surface_create(CAIRO_FORMAT_A8, width, height);
-    cr = cairo_create (surface);
-
-    w = width;
-    h = height;
-    if (radius > width / 2)
-        radius = width / 2;
-    if (radius > height / 2)
-        radius = height / 2;
-
-    // fill shape with black
-    cairo_save(cr);
-    cairo_rectangle (cr, 0, 0, width, height);
-    cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
-    cairo_fill (cr);
-    cairo_restore (cr);
-
-    cairo_move_to  (cr, 0, radius);
-    cairo_curve_to (cr, 0 , 0, 0 , 0, radius, 0);
-    cairo_line_to (cr, w - radius, 0);
-    cairo_curve_to (cr, w, 0, w, 0, w, radius);
-    cairo_line_to (cr, w , h - radius);
-    cairo_curve_to (cr, w, h, w, h, w - radius, h);
-    cairo_line_to (cr, 0 + radius, h);
-    cairo_curve_to (cr, 0, h, 0, h, 0, h - radius);
-
-    cairo_close_path(cr);
-
-    cairo_set_source_rgb(cr, 1, 1, 1);
-    cairo_fill(cr);
-
-    cairo_destroy(cr);
-    shape = gdk_cairo_region_create_from_surface(surface);
-    cairo_surface_destroy(surface);
-
-    return shape;
-}
-
 G_MODULE_EXPORT void
-preview_hud_size_alloc_cb(
+hud_size_alloc_cb(
     GtkWidget *widget,
     GtkAllocation *allocation,
     signal_user_data_t *ud)
 {
-    cairo_region_t *shape;
-
-    //g_message("preview_hud_size_alloc_cb()");
-    if (gtk_widget_get_visible(widget) && allocation->height > 50)
-    {
-        shape = ghb_curved_rect_mask(allocation->width,
-                                    allocation->height, allocation->height/4);
-        if (shape != NULL)
-        {
-            gtk_widget_shape_combine_region(widget, shape);
-            cairo_region_destroy(shape);
-        }
-    }
+    hud_update_shape(widget);
 }
 
 G_MODULE_EXPORT gboolean
@@ -1441,7 +1455,6 @@ preview_configure_cb(
 {
     gint x, y;
 
-    //g_message("preview_configure_cb()");
     if (gtk_widget_get_visible(widget))
     {
         gtk_window_get_position(GTK_WINDOW(widget), &x, &y);