Ho definito una classe così:
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)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]; };
questo è il codice che chiama la Step(), ho provato anche chiamando SetTextColor() e fa la stessa cosa...
grazie a tutticodice:#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; }

Rispondi quotando