#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <gtk/gtk.h>
#include <cairo/cairo.h>
#include <math.h>

int codes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};

GtkObject *adjust1;
GtkObject *adjust2;
GtkObject *adjust3;
GtkObject *adjust4;
GtkObject *adjust5;
GtkObject *adjust6;
GtkObject *adjust7;
GtkObject *adjust8;
GtkObject *adjust9;
GtkEntryBuffer *symbol_buffer; 

struct all_colors{
	unsigned char background_r;
	unsigned char background_g;
	unsigned char background_b;
	unsigned char hlines_r;
	unsigned char hlines_g;
	unsigned char hlines_b;
	unsigned char clines_r;
	unsigned char clines_g;
	unsigned char clines_b;
}chart_colors;



struct rgba{
	unsigned char red;
	unsigned char green;
	unsigned char blue;
	unsigned char alpha;
};


struct popup_window{
	GtkWidget* window;
	GtkWidget* ok_button;
	GtkWidget* cancel_button;
	GtkWidget* red_scale1;
	GtkWidget* green_scale1;
	GtkWidget* blue_scale1;
        GtkWidget* red_scale2;
        GtkWidget* green_scale2;
        GtkWidget* blue_scale2;
        GtkWidget* red_scale3;
        GtkWidget* green_scale3;
        GtkWidget* blue_scale3;
};


/*
struct all_colors{
	GdkColor background;
	GdkColor hlines;
	GdkColor clines;
}chart_colors;
*/

GtkWidget* w_graph;
gboolean on_expose_event (GtkWidget *widget,
                          GdkEventExpose *event,
                          gpointer data);

void on_destroy(GtkWidget *widget,
             gpointer data )
{
    gtk_main_quit ();
}

gboolean get_stock_symbol(GtkWidget *widget, GdkEventButton *event, gpointer data);
gboolean button_release(GtkWidget *widget, GdkEventButton *event, gpointer data);
gboolean colors_window(GtkWidget *widget, GdkEventButton *event, gpointer data);
gboolean save_colors(GtkWidget *widget, GdkEventButton *event, gpointer data);
void setup_popup_window(struct popup_window *colors1);
void setup_def_colors(void);

int main(int argc, char **argv){

	gtk_init (&argc, &argv);

	//main window
        GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

	//side buttons
	GtkWidget *blank_space = gtk_label_new("");
	GtkWidget *ticker_label = gtk_label_new("Ticker:");
	const gchar *initial_chars = "INTC";
	gint n_initial_chars = -1;
	symbol_buffer = gtk_entry_buffer_new(initial_chars, n_initial_chars);
	GtkWidget* symbol_entry = gtk_entry_new_with_buffer(symbol_buffer);
	GtkWidget* button1 = gtk_button_new_with_label("Chart Colors");
	GtkWidget* checkbox1 = gtk_check_button_new_with_label("test2");
	GtkWidget* button2 = gtk_button_new_with_label("Enter");
	
	//main window attributes
        gtk_container_set_border_width (GTK_CONTAINER (window), 2);
        gtk_window_set_default_size(GTK_WINDOW(window),800,600);
        gtk_window_set_title(GTK_WINDOW(window),
                             "sterlingdesktops linchart v0.0.1");

	//struct popup_window colors1;	
	setup_def_colors();

        g_signal_connect (window, "destroy",
                          G_CALLBACK(on_destroy),
                          NULL);

        //////////// main box in the window
        GtkWidget* mbox = gtk_hpaned_new();
        gtk_container_add (GTK_CONTAINER (window), mbox);

	////// button container
	GtkWidget* button_container = gtk_table_new(6, 1, TRUE);
	gtk_table_attach(GTK_TABLE(button_container), button1,      0, 1, 0, 1, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(button_container), checkbox1,    0, 1, 1, 2, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);

	gtk_table_attach(GTK_TABLE(button_container), blank_space,  0, 1, 2, 3, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(button_container), ticker_label, 0, 1, 3, 4, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(button_container), symbol_entry, 0, 1, 4, 5, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(button_container), button2,      0, 1, 5, 6, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);


        //////////// drawing box
        GtkDrawingArea* drawing_area = GTK_DRAWING_AREA(gtk_drawing_area_new ());
        w_graph = GTK_WIDGET(drawing_area);

	gtk_paned_set_position(GTK_PANED(mbox), 600);

        gtk_paned_pack1(GTK_PANED(mbox),
                        GTK_WIDGET(drawing_area),
                        TRUE, TRUE);

        gtk_paned_pack2(GTK_PANED(mbox),
                        GTK_WIDGET(button_container),
                        TRUE, TRUE);

	//gtk_hscale_new_with_range

        g_signal_connect(G_OBJECT(drawing_area),
                         "expose-event",
                         G_CALLBACK(on_expose_event), mbox);

        g_signal_connect(G_OBJECT(button1),
                        "button-release-event",
                        G_CALLBACK(colors_window), "bla");

        g_signal_connect(G_OBJECT(checkbox1),
                        "button-release-event",
                        G_CALLBACK(button_release), "checkbox1");

        g_signal_connect(G_OBJECT(button2),
                        "button-release-event",
                        G_CALLBACK(get_stock_symbol), "button2");

	//g_signal_connect(G_OBJECT(ok_button), "button-release-event", G_CALLBACK(save_colors), NULL);



	gtk_widget_show_all (window);
	gtk_main ();

	return 0;
}

