static void render_point(GritsMarker *marker)
{
/* Draw outline */
- cairo_set_source_rgba(marker->cairo, 0, 0, 0, 1);
+ cairo_set_line_join(marker->cairo, CAIRO_LINE_JOIN_ROUND);
cairo_set_line_width(marker->cairo, marker->outline*2);
+ cairo_set_source_rgba(marker->cairo, 0, 0, 0, 1);
cairo_arc(marker->cairo, marker->xoff, marker->yoff, marker->radius,
0, 2*G_PI);
{
g_assert(marker->label);
+ /* Draw outline */
+ cairo_set_line_join(marker->cairo, CAIRO_LINE_JOIN_ROUND);
+ cairo_set_line_width(marker->cairo, marker->outline*2);
cairo_set_source_rgba(marker->cairo, 0, 0, 0, 1);
cairo_select_font_face(marker->cairo, "sans-serif",
CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
{
GritsMarker *marker = g_object_new(GRITS_TYPE_MARKER, NULL);
+ GRITS_OBJECT(marker)->skip = GRITS_SKIP_CENTER;
+
marker->display_mask = GRITS_MARKER_DMASK_POINT |
GRITS_MARKER_DMASK_LABEL;
marker->label = g_strdup(label);
- render_all(marker);
-
return marker;
}
marker->outline = 2;
marker->radius = 3;
+
/* this is the surface size, a guess really */
marker->width = marker->icon_width + 128;
marker->height = marker->icon_height + 64;
marker->yoff = marker->height/2;
marker->cairo = cairo_create(cairo_image_surface_create(
CAIRO_FORMAT_ARGB32, marker->width, marker->height));
+
/* clear the surface just in case */
cairo_set_operator(marker->cairo, CAIRO_OPERATOR_SOURCE);
//cairo_set_source_rgba(marker->cairo, 1.0, 0.0, 0.0, 0.3); // debug
gdouble width = cairo_image_surface_get_width(surface);
gdouble height = cairo_image_surface_get_height(surface);
+ if (!marker->tex)
+ render_all(marker);
+
if (marker->ortho) {
gdouble px, py, pz;
grits_viewer_project(GRITS_VIEWER(opengl),
point->lat, point->lon, point->elev,
&px, &py, &pz);
- gint win_width = GTK_WIDGET(opengl)->allocation.width;
- gint win_height = GTK_WIDGET(opengl)->allocation.height;
if (pz > 1)
return;
- glMatrixMode(GL_PROJECTION); glLoadIdentity();
- glMatrixMode(GL_MODELVIEW); glLoadIdentity();
- glOrtho(0, win_width, win_height, 0, 1, -1);
- glTranslated(px, win_height-py, 0);
+ GtkAllocation alloc;
+ gtk_widget_get_allocation(GTK_WIDGET(opengl), &alloc);
+ glTranslated(px, alloc.height-py, 0);
glRotatef(marker->angle, 0, 0, -1);
glTranslated(-marker->xoff, -marker->yoff, 0);
} else {
{
//g_debug("GritsMarker: finalize - %s", marker->label);
GritsMarker *marker = GRITS_MARKER(_marker);
- glDeleteTextures(1, &marker->tex);
- cairo_surface_t *surface = cairo_get_target(marker->cairo);
- cairo_surface_destroy(surface);
- cairo_destroy(marker->cairo);
+ if (marker->tex)
+ glDeleteTextures(1, &marker->tex);
+ if (marker->cairo) {
+ cairo_surface_t *surface = cairo_get_target(marker->cairo);
+ cairo_surface_destroy(surface);
+ cairo_destroy(marker->cairo);
+ }
g_free(marker->label);
- glDeleteTextures(1, &marker->tex);
}
static void grits_marker_class_init(GritsMarkerClass *klass)