Le samedi 23 mai 2009 à 11:31 +0200, Jean Bréfort a écrit :
> You need a GogRenderer. If you don't have one, create it, something
> like:
> 
> GogRenderer *rend = gog_renderer_new (graph);
> gog_renderer_update (rend, allocation->width, allocation->height);
> 
> 
> Then you need the GogView for the plot to know it's allocation:
> 
> GogView *view;
> g_object_get (G_OBJECT (rend), "view", &view, NULL);

This line is not needed, forget it:
> view = gog_view_find_child_view (view, chart);

and directly use this one:
> view = gog_view_find_child_view (view, plot);
> 
> and you can use the allocation to create the map:
> 
> map = gog_chart_map_new (plotpresent->gchart, &(view->allocation),
> x_axis, y_axis, NULL, FALSE);
> 
> Here, you might test if the map is valid and if the event occurred inside the 
> plot:
> if (gog_chart_map_is_valid (map) &&
>     event->x >= view->allocation.x && event->x < view->allocation.x + 
> view->allocation.w &&
>     event->y >= view->allocation.y && event->y < view->allocation.y + 
> view->allocation.h) {
>       x_map = gog_chart_map_get_axis_map (map, 0);
>       y_map = gog_chart_map_get_axis_map (map, 1);
>       x = gog_axis_map_from_view (x_map, event->x);
>       y = gog_axis_map_from_view (y_map, event->y);
> }
> 
> 
> Le mercredi 20 mai 2009 à 19:06 +0200, Jean Bréfort a écrit :
> > I'm not sure how you must do at the moment. I'll have to make some tests
> > and time is missing just now. But you surely need to take plot_area.x
> > and plot_area.y into account. Anyway this is related to the enhancement
> > feature #580545 even it is for an xy plot instead if a pie plot.
> > I intend to woekon that quite soon, and I'll let you know how things are
> > going.
> > 
> > Best regards,
> > Jean
> > 
> > Le mercredi 20 mai 2009 à 09:53 +0100, jcup...@gmail.com a écrit :
> > > Hi all,
> > > 
> > > I'm displaying a chart with libgoffice and I'd like to map motion
> > > notify event coordinates to axis positions.
> > > 
> > > I've got fairly close, but I can't see how to take account of the
> > > margins around the edges of the chart :-( Can anyone point me to some
> > > sample code that does this?
> > > 
> > > Here's what I have:
> > > 
> > >         axes = gog_chart_get_axes( plotpresent->gchart, GOG_AXIS_X );
> > >         x_axis = GOG_AXIS( axes->data );
> > >         g_slist_free( axes );
> > > 
> > >         axes = gog_chart_get_axes( plotpresent->gchart, GOG_AXIS_Y );
> > >         y_axis = GOG_AXIS( axes->data );
> > >         g_slist_free( axes );
> > > 
> > >         gog_chart_get_plot_area( plotpresent->gchart, &plot_area );
> > > 
> > >         map = gog_chart_map_new( plotpresent->gchart,
> > >                 &plot_area, x_axis, y_axis, NULL, FALSE );
> > > 
> > >         x_map = gog_chart_map_get_axis_map( map, 0 );
> > >         y_map = gog_chart_map_get_axis_map( map, 1 );
> > > 
> > >         x_canvas = event->x / (double) allocation->width;
> > >         y_canvas = event->y / (double) allocation->height;
> > > 
> > >         x = gog_axis_map_from_view( x_map, x_canvas );
> > >         y = gog_axis_map_from_view( y_map, y_canvas );
> > > 
> > >         gog_chart_map_free( map );
> > > 
> > >         printf( "event->x = %g, event->y = %g\n", event->x, event->y );
> > >         printf( "x_canvas = %g, y_canvas = %g\n", x_canvas, y_canvas );
> > >         printf( "x = %g, y = %g\n", x, y );
> > > 
> > > John
> > > _______________________________________________
> > > gnumeric-list mailing list
> > > gnumeric-list@gnome.org
> > > http://mail.gnome.org/mailman/listinfo/gnumeric-list

_______________________________________________
gnumeric-list mailing list
gnumeric-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gnumeric-list

Reply via email to