basic drawing widget, nothing drawn for now
[lttv.git] / ltt / branches / poly / lttv / modules / guiControlFlow / Drawing.c
index 46405eeca374daebe79899ee288261fd9ab8e0f9..0210b7136160d3fbfaf297d81e80172b57d677b5 100644 (file)
@@ -1,4 +1,7 @@
+
 #include "Drawing.h"
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
 
 /*****************************************************************************
  *                              Drawing functions                            *
@@ -25,84 +28,120 @@ static GdkColor CF_Colors [] =
 };
 
 
-typedef struct _Drawing_t {
-       GtkWidget *Drawing_Area_V
+struct _Drawing_t {
+       GtkWidget       *Drawing_Area_V;
+       GdkPixmap       *Pixmap;
 
-       guint height, width;
+       gint            height, width, depth;
 
-} Drawing_t;
+};
 
 
-Drawing_t *Drawing(void)
+Drawing_t *Drawing_construct(void)
 {
 
-       Drawing_t Drawing = g_new(Drawing_t, 1);
+       Drawing_t *Drawing = g_new(Drawing_t, 1);
                
        Drawing->Drawing_Area_V = gtk_drawing_area_new ();
 
        g_object_set_data_full(
                        G_OBJECT(Drawing->Drawing_Area_V),
-                       "Drawing_Data",
+                       "Link_Drawing_Data",
                        Drawing,
-                       Drawing_destroy);
+                       (GDestroyNotify)Drawing_destroy);
 
-       gtk_widget_modify_bg(   Control_Flow_Data->Drawing_Area_V,
+       gtk_widget_modify_bg(   Drawing->Drawing_Area_V,
                                GTK_STATE_NORMAL,
                                &CF_Colors[BLACK]);
        
-
+       gdk_window_get_geometry(Drawing->Drawing_Area_V->window,
+                       NULL, NULL,
+                       &(Drawing->width),
+                       &(Drawing->height),
+                       &(Drawing->depth));
+       
+       Drawing->Pixmap = gdk_pixmap_new(
+                       Drawing->Drawing_Area_V->window,
+                       Drawing->width,
+                       Drawing->height,
+                       Drawing->depth);
+                       
        return Drawing;
 }
 
 void Drawing_destroy(Drawing_t *Drawing)
 {
 
-       g_object_unref( G_OBJECT(Drawing->Drawing_Area_V));
+       // Do not unref here, Drawing_t destroyed by it's widget.
+       //g_object_unref( G_OBJECT(Drawing->Drawing_Area_V));
                
        g_free(Drawing);
 }
 
+GtkWidget *Drawing_getWidget(Drawing_t *Drawing)
+{
+       return Drawing->Drawing_Area_V;
+}
+
 /* get_time_from_pixels
  *
  * Get the time interval from window time and pixels, and pixels requested. This
  * function uses TimeMul, which should only be used if the float value is lower
  * that 4, and here it's always lower than 1, so it's ok.
  */
-void get_time_from_pixels(
-               guint area_x,
-               guint area_width,
-               guint window_width,
-               ltt_time &window_time_begin,
-               ltt_time &window_time_end,
-               ltt_time &time_begin,
-               ltt_time &time_end)
+void convert_pixels_to_time(
+               Drawing_t *Drawing,
+               guint x,
+               LttTime *window_time_begin,
+               LttTime *window_time_end,
+               LttTime *time)
 {
-       ltt_time window_time_interval;
+       LttTime window_time_interval;
        
-       TimeSub(window_time_interval, window_time_end, window_time_begin);
+       TimeSub(window_time_interval, *window_time_end, *window_time_begin);
 
        
-       TimeMul(time_begin, window_time_interval, (area_x/(float)window_width));
-       TimeAdd(time_begin, window_time_begin, time_begin);
-       
-       TimeMul(time_end, window_time_interval, (area_width/(float)window_width));
-       TimeAdd(time_end, time_begin, time_end);
+       TimeMul(*time, window_time_interval,
+                       (x/(float)Drawing->width));
+       TimeAdd(*time, *window_time_begin, *time);
        
 }
 
-void Drawing_Resize(Drawing_t *Drawing, guint h, guint, w)
-{
-       guint w;
 
-       Drawing->height = h ;
-       Drawing->weight = w ;
 
-       gtk_widget_set_size_request (   Control_Flow_Data->Drawing_Area_V,
-                                       Drawing->weight,
-                                       Drawing->height);
+void convert_time_to_pixels(
+               LttTime window_time_begin,
+               LttTime window_time_end,
+               LttTime time,
+               Drawing_t *Drawing,
+               guint *x)
+{
+       LttTime window_time_interval;
+       float interval_float, time_float;
+       
+       TimeSub(window_time_interval, window_time_end, window_time_begin);
        
+       TimeSub(time, time, window_time_begin);
+       
+       interval_float = (window_time_interval.tv_sec * NANSECOND_CONST)
+                       + window_time_interval.tv_nsec;
+       time_float = (time.tv_sec * NANSECOND_CONST)
+                       + time.tv_nsec;
+
+       *x = (guint)(time_float/interval_float * Drawing->width);
        
 }
 
 
 
+void Drawing_Resize(Drawing_t *Drawing, guint h, guint w)
+{
+       Drawing->height = h ;
+       Drawing->width = w ;
+
+       gtk_widget_set_size_request (   Drawing->Drawing_Area_V,
+                                       Drawing->width,
+                                       Drawing->height);
+       
+       
+}
This page took 0.026646 seconds and 4 git commands to generate.