/** * gtk_plot_polar_new: * @drawable: * * * * Return value: */ GtkWidget* gtk_plot_polar_new (GdkDrawable *drawable) { GtkWidget* plot; plot = gtk_widget_new (gtk_plot_polar_get_type (), NULL); gtk_plot_polar_construct(GTK_PLOT_POLAR(plot), drawable); return plot; }
GtkWidget* gtk_plot_polar_new (GdkDrawable *drawable) { GtkPlotPolar *plot; plot = gtk_type_new (gtk_plot_polar_get_type ()); gtk_plot_polar_construct(GTK_PLOT_POLAR(plot), drawable); return GTK_WIDGET (plot); }
/** * gtk_plot_polar_new_with_size: * @drawable: * @width: * @height: * * * * Return value: */ GtkWidget* gtk_plot_polar_new_with_size (GdkDrawable *drawable, gdouble width, gdouble height) { GtkWidget *plot; plot = gtk_widget_new (gtk_plot_polar_get_type (), NULL); gtk_plot_polar_construct_with_size(GTK_PLOT_POLAR(plot), drawable, width, height); return(plot); }
static void gtk_plot_polar_real_get_point(GtkWidget *widget, gint px, gint py, gdouble *x, gdouble *y) { GtkPlot *plot; gint xp, yp, width, height; gdouble r = 0; gdouble angle = 0; gint ox, oy, size; gdouble rotation; plot = GTK_PLOT(widget); xp = plot->internal_allocation.x; yp = plot->internal_allocation.y; width = plot->internal_allocation.width; height = plot->internal_allocation.height; rotation = GTK_PLOT_POLAR(widget)->rotation; ox = xp + width / 2; oy = yp + height / 2; size = MIN(width, height); px = px - ox; py = oy - py; if(px == 0){ if(py >= 0) angle = 90.0 - rotation; if(py < 0) angle = 270.0 - rotation; } else { angle = (gdouble) abs(py) / (gdouble) abs(px); angle = atan(angle); angle = angle * 180.0 / PI; if(px >= 0 && py < 0) angle = 360.0 - angle; if(px < 0 && py >= 0) angle = 180.0 - angle; if(px < 0 && py < 0) angle += 180.0; angle -= rotation; } if(angle >= 360.0) angle -= 360.0; if(angle < 0.0) angle = 360.0 + angle; r = sqrt(px * px + py * py); *x = 2.0 * r * plot->ymax / (gdouble) size; *y = plot->reflect_y ? -angle : angle; }
static void gtk_plot_polar_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GtkPlotPolar *plot; plot = GTK_PLOT_POLAR (object); switch(prop_id){ case ARG_ROTATION: plot->rotation = g_value_get_double(value); break; } }
static void gtk_plot_polar_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GtkPlotPolar *plot; plot = GTK_PLOT_POLAR (object); switch(prop_id){ case ARG_ROTATION: g_value_set_double(value, plot->rotation); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void gtk_plot_polar_real_get_pixel(GtkWidget *widget, gdouble x, gdouble y, gdouble *px, gdouble *py) { GtkPlot *plot; GtkPlotPolar *polar; gdouble xp, yp, width, height, size; gdouble ox, oy; gint sign = 1; gdouble min; plot = GTK_PLOT(widget); polar = GTK_PLOT_POLAR(widget); if(plot->reflect_y) sign = -1; xp = plot->internal_allocation.x; yp = plot->internal_allocation.y; width = plot->internal_allocation.width; height = plot->internal_allocation.height; size = MIN(width, height) / 2.; ox = xp + width / 2.0; oy = yp + height / 2.0; min = plot->left->ticks.min; plot->left->ticks.min = 0.0; x = gtk_plot_axis_ticks_transform(plot->left, x)*size; plot->left->ticks.min = min; *px = ox + x * cos((y + polar->rotation) / 180. * PI * sign); *py = oy - x * sin((y + polar->rotation)/ 180. * PI * sign); }
static void gtk_plot_polar_real_paint (GtkWidget *widget) { GtkPlot *plot; GtkPlotText *child_text; GtkStyle *style; GdkPixmap *pixmap; GList *dataset; GList *text; gint width, height; gint xoffset, yoffset ; gdouble min; if(!gtk_widget_get_visible(widget)) return; plot = GTK_PLOT(widget); xoffset = plot->internal_allocation.x; yoffset = plot->internal_allocation.y; width = plot->internal_allocation.width; height = plot->internal_allocation.height; style = gtk_widget_get_style(widget); pixmap = plot->drawable; gtk_plot_pc_gsave(plot->pc); gtk_plot_pc_set_color(plot->pc, &plot->background); if(!gtk_plot_is_transparent(GTK_PLOT(plot))) gtk_plot_pc_draw_rectangle (plot->pc, TRUE, xoffset, yoffset, width , height); /* draw frame to guide the eyes*/ /* gdk_draw_rectangle (pixmap, gc, FALSE, xoffset, yoffset, width , height); */ /* draw the ticks & grid lines */ min = plot->left->ticks.min; plot->left->ticks.min = 0.0; gtk_plot_axis_ticks_recalc(plot->left); gtk_plot_axis_ticks_recalc(plot->bottom); plot->left->ticks.min = min; if(plot->left->is_visible) { GtkPlotVector tick_direction; tick_direction.x = 1.; tick_direction.y = 0.; plot->left->origin.x = (gfloat)width*plot->left_align; plot->left->origin.y = height; gtk_plot_polar_draw_axis(GTK_PLOT_POLAR(plot), plot->left, tick_direction); gtk_plot_polar_draw_labels(GTK_PLOT_POLAR(plot), plot->left, tick_direction); } if(plot->top->is_visible) { GtkPlotVector tick_direction; tick_direction.x = 0.; tick_direction.y = 1.; plot->left->direction.x = 1; plot->left->direction.y = 0; plot->left->origin.x = 0; plot->left->origin.y = (gfloat)height*plot->left_align; gtk_plot_polar_draw_axis(GTK_PLOT_POLAR(plot), plot->left, tick_direction); gtk_plot_polar_draw_labels(GTK_PLOT_POLAR(plot), plot->left, tick_direction); plot->left->direction.x = 0; plot->left->direction.y = -1; } if(plot->bottom->is_visible) { gtk_plot_polar_draw_circle(GTK_PLOT_POLAR(plot)); } gtk_plot_polar_draw_grids(GTK_PLOT_POLAR(plot)); dataset = plot->data_sets; while(dataset) { GTK_PLOT_DATA_CLASS(GTK_OBJECT_GET_CLASS(GTK_OBJECT(dataset->data)))->draw_data(GTK_PLOT_DATA(dataset->data)); dataset = dataset->next; } text = plot->text; while(text) { child_text = (GtkPlotText *) text->data; gtk_plot_draw_text(plot, *child_text); text = text->next; } GTK_PLOT_CLASS(GTK_OBJECT_GET_CLASS(GTK_OBJECT(plot)))->draw_legends(widget); gtk_plot_pc_grestore(plot->pc); }