Hello community,

here is the log from the commit of package gsequencer for openSUSE:Factory 
checked in at 2019-07-23 22:37:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gsequencer (Old)
 and      /work/SRC/openSUSE:Factory/.gsequencer.new.4126 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gsequencer"

Tue Jul 23 22:37:22 2019 rev:47 rq:717777 version:2.2.23

Changes:
--------
--- /work/SRC/openSUSE:Factory/gsequencer/gsequencer.changes    2019-07-21 
11:35:12.748767626 +0200
+++ /work/SRC/openSUSE:Factory/.gsequencer.new.4126/gsequencer.changes  
2019-07-23 22:37:47.322966289 +0200
@@ -1,0 +2,6 @@
+Mon Jul 22 15:58:38 UTC 2019 - Joël Krähemann <[email protected]>
+
+- new upstream v2.2.23 replaced hard-coded font names.
+- fixed timing issue with relative counters.
+
+-------------------------------------------------------------------

Old:
----
  gsequencer-2.2.22.tar.gz

New:
----
  gsequencer-2.2.23.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gsequencer.spec ++++++
--- /var/tmp/diff_new_pack.sl2RBn/_old  2019-07-23 22:37:47.886966173 +0200
+++ /var/tmp/diff_new_pack.sl2RBn/_new  2019-07-23 22:37:47.890966172 +0200
@@ -21,7 +21,7 @@
 # activated with --with run_functional_tests command line switch.
 %bcond_with run_functional_tests
 Name:           gsequencer
-Version:        2.2.22
+Version:        2.2.23
 Release:        0
 Summary:        Audio processing engine
 License:        GPL-3.0+ AND AGPL-3.0+ AND GFDL-1.3

++++++ gsequencer-2.2.22.tar.gz -> gsequencer-2.2.23.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ChangeLog 
new/gsequencer-2.2.23/ChangeLog
--- old/gsequencer-2.2.22/ChangeLog     2019-07-18 10:58:57.000000000 +0200
+++ new/gsequencer-2.2.23/ChangeLog     2019-07-21 16:43:56.000000000 +0200
@@ -1,3 +1,14 @@
+ags (2.2.23)
+
+       [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
+       * fixed relative counters and time fraction issues
+       * improved replacing hard-coded font
+       * refactored AgsDial to use PangoLayout
+       * refactored AgsLevel to use PangoLayout
+       * refactored AgsScale to use PangoLayout
+       * refactored AgsRuler to use PangoLayout
+       * refactored AgsCartesian to use PangoLayout
+
 ags (2.2.22)
 
        [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/TODO new/gsequencer-2.2.23/TODO
--- old/gsequencer-2.2.22/TODO  2019-06-24 17:33:32.000000000 +0200
+++ new/gsequencer-2.2.23/TODO  2019-07-21 12:03:35.000000000 +0200
@@ -7,6 +7,7 @@
 A copy of the license is included in the section entitled "GNU
 Free Documentation License".
 
+* TODO:JK: fix envelope related functions in ags_midi_util.h
 * TODO:JK: check recall id cleanup
 * TODO:JK: improved AgsRecallContainer detection of ags_recall_factory.c
 * TODO:JK: implemented AgsSoundContainer manager
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/ags_devin.c 
new/gsequencer-2.2.23/ags/audio/ags_devin.c
--- old/gsequencer-2.2.22/ags/audio/ags_devin.c 2019-04-29 20:06:18.000000000 
+0200
+++ new/gsequencer-2.2.23/ags/audio/ags_devin.c 2019-07-21 15:00:31.000000000 
+0200
@@ -2622,7 +2622,7 @@
 #endif
   
   devin->tact_counter = 0.0;
-  devin->delay_counter = 0.0;
+  devin->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(devin)));
   devin->tic_counter = 0;
 
   devin->nth_ring_buffer = 0;
@@ -3950,7 +3950,7 @@
 
   pthread_mutex_unlock(devin_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     if(do_loop &&
        note_offset + 1 == loop_right){
       ags_soundcard_set_note_offset(soundcard,
@@ -3970,7 +3970,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(devin_mutex);
     
-    devin->delay_counter = 0.0;
+    devin->delay_counter = delay_counter + 1.0 - delay;
     devin->tact_counter += 1.0;
 
     pthread_mutex_unlock(devin_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/ags_devout.c 
new/gsequencer-2.2.23/ags/audio/ags_devout.c
--- old/gsequencer-2.2.22/ags/audio/ags_devout.c        2019-06-01 
20:20:05.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/ags_devout.c        2019-07-21 
14:57:21.000000000 +0200
@@ -2674,7 +2674,7 @@
 #endif
   
   devout->tact_counter = 0.0;
-  devout->delay_counter = 0.0;
+  devout->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(devout)));
   devout->tic_counter = 0;
 
   devout->nth_ring_buffer = 0;
@@ -3499,7 +3499,7 @@
 #endif
 
   devout->tact_counter = 0.0;
-  devout->delay_counter = 0.0;
+  devout->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(devout)));
   devout->tic_counter = 0;
 
   devout->nth_ring_buffer = 0;
