[SCM] gsequencer/upstream: enhanced editor

jkraehemann-guest at users.alioth.debian.org jkraehemann-guest at users.alioth.debian.org
Sun Jun 14 16:07:05 UTC 2015


The following commit has been merged in the upstream branch:
commit 519dbb8aa91754efc65d8ac006351b5b6a6fdb69
Author: Joël Krähemann <weedlight at gmail.com>
Date:   Tue Jun 9 23:45:09 2015 +0200

    enhanced editor

diff --git a/.deps/ags-ags_navigation.Po b/.deps/ags-ags_navigation.Po
index 45a0810..ee434c4 100644
--- a/.deps/ags-ags_navigation.Po
+++ b/.deps/ags-ags_navigation.Po
@@ -622,11 +622,16 @@ ags-ags_navigation.o: src/ags/X/ags_navigation.c \
  /usr/include/libxml2/libxml/xlink.h /usr/include/libxml2/libxml/SAX2.h \
  src/ags/thread/ags_timestamp_thread.h src/ags/audio/ags_timestamp.h \
  src/ags/audio/ags_note.h src/ags/X/ags_navigation_callbacks.h \
- src/ags-lib/object/ags_connectable.h src/ags/X/ags_editor.h \
- src/ags/audio/ags_audio.h src/ags/X/ags_machine.h \
+ src/ags-lib/object/ags_connectable.h src/ags/X/ags_window.h \
+ src/ags/X/ags_menu_bar.h src/ags/X/ags_machine.h \
+ src/ags/audio/ags_audio.h src/ags/X/ags_editor.h \
  src/ags/X/editor/ags_toolbar.h src/ags/X/editor/ags_machine_selector.h \
  src/ags/X/editor/ags_notebook.h src/ags/X/editor/ags_meter.h \
- src/ags/X/editor/ags_note_edit.h src/ags/widget/ags_ruler.h
+ src/ags/X/editor/ags_note_edit.h src/ags/widget/ags_ruler.h \
+ src/ags/X/ags_export_window.h src/ags/X/ags_preferences.h \
+ src/ags/X/ags_generic_preferences.h src/ags/X/ags_audio_preferences.h \
+ src/ags/X/ags_performance_preferences.h \
+ src/ags/X/ags_server_preferences.h
 
 /usr/include/stdc-predef.h:
 
@@ -2072,12 +2077,16 @@ src/ags/X/ags_navigation_callbacks.h:
 
 src/ags-lib/object/ags_connectable.h:
 
-src/ags/X/ags_editor.h:
+src/ags/X/ags_window.h:
 
-src/ags/audio/ags_audio.h:
+src/ags/X/ags_menu_bar.h:
 
 src/ags/X/ags_machine.h:
 
+src/ags/audio/ags_audio.h:
+
+src/ags/X/ags_editor.h:
+
 src/ags/X/editor/ags_toolbar.h:
 
 src/ags/X/editor/ags_machine_selector.h:
@@ -2089,3 +2098,15 @@ src/ags/X/editor/ags_meter.h:
 src/ags/X/editor/ags_note_edit.h:
 
 src/ags/widget/ags_ruler.h:
+
+src/ags/X/ags_export_window.h:
+
+src/ags/X/ags_preferences.h:
+
+src/ags/X/ags_generic_preferences.h:
+
+src/ags/X/ags_audio_preferences.h:
+
+src/ags/X/ags_performance_preferences.h:
+
+src/ags/X/ags_server_preferences.h:
diff --git a/src/ags/X/ags_export_window.c b/src/ags/X/ags_export_window.c
index 83c7c13..97bd8d3 100644
--- a/src/ags/X/ags_export_window.c
+++ b/src/ags/X/ags_export_window.c
@@ -304,7 +304,8 @@ ags_export_window_init(AgsExportWindow *export_window)
 		   GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND,
 		   0, 0);
 
-  export_window->duration = (GtkLabel *) gtk_label_new(ags_navigation_tact_to_time_string(0.0));
+  export_window->duration = (GtkLabel *) gtk_label_new(ags_navigation_tact_to_time_string(0.0,
+											  AGS_DEVOUT_DEFAULT_BPM));
   gtk_box_pack_start(GTK_BOX(hbox),
 		     GTK_WIDGET(export_window->duration),
 		     FALSE, FALSE,
diff --git a/src/ags/X/ags_export_window_callbacks.c b/src/ags/X/ags_export_window_callbacks.c
index 3812c0f..7a968b3 100644
--- a/src/ags/X/ags_export_window_callbacks.c
+++ b/src/ags/X/ags_export_window_callbacks.c
@@ -64,8 +64,13 @@ void
 ags_export_window_tact_callback(GtkWidget *spin_button,
 				AgsExportWindow *export_window)
 {
+  AgsWindow *window;
+
+  window = AGS_MAIN(export_window->ags_main)->window;
+
   gtk_label_set_text(export_window->duration,
-		     ags_navigation_tact_to_time_string(gtk_spin_button_get_value(export_window->tact)));
+		     ags_navigation_tact_to_time_string(gtk_spin_button_get_value(export_window->tact),
+							window->navigation->bpm->adjustment->value));
 }
 
 void
