[beast: 10/13] BST: adjust to use EditableSample methods
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast: 10/13] BST: adjust to use EditableSample methods
- Date: Thu, 31 Aug 2017 23:04:09 +0000 (UTC)
commit bcd5d692fa302a2afa5860be9cb53421aeb226d0
Author: Tim Janik <timj gnu org>
Date: Fri Sep 1 00:13:10 2017 +0200
BST: adjust to use EditableSample methods
Signed-off-by: Tim Janik <timj gnu org>
beast-gtk/bstqsampler.cc | 46 ++++++++------------
beast-gtk/bstqsampler.hh | 4 +-
beast-gtk/bstsampleeditor.cc | 99 +++++++-----------------------------------
beast-gtk/bstsampleeditor.hh | 8 ++--
beast-gtk/bstwaveeditor.cc | 35 ++++++++------
beast-gtk/bstwaveeditor.hh | 6 +-
6 files changed, 62 insertions(+), 136 deletions(-)
---
diff --git a/beast-gtk/bstqsampler.cc b/beast-gtk/bstqsampler.cc
index 3db9336..6ea3a43 100644
--- a/beast-gtk/bstqsampler.cc
+++ b/beast-gtk/bstqsampler.cc
@@ -1313,14 +1313,14 @@ bst_qsampler_set_adjustment (BstQSampler *qsampler,
}
-typedef struct {
- SfiProxy esample;
- guint nth_channel;
- guint n_channels;
-} ESampleFiller;
+struct ESampleFiller {
+ Bse::EditableSampleH esample;
+ uint nth_channel = 0;
+ uint n_channels = 0;
+};
static guint
-qsampler_esample_filler (gpointer data,
+qsampler_esample_filler (void *data,
guint voffset,
gdouble offset_scale,
guint block_size,
@@ -1328,10 +1328,10 @@ qsampler_esample_filler (gpointer data,
BstQSamplerPeak *values,
BstQSampler *qsampler)
{
- ESampleFiller *fill = (ESampleFiller*) data;
+ ESampleFiller *fill = static_cast<ESampleFiller*> (data);
BseFlo4tSeq *fseq;
voffset = voffset * fill->n_channels + fill->nth_channel;
- fseq = bse_editable_sample_collect_stats (fill->esample,
+ fseq = bse_editable_sample_collect_stats (fill->esample.proxy_id(),
voffset,
offset_scale * fill->n_channels,
block_size * fill->n_channels,
@@ -1347,33 +1347,23 @@ qsampler_esample_filler (gpointer data,
return i;
}
-static void
-free_esample_filler (gpointer data)
-{
- ESampleFiller *fill = (ESampleFiller*) data;
-
- bse_item_unuse (fill->esample);
- g_free (data);
-}
-
void
-bst_qsampler_set_source_from_esample (BstQSampler *qsampler,
- SfiProxy esample,
- guint nth_channel)
+bst_qsampler_set_source_from_esample (BstQSampler *qsampler, Bse::EditableSampleH esample, uint nth_channel)
{
- ESampleFiller *fill;
-
assert_return (BST_IS_QSAMPLER (qsampler));
- assert_return (BSE_IS_EDITABLE_SAMPLE (esample));
+ assert_return (esample != NULL);
- fill = g_new (ESampleFiller, 1);
+ ESampleFiller *fill = new ESampleFiller();
fill->esample = esample;
- bse_item_use (fill->esample);
- fill->n_channels = bse_editable_sample_get_n_channels (fill->esample);
+ fill->n_channels = fill->esample.get_n_channels();
fill->nth_channel = nth_channel;
+ auto delete_esample_filler = [] (void *data) {
+ ESampleFiller *fill = static_cast<ESampleFiller*> (data);
+ delete fill;
+ };
bst_qsampler_set_source (qsampler,
- bse_editable_sample_get_length (fill->esample) / fill->n_channels,
+ fill->esample.get_length() / fill->n_channels,
qsampler_esample_filler,
- fill, free_esample_filler);
+ fill, delete_esample_filler);
}
diff --git a/beast-gtk/bstqsampler.hh b/beast-gtk/bstqsampler.hh
index f6e1172..1f75d85 100644
--- a/beast-gtk/bstqsampler.hh
+++ b/beast-gtk/bstqsampler.hh
@@ -173,8 +173,6 @@ void bst_qsampler_set_draw_mode (BstQSampler *qsampler, Bst::QSamplerDrawMode
void bst_qsampler_set_adjustment (BstQSampler *qsampler,
GtkAdjustment *adjustment);
-void bst_qsampler_set_source_from_esample (BstQSampler *qsampler,
- SfiProxy esample,
- guint nth_channel);
+void bst_qsampler_set_source_from_esample (BstQSampler *qsampler, Bse::EditableSampleH esample, uint
nth_channel);
#endif /* __BST_QSAMPLER_H__ */
diff --git a/beast-gtk/bstsampleeditor.cc b/beast-gtk/bstsampleeditor.cc
index 3b55e8a..17ca430 100644
--- a/beast-gtk/bstsampleeditor.cc
+++ b/beast-gtk/bstsampleeditor.cc
@@ -6,27 +6,11 @@
#include <gdk/gdkkeysyms.h>
-/* --- parameters --- */
-enum
-{
- PARAM_0,
- PARAM_SAMPLE
-};
-
-
/* --- prototypes --- */
static void bst_sample_editor_class_init (BstSampleEditorClass *klass);
static void bst_sample_editor_init (BstSampleEditor *sample_editor);
static void bst_sample_editor_destroy (GtkObject *object);
static void bst_sample_editor_finalize (GObject *object);
-static void bst_sample_editor_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void bst_sample_editor_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
/* --- static variables --- */
@@ -68,83 +52,31 @@ bst_sample_editor_class_init (BstSampleEditorClass *klass)
parent_class = g_type_class_peek_parent (klass);
- gobject_class->set_property = bst_sample_editor_set_property;
- gobject_class->get_property = bst_sample_editor_get_property;
gobject_class->finalize = bst_sample_editor_finalize;
object_class->destroy = bst_sample_editor_destroy;
-
- g_object_class_install_property (gobject_class, PARAM_SAMPLE,
- sfi_pspec_proxy ("sample", NULL, NULL,
- SFI_PARAM_READWRITE));
}
static void
-bst_sample_editor_init (BstSampleEditor *editor)
+bst_sample_editor_init (BstSampleEditor *self)
{
+ new (&self->esample) Bse::EditableSampleH();
/* setup main container */
- editor->main_vbox = GTK_WIDGET (editor);
-}
-
-static void
-bst_sample_editor_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- BstSampleEditor *editor = BST_SAMPLE_EDITOR (object);
-
- switch (prop_id)
- {
- case PARAM_SAMPLE:
- bst_sample_editor_set_sample (editor, sfi_value_get_proxy (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-bst_sample_editor_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- BstSampleEditor *editor = BST_SAMPLE_EDITOR (object);
-
- switch (prop_id)
- {
- case PARAM_SAMPLE:
- sfi_value_set_proxy (value, editor->esample);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
+ self->main_vbox = GTK_WIDGET (self);
}
void
-bst_sample_editor_set_sample (BstSampleEditor *editor,
- SfiProxy sample)
+bst_sample_editor_set_sample (BstSampleEditor *editor, Bse::EditableSampleH sample)
{
assert_return (BST_IS_SAMPLE_EDITOR (editor));
- if (sample)
- assert_return (BSE_IS_EDITABLE_SAMPLE (sample));
if (sample != editor->esample)
{
- if (editor->esample)
- bse_item_unuse (editor->esample);
editor->esample = sample;
editor->n_channels = 0;
if (editor->esample)
- {
- bse_item_use (editor->esample);
- editor->n_channels = bse_editable_sample_get_n_channels (editor->esample);
- }
+ editor->n_channels = editor->esample.get_n_channels();
bst_sample_editor_rebuild (editor);
- g_object_notify (G_OBJECT (editor), "sample");
}
}
@@ -153,7 +85,7 @@ bst_sample_editor_destroy (GtkObject *object)
{
BstSampleEditor *editor = BST_SAMPLE_EDITOR (object);
- bst_sample_editor_set_sample (editor, 0);
+ bst_sample_editor_unset_sample (editor);
if (editor->play_back)
bst_play_back_handle_destroy (editor->play_back);
@@ -165,18 +97,19 @@ bst_sample_editor_destroy (GtkObject *object)
static void
bst_sample_editor_finalize (GObject *object)
{
- // BstSampleEditor *editor = BST_SAMPLE_EDITOR (object);
+ BstSampleEditor *self = BST_SAMPLE_EDITOR (object);
G_OBJECT_CLASS (parent_class)->finalize (object);
+
+ using namespace Bse;
+ self->esample.~EditableSampleH();
}
GtkWidget*
-bst_sample_editor_new (SfiProxy sample)
+bst_sample_editor_new (Bse::EditableSampleH esample)
{
- GtkWidget *widget;
-
- widget = gtk_widget_new (BST_TYPE_SAMPLE_EDITOR, "sample", sample, NULL);
-
+ GtkWidget *widget = gtk_widget_new (BST_TYPE_SAMPLE_EDITOR, NULL);
+ bst_sample_editor_set_sample (BST_SAMPLE_EDITOR (widget), esample);
return widget;
}
@@ -190,7 +123,7 @@ qsampler_set_selection (BstQSampler *qsampler,
gboolean visible_mark)
{
BstSampleEditor *editor = BST_SAMPLE_EDITOR (qsampler->owner);
- guint i, length = bse_editable_sample_get_length (editor->esample);
+ guint i, length = editor->esample.get_length();
m1 = CLAMP (m1, 0, (gint) (length / editor->n_channels));
m2 = CLAMP (m2, 0, (gint) (length / editor->n_channels));
@@ -356,8 +289,8 @@ play_back_wchunk (BstSampleEditor *editor)
{
editor->play_back = bst_play_back_handle_new ();
bst_play_back_handle_set (editor->play_back,
- editor->esample,
- bse_editable_sample_get_osc_freq (editor->esample));
+ editor->esample.proxy_id(),
+ editor->esample.get_osc_freq());
}
bst_play_back_handle_toggle (editor->play_back);
if (bst_play_back_handle_is_playing (editor->play_back))
diff --git a/beast-gtk/bstsampleeditor.hh b/beast-gtk/bstsampleeditor.hh
index a23e1c2..f2b6721 100644
--- a/beast-gtk/bstsampleeditor.hh
+++ b/beast-gtk/bstsampleeditor.hh
@@ -22,7 +22,7 @@ struct _BstSampleEditor
{
GtkVBox parent_object;
- SfiProxy esample;
+ Bse::EditableSampleH esample;
guint n_channels;
GtkWidget *main_vbox;
@@ -44,10 +44,10 @@ struct _BstSampleEditorClass
/* --- prototypes --- */
GtkType bst_sample_editor_get_type (void);
-GtkWidget* bst_sample_editor_new (SfiProxy sample);
-void bst_sample_editor_set_sample (BstSampleEditor *sample_editor,
- SfiProxy editable_sample);
+GtkWidget* bst_sample_editor_new (Bse::EditableSampleH esample);
void bst_sample_editor_rebuild (BstSampleEditor *sample_editor);
+void bst_sample_editor_set_sample (BstSampleEditor *sample_editor, Bse::EditableSampleH
editable_sample);
+inline void bst_sample_editor_unset_sample (BstSampleEditor *self) { bst_sample_editor_set_sample
(self, Bse::EditableSampleH()); }
#endif /* __BST_SAMPLE_EDITOR_H__ */
diff --git a/beast-gtk/bstwaveeditor.cc b/beast-gtk/bstwaveeditor.cc
index fb8aa3c..2410ff1 100644
--- a/beast-gtk/bstwaveeditor.cc
+++ b/beast-gtk/bstwaveeditor.cc
@@ -99,6 +99,8 @@ bst_wave_editor_class_init (BstWaveEditorClass *klass)
static void
bst_wave_editor_init (BstWaveEditor *self)
{
+ new (&self->esample) Bse::EditableSampleH();
+
GtkTreeSelection *tsel;
GtkWidget *any, *paned;
gpointer gmask;
@@ -253,7 +255,7 @@ bst_wave_editor_destroy (GtkObject *object)
{
BstWaveEditor *self = BST_WAVE_EDITOR (object);
- bst_wave_editor_set_esample (self, 0);
+ bst_wave_editor_unset_esample (self);
if (self->phandle)
{
bst_play_back_handle_destroy (self->phandle);
@@ -271,9 +273,14 @@ bst_wave_editor_finalize (GObject *object)
assert_return (self->qsamplers == NULL);
+ bst_wave_editor_unset_esample (self);
+
g_object_unref (self->chunk_wrapper);
G_OBJECT_CLASS (parent_class)->finalize (object);
+
+ using namespace Bse;
+ self->esample.~EditableSampleH();
}
void
@@ -289,7 +296,7 @@ bst_wave_editor_set_wave (BstWaveEditor *self,
bse_item_unuse (self->wave);
gxk_list_wrapper_notify_clear (self->chunk_wrapper);
}
- bst_wave_editor_set_esample (self, 0);
+ bst_wave_editor_unset_esample (self);
if (BSE_IS_WAVE (wave))
self->wave = wave;
else
@@ -405,10 +412,10 @@ play_back_wchunk_on (BstWaveEditor *self)
bst_play_back_handle_stop (self->phandle);
if (self->esample && self->esample_open)
{
- self->playback_length = bse_editable_sample_get_length (self->esample);
+ self->playback_length = self->esample.get_length();
bst_play_back_handle_set (self->phandle,
- self->esample,
- bse_editable_sample_get_osc_freq (self->esample));
+ self->esample.proxy_id(),
+ self->esample.get_osc_freq());
bst_play_back_handle_start (self->phandle);
/* request updates */
bst_play_back_handle_pcm_notify (self->phandle, 40, update_play_back_marks, self); /* request quick
update */
@@ -505,12 +512,9 @@ wave_editor_set_n_qsamplers (BstWaveEditor *self,
}
void
-bst_wave_editor_set_esample (BstWaveEditor *self,
- SfiProxy esample)
+bst_wave_editor_set_esample (BstWaveEditor *self, Bse::EditableSampleH esample)
{
assert_return (BST_IS_WAVE_EDITOR (self));
- if (esample)
- assert_return (BSE_IS_EDITABLE_SAMPLE (esample));
if (esample != self->esample)
{
@@ -522,20 +526,20 @@ bst_wave_editor_set_esample (BstWaveEditor *self,
if (self->esample)
{
if (self->esample_open)
- bse_editable_sample_close (self->esample);
- bse_item_unuse (self->esample);
+ self->esample.close();
+ bse_item_unuse (self->esample.proxy_id()); // FIXME: Item.use_count is only needed to keep a
container's children
}
self->esample = esample;
if (self->esample)
{
+ bse_item_use (self->esample.proxy_id()); // FIXME: Item.use_count is only needed to keep a
container's children
Bse::Error error;
- bse_item_use (self->esample);
- error = bse_editable_sample_open (self->esample);
+ error = self->esample.open();
self->esample_open = error == Bse::Error::NONE;
if (error != 0)
g_message ("failed to open sample: %s", Bse::error_blurb (error));
}
- wave_editor_set_n_qsamplers (self, self->esample ? bse_editable_sample_get_n_channels (self->esample)
: 0);
+ wave_editor_set_n_qsamplers (self, self->esample ? self->esample.get_n_channels() : 0);
for (i = 0; i < self->n_qsamplers; i++)
if (self->esample)
@@ -582,7 +586,8 @@ tree_selection_changed (BstWaveEditor *self,
g_free (mix_str);
Bse::WaveH wave = Bse::WaveH::down_cast (bse_server.from_proxy (self->wave));
Bse::EditableSampleHandle esample = wave.use_editable (gxk_list_wrapper_get_index
(self->chunk_wrapper, &iter));
- bst_wave_editor_set_esample (self, esample.proxy_id());
+ bst_wave_editor_set_esample (self, esample);
+ bse_item_unuse (esample.proxy_id()); // FIXME: change use_editable()
}
}
diff --git a/beast-gtk/bstwaveeditor.hh b/beast-gtk/bstwaveeditor.hh
index ed93e49..1ce8674 100644
--- a/beast-gtk/bstwaveeditor.hh
+++ b/beast-gtk/bstwaveeditor.hh
@@ -45,7 +45,7 @@ struct _BstWaveEditor
SfiProxy wave;
/* editable sample view */
- SfiProxy esample;
+ Bse::EditableSampleH esample;
guint esample_open : 1;
guint ignore_playpos : 1;
GtkWidget *qsampler_hscroll;
@@ -65,8 +65,8 @@ GtkWidget* bst_wave_editor_new (SfiProxy wave);
void bst_wave_editor_set_wave (BstWaveEditor *self,
SfiProxy wave);
void bst_wave_editor_rebuild (BstWaveEditor *wave_editor);
-void bst_wave_editor_set_esample (BstWaveEditor *self,
- SfiProxy editable_sample);
+void bst_wave_editor_set_esample (BstWaveEditor *self, Bse::EditableSampleH editable_sample);
+inline void bst_wave_editor_unset_esample (BstWaveEditor *self) { bst_wave_editor_set_esample (self,
Bse::EditableSampleH()); }
#endif /* __BST_WAVE_EDITOR_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]