changeset 355:dbc62ba3f132

Work towards Qt-based editor instead.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 16 Oct 2012 19:06:51 +0300
parents ba284f5e7ea5
children 2a22b0f1a469
files Makefile Makefile.gen dmeditor.c gtktimeline.c gtktimeline.h gtkwaveform.c gtkwaveform.h
diffstat 7 files changed, 14 insertions(+), 854 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Tue Oct 16 01:49:15 2012 +0300
+++ b/Makefile	Tue Oct 16 19:06:51 2012 +0300
@@ -5,8 +5,6 @@
 SDL_LDFLAGS=`sdl-config --static-libs`
 TREMOR_CFLAGS=-I/usr/local/lib/
 TREMOR_LDFLAGS=/usr/local/lib/libvorbisidec.a /usr/lib/i386-linux-gnu/libogg.a
-GTK_CFLAGS=`pkg-config --cflags gtk+-2.0 glib-2.0 cairo`
-GTK_LDFLAGS=`pkg-config --libs gtk+-2.0 glib-2.0 cairo`
 
 RANLIB=ranlib
 
--- a/Makefile.gen	Tue Oct 16 01:49:15 2012 +0300
+++ b/Makefile.gen	Tue Oct 16 19:06:51 2012 +0300
@@ -21,7 +21,9 @@
 endif
 endif
 
-EDITOR_OBJS = gtktimeline.o gtkwaveform.o dmeditor.o
+EDITOR_MAKEFILE = Makefile.editor
+EDITOR_SOURCES = edmain.cpp edgui.cpp edtimeline.cpp edwaveform.cpp
+EDITOR_HEADERS = edmain.h edtimeline.h edwaveform.h
 
 
 ###
@@ -366,19 +368,21 @@
 ###
 ### Editor targets
 ###
-$(OBJPATH)dmeditor.o: $(DMLIB)dmeditor.c
-	@echo " CC $+"
-	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS) $(GTK_CFLAGS)
-
-
-$(BINPATH)ed_$(DEMO_BIN)$(EXEEXT): $(OBJPATH)$(DEMO_BIN).o $(addprefix $(OBJPATH),$(EDITOR_OBJS)) $(addprefix $(OBJPATH),$(filter-out dmsimple.o,$(DEMO_OBJS))) $(DMLIB_A)
-	@echo " LINK $+"
-	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(SDL_LDFLAGS) $(GTK_LDFLAGS)
+$(BINPATH)ed_$(DEMO_BIN)$(EXEEXT): $(DMLIB)editor.pro $(addprefix $(DMLIB),$(EDITOR_SOURCES)) $(addprefix $(OBJPATH),$(DEMO_OBJS)) $(DMLIB_A)
+	@echo " QMAKE $+"
+	qmake -Wall MAKEFILE="$(EDITOR_MAKEFILE)" \
+		POST_TARGETDEPS="$(filter %.o %.a,$+)" \
+		QMAKE_CXXFLAGS="$(DM_CFLAGS) $(SDL_CFLAGS)" \
+		QMAKE_LIBS="$(DM_LDFLAGS) $(SDL_LDFLAGS)"
+		SOURCES="$(EDITOR_SOURCES)" \
+		HEADERS="$(EDITOR_HEADERS)" $<
+	make -f $(EDITOR_MAKEFILE)
 
 
 ###
 ### Special targets
 ###
 clean:
-	$(RM) $(TARGETS) $(OBJPATH)*.o
+	$(RM) $(TARGETS) $(OBJPATH)*.o $(EDITOR_MAKEFILE)
 
