render to image surface
This commit is contained in:
36
limit_set.c
36
limit_set.c
@@ -358,14 +358,8 @@ void drawAttractors(DrawingContext *ctx)
|
||||
|
||||
void draw(DrawingContext *ctx)
|
||||
{
|
||||
struct timeval current_time;
|
||||
gettimeofday(¤t_time, 0);
|
||||
double start_time = current_time.tv_sec + current_time.tv_usec*1e-6;
|
||||
|
||||
cairo_t *C = ctx->cairo;
|
||||
updateDimensions(ctx);
|
||||
|
||||
cairo_push_group(C);
|
||||
cairo_set_source_rgb(C, 1, 1, 1);
|
||||
cairo_paint(C);
|
||||
|
||||
@@ -378,7 +372,6 @@ void draw(DrawingContext *ctx)
|
||||
cairo_set_line_cap(C, CAIRO_LINE_CAP_ROUND);
|
||||
|
||||
if(limit_curve_valid) {
|
||||
|
||||
if(show_limit) {
|
||||
int last_inside = 0;
|
||||
for(int i = 0; i < n_group_elements; i++) {
|
||||
@@ -421,13 +414,7 @@ void draw(DrawingContext *ctx)
|
||||
sprintf(buf, "t = %.8f", parameter);
|
||||
cairo_show_text(C, buf);
|
||||
|
||||
cairo_pop_group_to_source(C);
|
||||
cairo_paint(C);
|
||||
cairo_surface_flush(cairo_get_target(C));
|
||||
|
||||
gettimeofday(¤t_time, 0);
|
||||
double end_time = current_time.tv_sec + current_time.tv_usec*1e-6;
|
||||
printf("draw() finished in %g seconds\n", end_time - start_time);
|
||||
}
|
||||
|
||||
void setup()
|
||||
@@ -544,10 +531,10 @@ int processEvent(GraphicsInfo *info, XEvent *ev)
|
||||
break;
|
||||
}
|
||||
|
||||
draw(info->context);
|
||||
return STATUS_REDRAW;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return STATUS_NOTHING;
|
||||
}
|
||||
|
||||
int main()
|
||||
@@ -586,7 +573,24 @@ int main()
|
||||
|
||||
startTimer(info);
|
||||
|
||||
while(!checkEvents(info, processEvent, draw)) {
|
||||
while(1) {
|
||||
int result = checkEvents(info, processEvent, NULL);
|
||||
if(result == STATUS_QUIT)
|
||||
return 0;
|
||||
else if(result == STATUS_REDRAW) {
|
||||
struct timeval current_time;
|
||||
gettimeofday(¤t_time, 0);
|
||||
double start_time = current_time.tv_sec + current_time.tv_usec*1e-6;
|
||||
|
||||
updateDimensions(info->context);
|
||||
draw(info->context);
|
||||
cairo_set_source_surface(info->front_context, info->buffer_surface, 0, 0);
|
||||
cairo_paint(info->front_context);
|
||||
|
||||
gettimeofday(¤t_time, 0);
|
||||
double end_time = current_time.tv_sec + current_time.tv_usec*1e-6;
|
||||
printf("drawing finished in %g seconds\n", end_time - start_time);
|
||||
}
|
||||
waitUpdateTimer(info);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user