gboolean save_colors(GtkWidget *widget, GdkEventButton *event, gpointer data){
	printf("test\n");
	return 0;
}

void setup_popup_window(struct popup_window *colors1){
	//colors1.window
	//printf("destroy test\n");
}
gboolean close_colors(GtkWidget *widget, GdkEventButton *event, gpointer data){
	gtk_widget_destroy( (GtkWidget *)data );
	return TRUE;
}

void setup_def_colors(void){

	chart_colors.background_r = 255;
	chart_colors.background_g = 255;
	chart_colors.background_b = 255;
	chart_colors.hlines_r = 0;
	chart_colors.hlines_g = 0;
	chart_colors.hlines_b = 0;
	chart_colors.clines_r = 0;
	chart_colors.clines_g = 0;
	chart_colors.clines_b = 255;
}

gboolean get_stock_symbol(GtkWidget *widget, GdkEventButton *event, gpointer data){
	//const gchar *the_buff = gtk_entry_buffer_get_text(symbol_buffer);
	printf("symbol: %s\n", (char *)gtk_entry_buffer_get_text(symbol_buffer));
	return TRUE;
}


gboolean  scale_value_chng(GtkRange *range, GtkScrollType scroll, gdouble value, gpointer user_data){
	int code = *((int *)user_data);

	//value = ceil(value);
	if(value > 254){
		value = 255;
	}else if(value < 1){
		value = 0;
	}
	value = floor(value);	

	if(code == 0){
		chart_colors.background_r = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust1), value);
	}else if(code == 1){
		chart_colors.background_g = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust2), value);
	}else if(code == 2){
		chart_colors.background_b = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust3), value);
	}else if(code == 3){
		chart_colors.hlines_r = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust4), value);
	}else if(code == 4){
		chart_colors.hlines_g = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust5), value);
	}else if(code == 5){
		chart_colors.hlines_b = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust6), value);
	}else if(code == 6){
		chart_colors.clines_r = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust7), value);
	}else if(code == 7){
		chart_colors.clines_g = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust8), value);
	}else if(code == 8){
		chart_colors.clines_b = (unsigned char)value;
		gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust9), value);
	}else{
		return FALSE;
	}
	printf("value changed to %lf\n", value );



//GtkWidget* w_graph;
	gpointer data = NULL;
	GdkEventExpose *event = NULL;

	(void)on_expose_event (w_graph, event, data);



	return TRUE;

}