diff --git a/src/ags/X/ags_navigation.c b/src/ags/X/ags_navigation.c
index 81e280e..efc5233 100644
--- a/src/ags/X/ags_navigation.c
+++ b/src/ags/X/ags_navigation.c
@@ -21,6 +21,7 @@
 
 #include <ags-lib/object/ags_connectable.h>
 
+#include <ags/X/ags_window.h>
 #include <ags/X/ags_editor.h>
 
 void ags_navigation_class_init(AgsNavigationClass *navigation);
@@ -427,19 +428,23 @@ ags_navigation_show(GtkWidget *widget)
 
 void
 ags_navigation_real_change_position(AgsNavigation *navigation,
-				    gdouble tact)
+				    gdouble tact_counter)
 {
-  gchar *timestr, *str;
+  AgsWindow *window;
+  AgsEditor *editor;
+  double tact_factor, zoom_factor;
+  double tact;
 
-  g_object_get(navigation->duration_time,
-	       "label\0", &str,
-	       NULL);
-  ags_navigation_update_time_string(tact,
-  				    str);
-  //  g_object_set(navigation->duration_time,
-  //	       "label\0", str,
-  //	       NULL);
-  //  gtk_widget_show_all(navigation->duration_time);
+  window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation)));
+  editor = window->editor;
+
+  zoom_factor = 0.25;
+
+  tact_factor = exp2(8.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom));
+  tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 4.0);
+
+  gtk_adjustment_set_value(GTK_RANGE(editor->note_edit->hscrollbar)->adjustment,
+			   tact_counter * window->editor->note_edit->control_current.control_width * (16.0 / tact_factor));
 }
 
 /**
@@ -476,7 +481,8 @@ ags_navigation_change_position(AgsNavigation *navigation,
  * Since: 0.4 
  */
 gchar*
-ags_navigation_tact_to_time_string(gdouble tact)
+ags_navigation_tact_to_time_string(gdouble tact,
+				   gdouble bpm)
 {
   static gdouble delay_min, delay_sec, delay_hsec;
   static gboolean initialized = FALSE;
@@ -485,7 +491,7 @@ ags_navigation_tact_to_time_string(gdouble tact)
   guint min, sec, hsec;
 
   if(!initialized){
-    delay_min = AGS_DEVOUT_DEFAULT_BPM;
+    delay_min = bpm;
     delay_sec = delay_min / 60.0;
     delay_hsec = delay_sec / 100.0;
 
diff --git a/src/ags/X/ags_navigation.h b/src/ags/X/ags_navigation.h
index a9ca171..59fbfb7 100644
--- a/src/ags/X/ags_navigation.h
+++ b/src/ags/X/ags_navigation.h
@@ -52,7 +52,8 @@ struct _AgsNavigation
   guint flags;
 
   AgsDevout *devout;
-
+  guint start_tact;
+  
   GtkToggleButton *expander;
 
   GtkSpinButton *bpm;
@@ -89,7 +90,9 @@ struct _AgsNavigationClass
 
 GType ags_navigation_get_type(void);
 
-gchar* ags_navigation_tact_to_time_string(gdouble tact);
+gchar* ags_navigation_tact_to_time_string(gdouble tact,
+					  gdouble bpm);
+
 void ags_navigation_update_time_string(double tact,
 				       gchar *time_string);
 
diff --git a/src/ags/X/ags_navigation_callbacks.c b/src/ags/X/ags_navigation_callbacks.c
index 1cd3d39..0b78fb5 100644
--- a/src/ags/X/ags_navigation_callbacks.c
+++ b/src/ags/X/ags_navigation_callbacks.c
@@ -132,22 +132,33 @@ ags_navigation_play_callback(GtkWidget *widget,
   AgsWindow *window;
   AgsMachine *machine;
   GList *machines, *machines_start;
-
+  gboolean initialized_time;
+  
   if((AGS_NAVIGATION_BLOCK_PLAY & (navigation->flags)) != 0){
     return;
   }
 
   window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation)));
+  
   machines_start =
     machines = gtk_container_get_children(GTK_CONTAINER(window->machines));
