[Avidemux-svn-commit] r3339 - branches/avidemux_2.4_branch/avidemux/ADM_userInterfaces/ADM_GTK/ADM_gui2
mean at BerliOS
mean at mail.berlios.de
Fri Jul 6 21:59:15 CEST 2007
Author: mean
Date: 2007-07-06 21:59:14 +0200 (Fri, 06 Jul 2007)
New Revision: 3339
Modified:
branches/avidemux_2.4_branch/avidemux/ADM_userInterfaces/ADM_GTK/ADM_gui2/GUI_bindings.cpp
Log:
JM jogshuttle, now working :)
Modified: branches/avidemux_2.4_branch/avidemux/ADM_userInterfaces/ADM_GTK/ADM_gui2/GUI_bindings.cpp
===================================================================
--- branches/avidemux_2.4_branch/avidemux/ADM_userInterfaces/ADM_GTK/ADM_gui2/GUI_bindings.cpp 2007-07-06 14:54:51 UTC (rev 3338)
+++ branches/avidemux_2.4_branch/avidemux/ADM_userInterfaces/ADM_GTK/ADM_gui2/GUI_bindings.cpp 2007-07-06 19:59:14 UTC (rev 3339)
@@ -75,7 +75,7 @@
static GdkCursor *guiCursorBusy=NULL;
static GdkCursor *guiCursorNormal=NULL;
static gint guiCursorEvtMask=0;
-static void volumeChange( void );
+static gint jogChange( void );
static char *customNames[ADM_MAC_CUSTOM_SCRIPT];
static uint32_t ADM_nbCustom=0;
@@ -332,7 +332,7 @@
// Jog
gtk_signal_connect(GTK_OBJECT(lookup_widget(guiRootWindow,"jogg")), "value_changed",
- GTK_SIGNAL_FUNC(volumeChange), (void *) NULL);
+ GTK_SIGNAL_FUNC(jogChange), (void *) NULL);
@@ -561,11 +561,6 @@
}
-void volumeChange( void )
-{
- HandleAction(ACT_JOG);
-
-}
/**
\fn UI_readJog
\brief Returns value of jog
@@ -577,7 +572,7 @@
wid=lookup_widget(guiRootWindow,"jogg");
val=jog_shuttle_get_value(wid);
- printf("Jog : %f\n",val);
+ //printf("Jog : %f\n",val);
val=val*100;
return (int32_t )val;
@@ -1145,5 +1140,109 @@
automation();
gdk_threads_leave();
}
+/*****************************/
+/*
+ * This is the wheel position <->time array
+ * */
+static uint32_t jogScale[10]={
+50,
+50,
+40,
+40,
+20,
+20, // 5
+10,
+5,
+3,
+2
+};
+static int nbTimer=0;
+static int jogLock=0;
+static int count=0;
+/**
+ \fn tickToTime
+ \brief convert tick (i.e. wheel value) between 0 and 9 to a number of tick to wait in 10 ms units. Should be exp/log TODO
+ */
+static uint32_t tickToTime(uint32_t tick)
+{
+ if(tick>9) tick=9;
+ return jogScale[tick];
+}
+/**
+ \fn jogTimer
+ \brief Function that is called every 10 ms and handle the fwd/bwd depending on wheel position
+ */
+static int jogTimer(void)
+{
+ int32_t v;
+ uint32_t r;
+ v=UI_readJog();
+ r=abs(v);
+ r=r/10;
+ if(!r)
+ {
+ return FALSE;
+ }
+ //printf("Arm %u\n",count);
+ if(count) count--;
+ if(count) return TRUE;
+ count=tickToTime(r);
+ if(jogLock) return FALSE;
+
+ jogLock++;
+ // printf("Arm Call\n");
+ gdk_threads_enter();
+ if(v>0)
+ g_signal_emit_by_name (GTK_OBJECT (lookup_widget(guiRootWindow,"next_intra_frame1")), "activate",G_TYPE_NONE );
+ else
+ g_signal_emit_by_name (GTK_OBJECT (lookup_widget(guiRootWindow,"previous_intra_frame1")), "activate",G_TYPE_NONE );
+ gdk_threads_leave();
+ jogLock--;
+ return TRUE;
+}
+/**
+ * \fn jogDel
+ * \brief Called when timer is deleted
+*/
+void jogDel(void *)
+{
+ nbTimer=0;
+ count=0;
+// printf("Arm off\n");
+}
+/**
+ * \fn jogChange
+ * \brief Handler for wheel value changed event
+ * */
+gint jogChange(void)
+{
+ int32_t v;
+ uint32_t r;
+ if(nbTimer) return FALSE; // Already armed
+
+ // Process First move
+ v=UI_readJog()/10;
+ r=abs(v);
+ if(!r)
+ {
+ return FALSE;
+ }
+ if(!jogLock)
+ {
+ jogLock++;
+ if(v>0)
+ gtk_signal_emit_by_name (GTK_OBJECT (lookup_widget(guiRootWindow,"next_intra_frame1")), "activate" );
+
+ else
+ gtk_signal_emit_by_name (GTK_OBJECT (lookup_widget(guiRootWindow,"previous_intra_frame1")), "activate" );
+ jogLock--;
+ nbTimer=1;
+ count=0;//tickToTime(r);
+ g_timeout_add_full(G_PRIORITY_DEFAULT,10,(GCALL *)jogTimer,NULL,jogDel);
+ }
+ // Armed!
+ return FALSE;
+}
+
// EOF
More information about the Avidemux-svn-commit
mailing list