gboolean colors_window(GtkWidget *widget, GdkEventButton *event, gpointer data){
	
	//struct popup_window colors1;
	GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_container_set_border_width (GTK_CONTAINER (window), 2);
	gtk_window_set_default_size(GTK_WINDOW(window),350,600);
	gtk_window_set_title(GTK_WINDOW(window),"select colors");
	

	GtkWidget* mbox = gtk_vpaned_new();
	gtk_container_add (GTK_CONTAINER (window), mbox);

	//buttons
	GtkWidget *ok_button = gtk_button_new_with_label("Ok");
	GtkWidget *cancel_button = gtk_button_new_with_label("Cancel");
	GtkWidget* button_container = gtk_table_new(1, 2, TRUE);
        gtk_table_attach(GTK_TABLE(button_container), ok_button,     0, 1, 0, 1, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
        gtk_table_attach(GTK_TABLE(button_container), cancel_button, 1, 2, 0, 1, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);

	//scales

adjust1 = gtk_adjustment_new(255, 0, 255, 1, 4, 0);
adjust2 = gtk_adjustment_new(255, 0, 255, 1, 4, 0);
adjust3 = gtk_adjustment_new(255, 0, 255, 1, 4, 0);
adjust4 = gtk_adjustment_new(0, 0, 255, 1, 4, 0);
adjust5 = gtk_adjustment_new(0, 0, 255, 1, 4, 0);
adjust6 = gtk_adjustment_new(0, 0, 255, 1, 4, 0);
adjust7 = gtk_adjustment_new(0, 0, 255, 1, 4, 0);
adjust8 = gtk_adjustment_new(0, 0, 255, 1, 4, 0);
adjust9 = gtk_adjustment_new(255, 0, 255, 1, 4, 0);



/*
GtkObject *adjust1 = gtk_adjustment_new(chart_colors.background_r, 0, 255, 1, 5, 256);
GtkObject *adjust2 = gtk_adjustment_new(chart_colors.background_g, 0, 255, 1, 5, 256);
GtkObject *adjust3 = gtk_adjustment_new(chart_colors.background_b, 0, 255, 1, 5, 256);
GtkObject *adjust4 = gtk_adjustment_new(chart_colors.hlines_r, 0, 255, 1, 5, 256);
GtkObject *adjust5 = gtk_adjustment_new(chart_colors.hlines_g, 0, 255, 1, 5, 256);
GtkObject *adjust6 = gtk_adjustment_new(chart_colors.hlines_b, 0, 255, 1, 5, 256);
GtkObject *adjust7 = gtk_adjustment_new(chart_colors.clines_r, 0, 255, 1, 5, 256);
GtkObject *adjust8 = gtk_adjustment_new(chart_colors.clines_g, 0, 255, 1, 5, 256);
GtkObject *adjust9 = gtk_adjustment_new(chart_colors.clines_b, 0, 255, 1, 5, 256);
*/
GtkWidget *red_scale1 = gtk_hscale_new(GTK_ADJUSTMENT(adjust1));
GtkWidget *green_scale1 = gtk_hscale_new(GTK_ADJUSTMENT(adjust2));
GtkWidget *blue_scale1 = gtk_hscale_new(GTK_ADJUSTMENT(adjust3));
GtkWidget *red_scale2 = gtk_hscale_new(GTK_ADJUSTMENT(adjust4));
GtkWidget *green_scale2 = gtk_hscale_new(GTK_ADJUSTMENT(adjust5));
GtkWidget *blue_scale2 = gtk_hscale_new(GTK_ADJUSTMENT(adjust6));
GtkWidget *red_scale3 = gtk_hscale_new(GTK_ADJUSTMENT(adjust7));
GtkWidget *green_scale3 = gtk_hscale_new(GTK_ADJUSTMENT(adjust8));
GtkWidget *blue_scale3 = gtk_hscale_new(GTK_ADJUSTMENT(adjust9));


/*
	GtkWidget *red_scale1 = gtk_hscale_new_with_range(0, 255, 1);
	GtkWidget *green_scale1 = gtk_hscale_new_with_range(0, 255, 1);
	GtkWidget *blue_scale1 = gtk_hscale_new_with_range(0, 255, 1);
	GtkWidget *red_scale2 = gtk_hscale_new_with_range(0, 255, 1);
	GtkWidget *green_scale2 = gtk_hscale_new_with_range(0, 255, 1);
	GtkWidget *blue_scale2 = gtk_hscale_new_with_range(0, 255, 1);
	GtkWidget *red_scale3 = gtk_hscale_new_with_range(0, 255, 1);
	GtkWidget *green_scale3 = gtk_hscale_new_with_range(0, 255, 1);
	GtkWidget *blue_scale3 = gtk_hscale_new_with_range(0, 255, 1);
*/

	GtkWidget *labelr1 = gtk_label_new("red");
	GtkWidget *labelg1 = gtk_label_new("green");
	GtkWidget *labelb1 = gtk_label_new("blue");
        GtkWidget *labelr2 = gtk_label_new("red");
        GtkWidget *labelg2 = gtk_label_new("green");
        GtkWidget *labelb2 = gtk_label_new("blue");
        GtkWidget *labelr3 = gtk_label_new("red");
        GtkWidget *labelg3 = gtk_label_new("green");
        GtkWidget *labelb3 = gtk_label_new("blue");



	GtkWidget *label1 = gtk_label_new("background");
	GtkWidget *label2 = gtk_label_new("chart lines");
	GtkWidget *label3 = gtk_label_new("plot lines");

	GtkWidget* scale_container = gtk_table_new(12, 2, TRUE);

	gtk_table_attach(GTK_TABLE(scale_container), label1,       1, 2, 0, 1, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), red_scale1,   1, 2, 1, 2, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), green_scale1, 1, 2, 2, 3, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), blue_scale1,  1, 2, 3, 4, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelr1,      0, 1, 1, 2, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelg1,      0, 1, 2, 3, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelb1,      0, 1, 3, 4, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);


	gtk_table_attach(GTK_TABLE(scale_container), label2,       1, 2, 4, 5, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), red_scale2,   1, 2, 5, 6, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), green_scale2, 1, 2, 6, 7, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), blue_scale2,  1, 2, 7, 8, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelr2,      0, 1, 5, 6, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelg2,      0, 1, 6, 7, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelb2,      0, 1, 7, 8, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);


	gtk_table_attach(GTK_TABLE(scale_container), label3,       1, 2, 8, 9, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), red_scale3,   1, 2, 9, 10, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), green_scale3, 1, 2, 10, 11, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), blue_scale3,  1, 2, 11, 12, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelr3,      0, 1, 9, 10, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelg3,      0, 1, 10, 11, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);
	gtk_table_attach(GTK_TABLE(scale_container), labelb3,      0, 1, 11, 12, GTK_EXPAND|GTK_FILL, 0, GTK_EXPAND|GTK_FILL, 0);


        gtk_paned_set_position(GTK_PANED(mbox), 550);

        gtk_paned_pack1(GTK_PANED(mbox),
                        GTK_WIDGET(scale_container),
                        TRUE, TRUE);

        gtk_paned_pack2(GTK_PANED(mbox),
                        GTK_WIDGET(button_container),
                        TRUE, TRUE);

