Ho definito una classe così:
codice:
class line
{
public:
line(char*, char*, int, int, int, int, int);
void SetTextColor(float,float,float);
bool Step(cairo_t*);
private:
cairo_matrix_t matrix, backupmatrix;
int fade_in_max, stay_on_max, fade_out_max;
float fade_in_step, fade_out_step;
int current_step;
int max_transform_y, max_transform_x;
float transform_x_step, transform_y_step;
char* text;
char* author;
int win_x, win_y;
void Draw(cairo_t*);
void GetRows(cairo_t*);
float colormatrix[4];
float size;
char font[100];
int numrows;
struct row_t
{
int x;
int y;
char text[100];
} rows[50];
};
il problema è che quando da una delle due funzioni Step() oppure SetTextColor() tento di accedere a una delle proprietà della classe.. (ad esempio colormatrix, o qualunue altra) mi da segfault... (solo in quel momento, non prima)
questo è il codice che chiama la Step(), ho provato anche chiamando SetTextColor() e fa la stessa cosa...
codice:
#include <string.h>
#include <stdlib.h>
#include <cairo.h>
#include <gtk/gtk.h>
#include "lineclass.h"
#include "clientp.h"
GtkWidget *window;
line *text;
static gboolean on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
cairo_t *cr;
cr = gdk_cairo_create(widget->window);
int w,h;
gtk_window_get_size(GTK_WINDOW(widget), &w, &h);
cairo_set_source_rgb(cr, 1,1,1); //clear the screen
cairo_rectangle(cr, 0,0,w,h);
cairo_set_line_width(cr, 10);
cairo_stroke_preserve(cr);
cairo_fill(cr);
text->Step(cr); //****** chiamata incriminata
cairo_destroy(cr);
return FALSE;
}
gboolean TimerFunc(void*)
{
gtk_widget_queue_draw(window);
return TRUE;
}
int main (int argc, char *argv[])
{
srand(time(NULL));
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "KP's ClientP");
gtk_window_set_default_size(GTK_WINDOW(window), 1024, 768);
g_signal_connect(window, "expose-event", G_CALLBACK (on_expose_event), NULL);
g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_widget_set_app_paintable(window, TRUE);
gtk_widget_show_all(window);
g_timeout_add(80, TimerFunc, NULL);
line *text = new line("prova", "prova", 924, 678, 30, 30, 30); //*************** qui creo l'oggetto
gtk_main();
return 0;
}
grazie a tutti