/** * igt_paint_test_pattern: * @cr: cairo drawing context * @width: width of the visible area * @height: height of the visible area * * This functions draws an entire set of test patterns for the given visible * area using the drawing context @cr. This is useful for manual visual * inspection of displayed framebuffers. * * The test patterns include * - corner markers to check for over/underscan and * - a set of color and b/w gradients. */ void igt_paint_test_pattern(cairo_t *cr, int width, int height) { paint_test_patterns(cr, width, height); cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); /* Paint corner markers */ paint_marker(cr, 0, 0); paint_marker(cr, width, 0); paint_marker(cr, 0, height); paint_marker(cr, width, height); igt_assert(!cairo_status(cr)); }
/** 根据共享数组,刷新显示 */ G_MODULE_EXPORT int paint(GtkWidget *widget, GdkEvent *event, gpointer data) { cairo_t *cr; int i; double y; cr = gdk_cairo_create (widget->window); paint_bg(cr); //画图(蓝色) cairo_set_line_width(cr, 1); cairo_set_source_rgb(cr, 0, 0, 1); y = TOY(buffer[0])>500 ? 500 : TOY(buffer[0]); cairo_move_to(cr, 0, TOY(buffer[0])); for (i=1; i<512; i++) { //y轴分为10个div,每个div包含50个点 //因此每1dBm对应的y坐标应该为50/ydiv //y = (cfg.yref+buffer[i-1]);//dBm值 //y *= -1*50/cfg.ydiv;//坐标值 y = power2axis(buffer[i-1]); cairo_line_to(cr, i-1, y>500?500:y); } cairo_stroke(cr); paint_marker(cr); cairo_destroy(cr); return TRUE; }
G_MODULE_EXPORT void btn_save_cb(GtkButton *btn, gpointer data) { cairo_t *cr; cairo_surface_t *surface; int i; double y; surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 512, 500); cr = cairo_create (surface); paint_bg(cr); paint_marker(cr); //画图(蓝色) cairo_set_line_width(cr, 1); cairo_set_source_rgb(cr, 0, 0, 1); y = TOY(buffer[0])>500 ? 500 : TOY(buffer[0]); cairo_move_to(cr, 0, TOY(buffer[0])); for (i=1; i<512; i++) { y = cfg.yref + yscale*TOY(buffer[i-1]); //cairo_line_to(cr, i-1, cfg.yref+yscale*TOY(buffer[i-1])); cairo_line_to(cr, i-1, y>500?500:y); } cairo_stroke(cr); cairo_surface_write_to_png(surface, "save.png"); cairo_destroy(cr); cairo_surface_destroy(surface); }
void MarkerColumn::draw(const Point& p_pos,const Size& p_size,const Rect& p_exposed) { Painter &p=*get_painter(); p.draw_fill_rect(Point(),p_size,color(COLOR_GLOBAL_VIEW_BG)); int beat_from=global_view->get_beat_at_pixel(0); int beat_to=global_view->get_beat_at_pixel(p_size.height); for (int i=beat_from;i<=beat_to;i++) { // DRAW MARK if (i==inside_beat && inside) { int h=global_view->get_beat_pixel( i ); p.draw_fill_rect(Point(0,h),Size(p_size.width,1),color(COLOR_GLOBAL_VIEW_MOUSE_OVER_BEAT)); } int marker_idx=marker_list->get_exact_index( i ); if (marker_idx>=0) { //marker at pos paint_marker(p,marker_idx,p_size.width); } } // Paint markers that may not be visible if (marker_list->get_exact_index( beat_from )==INVALID_STREAM_INDEX && marker_list->get_prev_index( beat_from )>=0) { paint_marker(p, marker_list->get_prev_index( beat_from ),p_size.width ); } int line_pos=p_size.width-1; p.draw_fill_rect(Point(line_pos,0),Size(1,p_size.height),color(COLOR_GLOBAL_VIEW_SEPARATOR)); }