static void comment_view_set_bounds (SheetObjectView *sov, double const *coords, gboolean visible) { CommentView *cv = (CommentView *)sov; GocPoints *points = goc_points_new (3); GocItem *item = GOC_ITEM (GOC_GROUP (sov)->children->data); if (visible) { SheetObject *so = sheet_object_view_get_so (sov); SheetControlGUI const *scg = GNM_SIMPLE_CANVAS (item->canvas)->scg; double scale; gint64 x, y, dx; int far_col; GnmRange const *r = gnm_sheet_merge_is_corner (so->sheet, &so->anchor.cell_bound.start); scale = 1. / item->canvas->pixels_per_unit; if (r != NULL) far_col = 1 + r->end.col; else far_col = 1 + so->anchor.cell_bound.start.col; /* TODO : This could be optimized using the offsets associated with the visible region */ /* Add 1 to y because we measure from start, x is measured from end, so * it does not need it */ y = scg_colrow_distance_get (scg, FALSE, 0, so->anchor.cell_bound.start.row)+ 1; points->points[0].y = scale * y; points->points[1].y = scale * y; points->points[2].y = scale * y + cv->comment_indicator_size; dx = cv->comment_indicator_size; x = scg_colrow_distance_get (scg, TRUE, 0, far_col); points->points[0].x = scale * x - dx; points->points[1].x = scale * x; points->points[2].x = scale * x; goc_item_set (item, "points", points, NULL); goc_points_unref (points); goc_item_show (GOC_ITEM (sov)); } else goc_item_hide (GOC_ITEM (sov)); }
static void goc_polyline_get_property (GObject *gobject, guint param_id, GValue *value, GParamSpec *pspec) { GocPolyline *polyline = GOC_POLYLINE (gobject); switch (param_id) { case POLYLINE_PROP_POINTS: { unsigned i; GocPoints *points = goc_points_new (polyline->nb_points); for (i = 0; i < points->n; i++) points->points[i] = polyline->points[i]; g_value_set_boxed (value, points); goc_points_unref (points); break; } case POLYLINE_PROP_SPLINE: g_value_set_boolean (value, polyline->use_spline); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, param_id, pspec); return; /* NOTE : RETURN */ } }