//	int codes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};

	g_signal_connect (red_scale1, "change-value", G_CALLBACK(scale_value_chng), &codes[0]);
	g_signal_connect (green_scale1, "change-value", G_CALLBACK(scale_value_chng), &codes[1]);
	g_signal_connect (blue_scale1, "change-value", G_CALLBACK(scale_value_chng), &codes[2]);
	g_signal_connect (red_scale2, "change-value", G_CALLBACK(scale_value_chng), &codes[3]);
	g_signal_connect (green_scale2, "change-value", G_CALLBACK(scale_value_chng), &codes[4]);
	g_signal_connect (blue_scale2, "change-value", G_CALLBACK(scale_value_chng), &codes[5]);
	g_signal_connect (red_scale3, "change-value", G_CALLBACK(scale_value_chng), &codes[6]);
	g_signal_connect (green_scale3, "change-value", G_CALLBACK(scale_value_chng), &codes[7]);
	g_signal_connect (blue_scale3, "change-value", G_CALLBACK(scale_value_chng), &codes[8]);

//	g_signal_connect (ok_button, "button-release", G_CALLBACK(close_colors), &window);
//	g_signal_connect (cancel_button, "button-release", G_CALLBACK(close_colors), &window);

	gtk_widget_show_all(window);
	return TRUE;
}