+
--- a/dmeditor.c	Tue Oct 16 01:49:15 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,321 +0,0 @@
-#include <SDL.h>
-#include "dmengine.h"
-#include "gtktimeline.h"
-#include "gtkwaveform.h"
-
-
-static void set_value(GtkWidget * widget, gpointer data)
-{
-    GdkRegion *region;
-
-    GtkRange *range = (GtkRange *) widget;
-    GtkTimeline *timeline = (GtkTimeline *) data;
-
-    gint offs = gtk_range_get_value(range);
-
-    gtk_timeline_set_offs(timeline, offs * 1000);
-/*
-    region = gdk_drawable_get_clip_region(timeline->window);
-    gdk_window_invalidate_region(timeline->window, region, TRUE);
-    gdk_window_process_updates(timeline->window, TRUE);
-*/
-}
-
-
-static void engineAudioCallback(void *userdata, Uint8 * stream, int len)
-{
-    (void) userdata;
-
-    if (engine.paused)
-    {
-        memset(stream, 0, len);
-    }
-    else
-#ifdef DM_USE_JSS
-    {
-        if (engine.dev != NULL)
-            jvmRenderAudio(engine.dev, stream,
-                           len / jvmGetSampleSize(engine.dev));
-    }
-#endif
-#ifdef DM_USE_TREMOR
-    if (engine.audioPos + len >= engine.audio->rdataSize)
-    {
-        engine.exitFlag = TRUE;
-    }
-    else
-    {
-        memcpy(stream, engine.audio->rdata + engine.audioPos, len);
-        engine.audioPos += len;
-    }
-#endif
-}
-
-
-int engineOpenResources()
-{
-    int err;
-
-    if ((err =
-         dmres_init(engine.optPackFilename, engine.optDataPath,
-                    engine.optResFlags, engineClassifier)) != DMERR_OK)
-        dmError("Could not initialize resource manager: %d, %s.\n", err,
-                dmErrorStr(err));
-    return err;
-}
-
-
-int engineLoadResources()
-{
-    int err, loaded, total;
-    err = dmres_preload(TRUE, &loaded, &total);
-
-    while ((err = dmres_preload(FALSE, &loaded, &total)) == DMERR_PROGRESS)
-    {
-        // Show a nice progress bar while loading
-        if (total > 0 && (loaded % 2) == 0)
-        {
-/*
-            if ((err = engineShowProgress(loaded, total)) != DMERR_OK)
-                return err;
-*/
-        }
-    }
-    return DMERR_OK;
-}
-
-
-int engineReloadResources()
-{
-    int err;
-
-    dmres_close();
-    if ((err = engineOpenResources()) != DMERR_OK)
-        return err;
-    if ((err = engineLoadResources()) != DMERR_OK)
-        return err;
-
-    return DMERR_OK;
-}
-
-
-BOOL engineInitializeVideo()
-{
-    dmPrint(1, "Initializing SDL video %d x %d x %dbpp, flags=0x%08x\n",
-        engine.optScrWidth, engine.optScrHeight, engine.optBitDepth, engine.optVFlags);
-
-    engine.screen = SDL_CreateRGBSurface(SDL_SWSURFACE, engine.optScrWidth, engine.optScrHeight, engine.optBitDepth, 0, 0, 0, 0);
-    if (engine.screen == NULL)
-    {
-        dmError("Could not allocate video backbuffer surface.\n");
-        return FALSE;
-    }
-    
-    return TRUE;
-}
-
-
-int main(int argc, char **argv)
-{
-    int err;
-    BOOL initSDL = FALSE;
-
-    memset(&frame, 0, sizeof(frame));
-    memset(&engine, 0, sizeof(engine));
-    dmVerbosity = 5;
-
-    // Pre-initialization
-    if ((err = demoPreInit()) != DMERR_OK)
-        goto error_exit;
-
-    gtk_init(&argc, &argv);
-
-    // Initialize resource subsystem
-    dmPrint(1, "Initializing resources subsystem.\n");
-    if ((err = engineOpenResources()) != DMERR_OK)
-        goto error_exit;
-
-    // Initialize SDL components
-    dmPrint(1, "Initializing libSDL.\n");
-    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0)
-    {
-        dmError("Could not initialize SDL: %s\n", SDL_GetError());
-        goto error_exit;
-    }
-    initSDL = TRUE;
-
-    // Initialize audio parts
-    if (engine.optAfmt.freq == 0 && engine.optAfmt.channels == 0)
-    {
-        // Defaults, if none seem to be set
-        engine.optAfmt.freq = 44100;
-        engine.optAfmt.format = AUDIO_S16SYS;
-        engine.optAfmt.channels = 2;
-        engine.optAfmt.samples = engine.optAfmt.freq / 16;
-    }
-
-#ifdef DM_USE_JSS
-    jssInit();
-
-    switch (engine.optAfmt.format)
-    {
-        case AUDIO_S16SYS:
-            engine.jss_format = JSS_AUDIO_S16;
-            break;
-        case AUDIO_U16SYS:
-            engine.jss_format = JSS_AUDIO_U16;
-            break;
-        case AUDIO_S8:
-            engine.jss_format = JSS_AUDIO_S8;
-            break;
-        case AUDIO_U8:
-            engine.jss_format = JSS_AUDIO_U8;
-            break;
-    }
-
-    dmPrint(1, "Initializing miniJSS mixer with fmt=%d, chn=%d, freq=%d\n",
-            engine.jss_format, engine.optAfmt.channels, engine.optAfmt.freq);
-
-    if ((engine.dev =
-         jvmInit(engine.jss_format, engine.optAfmt.channels,
-                 engine.optAfmt.freq, JMIX_AUTO)) == NULL)
-    {
-        dmError("jvmInit() returned NULL, voi perkele.\n");
-        goto error_exit;
-    }
-
-    if ((engine.plr = jmpInit(engine.dev)) == NULL)
-    {
-        dmError("jmpInit() returned NULL\n");
-        goto error_exit;
-    }
-#endif
-
-    // Initialize SDL audio
-    dmPrint(1, "Trying to init SDL audio with: fmt=%d, chn=%d, freq=%d\n",
-            engine.optAfmt.format, engine.optAfmt.channels,
-            engine.optAfmt.freq);
-
-    engine.optAfmt.callback = engineAudioCallback;
-
-    if (SDL_OpenAudio(&engine.optAfmt, NULL) < 0)
-    {
-        dmError("Couldn't open SDL audio: %s\n", SDL_GetError());
-        goto error_exit;
-    }
-
-    // Initialize SDL video
-    if (engine.demoInitPreVideo != NULL &&
-        (err = engine.demoInitPreVideo()) != DMERR_OK)
-    {
-        dmError("demoInitPreVideo() failed, %d: %s\n", err, dmErrorStr(err));
-        goto error_exit;
-    }
-
-    if (!engineInitializeVideo())
-        goto error_exit;
-
-    if (engine.demoInitPostVideo != NULL &&
-        (err = engine.demoInitPostVideo()) != DMERR_OK)
-    {
-        dmError("demoInitPostVideo() failed, %d: %s\n", err, dmErrorStr(err));
-        goto error_exit;
-    }
-
-    // Load resources
-    dmPrint(1, "Loading resources, please wait...\n");
-    if ((err = engineLoadResources()) != DMERR_OK)
-    {
-        dmError("Error loading resources, %d: %s.\n", err, dmErrorStr(err));
-        goto error_exit;
-    }
-
-    dmPrint(1, "Initializing effects, etc.\n");
-
-    // Final initializations
-    if ((err = engine.demoInit()) != DMERR_OK)
-    {
-        dmError("Failure in demoInit(), %d: %s\n",
-            err, dmErrorStr(err));
-        goto error_exit;
-    }
-
-    // Final initializations
-    if ((err = engine.demoInit()) != DMERR_OK)
-    {
-        dmError("Failure in demoInit(), %d: %s\n",
-            err, dmErrorStr(err));
-        goto error_exit;
-    }
-
-    // Initialize effects
-    if ((err = dmInitializeEffects()) != DMERR_OK)
-    {
-        dmError("Effects initialization failed, %d: %s\n",
-            err, dmErrorStr(err));
-        goto error_exit;
-    }
-
-    // Initialize GUI
-    dmPrint(1, "Initializing Gtk+ editor GUI.\n");
-    GtkWidget *window;
-    GtkWidget *timeline;
-    GtkWidget *fixed;
-    GtkWidget *scale;
-
-    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-    gtk_window_set_title(GTK_WINDOW(window), "TIMELINE widget");
-    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
-    gtk_window_set_default_size(GTK_WINDOW(window), 200, 180);
-    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
-    fixed = gtk_fixed_new();
-    gtk_container_add(GTK_CONTAINER(window), fixed);
-    timeline = gtk_timeline_new();
-    gtk_fixed_put(GTK_FIXED(fixed), timeline, 30, 40);
-    scale = gtk_vscale_new_with_range(0.0, 100.0, 1.0);
-    gtk_range_set_inverted(GTK_RANGE(scale), TRUE);
-    gtk_scale_set_value_pos(GTK_SCALE(scale), GTK_POS_TOP);
-    gtk_widget_set_size_request(scale, 50, 120);
-    gtk_fixed_put(GTK_FIXED(fixed), scale, 130, 20);
-    g_signal_connect(G_OBJECT(scale), "value_changed", G_CALLBACK(set_value),(gpointer) timeline);
-
-    gtk_widget_show(timeline);
-    gtk_widget_show(fixed);
-    gtk_widget_show_all(window);
-
-    gtk_main();
-
-
-error_exit:
-
-    dmPrint(1, "Shutting down.\n");
-    SDL_ShowCursor(SDL_ENABLE);
-
-    if (engine.screen)
-        SDL_FreeSurface(engine.screen);
-
-    SDL_LockAudio();
-    SDL_PauseAudio(1);
-#ifdef DM_USE_JSS
-    jmpClose(engine.plr);
-    jvmClose(engine.dev);
-    jssClose();
-#endif
-    SDL_UnlockAudio();
-
-    dmFreeTimeline(engine.tl);
-    dmFreePreparedTimelineData(engine.ptl);
-    dmShutdownEffects();
-    dmres_close();
-
-    if (engine.demoShutdown != NULL)
-        engine.demoShutdown();
-
-    if (initSDL)
-        SDL_Quit();
-
-    if (engine.demoQuit != NULL)
-        engine.demoQuit();
-
-    return 0;
-}
--- a/gtktimeline.c	Tue Oct 16 01:49:15 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,212 +0,0 @@
-#include "gtktimeline.h"
-
-
-static void gtk_timeline_class_init(GtkTimelineClass *klass);
-static void gtk_timeline_init(GtkTimeline *timeline);
-static void gtk_timeline_size_request(GtkWidget *widget, GtkRequisition *requisition);
-static void gtk_timeline_size_allocate(GtkWidget *widget, GtkAllocation *allocation);
-static void gtk_timeline_realize(GtkWidget *widget);
-static gboolean gtk_timeline_expose(GtkWidget *widget, GdkEventExpose *event);
-static void gtk_timeline_paint(GtkWidget *widget);
-static void gtk_timeline_destroy(GtkObject *object);
-
-
-GtkType gtk_timeline_get_type(void)
-{
-    static GtkType gtk_timeline_type = 0;
-
-    if (!gtk_timeline_type)
-    {
-        static const GtkTypeInfo gtk_timeline_info =
-        {
-            "GtkTimeline",
-            sizeof(GtkTimeline),
-            sizeof(GtkTimelineClass),
-            (GtkClassInitFunc) gtk_timeline_class_init,
-            (GtkObjectInitFunc) gtk_timeline_init,
-            NULL,
-            NULL,
-            (GtkClassInitFunc) NULL
-        };
-        gtk_timeline_type = gtk_type_unique(GTK_TYPE_WIDGET, &gtk_timeline_info);
-    }
-    return gtk_timeline_type;
-}
-
-
-void gtk_timeline_set_zoom(GtkTimeline *timeline, gfloat zoom)
-{
-    timeline->zoom = zoom;
-    gtk_timeline_paint(GTK_WIDGET(timeline));
-}
-
-
-void gtk_timeline_set_time(GtkTimeline *timeline, gint time)
-{
-    timeline->time = time;
-    gtk_timeline_paint(GTK_WIDGET(timeline));
-}
-
-
-void gtk_timeline_set_offs(GtkTimeline *timeline, gint offs)
-{
-    timeline->offs = offs;
-    gtk_timeline_paint(GTK_WIDGET(timeline));
-}
-
-
-GtkWidget * gtk_timeline_new()
-{
-    return GTK_WIDGET(gtk_type_new(gtk_timeline_get_type()));
-}
-
-
-static void gtk_timeline_class_init(GtkTimelineClass *klass)
-{
-    GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
-    GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-    widget_class->realize = gtk_timeline_realize;
-    widget_class->size_request = gtk_timeline_size_request;
-    widget_class->size_allocate = gtk_timeline_size_allocate;
-    widget_class->expose_event = gtk_timeline_expose;
-
-    object_class->destroy = gtk_timeline_destroy;
-}
-
-
-static void gtk_timeline_init(GtkTimeline *timeline)
-{
-    timeline->time = 0;
-    timeline->offs = 0;
-    timeline->zoom = 1.0f;
-    timeline->tl   = NULL;
-}
-
-
-static void gtk_timeline_size_request(GtkWidget *widget, GtkRequisition *requisition)
-{
-    g_return_if_fail(widget != NULL);
-    g_return_if_fail(GTK_IS_TIMELINE(widget));
-    g_return_if_fail(requisition != NULL);
-
-    requisition->width = 200;
-    requisition->height = 60;
-}
-
-
-static void gtk_timeline_size_allocate(GtkWidget *widget,
-    GtkAllocation *allocation)
-{
-    g_return_if_fail(widget != NULL);
-    g_return_if_fail(GTK_IS_TIMELINE(widget));
-    g_return_if_fail(allocation != NULL);
-
-    widget->allocation = *allocation;
-
-    if (GTK_WIDGET_REALIZED(widget))
-    {
-        gdk_window_move_resize(
-            widget->window,
-            allocation->x, allocation->y,
-            allocation->width, allocation->height);
-    }
-}
-
-
-static void gtk_timeline_realize(GtkWidget *widget)
-{
-    GdkWindowAttr attributes;
-    guint attributes_mask;
-
-    g_return_if_fail(widget != NULL);
-    g_return_if_fail(GTK_IS_TIMELINE(widget));
-
-    GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
-
-    attributes.window_type = GDK_WINDOW_CHILD;
-    attributes.x = widget->allocation.x;
-    attributes.y = widget->allocation.y;
-    attributes.width = 200;
-    attributes.height = 60;
-
-    attributes.wclass = GDK_INPUT_OUTPUT;
-    attributes.event_mask = gtk_widget_get_events(widget) | GDK_EXPOSURE_MASK;
-
-    attributes_mask = GDK_WA_X | GDK_WA_Y;
-
-    widget->window = gdk_window_new(
-        gtk_widget_get_parent_window (widget),
-        &attributes, attributes_mask);
-
-    gdk_window_set_user_data(widget->window, widget);
-
-    widget->style = gtk_style_attach(widget->style, widget->window);
-    gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL);
-}
-
-
-static gboolean gtk_timeline_expose(GtkWidget *widget, GdkEventExpose *event)
-{
-    g_return_val_if_fail(widget != NULL, FALSE);
-    g_return_val_if_fail(GTK_IS_TIMELINE(widget), FALSE);
-    g_return_val_if_fail(event != NULL, FALSE);
-
-    gtk_timeline_paint(widget);
-
-    return FALSE;
-}
-
-
-static void gtk_timeline_paint(GtkWidget *widget)
-{
-#if 0
-    gint i;
-    cairo_t *cr;
-
-    cr = gdk_cairo_create(widget->window);
-
-    cairo_translate(cr, 0, 7);
-
-    cairo_set_source_rgb(cr, 0, 0, 0);
-    cairo_paint(cr);
-
-    gint pos = GTK_TIMELINE(widget)->sel;
-    gint rect = pos / 5;
-
-    cairo_set_source_rgb(cr, 0.2, 0.4, 0);
-
-    for (i = 1; i <= 20; i++)
-    {
-        if (i > 20 - rect)
-            cairo_set_source_rgb(cr, 0.6, 1.0, 0);
-        else
-            cairo_set_source_rgb(cr, 0.2, 0.4, 0);
-
-        cairo_rectangle(cr,  8, i*4, 30, 3);
-        cairo_rectangle(cr, 42, i*4, 30, 3);
-        cairo_fill(cr);
-    }
-
-    cairo_destroy(cr);
-#endif
-}
-
-
-static void gtk_timeline_destroy(GtkObject *object)
-{
-    GtkTimeline *timeline;
-    GtkTimelineClass *klass;
-
-    g_return_if_fail(object != NULL);
-    g_return_if_fail(GTK_IS_TIMELINE(object));
-
-    timeline = GTK_TIMELINE(object);
-
-    klass = gtk_type_class(gtk_widget_get_type());
-
-    if (GTK_OBJECT_CLASS(klass)->destroy)
-    {
-        (* GTK_OBJECT_CLASS(klass)->destroy) (object);
-    }
-}
--- a/gtktimeline.h	Tue Oct 16 01:49:15 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#ifndef GTKTIMELINE_H
-#define GTKTIMELINE_H
-
-#include <gtk/gtk.h>
-#include <cairo.h>
-
-#include "dmtimeline.h"
-
-G_BEGIN_DECLS
-
-
-#define GTK_TIMELINE(obj) GTK_CHECK_CAST(obj, gtk_timeline_get_type (), GtkTimeline)
-#define GTK_TIMELINE_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, gtk_timeline_get_type(), GtkTimelineClass)
-#define GTK_IS_TIMELINE(obj) GTK_CHECK_TYPE(obj, gtk_timeline_get_type())
-
-
-typedef struct _GtkTimeline GtkTimeline;
-typedef struct _GtkTimelineClass GtkTimelineClass;
-
-
-struct _GtkTimeline
-{
-    GtkWidget widget;
-    DMTimeline *tl;
-    gint time, offs;
-    gfloat zoom;
-};
-
-struct _GtkTimelineClass
-{
-    GtkWidgetClass parent_class;
-};
-
-
-GtkType      gtk_timeline_get_type(void);
-void         gtk_timeline_set_timeline(GtkTimeline *timeline, DMTimeline *tl);
-void         gtk_timeline_set_zoom(GtkTimeline *timeline, gfloat zoom);
-void         gtk_timeline_set_time(GtkTimeline *timeline, gint time);
-void         gtk_timeline_set_offs(GtkTimeline *timeline, gint offs);
-GtkWidget *  gtk_timeline_new();
-
-
-G_END_DECLS
-
-#endif
--- a/gtkwaveform.c	Tue Oct 16 01:49:15 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,221 +0,0 @@
-#include "gtkwaveform.h"
-
-
-static void gtk_waveform_class_init(GtkWaveformClass *klass);
-static void gtk_waveform_init(GtkWaveform *waveform);
-static void gtk_waveform_size_request(GtkWidget *widget, GtkRequisition *requisition);
-static void gtk_waveform_size_allocate(GtkWidget *widget, GtkAllocation *allocation);
-static void gtk_waveform_realize(GtkWidget *widget);
-static gboolean gtk_waveform_expose(GtkWidget *widget, GdkEventExpose *event);
-static void gtk_waveform_paint(GtkWidget *widget);
-static void gtk_waveform_destroy(GtkObject *object);
-
-
-GtkType gtk_waveform_get_type(void)
-{
-    static GtkType gtk_waveform_type = 0;
-
-    if (!gtk_waveform_type)
-    {
-        static const GtkTypeInfo gtk_waveform_info =
-        {
-            "GtkWaveform",
-            sizeof(GtkWaveform),
-            sizeof(GtkWaveformClass),
-            (GtkClassInitFunc) gtk_waveform_class_init,
-            (GtkObjectInitFunc) gtk_waveform_init,
-            NULL,
-            NULL,
-            (GtkClassInitFunc) NULL
-        };
-        gtk_waveform_type = gtk_type_unique(GTK_TYPE_WIDGET, &gtk_waveform_info);
-    }
-    return gtk_waveform_type;
-}
-
-
-void gtk_waveform_set_wave_data(GtkWaveform *waveform, gint16 *data, gint len, gint freq)
-{
-    waveform->data = data;
-    waveform->len  = len;
-    waveform->freq = freq;
-    gtk_waveform_paint(GTK_WIDGET(waveform));
-}
-
-
-void gtk_waveform_set_zoom(GtkWaveform *waveform, gfloat zoom)
-{
-    waveform->zoom = zoom;
-    gtk_waveform_paint(GTK_WIDGET(waveform));
-}
-
-
-void gtk_waveform_set_time(GtkWaveform *waveform, gint time)
-{
-    waveform->time = time;
-    gtk_waveform_paint(GTK_WIDGET(waveform));
-}
-
-
-void gtk_waveform_set_offs(GtkWaveform *waveform, gint offs)
-{
-    waveform->offs = offs;
-    gtk_waveform_paint(GTK_WIDGET(waveform));
-}
-
-
-GtkWidget * gtk_waveform_new()
-{
-    return GTK_WIDGET(gtk_type_new(gtk_waveform_get_type()));
-}
-
-
-static void gtk_waveform_class_init(GtkWaveformClass *klass)
-{
-    GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
-    GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-    widget_class->realize = gtk_waveform_realize;
-    widget_class->size_request = gtk_waveform_size_request;
-    widget_class->size_allocate = gtk_waveform_size_allocate;
-    widget_class->expose_event = gtk_waveform_expose;
-
-    object_class->destroy = gtk_waveform_destroy;
-}
-
-
-static void gtk_waveform_init(GtkWaveform *waveform)
-{
-    waveform->time = 0;
-    waveform->offs = 0;
-    waveform->zoom = 1.0f;
-    waveform->data = NULL;
-    waveform->freq = 1;
-}
-
-
-static void gtk_waveform_size_request(GtkWidget *widget, GtkRequisition *requisition)
-{
-    g_return_if_fail(widget != NULL);
-    g_return_if_fail(GTK_IS_WAVEFORM(widget));
-    g_return_if_fail(requisition != NULL);
-
-    requisition->width = 200;
-    requisition->height = 60;
-}
-
-
-static void gtk_waveform_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
-{
-    g_return_if_fail(widget != NULL);
-    g_return_if_fail(GTK_IS_WAVEFORM(widget));
-    g_return_if_fail(allocation != NULL);
-
-    widget->allocation = *allocation;
-
-    if (GTK_WIDGET_REALIZED(widget))
-    {
-        gdk_window_move_resize(
-            widget->window,
-            allocation->x, allocation->y,
-            allocation->width, allocation->height);
-    }
-}
-
-
-static void gtk_waveform_realize(GtkWidget *widget)
-{
-    GdkWindowAttr attributes;
-    guint attributes_mask;
-
-    g_return_if_fail(widget != NULL);
-    g_return_if_fail(GTK_IS_WAVEFORM(widget));
-
-    GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
-
-    attributes.window_type = GDK_WINDOW_CHILD;
-    attributes.x = widget->allocation.x;
-    attributes.y = widget->allocation.y;
-    attributes.width = 80;
-    attributes.height = 100;
-
-    attributes.wclass = GDK_INPUT_OUTPUT;
-    attributes.event_mask = gtk_widget_get_events(widget) | GDK_EXPOSURE_MASK;
-
-    attributes_mask = GDK_WA_X | GDK_WA_Y;
-
-    widget->window = gdk_window_new(
-        gtk_widget_get_parent_window (widget),
-        &attributes, attributes_mask);
-
-    gdk_window_set_user_data(widget->window, widget);
-
-    widget->style = gtk_style_attach(widget->style, widget->window);
-    gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL);
-}
-
-
-static gboolean gtk_waveform_expose(GtkWidget *widget, GdkEventExpose *event)
-{
-    g_return_val_if_fail(widget != NULL, FALSE);
-    g_return_val_if_fail(GTK_IS_WAVEFORM(widget), FALSE);
-    g_return_val_if_fail(event != NULL, FALSE);
-
-    gtk_waveform_paint(widget);
-
-    return FALSE;
-}
-
-
-static void gtk_waveform_paint(GtkWidget *widget)
-{
-#if 0
-    gint i;
-    cairo_t *cr;
-
-    cr = gdk_cairo_create(widget->window);
-
-    cairo_translate(cr, 0, 7);
-
-    cairo_set_source_rgb(cr, 0, 0, 0);
-    cairo_paint(cr);
-
-    gint pos = GTK_WAVEFORM(widget)->sel;
-    gint rect = pos / 5;
-
-    cairo_set_source_rgb(cr, 0.2, 0.4, 0);
-
-    for (i = 1; i <= 20; i++)
-    {
-        if (i > 20 - rect)
-            cairo_set_source_rgb(cr, 0.6, 1.0, 0);
-        else
-            cairo_set_source_rgb(cr, 0.2, 0.4, 0);
-
-        cairo_rectangle(cr,  8, i*4, 30, 3);
-        cairo_rectangle(cr, 42, i*4, 30, 3);
-        cairo_fill(cr);
-    }
-
-    cairo_destroy(cr);
-#endif
-}
-
-
-static void gtk_waveform_destroy(GtkObject *object)
-{
-    GtkWaveform *waveform;
-    GtkWaveformClass *klass;
-
-    g_return_if_fail(object != NULL);
-    g_return_if_fail(GTK_IS_WAVEFORM(object));
-
-    waveform = GTK_WAVEFORM(object);
-
-    klass = gtk_type_class(gtk_widget_get_type());
-
-    if (GTK_OBJECT_CLASS(klass)->destroy)
-    {
-        (* GTK_OBJECT_CLASS(klass)->destroy) (object);
-    }
-}
--- a/gtkwaveform.h	Tue Oct 16 01:49:15 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#ifndef GTKWAVEFORM_H
-#define GTKWAVEFORM_H
-
-#include <gtk/gtk.h>
-#include <cairo.h>
-
-G_BEGIN_DECLS
-
-
-#define GTK_WAVEFORM(obj) GTK_CHECK_CAST(obj, gtk_waveform_get_type (), GtkWaveform)
-#define GTK_WAVEFORM_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, gtk_waveform_get_type(), GtkWaveformClass)
-#define GTK_IS_WAVEFORM(obj) GTK_CHECK_TYPE(obj, gtk_waveform_get_type())
-
-
-typedef struct _GtkWaveform GtkWaveform;
-typedef struct _GtkWaveformClass GtkWaveformClass;
-
-
-struct _GtkWaveform
-{
-    GtkWidget widget;
-    gint16 *data;
-    gint len, time, offs, freq;
-    gfloat zoom;
-};
-
-struct _GtkWaveformClass
-{
-    GtkWidgetClass parent_class;
-};
-
-
-GtkType      gtk_waveform_get_type(void);
-void         gtk_waveform_set_wave_data(GtkWaveform *waveform, gint16 *data, gint len, gint freq);
-void         gtk_waveform_set_zoom(GtkWaveform *waveform, gfloat zoom);
-void         gtk_waveform_set_time(GtkWaveform *waveform, gint time);
-void         gtk_waveform_set_offs(GtkWaveform *waveform, gint offs);
-GtkWidget *  gtk_waveform_new();
-
-
-G_END_DECLS
-
-#endif