@@ -3999,7 +3999,7 @@
 
   pthread_mutex_unlock(devout_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     if(do_loop &&
        note_offset + 1 == loop_right){
       ags_soundcard_set_note_offset(soundcard,
@@ -4019,7 +4019,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(devout_mutex);
     
-    devout->delay_counter = 0.0;
+    devout->delay_counter = delay_counter + 1.0 - delay;
     devout->tact_counter += 1.0;
 
     pthread_mutex_unlock(devout_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/ags_midiin.c 
new/gsequencer-2.2.23/ags/audio/ags_midiin.c
--- old/gsequencer-2.2.22/ags/audio/ags_midiin.c        2019-04-29 
20:06:18.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/ags_midiin.c        2019-07-21 
15:07:00.000000000 +0200
@@ -1912,7 +1912,7 @@
 #endif
 
   midiin->tact_counter = 0.0;
-  midiin->delay_counter = 0.0;
+  midiin->delay_counter = floor(midiin->delay);
   midiin->tic_counter = 0;
 
 #ifdef AGS_WITH_ALSA
@@ -2210,7 +2210,7 @@
 
   pthread_mutex_unlock(midiin_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     ags_sequencer_set_note_offset(sequencer,
                                  note_offset + 1);
 
@@ -2221,7 +2221,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(midiin_mutex);
 
-    midiin->delay_counter = 0.0;
+    midiin->delay_counter = delay_counter + 1.0 - delay;
     midiin->tact_counter += 1.0;
 
     pthread_mutex_unlock(midiin_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-2.2.22/ags/audio/core-audio/ags_core_audio_devin.c 
new/gsequencer-2.2.23/ags/audio/core-audio/ags_core_audio_devin.c
--- old/gsequencer-2.2.22/ags/audio/core-audio/ags_core_audio_devin.c   
2019-04-29 20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/core-audio/ags_core_audio_devin.c   
2019-07-21 15:03:58.000000000 +0200
@@ -673,7 +673,7 @@
   
   /* counters */
   core_audio_devin->tact_counter = 0.0;
-  core_audio_devin->delay_counter = 0;
+  core_audio_devin->delay_counter = 0.0;
   core_audio_devin->tic_counter = 0;
 
   core_audio_devin->start_note_offset = 0;
@@ -1798,7 +1798,7 @@
 
   /*  */
   core_audio_devin->tact_counter = 0.0;
-  core_audio_devin->delay_counter = 0.0;
+  core_audio_devin->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(core_audio_devin)));
   core_audio_devin->tic_counter = 0;
 
   core_audio_devin->flags |= (AGS_CORE_AUDIO_DEVIN_INITIALIZED |
@@ -2176,7 +2176,7 @@
 
   pthread_mutex_unlock(core_audio_devin_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     if(do_loop &&
        note_offset + 1 == loop_right){
       ags_soundcard_set_note_offset(soundcard,
@@ -2196,7 +2196,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(core_audio_devin_mutex);
     
-    core_audio_devin->delay_counter = 0.0;
+    core_audio_devin->delay_counter = delay_counter + 1.0 - delay;
     core_audio_devin->tact_counter += 1.0;
 
     pthread_mutex_unlock(core_audio_devin_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-2.2.22/ags/audio/core-audio/ags_core_audio_devout.c 
new/gsequencer-2.2.23/ags/audio/core-audio/ags_core_audio_devout.c
--- old/gsequencer-2.2.22/ags/audio/core-audio/ags_core_audio_devout.c  
2019-04-29 20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/core-audio/ags_core_audio_devout.c  
2019-07-21 15:03:38.000000000 +0200
@@ -689,7 +689,7 @@
   
   /* counters */
   core_audio_devout->tact_counter = 0.0;
-  core_audio_devout->delay_counter = 0;
+  core_audio_devout->delay_counter = 0.0;
   core_audio_devout->tic_counter = 0;
 
   core_audio_devout->start_note_offset = 0;
@@ -2084,7 +2084,7 @@
 
   /*  */
   core_audio_devout->tact_counter = 0.0;
-  core_audio_devout->delay_counter = 0.0;
+  core_audio_devout->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(core_audio_devout)));
   core_audio_devout->tic_counter = 0;
 
   core_audio_devout->flags |= (AGS_CORE_AUDIO_DEVOUT_INITIALIZED |
@@ -2684,7 +2684,7 @@
 
   pthread_mutex_unlock(core_audio_devout_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     if(do_loop &&
        note_offset + 1 == loop_right){
       ags_soundcard_set_note_offset(soundcard,
@@ -2704,7 +2704,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(core_audio_devout_mutex);
     
-    core_audio_devout->delay_counter = 0.0;
+    core_audio_devout->delay_counter = delay_counter + 1.0 - delay;
     core_audio_devout->tact_counter += 1.0;
 
     pthread_mutex_unlock(core_audio_devout_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-2.2.22/ags/audio/core-audio/ags_core_audio_midiin.c 
new/gsequencer-2.2.23/ags/audio/core-audio/ags_core_audio_midiin.c
--- old/gsequencer-2.2.22/ags/audio/core-audio/ags_core_audio_midiin.c  
2019-04-29 20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/core-audio/ags_core_audio_midiin.c  
2019-07-21 15:06:31.000000000 +0200
@@ -1481,7 +1481,7 @@
   
   /*  */
   core_audio_midiin->tact_counter = 0.0;
-  core_audio_midiin->delay_counter = 0.0;
+  core_audio_midiin->delay_counter = floor(core_audio_midiin->delay);
   core_audio_midiin->tic_counter = 0;
 
   core_audio_midiin->flags |= (AGS_CORE_AUDIO_MIDIIN_INITIALIZED |
@@ -1773,7 +1773,7 @@
 
   pthread_mutex_unlock(core_audio_midiin_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     ags_sequencer_set_note_offset(sequencer,
                                  note_offset + 1);
     
@@ -1784,7 +1784,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(core_audio_midiin_mutex);
 
-    core_audio_midiin->delay_counter = 0.0;
+    core_audio_midiin->delay_counter = delay_counter + 1.0 - delay;
     core_audio_midiin->tact_counter += 1.0;
 
     pthread_mutex_unlock(core_audio_midiin_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/jack/ags_jack_devin.c 
new/gsequencer-2.2.23/ags/audio/jack/ags_jack_devin.c
--- old/gsequencer-2.2.22/ags/audio/jack/ags_jack_devin.c       2019-04-29 
20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/jack/ags_jack_devin.c       2019-07-21 
15:00:50.000000000 +0200
@@ -685,7 +685,7 @@
   
   /* counters */
   jack_devin->tact_counter = 0.0;
-  jack_devin->delay_counter = 0;
+  jack_devin->delay_counter = 0.0;
   jack_devin->tic_counter = 0;
 
   jack_devin->start_note_offset = 0;
@@ -2058,7 +2058,7 @@
 
   /*  */
   jack_devin->tact_counter = 0.0;
-  jack_devin->delay_counter = 0.0;
+  jack_devin->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(jack_devin)));
   jack_devin->tic_counter = 0;
 
   jack_devin->flags |= (AGS_JACK_DEVIN_INITIALIZED |
@@ -2439,7 +2439,7 @@
 
   pthread_mutex_unlock(jack_devin_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1 >= delay){
     if(do_loop &&
        note_offset + 1 == loop_right){
       ags_soundcard_set_note_offset(soundcard,
@@ -2459,7 +2459,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(jack_devin_mutex);
     
-    jack_devin->delay_counter = 0.0;
+    jack_devin->delay_counter = delay_counter + 1.0 - delay;
     jack_devin->tact_counter += 1.0;
 
     pthread_mutex_unlock(jack_devin_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/jack/ags_jack_devout.c 
new/gsequencer-2.2.23/ags/audio/jack/ags_jack_devout.c
--- old/gsequencer-2.2.22/ags/audio/jack/ags_jack_devout.c      2019-04-29 
20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/jack/ags_jack_devout.c      2019-07-21 
15:01:03.000000000 +0200
@@ -685,7 +685,7 @@
   
   /* counters */
   jack_devout->tact_counter = 0.0;
-  jack_devout->delay_counter = 0;
+  jack_devout->delay_counter = 0.0;
   jack_devout->tic_counter = 0;
 
   jack_devout->start_note_offset = 0;
@@ -2046,7 +2046,7 @@
 
   /*  */
   jack_devout->tact_counter = 0.0;
-  jack_devout->delay_counter = 0.0;
+  jack_devout->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(jack_devout)));
   jack_devout->tic_counter = 0;
 
   jack_devout->flags |= (AGS_JACK_DEVOUT_INITIALIZED |
@@ -2425,7 +2425,7 @@
 
   pthread_mutex_unlock(jack_devout_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     if(do_loop &&
        note_offset + 1 == loop_right){
       ags_soundcard_set_note_offset(soundcard,
@@ -2445,7 +2445,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(jack_devout_mutex);
     
-    jack_devout->delay_counter = 0.0;
+    jack_devout->delay_counter = delay_counter + 1.0 - delay;
     jack_devout->tact_counter += 1.0;
 
     pthread_mutex_unlock(jack_devout_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/jack/ags_jack_midiin.c 
new/gsequencer-2.2.23/ags/audio/jack/ags_jack_midiin.c
--- old/gsequencer-2.2.22/ags/audio/jack/ags_jack_midiin.c      2019-04-29 
20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/jack/ags_jack_midiin.c      2019-07-21 
15:07:04.000000000 +0200
@@ -1480,7 +1480,7 @@
   
   /*  */
   jack_midiin->tact_counter = 0.0;
-  jack_midiin->delay_counter = 0.0;
+  jack_midiin->delay_counter = floor(jack_midiin->delay);
   jack_midiin->tic_counter = 0;
 
   jack_midiin->flags |= (AGS_JACK_MIDIIN_INITIALIZED |
@@ -1755,7 +1755,7 @@
 
   pthread_mutex_unlock(jack_midiin_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     ags_sequencer_set_note_offset(sequencer,
                                  note_offset + 1);
     
@@ -1766,7 +1766,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(jack_midiin_mutex);
 
-    jack_midiin->delay_counter = 0.0;
+    jack_midiin->delay_counter = delay_counter + 1.0 - delay;
     jack_midiin->tact_counter += 1.0;
 
     pthread_mutex_unlock(jack_midiin_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/midi/ags_midi_util.h 
new/gsequencer-2.2.23/ags/audio/midi/ags_midi_util.h
--- old/gsequencer-2.2.22/ags/audio/midi/ags_midi_util.h        2019-04-29 
20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/midi/ags_midi_util.h        2019-07-21 
11:59:35.000000000 +0200
@@ -91,8 +91,8 @@
                                         glong bpm,
                                         glong delta_time);
 glong ags_midi_util_offset_to_delta_time(glong division,
-                                  glong tempo,
-                                  glong bpm,
-                                  guint x);
+                                        glong tempo,
+                                        glong bpm,
+                                        guint x);
 
 #endif /*__AGS_MIDI_UTIL_H__*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/pulse/ags_pulse_devin.c 
new/gsequencer-2.2.23/ags/audio/pulse/ags_pulse_devin.c
--- old/gsequencer-2.2.22/ags/audio/pulse/ags_pulse_devin.c     2019-06-01 
20:20:05.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/pulse/ags_pulse_devin.c     2019-07-21 
15:03:09.000000000 +0200
@@ -2040,7 +2040,7 @@
 
   /*  */
   pulse_devin->tact_counter = 0.0;
-  pulse_devin->delay_counter = 0.0;
+  pulse_devin->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(pulse_devin)));
   pulse_devin->tic_counter = 0;
 
   pulse_devin->flags |= (AGS_PULSE_DEVIN_INITIALIZED |
@@ -2424,7 +2424,7 @@
 
   pthread_mutex_unlock(pulse_devin_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     if(do_loop &&
        note_offset + 1 == loop_right){
       ags_soundcard_set_note_offset(soundcard,
@@ -2444,7 +2444,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(pulse_devin_mutex);
     
-    pulse_devin->delay_counter = 0.0;
+    pulse_devin->delay_counter = delay_counter + 1.0 - delay;
     pulse_devin->tact_counter += 1.0;
 
     pthread_mutex_unlock(pulse_devin_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/audio/pulse/ags_pulse_devout.c 
new/gsequencer-2.2.23/ags/audio/pulse/ags_pulse_devout.c
--- old/gsequencer-2.2.22/ags/audio/pulse/ags_pulse_devout.c    2019-06-01 
20:20:05.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/pulse/ags_pulse_devout.c    2019-07-21 
15:02:53.000000000 +0200
@@ -2095,7 +2095,7 @@
 
   /*  */
   pulse_devout->tact_counter = 0.0;
-  pulse_devout->delay_counter = 0.0;
+  pulse_devout->delay_counter = 
floor(ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(pulse_devout)));
   pulse_devout->tic_counter = 0;
 
   pulse_devout->flags |= (AGS_PULSE_DEVOUT_INITIALIZED |
@@ -2694,7 +2694,7 @@
 
   pthread_mutex_unlock(pulse_devout_mutex);
 
-  if((guint) delay_counter + 1 >= (guint) delay){
+  if(delay_counter + 1.0 >= delay){
     if(do_loop &&
        note_offset + 1 == loop_right){
       ags_soundcard_set_note_offset(soundcard,
@@ -2714,7 +2714,7 @@
     /* reset - delay counter */
     pthread_mutex_lock(pulse_devout_mutex);
     
-    pulse_devout->delay_counter = 0.0;
+    pulse_devout->delay_counter = delay_counter + 1.0 - delay;
     pulse_devout->tact_counter += 1.0;
 
     pthread_mutex_unlock(pulse_devout_mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-2.2.22/ags/audio/recall/ags_count_beats_audio_run.c 
new/gsequencer-2.2.23/ags/audio/recall/ags_count_beats_audio_run.c
--- old/gsequencer-2.2.22/ags/audio/recall/ags_count_beats_audio_run.c  
2019-04-29 20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/recall/ags_count_beats_audio_run.c  
2019-07-21 09:43:01.000000000 +0200
@@ -2369,7 +2369,7 @@
 
   pthread_mutex_t *recall_mutex;
 
-  if((guint) floor(delay) != 0){
+  if(delay != 0.0){
     return;
   }
   
@@ -2506,7 +2506,7 @@
 
   pthread_mutex_t *recall_mutex;
 
-  if((guint) floor(delay) != 0){
+  if(delay != 0.0){
     return;
   }
 
@@ -2625,7 +2625,7 @@
 
   pthread_mutex_t *recall_mutex;
 
-  if((guint) floor(delay) != 0){
+  if(delay != 0.0){
     return;
   }
 
@@ -2744,7 +2744,7 @@
 
   pthread_mutex_t *recall_mutex;
 
-  if((guint) floor(delay) != 0){
+  if(delay != 0.0){
     return;
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-2.2.22/ags/audio/recall/ags_delay_audio_run.c 
new/gsequencer-2.2.23/ags/audio/recall/ags_delay_audio_run.c
--- old/gsequencer-2.2.22/ags/audio/recall/ags_delay_audio_run.c        
2019-04-29 20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/recall/ags_delay_audio_run.c        
2019-07-21 14:54:06.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2018 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -439,10 +439,10 @@
   delay_audio_run->hide_ref = 0;
   delay_audio_run->hide_ref_counter = 0;
 
-  delay_audio_run->sequencer_counter = 0;
-  delay_audio_run->notation_counter = 0;
-  delay_audio_run->wave_counter = 0;
-  delay_audio_run->midi_counter = 0;
+  delay_audio_run->sequencer_counter = 0.0;
+  delay_audio_run->notation_counter = 0.0;
+  delay_audio_run->wave_counter = 0.0;
+  delay_audio_run->midi_counter = 0.0;
 }
 
 void
@@ -457,6 +457,8 @@
 {
   AgsDelayAudioRun *delay_audio_run;
 
+  gdouble absolute_delay;
+
   void (*parent_class_run_init_pre)(AgsRecall *recall);
   
   pthread_mutex_t *recall_mutex;
@@ -476,10 +478,17 @@
   parent_class_run_init_pre(recall);
 
   /* run order */
+  absolute_delay = 
ags_soundcard_get_absolute_delay(AGS_SOUNDCARD(recall->output_soundcard));
+  
   pthread_mutex_lock(recall_mutex);
 
   delay_audio_run->hide_ref_counter = 0;
 
+  delay_audio_run->sequencer_counter = floor(absolute_delay);
+  delay_audio_run->notation_counter = floor(absolute_delay);
+  delay_audio_run->wave_counter = floor(absolute_delay);
+  delay_audio_run->midi_counter = floor(absolute_delay);
+
   pthread_mutex_unlock(recall_mutex);
 }
 
@@ -529,10 +538,10 @@
      dependency_ref == 0){
     pthread_mutex_lock(recall_mutex);
   
-    delay_audio_run->sequencer_counter = 0;
-    delay_audio_run->notation_counter = 0;
-    delay_audio_run->wave_counter = 0;
-    delay_audio_run->midi_counter = 0;
+    delay_audio_run->sequencer_counter = 0.0;
+    delay_audio_run->notation_counter = 0.0;
+    delay_audio_run->wave_counter = 0.0;
+    delay_audio_run->midi_counter = 0.0;
 
     pthread_mutex_unlock(recall_mutex);
 
@@ -548,7 +557,6 @@
               NULL);
 
   nth_run = 0;  
-  delay = 0.0;
   attack = ags_soundcard_get_attack(AGS_SOUNDCARD(output_soundcard));
 
   /* sequencer scope */
@@ -556,7 +564,8 @@
     AgsPort *sequencer_delay;
     
     gdouble current_delay;
-    guint sequencer_counter;
+    gdouble sequencer_counter;
+    gboolean alloc_sequencer;
     
     GValue value = { 0, };
     
@@ -577,12 +586,16 @@
     g_object_unref(sequencer_delay);
     
     /* counter */
+    alloc_sequencer = FALSE;
+    
     pthread_mutex_lock(recall_mutex);
     
-    if(delay_audio_run->sequencer_counter + 1 >= (guint) current_delay){
-      delay_audio_run->sequencer_counter = 0;
+    if(delay_audio_run->sequencer_counter + 1.0 >= current_delay){
+      alloc_sequencer = TRUE;
+      
+      delay_audio_run->sequencer_counter = delay_audio_run->sequencer_counter 
+ 1.0 - current_delay;
     }else{
-      delay_audio_run->sequencer_counter += 1;
+      delay_audio_run->sequencer_counter += 1.0;
     }
 
     sequencer_counter = delay_audio_run->sequencer_counter;
@@ -590,7 +603,9 @@
     pthread_mutex_unlock(recall_mutex);
 
     /* sequencer */
-    if(sequencer_counter == 0){
+    if(alloc_sequencer){
+      delay = 0.0;
+      
       /* sequencer speed */
       ags_delay_audio_run_sequencer_alloc_output(delay_audio_run,
                                                 nth_run,
@@ -626,6 +641,7 @@
     
     gdouble current_delay;
     guint notation_counter;
+    gboolean alloc_notation;
     
     GValue value = { 0, };
 
@@ -646,12 +662,16 @@
     g_object_unref(notation_delay);
 
     /* counter */
+    alloc_notation = FALSE;
+    
     pthread_mutex_lock(recall_mutex);
     
-    if(delay_audio_run->notation_counter + 1 >= (guint) current_delay){
-      delay_audio_run->notation_counter = 0;
+    if(delay_audio_run->notation_counter + 1.0 >= current_delay){
+      alloc_notation = TRUE;
+      
+      delay_audio_run->notation_counter = delay_audio_run->notation_counter + 
1.0 - current_delay;
     }else{
-      delay_audio_run->notation_counter += 1;
+      delay_audio_run->notation_counter += 1.0;
     }
 
     notation_counter = delay_audio_run->notation_counter;
@@ -659,7 +679,9 @@
     pthread_mutex_unlock(recall_mutex);
 
     /* notation */
-    if(notation_counter == 0){
+    if(alloc_notation){
+      delay = 0.0;
+      
       /* notation speed */
       ags_delay_audio_run_notation_alloc_output(delay_audio_run,
                                                nth_run,
@@ -695,6 +717,7 @@
     
     gdouble current_delay;
     guint wave_counter;
+    gboolean alloc_wave;
     
     GValue value = { 0, };
 
@@ -715,12 +738,16 @@
     g_object_unref(wave_delay);
 
     /* counter */
+    alloc_wave = FALSE;
+    
     pthread_mutex_lock(recall_mutex);
     
-    if(delay_audio_run->wave_counter + 1 >= (guint) current_delay){
-      delay_audio_run->wave_counter = 0;
+    if(delay_audio_run->wave_counter + 1.0 >= current_delay){
+      alloc_wave = TRUE;
+      
+      delay_audio_run->wave_counter = delay_audio_run->wave_counter + 1.0 - 
current_delay;
     }else{
-      delay_audio_run->wave_counter += 1;
+      delay_audio_run->wave_counter += 1.0;
     }
 
     wave_counter = delay_audio_run->wave_counter;
@@ -728,7 +755,9 @@
     pthread_mutex_unlock(recall_mutex);
 
     /* wave */
-    if(wave_counter == 0){
+    if(alloc_wave){
+      delay = 0.0;
+      
       /* wave speed */
       ags_delay_audio_run_wave_alloc_output(delay_audio_run,
                                            nth_run,
@@ -764,6 +793,7 @@
     
     gdouble current_delay;
     guint midi_counter;
+    gboolean alloc_midi;
     
     GValue value = { 0, };
 
@@ -784,12 +814,16 @@
     g_object_unref(midi_delay);
 
     /* counter */
+    alloc_midi = FALSE;
+    
     pthread_mutex_lock(recall_mutex);
     
-    if(delay_audio_run->midi_counter + 1 >= (guint) current_delay){
-      delay_audio_run->midi_counter = 0;
+    if(delay_audio_run->midi_counter + 1.0 >= current_delay){
+      alloc_midi = TRUE;
+      
+      delay_audio_run->midi_counter = delay_audio_run->midi_counter + 1.0 - 
current_delay;
     }else{
-      delay_audio_run->midi_counter += 1;
+      delay_audio_run->midi_counter += 1.0;
     }
 
     midi_counter = delay_audio_run->midi_counter;
@@ -797,7 +831,9 @@
     pthread_mutex_unlock(recall_mutex);
 
     /* midi */
-    if(midi_counter == 0){
+    if(alloc_midi){
+      delay = 0.0;
+      
       /* midi speed */
       ags_delay_audio_run_midi_alloc_output(delay_audio_run,
                                            nth_run,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-2.2.22/ags/audio/recall/ags_delay_audio_run.h 
new/gsequencer-2.2.23/ags/audio/recall/ags_delay_audio_run.h
--- old/gsequencer-2.2.22/ags/audio/recall/ags_delay_audio_run.h        
2019-04-29 20:06:19.000000000 +0200
+++ new/gsequencer-2.2.23/ags/audio/recall/ags_delay_audio_run.h        
2019-07-21 09:33:48.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2018 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -47,10 +47,10 @@
   guint hide_ref;
   guint hide_ref_counter;
 
-  guint sequencer_counter;
-  guint notation_counter;  
-  guint wave_counter;  
-  guint midi_counter;
+  gdouble sequencer_counter;
+  gdouble notation_counter;  
+  gdouble wave_counter;  
+  gdouble midi_counter;
 };
 
 struct _AgsDelayAudioRunClass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/widget/ags_cartesian.c 
new/gsequencer-2.2.23/ags/widget/ags_cartesian.c
--- old/gsequencer-2.2.22/ags/widget/ags_cartesian.c    2019-04-29 
20:06:21.000000000 +0200
+++ new/gsequencer-2.2.23/ags/widget/ags_cartesian.c    2019-07-20 
21:45:08.000000000 +0200
@@ -933,13 +933,13 @@
 
   GtkStyle *cartesian_style;
   cairo_t *cr;
-
-  cairo_text_extents_t te_x_unit, te_y_unit;
-
+  
   GList *list;
   
   unsigned char *data;
   guint32 *data_ptr;
+
+  gchar *font_name;
   
   gdouble x, y;
   gdouble x_offset, y_offset;
@@ -1113,50 +1113,80 @@
   }
 
   void ags_cartesian_draw_x_label(){
-    cairo_text_extents_t te_x_label;
-
     guint i;
 
     for(i = 0; i < width / cartesian->x_label_step_width; i++){
+      PangoLayout *layout;
+      PangoFontDescription *desc;
+
+      PangoRectangle ink_rect, logical_rect;
+
       if(cartesian->x_label[i] == NULL){
        break;
       }
       
-      cairo_text_extents(cr,
-                        cartesian->x_label[i],
-                        &te_x_label);
+      layout = pango_cairo_create_layout(cr);
+      pango_layout_set_text(layout,
+                           cartesian->x_label[i],
+                           -1);
+      desc = pango_font_description_from_string(font_name);
+      pango_font_description_set_size(desc,
+                                     cartesian->font_size * PANGO_SCALE);
+      pango_layout_set_font_description(layout,
+                                       desc);
+      pango_font_description_free(desc);    
+
+      pango_layout_get_extents(layout,
+                              &ink_rect,
+                              &logical_rect);  
 
       cairo_move_to(cr,
                    cartesian->x_margin + cartesian->x_label_start + (i * 
cartesian->x_label_step_width) + cartesian->font_size / 3.0,
-                   cartesian->y_margin + height + cartesian->y_start + 
cartesian->font_size + te_x_label.height);
+                   cartesian->y_margin + height + cartesian->y_start + 
cartesian->font_size + (logical_rect.height / PANGO_SCALE));
       
-      cairo_show_text(cr,
-                     cartesian->x_label[i]);
+      pango_cairo_show_layout(cr,
+                             layout);
+      
+      g_object_unref(layout);
     }
-
-    cairo_stroke(cr);
   }
 
   void ags_cartesian_draw_y_label(){
-    cairo_text_extents_t te_y_label;
-
     guint i;
 
     for(i = 0; i < height / cartesian->y_label_step_height; i++){
+      PangoLayout *layout;
+      PangoFontDescription *desc;
+
+      PangoRectangle ink_rect, logical_rect;
+
       if(cartesian->y_label[i] == NULL){
        break;
       }
 
-      cairo_text_extents(cr,
-                        cartesian->y_label[i],
-                        &te_y_label);
+      layout = pango_cairo_create_layout(cr);
+      pango_layout_set_text(layout,
+                           cartesian->y_label[i],
+                           -1);
+      desc = pango_font_description_from_string(font_name);
+      pango_font_description_set_size(desc,
+                                     cartesian->font_size * PANGO_SCALE);
+      pango_layout_set_font_description(layout,
+                                       desc);
+      pango_font_description_free(desc);    
+
+      pango_layout_get_extents(layout,
+                              &ink_rect,
+                              &logical_rect);  
 
       cairo_move_to(cr,
                    cartesian->x_margin - cartesian->x_start + 
cartesian->font_size / 2.0,
                    cartesian->y_margin + height - cartesian->y_label_start - 
(i * cartesian->y_label_step_height) - cartesian->font_size / 3.0);
+            
+      pango_cairo_show_layout(cr,
+                             layout);
       
-      cairo_show_text(cr,
-                     cartesian->y_label[i]);
+      g_object_unref(layout);
     }
 
     cairo_stroke(cr);
@@ -1464,6 +1494,10 @@
   }
   
   /* entry point */
+  if(!AGS_IS_CARTESIAN(cartesian)){
+    return;
+  }
+  
   widget = GTK_WIDGET(cartesian);
   cartesian_style = gtk_widget_get_style(widget);
 
@@ -1472,6 +1506,10 @@
   if(cr == NULL){
     return;
   }
+
+  g_object_get(gtk_settings_get_default(),
+              "gtk-font-name", &font_name,
+              NULL);
   
   /* clear bg */
   cairo_set_source_rgb(cr,
@@ -1567,36 +1605,70 @@
 
   /* x unit */
   if((AGS_CARTESIAN_X_UNIT & (cartesian->flags)) != 0){
-    cairo_text_extents(cr,
-                      cartesian->x_unit,
-                      &te_x_unit);
+    PangoLayout *layout;
+    PangoFontDescription *desc;
+
+    PangoRectangle ink_rect, logical_rect;
+
+    layout = pango_cairo_create_layout(cr);
+    pango_layout_set_text(layout,
+                         cartesian->x_unit,
+                         -1);
+    desc = pango_font_description_from_string(font_name);
+    pango_font_description_set_size(desc,
+                                   cartesian->font_size * PANGO_SCALE);
+    pango_layout_set_font_description(layout,
+                                     desc);
+    pango_font_description_free(desc);    
+
+    pango_layout_get_extents(layout,
+                            &ink_rect,
+                            &logical_rect);  
 
     cairo_move_to(cr,
-                 cartesian->x_margin - te_x_unit.width - 3.0,
+                 cartesian->x_margin - (logical_rect.width / PANGO_SCALE) - 
3.0,
                  cartesian->y_margin + height + cartesian->y_start);
       
-    cairo_show_text(cr,
-                   cartesian->x_unit);
-
-    cairo_stroke(cr);
+    pango_cairo_show_layout(cr,
+                           layout);
+      
+    g_object_unref(layout);
   }
   
   /* y unit */
   if((AGS_CARTESIAN_Y_UNIT & (cartesian->flags)) != 0){
-    cairo_text_extents(cr,
-                      cartesian->y_unit,
-                      &te_y_unit);
+    PangoLayout *layout;
+    PangoFontDescription *desc;
+
+    PangoRectangle ink_rect, logical_rect;
+
+    layout = pango_cairo_create_layout(cr);
+    pango_layout_set_text(layout,
+                         cartesian->y_unit,
+                         -1);
+    desc = pango_font_description_from_string(font_name);
+    pango_font_description_set_size(desc,
+                                   cartesian->font_size * PANGO_SCALE);
+    pango_layout_set_font_description(layout,
+                                     desc);
+    pango_font_description_free(desc);    
+
+    pango_layout_get_extents(layout,
+                            &ink_rect,
+                            &logical_rect);  
 
     cairo_move_to(cr,
                  cartesian->x_margin - cartesian->x_start,
-                 cartesian->y_margin + height + te_y_unit.height + 3.0);
+                 cartesian->y_margin + height + (logical_rect.height / 
PANGO_SCALE) + 3.0);
       
-    cairo_show_text(cr,
-                   cartesian->y_unit);
-
-    cairo_stroke(cr);
+    pango_cairo_show_layout(cr,
+                           layout);
+      
+    g_object_unref(layout);
   }
   
+  g_free(font_name);
+
   /* pop group */
   cairo_pop_group_to_source(cr);
   
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/widget/ags_dial.c 
new/gsequencer-2.2.23/ags/widget/ags_dial.c
--- old/gsequencer-2.2.22/ags/widget/ags_dial.c 2019-07-14 15:21:37.000000000 
+0200
+++ new/gsequencer-2.2.23/ags/widget/ags_dial.c 2019-07-20 21:31:25.000000000 
+0200
@@ -1517,7 +1517,7 @@
   GtkStyle *dial_style;
   cairo_t *cr;
   cairo_text_extents_t te_up, te_down;
-
+  
   gdouble button_width, button_height, margin_left, margin_right;
   gdouble radius, outline_strength;
   guint width, height;
@@ -1555,13 +1555,7 @@
   
   padding_top = (GTK_WIDGET(dial)->allocation.height - height) / 2;
   padding_left = (GTK_WIDGET(dial)->allocation.width - width) / 2;
-
-  cairo_select_font_face(cr, "Georgia",
-                        CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
-  cairo_set_font_size (cr, (gdouble) dial->font_size);
-  cairo_text_extents (cr, "-", &te_down);
-  cairo_text_extents (cr, "+", &te_up);
-
+  
   /* clear bg */
   cairo_set_source_rgb(cr,
                       dial_style->fg[0].red / white_gc,
@@ -1574,6 +1568,19 @@
   cairo_fill(cr);
 
   if((AGS_DIAL_WITH_BUTTONS & (dial->flags)) != 0){
+    PangoLayout *layout;
+    PangoFontDescription *desc;
+
+    PangoRectangle ink_rect, logical_rect;
+    
+    gchar *font_name;
+
+    static const gchar *text = "-";
+
+    g_object_get(gtk_settings_get_default(),
+                "gtk-font-name", &font_name,
+                NULL);
+        
     /* bg */
     cairo_set_source_rgb(cr,
                         dial_style->bg[0].red / white_gc,
@@ -1599,14 +1606,48 @@
     cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER);
     cairo_stroke(cr);
 
+    /* text */
+    layout = pango_cairo_create_layout(cr);
+    pango_layout_set_text(layout,
+                         text,
+                         -1);
+    desc = pango_font_description_from_string(font_name);
+    pango_font_description_set_size(desc,
+                                   dial->font_size * PANGO_SCALE);
+    pango_layout_set_font_description(layout,
+                                     desc);
+    pango_font_description_free(desc);    
+
+    pango_layout_get_extents(layout,
+                             &ink_rect,
+                             &logical_rect);
+
     cairo_move_to(cr,
-                 padding_left + 1.0 + 0.5 - te_down.width / 2.0 - 
te_down.x_bearing + button_width / 2.25,
-                 padding_top + 0.5 - te_down.height / 2.0 - te_down.y_bearing 
+ (radius * 2.0) - button_height / 2.0 + outline_strength);
-    cairo_show_text(cr, "-");
-  }
+                 padding_left + 1.0 + 0.5 - (logical_rect.width / PANGO_SCALE) 
/ 2.0 + button_width / 2.25,
+                 padding_top + 0.5 - (logical_rect.height / PANGO_SCALE) / 2.0 
+ (radius * 2.0) - button_height / 2.0 + outline_strength - 1.0);
+
+    pango_cairo_show_layout(cr,
+                           layout);
 
+    g_object_unref(layout);
+
+    g_free(font_name);
+  }
   
   if((AGS_DIAL_WITH_BUTTONS & (dial->flags)) != 0){
+    PangoLayout *layout;
+    PangoFontDescription *desc;
+
+    PangoRectangle ink_rect, logical_rect;
+    
+    gchar *font_name;
+
+    static const gchar *text = "+";
+
+    g_object_get(gtk_settings_get_default(),
+                "gtk-font-name", &font_name,
+                NULL);
+    
     /* bg */
     cairo_set_source_rgb(cr,
                         dial_style->bg[0].red / white_gc,
@@ -1632,10 +1673,32 @@
     cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER);
     cairo_stroke(cr);
 
-    cairo_move_to (cr,
-                  padding_left + 1.0 + 0.5 - te_up.width / 2.0 - 
te_up.x_bearing + (radius * 2.0) + margin_left + margin_right + button_width + 
button_width / 2.25,
-                  padding_top + 0.5 - te_up.height / 2.0 - te_up.y_bearing + 
(radius * 2.0) - button_height / 2.0 + outline_strength);
-    cairo_show_text (cr, "+");
+    /* text */
+    layout = pango_cairo_create_layout(cr);
+    pango_layout_set_text(layout,
+                         text,
+                         -1);
+    desc = pango_font_description_from_string(font_name);
+    pango_font_description_set_size(desc,
+                                   dial->font_size * PANGO_SCALE);
+    pango_layout_set_font_description(layout,
+                                     desc);
+    pango_font_description_free(desc);    
+
+    pango_layout_get_extents(layout,
+                             &ink_rect,
+                             &logical_rect);
+
+    cairo_move_to(cr,
+                 padding_left + 1.0 + 0.5 - (logical_rect.width / PANGO_SCALE) 
/ 2.0 + (radius * 2.0) + margin_left + margin_right + button_width + 
button_width / 2.25,
+                 padding_top + 0.5 - (logical_rect.height / PANGO_SCALE) / 2.0 
+ (radius * 2.0) - button_height / 2.0 + outline_strength - 1.0);
+
+    pango_cairo_show_layout(cr,
+                           layout);
+
+    g_object_unref(layout);
+
+    g_free(font_name);
   }
 
   /* border fill * /
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/widget/ags_level.c 
new/gsequencer-2.2.23/ags/widget/ags_level.c
--- old/gsequencer-2.2.22/ags/widget/ags_level.c        2019-07-18 
10:58:57.000000000 +0200
+++ new/gsequencer-2.2.23/ags/widget/ags_level.c        2019-07-20 
21:30:59.000000000 +0200
@@ -1142,34 +1142,17 @@
 {
   cairo_t *cr;
 
-  gchar *str;
-  
+  PangoLayout *layout;
+  PangoFontDescription *desc;
+
+  PangoRectangle ink_rect, logical_rect;
+    
+  gchar *font_name;
+  gchar *text;
+
   guint width, height;
   guint x_start, y_start;
 
-  auto void ags_level_draw_string(cairo_t *cr, gchar *str);
-  
-  void ags_level_draw_string(cairo_t *cr, gchar *str){
-    PangoLayout *layout;
-    PangoFontDescription *desc;
-
-    layout = pango_cairo_create_layout(cr);
-    pango_layout_set_text(layout, str, -1);
-    desc = pango_font_description_from_string("Sans Slant"); 
//pango_font_description_copy_static("Georgia Bold 11");
-    pango_font_description_set_size(desc,
-                                   level->font_size * PANGO_SCALE);
-    pango_layout_set_font_description(layout, desc);
-    pango_font_description_free(desc);
-
-    pango_cairo_update_layout(cr, layout);
-    pango_cairo_show_layout(cr, layout);
-
-#ifndef __APPLE__
-    //    pango_fc_font_map_cache_clear(pango_cairo_font_map_get_default());
-#endif
-    g_object_unref(layout);
-  }
-  
   static const gdouble white_gc = 65535.0;
 
   if(!AGS_IS_LEVEL(level)){
@@ -1181,6 +1164,10 @@
   if(cr == NULL){
     return;
   }
+
+  g_object_get(gtk_settings_get_default(),
+              "gtk-font-name", &font_name,
+              NULL);
   
   width = GTK_WIDGET(level)->allocation.width;
   height = GTK_WIDGET(level)->allocation.height;
@@ -1213,24 +1200,46 @@
   //TODO:JK: implement me
 
   /* show samplerate */
-  str = g_strdup_printf("%u [Hz]", level->samplerate);
+  text = g_strdup_printf("%u [Hz]", level->samplerate);
+
+  layout = pango_cairo_create_layout(cr);
+  pango_layout_set_text(layout,
+                       text,
+                       -1);
+  desc = pango_font_description_from_string(font_name);
+  pango_font_description_set_size(desc,
+                                 level->font_size * PANGO_SCALE);
+  pango_layout_set_font_description(layout,
+                                   desc);
+  pango_font_description_free(desc);    
+
+  pango_layout_get_extents(layout,
+                          &ink_rect,
+                          &logical_rect);
   
   cairo_set_source_rgb(cr,
                       1.0, 1.0, 1.0);
 
   if(level->layout == AGS_LEVEL_LAYOUT_VERTICAL){
     cairo_move_to(cr,
-                 x_start + level->font_size, y_start + height - 1.0);
+                 x_start + (logical_rect.height / PANGO_SCALE) / 2.0,
+                 y_start + height - 1.0);
     cairo_rotate(cr,
                 2 * M_PI * 0.75);
   }else{
     cairo_move_to(cr,
-                 x_start + level->font_size, y_start + 1.0);
+                 x_start,
+                 y_start + (logical_rect.height / PANGO_SCALE) / 2.0 + 1.0);
   }
-  
-  ags_level_draw_string(cr,
-                       str);
 
+  pango_cairo_show_layout(cr,
+                         layout);
+
+  g_object_unref(layout);
+
+  g_free(font_name);
+  g_free(text);
+  
   cairo_pop_group_to_source(cr);
   cairo_paint(cr);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/widget/ags_level.h 
new/gsequencer-2.2.23/ags/widget/ags_level.h
--- old/gsequencer-2.2.22/ags/widget/ags_level.h        2019-07-18 
10:58:57.000000000 +0200
+++ new/gsequencer-2.2.23/ags/widget/ags_level.h        2019-07-20 
21:22:44.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2017 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/widget/ags_ruler.c 
new/gsequencer-2.2.23/ags/widget/ags_ruler.c
--- old/gsequencer-2.2.22/ags/widget/ags_ruler.c        2019-07-18 
10:58:57.000000000 +0200
+++ new/gsequencer-2.2.23/ags/widget/ags_ruler.c        2019-07-20 
21:32:12.000000000 +0200
@@ -420,8 +420,8 @@
   GtkWidget *widget;
 
   cairo_t *cr;
-
-  gchar *str;
+    
+  gchar *font_name;
 
   gdouble tact_factor, zoom_factor;
   gdouble tact;
@@ -431,27 +431,11 @@
   guint x0;
   guint z;
   guint i, i_stop;
-
-  auto void ags_ruler_draw_string(cairo_t *cr, gchar *str);
-
-  void ags_ruler_draw_string(cairo_t *cr, gchar *str){
-    PangoLayout *layout;
-    PangoFontDescription *desc;
-
-    layout = pango_cairo_create_layout(cr);
-    pango_layout_set_text(layout, str, -1);
-    desc = pango_font_description_from_string("Sans Slant"); 
//pango_font_description_copy_static("Georgia Bold 11");
-    pango_font_description_set_size(desc,
-                                   ruler->font_size * PANGO_SCALE);
-    pango_layout_set_font_description(layout, desc);
-    pango_font_description_free(desc);
-
-    pango_cairo_update_layout(cr, layout);
-    pango_cairo_show_layout(cr, layout);
-
-    g_object_unref(layout);
-  }
   
+  if(!AGS_IS_RULER(ruler)){
+    return;
+  }
+
   widget = GTK_WIDGET(ruler);
 
   cr = gdk_cairo_create(widget->window);
@@ -459,7 +443,11 @@
   if(cr == NULL){
     return;
   }
-  
+
+  g_object_get(gtk_settings_get_default(),
+              "gtk-font-name", &font_name,
+              NULL);
+    
   cairo_surface_flush(cairo_get_target(cr));
   cairo_push_group(cr);
 
@@ -497,6 +485,31 @@
                  (double) (widget->allocation.height));
     
     if(tact < 1.0){
+      PangoLayout *layout;
+      PangoFontDescription *desc;
+
+      PangoRectangle ink_rect, logical_rect;
+
+      gchar *text;
+
+      text = g_strdup_printf("%u",
+                            (guint) ((gdouble) z / tact));
+
+      layout = pango_cairo_create_layout(cr);
+      pango_layout_set_text(layout,
+                           text,
+                           -1);
+      desc = pango_font_description_from_string(font_name);
+      pango_font_description_set_size(desc,
+                                     ruler->font_size * PANGO_SCALE);
+      pango_layout_set_font_description(layout,
+                                       desc);
+      pango_font_description_free(desc);    
+
+      pango_layout_get_extents(layout,
+                              &ink_rect,
+                              &logical_rect);  
+      
       /* draw large step */
       cairo_set_line_width(cr,
                           1.75);
@@ -510,13 +523,39 @@
                    (double) (i * step - x0),
                    (double) (widget->allocation.height - ruler->large_step - 
(ruler->font_size + AGS_RULER_FREE_SPACE)));
       
-      str = g_strdup_printf("%u",
-                           (guint) ((gdouble) z / tact));
-      ags_ruler_draw_string(cr, str);
+      pango_cairo_show_layout(cr,
+                             layout);
       
-      g_free(str);
+      g_object_unref(layout);
+      
+      g_free(text);
     }else{
       if(z % (guint) floor(tact) == 0){
+       PangoLayout *layout;
+       PangoFontDescription *desc;
+
+       PangoRectangle ink_rect, logical_rect;
+
+       gchar *text;
+
+       text = g_strdup_printf("%u",
+                              (guint) ((gdouble) z / tact));
+       
+       layout = pango_cairo_create_layout(cr);
+       pango_layout_set_text(layout,
+                             text,
+                             -1);
+       desc = pango_font_description_from_string(font_name);
+       pango_font_description_set_size(desc,
+                                       ruler->font_size * PANGO_SCALE);
+       pango_layout_set_font_description(layout,
+                                         desc);
+       pango_font_description_free(desc);    
+
+       pango_layout_get_extents(layout,
+                                &ink_rect,
+                                &logical_rect);
+
        /* draw large step */
        cairo_set_line_width(cr,
                             1.75);
@@ -529,12 +568,13 @@
        cairo_move_to(cr,
                      (double) (i * step - x0),
                      (double) (widget->allocation.height - ruler->large_step - 
(ruler->font_size + AGS_RULER_FREE_SPACE)));
-
-       str = g_strdup_printf("%u",
-                             (guint) ((gdouble) z / tact));
-       ags_ruler_draw_string(cr, str);
       
-       g_free(str);
+       pango_cairo_show_layout(cr,
+                               layout);
+      
+       g_object_unref(layout);
+      
+       g_free(text);
       }else{
        /* draw small step */
        cairo_set_line_width(cr,
@@ -549,6 +589,8 @@
     cairo_stroke(cr);
   }
 
+  g_free(font_name);
+
   cairo_pop_group_to_source(cr);
   cairo_paint(cr);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/widget/ags_scale.c 
new/gsequencer-2.2.23/ags/widget/ags_scale.c
--- old/gsequencer-2.2.22/ags/widget/ags_scale.c        2019-07-18 
10:58:57.000000000 +0200
+++ new/gsequencer-2.2.23/ags/widget/ags_scale.c        2019-07-20 
21:31:08.000000000 +0200
@@ -1207,31 +1207,15 @@
 {
   cairo_t *cr;
 
+  PangoLayout *layout;
+  PangoFontDescription *desc;
+
+  PangoRectangle ink_rect, logical_rect;
+    
+  gchar *font_name;
+
   guint width, height;
   guint x_start, y_start;
-
-  auto void ags_scale_draw_string(cairo_t *cr, gchar *str);
-  
-  void ags_scale_draw_string(cairo_t *cr, gchar *str){
-    PangoLayout *layout;
-    PangoFontDescription *desc;
-
-    layout = pango_cairo_create_layout(cr);
-    pango_layout_set_text(layout, str, -1);
-    desc = pango_font_description_from_string("Sans Slant"); 
//pango_font_description_copy_static("Georgia Bold 11");
-    pango_font_description_set_size(desc,
-                                   scale->font_size * PANGO_SCALE);
-    pango_layout_set_font_description(layout, desc);
-    pango_font_description_free(desc);
-
-    pango_cairo_update_layout(cr, layout);
-    pango_cairo_show_layout(cr, layout);
-
-#ifndef __APPLE__
-    //    pango_fc_font_map_cache_clear(pango_cairo_font_map_get_default());
-#endif
-    g_object_unref(layout);
-  }
   
   static const gdouble white_gc = 65535.0;
 
@@ -1244,6 +1228,10 @@
   if(cr == NULL){
     return;
   }
+
+  g_object_get(gtk_settings_get_default(),
+              "gtk-font-name", &font_name,
+              NULL);
   
   width = GTK_WIDGET(scale)->allocation.width;
   height = GTK_WIDGET(scale)->allocation.height;
@@ -1276,6 +1264,21 @@
   //TODO:JK: implement me
 
   /* show control name */
+  layout = pango_cairo_create_layout(cr);
+  pango_layout_set_text(layout,
+                       scale->control_name,
+                       -1);
+  desc = pango_font_description_from_string(font_name);
+  pango_font_description_set_size(desc,
+                                 scale->font_size * PANGO_SCALE);
+  pango_layout_set_font_description(layout,
+                                   desc);
+  pango_font_description_free(desc);    
+
+  pango_layout_get_extents(layout,
+                          &ink_rect,
+                          &logical_rect);
+
   cairo_set_source_rgb(cr,
                       1.0, 1.0, 1.0);
 
@@ -1289,8 +1292,12 @@
                  x_start + scale->font_size, y_start + 1.0);
   }
   
-  ags_scale_draw_string(cr,
-                       scale->control_name);
+  pango_cairo_show_layout(cr,
+                         layout);
+
+  g_object_unref(layout);
+
+  g_free(font_name);
 
   cairo_pop_group_to_source(cr);
   cairo_paint(cr);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/ags/widget/ags_scale.h 
new/gsequencer-2.2.23/ags/widget/ags_scale.h
--- old/gsequencer-2.2.22/ags/widget/ags_scale.h        2019-07-18 
10:58:57.000000000 +0200
+++ new/gsequencer-2.2.23/ags/widget/ags_scale.h        2019-07-20 
21:22:31.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2017 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/configure 
new/gsequencer-2.2.23/configure
--- old/gsequencer-2.2.22/configure     2019-07-18 10:59:53.000000000 +0200
+++ new/gsequencer-2.2.23/configure     2019-07-21 16:45:07.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gsequencer 2.2.22.
+# Generated by GNU Autoconf 2.69 for gsequencer 2.2.23.
 #
 # Report bugs to <[email protected]>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='gsequencer'
 PACKAGE_TARNAME='gsequencer'
-PACKAGE_VERSION='2.2.22'
-PACKAGE_STRING='gsequencer 2.2.22'
+PACKAGE_VERSION='2.2.23'
+PACKAGE_STRING='gsequencer 2.2.23'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1508,7 +1508,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures gsequencer 2.2.22 to adapt to many kinds of systems.
+\`configure' configures gsequencer 2.2.23 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1583,7 +1583,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gsequencer 2.2.22:";;
+     short | recursive ) echo "Configuration of gsequencer 2.2.23:";;
    esac
   cat <<\_ACEOF
 
@@ -1790,7 +1790,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gsequencer configure 2.2.22
+gsequencer configure 2.2.23
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2388,7 +2388,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by gsequencer $as_me 2.2.22, which was
+It was created by gsequencer $as_me 2.2.23, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3255,7 +3255,7 @@
 
 # Define the identity of the package.
  PACKAGE='gsequencer'
- VERSION='2.2.22'
+ VERSION='2.2.23'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -23891,7 +23891,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gsequencer $as_me 2.2.22, which was
+This file was extended by gsequencer $as_me 2.2.23, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23957,7 +23957,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-gsequencer config.status 2.2.22
+gsequencer config.status 2.2.23
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/configure.ac 
new/gsequencer-2.2.23/configure.ac
--- old/gsequencer-2.2.22/configure.ac  2019-07-18 10:59:31.000000000 +0200
+++ new/gsequencer-2.2.23/configure.ac  2019-07-21 16:44:14.000000000 +0200
@@ -8,7 +8,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.69])
-AC_INIT([gsequencer],[2.2.22],[[email protected]])
+AC_INIT([gsequencer],[2.2.23],[[email protected]])
 AM_INIT_AUTOMAKE([subdir-objects])
 AC_CONFIG_SRCDIR([ags/config.h.in])
 AC_CONFIG_HEADERS([ags/config.h])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.22/po/gsequencer.pot 
new/gsequencer-2.2.23/po/gsequencer.pot
--- old/gsequencer-2.2.22/po/gsequencer.pot     2019-07-18 11:01:54.000000000 
+0200
+++ new/gsequencer-2.2.23/po/gsequencer.pot     2019-07-21 16:45:46.000000000 
+0200
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gsequencer 2.2.22\n"
+"Project-Id-Version: gsequencer 2.2.23\n"
 "Report-Msgid-Bugs-To: [email protected]\n"
-"POT-Creation-Date: 2019-07-18 11:01+0200\n"
+"POT-Creation-Date: 2019-07-21 16:45+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <[email protected]>\n"


Reply via email to