gboolean button_release(GtkWidget *widget, GdkEventButton *event, gpointer data){
	printf("nothing here !\n");
	return TRUE;

	//printf("%s received button release\n", (char *)data);
	//	GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	GtkWidget* color_widget = gtk_color_selection_dialog_new("background color");

	//GtkColorSelectionDialog* color_widget; 
	//= gtk_color_selection_dialog_new("background color"); 
	//	color_widget->colorsel = gtk_color_selection_new();
	//color_widget = gtk_color_selection_dialog_new("background color");

        g_signal_connect (color_widget, "destroy",
                          G_CALLBACK(setup_popup_window),
                          NULL);


/*
        gtk_container_set_border_width (GTK_CONTAINER (window), 2);
        gtk_window_set_default_size(GTK_WINDOW(window),200,150);
        gtk_window_set_title(GTK_WINDOW(window),
                             "background colors");


        g_signal_connect (window, "destroy",
                          G_CALLBACK(on_destroy),
                          NULL);

	gtk_color_selection_dialog_set_current_color (GTK_COLOR_SELECTION_DIALOG(color_widget), &chart_colors.background);
	gtk_container_add (GTK_CONTAINER (window), color_widget);	
*/

	//GtkWidget* color_widget2 = gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(color_widget));
	//gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(color_widget2), &chart_colors.background);
	

	//g_signal_connect(G_OBJECT(color_widget->ok_butto), "button-release-event", G_CALLBACK(save_colors), w_graph);


	gtk_widget_show_all (color_widget);
//	gtk_main ();

	printf("here 1\n");
	return 0;
}





gboolean on_expose_event (GtkWidget *widget,
                          GdkEventExpose *event,
                          gpointer data)
{
	cairo_format_t format;
	cairo_surface_t *target;
	cairo_t *context;
	cairo_status_t status;
	double red, green, blue, alpha;
	double x1, y1, x2, y2;
//	GtkRequisition requisition;
//	gtk_widget_size_request(data, &requisition);
//w_graph->allocation.width
	int width = w_graph->allocation.width; 
	int height = w_graph->allocation.height;

//	printf("h: %d w: %d\n", height, width);
//	gtk_widget_get_size_request(GTK_WIDGET(data), &width, &height);

	int stride;
	unsigned char *img_data;

	//format = CAIRO_FORMAT_RGB24;
	format = CAIRO_FORMAT_ARGB32;

	//target = cairo_image_surface_create(format, width, height);
	stride = cairo_format_stride_for_width (format, width);
	img_data = malloc (stride * height);

	target = cairo_image_surface_create_for_data(img_data, format, width, height, stride);
//context = cairo_create(target);

context = gdk_cairo_create(w_graph->window);
//	context = cairo_create(target);
	//gdk_cairo_create(w_graph->window);

	status = cairo_status(context);
	if(status != 0){
		printf("Error: %s\n", cairo_status_to_string(status) );
		//cairo_destroy(context);
		exit(1);
	}
//	printf("cairo_status: %s\n", cairo_status_to_string(status) );


	red = (double)chart_colors.background_r/255;
	green = (double)chart_colors.background_g/255;
	blue = (double)chart_colors.background_b/255;
	alpha = 1.0;

//	cairo_set_source_rgb(context, red, green, blue);
//	cairo_set_antialias(context, CAIRO_ANTIALIAS_DEFAULT);

	x1 = 0;
	y1 = 0;
	x2 = width;
	y2 = height;


        cairo_set_source_rgba(context, red, green, blue, alpha);
        cairo_rectangle (context, 0, 0, width, height);
        cairo_fill (context);


	red = (double)chart_colors.hlines_r/255;
	green = (double)chart_colors.hlines_g/255;
	blue = (double)chart_colors.hlines_b/255;
	alpha = 1.0;

	cairo_set_dash (context, 0, 0, 0);
	cairo_set_source_rgba(context, red, green, blue, alpha);
	cairo_set_line_width (context, 1);


	cairo_move_to(context, x1, y1);
	cairo_line_to(context, x2, y2);


	cairo_stroke(context);








/*

	cairo_clip_extents(context, &x1, &y1, &x2, &y2);
	cairo_paint(context);


        cairo_rectangle (context, 0, 0, width, height);
        cairo_fill (context);


	cairo_show_page(context);

*/

//gtk_widget_show_all (window);
//gtk_main ();

	//sleep(10);


static int write = 0;
//const char *filename = "./test2.png";
//write++;
//cairo_surface_finish(target);
if(write == 100){
	status = cairo_surface_write_to_png(target, "./test1.png");
	write = 101;
	printf("wrote image\n");
	printf("Error: %s\n", cairo_status_to_string(status) );
	status = cairo_surface_status(target);
	printf("Error: %s\n", cairo_status_to_string(status) );
	sleep(1);
}else if(write < 100){
	write++;
}


	cairo_destroy(context);
	cairo_surface_destroy(target);	

	return 0;
}