-
+  
+  initialized_time = FALSE;
+  
   while(machines != NULL){
     machine = AGS_MACHINE(machines->data);
 
     if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0 ||
        (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){
+#ifdef AGS_DEBUG
       printf("found machine to play!\n\0");
-
+#endif
+      
+      if(!initialized_time){
+	initialized_time = TRUE;
+	navigation->start_tact = window->devout->tact_counter;
+      }
+      
       ags_machine_set_run(machine,
 			  TRUE);
     }
diff --git a/src/ags/X/editor/ags_toolbar_callbacks.c b/src/ags/X/editor/ags_toolbar_callbacks.c
index cbf39d5..ed9f1c3 100644
--- a/src/ags/X/editor/ags_toolbar_callbacks.c
+++ b/src/ags/X/editor/ags_toolbar_callbacks.c
@@ -294,6 +294,10 @@ ags_toolbar_zoom_callback(GtkComboBox *combo_box, AgsToolbar *toolbar)
   GtkWidget *widget;
   GtkAdjustment *adjustment;
   double zoom, zoom_old;
+  double tact_factor, zoom_factor;
+  double tact;
+  gdouble old_upper, new_upper;
+  gdouble position;
   guint history;
 
   editor = (AgsEditor *) gtk_widget_get_ancestor((GtkWidget *) toolbar, AGS_TYPE_EDITOR);
@@ -303,12 +307,25 @@ ags_toolbar_zoom_callback(GtkComboBox *combo_box, AgsToolbar *toolbar)
   zoom = exp2((double) history - 4.0);
   zoom_old = exp2((double) toolbar->zoom_history - 4.0);
 
+  zoom_factor = 0.25;
+
+  tact_factor = exp2(8.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom));
+  tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 4.0);
+
   toolbar->zoom_history = history;
 
+  position = GTK_RANGE(editor->note_edit->hscrollbar)->adjustment->value;
+  old_upper = GTK_RANGE(editor->note_edit->hscrollbar)->adjustment->upper;
+  
   editor->note_edit->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY;
   ags_note_edit_reset_horizontally(editor->note_edit, AGS_NOTE_EDIT_RESET_HSCROLLBAR |
 				   AGS_NOTE_EDIT_RESET_WIDTH);
   editor->note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY);
+
+  new_upper = GTK_RANGE(editor->note_edit->hscrollbar)->adjustment->upper;
+  
+  gtk_adjustment_set_value(GTK_RANGE(editor->note_edit->hscrollbar)->adjustment,
+			   position / old_upper * new_upper);
 }
 
 void
diff --git a/src/ags/audio/ags_devout.c b/src/ags/audio/ags_devout.c
index dfee153..eaf808f 100644
--- a/src/ags/audio/ags_devout.c
+++ b/src/ags/audio/ags_devout.c
@@ -475,6 +475,7 @@ ags_devout_init(AgsDevout *devout)
   }
 
   /*  */
+  devout->tact_counter = 0.0;
   devout->delay_counter = 0;
   devout->tic_counter = 0;
 
@@ -1382,6 +1383,7 @@ ags_devout_alsa_init(AgsDevout *devout,
 
   /*  */
   devout->out.alsa.handle = handle;
+  devout->tact_counter = 0.0;
   devout->delay_counter = 0.0;
   devout->tic_counter = 0;
 
@@ -1565,6 +1567,7 @@ ags_devout_alsa_play(AgsDevout *devout,
 
     /* delay */
     devout->delay_counter = 0.0;
+    devout->tact_counter += 1.0;
   } 
 
   /* tic */
diff --git a/src/ags/audio/ags_devout.h b/src/ags/audio/ags_devout.h
index e1757ba..529e9ed 100644
--- a/src/ags/audio/ags_devout.h
+++ b/src/ags/audio/ags_devout.h
@@ -135,6 +135,7 @@ struct _AgsDevout
   gdouble *delay; // count of tics within buffer size
   guint *attack; // where currently tic resides in the stream's offset, measured in 1/64 of bpm
 
+  gdouble tact_counter;
   gdouble delay_counter; // next time attack changeing when delay_counter == delay
   guint tic_counter; // in the range of default period
 
diff --git a/src/ags/audio/task/ags_display_tact.c b/src/ags/audio/task/ags_display_tact.c
index 1c2cdfd..45cf327 100644
--- a/src/ags/audio/task/ags_display_tact.c
+++ b/src/ags/audio/task/ags_display_tact.c
@@ -145,17 +145,23 @@ void
 ags_display_tact_launch(AgsTask *task)
 {
   AgsDisplayTact *display_tact;
+  AgsWindow *window;
   AgsNavigation *navigation;
   gchar *timestr;
+  gdouble tact;
 
   display_tact = AGS_DISPLAY_TACT(task);
   
   navigation = AGS_NAVIGATION(display_tact->navigation);
-
+  window = gtk_widget_get_ancestor(navigation,
+				   AGS_TYPE_WINDOW);
+  
   //  gtk_adjustment_set_value(navigation->position_tact->adjustment,
   //			   navigation->position_tact->adjustment->value + (exp2(-4.0)));
 
-  timestr = ags_navigation_tact_to_time_string(navigation->position_tact->adjustment->value);
+  tact = window->devout->tact_counter - navigation->start_tact;
+  timestr = ags_navigation_tact_to_time_string(tact,
+					       navigation->bpm->adjustment->value);
   gtk_label_set_text(navigation->duration_time, timestr);
 
   g_free(timestr);

-- 
gsequencer packaging



More information about the pkg-multimedia-commits mailing list