[cairo] unable to get the dotted and continuous lines

RAVI NANJUNDAPPA nravi.n at samsung.com
Thu Aug 7 23:23:51 PDT 2014


hi Lokesh, 

I tried your sample code in my machine. 
I guess the program is fine except that I changed the rgb values in draw_graphlins() 
from 
cairo_set_source_rgb( cr, 0.8, 0.8, 0.8 );
to
cairo_set_source_rgb( cr, 0, 0, 0 );
After this change, am able to see the grid + blue line. 

So, I feel it was due to rgb values which was making the grid lines not recognized by eyes.
Please check this out in your environment too.

Thanks and Best Regards, 
N Ravi

------- Original Message -------
Sender : Lokesh Chakka<lvenkatakumarchakka at gmail.com>
Date : Aug 08, 2014 10:15 (GMT+05:30)
Title : [cairo] unable to get the dotted and continuous lines



Hello,


I newly started using Cairo. I am facing one problem with the Cairo function calls. I want to first draw Cartesian grids using hyphens with gray color and after that I want to plot a normal line in blue color.


I referred the program pen dashes at  Basic drawing in Cairo


But I am seeing only the blue color line. but not the Cartesian grids. Can some one help me by telling what mistake I am doing.


#include <cairo.h>
#include <gtk/gtk.h>
#include <math.h>
#include <inttypes.h>


uint16_t drawing_width = 300, drawing_height = 200;

uint16_t evaluate_y_coordinate( uint16_t y )
{
    return drawing_height - y;
}

static void draw_graphlines( cairo_t *cr )
{
    const uint16_t stepx = drawing_width/10, stepy = drawing_height/5;
    const double dashes[] = { 5, 10 };
    uint32_t i;

    cairo_set_source_rgb( cr, 0.8, 0.8, 0.8 );
    cairo_set_line_width( cr, 0.5 );
    cairo_set_dash ( cr, dashes, 2, 0 );
    for( i=0; i<drawing_width; i+=stepx )
    {//vertical lines
        cairo_move_to( cr, i, evaluate_y_coordinate( 0 ) );
        cairo_line_to( cr, i, evaluate_y_coordinate( drawing_height ) );
    }
    for( i=0; i<drawing_height; i+=stepy )
    {// horizontal lines
        cairo_move_to( cr, 0, evaluate_y_coordinate( i ) );
        cairo_line_to( cr, drawing_width, evaluate_y_coordinate( i ) );
    }
    cairo_stroke(cr);
    cairo_set_dash ( cr, dashes, 0, 0 );
}


static void do_drawing( GtkWidget *widget, cairo_t *cr, char *data )
{
    GdkRGBA rgba;

    draw_graphlines( cr );
    cairo_set_source_rgb( cr, 0, 0, 1 );
    cairo_set_line_width( cr, 2.0 );
    cairo_move_to( cr, 10, 10 );
    cairo_line_to( cr, 100, 100 );
    cairo_stroke(cr);
}


int main (int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *darea;
  
  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_
TOPLEVEL);

  darea = gtk_drawing_area_new();
  gtk_container_add(GTK_CONTAINER(window), darea);

  g_signal_connect(G_OBJECT(darea), "draw", G_CALLBACK(do_drawing), NULL);
  g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(window), drawing_width, drawing_height ); 
  gtk_window_set_title(GTK_WINDOW(window), "Fill & stroke");

  gtk_widget_show_all(window);

  gtk_main();

  return 0;
}




Thanks & Regards
--
Lokesh


More information about the cairo mailing list