void FerryRegionSymbolImpl::DrawIcon() { m_icon = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, AUGE_ICON_SIZE, AUGE_ICON_SIZE); m_cairo = cairo_create(m_icon); double size_2 = AUGE_ICON_SIZE / 2.0f; double cx = size_2; double cy = size_2; cairo_save(m_cairo); cairo_translate (m_cairo, cx, cy); cairo_scale(m_cairo,AUGE_ICON_SCALE,AUGE_ICON_SCALE); //cairo_rotate (m_cairo, m_rotation*PI/180.0f); cairo_rectangle(m_cairo, -size_2, -size_2, AUGE_ICON_SIZE, AUGE_ICON_SIZE); if(m_pFill!=NULL) { GColor& color = m_pFill->GetColor(); cairo_set_source_rgba(m_cairo, color.GetRedF(), color.GetGreenF(), color.GetBlueF(), color.GetAlphaF()); if(m_pStroke==NULL) { cairo_fill(m_cairo); } else { cairo_fill_preserve(m_cairo); } } if(m_pStroke!=NULL) { set_stroke_style(m_cairo, m_pStroke); cairo_stroke(m_cairo); } cairo_restore(m_cairo); //cairo_surface_write_to_png(m_icon, "G:\\temp\\map\\icon.png"); }
RESULTCODE FerryRegionSymbolImpl::Draw(Geometry* pGeometry, Renderer* pRenderer, Transformation* pTransform) { if(pGeometry==NULL) { return AG_FAILURE; } augeGeometryType geom_type = pGeometry->GeometryType(); if((geom_type!=augeGTPolygon) &&(geom_type!=augeGTMultiPolygon)) { return AG_FAILURE; } if(m_size==0) { return AG_FAILURE; } RendererCairo* pRendererCairo = static_cast<RendererCairo*>(pRenderer); cairo_t *canvas_cairo = pRendererCairo->GetCairo(); cairo_surface_t *canvas_surface=pRendererCairo->GetCairoSurface(); Fill *pFill = GetFill(); Stroke *pStroke = GetStroke(); g_uchar* wkb = pGeometry->AsBinary(); cairo_new_path(canvas_cairo); switch(geom_type) { case augeGTPolygon: build_path(canvas_cairo, (WKBPolygon*)wkb, pTransform); break; case augeGTMultiPolygon: build_path(canvas_cairo, (WKBMultiPolygon*)wkb, pTransform); break; } if(pFill!=NULL) { GColor& color = pFill->GetColor(); cairo_set_source_rgba(canvas_cairo, color.GetRedF(), color.GetGreenF(), color.GetBlueF(), color.GetAlphaF()); if(pStroke==NULL) cairo_fill(canvas_cairo); else cairo_fill_preserve(canvas_cairo); } if(pStroke!=NULL) { set_stroke_style(canvas_cairo, pStroke); cairo_stroke(canvas_cairo); } return AG_SUCCESS; }
void TriangleMarkerImpl::DrawIcon() { m_icon = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, AUGE_ICON_SIZE, AUGE_ICON_SIZE); m_cairo = cairo_create(m_icon); size_t count = sizeof(g_auge_marker_triangle_points) / sizeof(double) / 2; double offset_x=0, offset_y=0; double size_2 = AUGE_ICON_SIZE / 2.0f; double cx=size_2; double cy=size_2; double x, y; cairo_new_path(m_cairo); cairo_translate (m_cairo, cx, cy); cairo_scale(m_cairo,AUGE_ICON_SCALE,AUGE_ICON_SCALE); //cairo_rotate (m_cairo, m_rotation*PI/180.0f); x = g_auge_marker_triangle_points[0][0]; y = g_auge_marker_triangle_points[0][1]; cairo_move_to(m_cairo, x*size_2, y*size_2); for(size_t i=1; i<count; i++) { x = g_auge_marker_triangle_points[i][0]; y = g_auge_marker_triangle_points[i][1]; cairo_line_to(m_cairo, x*size_2, y*size_2); } cairo_close_path(m_cairo); cairo_rotate (m_cairo, m_rotation*PI/180.0f); if(m_pFill!=NULL) { GColor& color = m_pFill->GetColor(); cairo_set_source_rgba(m_cairo, color.GetRedF(), color.GetGreenF(), color.GetBlueF(), color.GetAlphaF()); if(m_pStroke==NULL) { cairo_fill(m_cairo); } else { cairo_fill_preserve(m_cairo); } } if(m_pStroke!=NULL) { set_stroke_style(m_cairo, m_pStroke); cairo_stroke(m_cairo); } //cairo_surface_write_to_png(m_icon, "G:\\temp\\map\\icon.png"); }
static void render_frame_stroke (cairo_t *cr, GtkRoundedBox *border_box, const double border_width[4], GdkRGBA colors[4], guint hidden_side, GtkBorderStyle stroke_style) { gboolean different_colors, different_borders; GtkRoundedBox stroke_box; guint i; different_colors = !gdk_rgba_equal (&colors[0], &colors[1]) || !gdk_rgba_equal (&colors[0], &colors[2]) || !gdk_rgba_equal (&colors[0], &colors[3]); different_borders = border_width[0] != border_width[1] || border_width[0] != border_width[2] || border_width[0] != border_width[3] ; stroke_box = *border_box; _gtk_rounded_box_shrink (&stroke_box, border_width[GTK_CSS_TOP] / 2.0, border_width[GTK_CSS_RIGHT] / 2.0, border_width[GTK_CSS_BOTTOM] / 2.0, border_width[GTK_CSS_LEFT] / 2.0); if (!different_colors && !different_borders && hidden_side == 0) { double length = 0; /* FAST PATH: * Mostly expected to trigger for focus rectangles */ for (i = 0; i < 4; i++) { length += _gtk_rounded_box_guess_length (&stroke_box, i); } _gtk_rounded_box_path (&stroke_box, cr); gdk_cairo_set_source_rgba (cr, &colors[0]); set_stroke_style (cr, border_width[0], stroke_style, length); cairo_stroke (cr); } else { GtkRoundedBox padding_box; padding_box = *border_box; _gtk_rounded_box_shrink (&padding_box, border_width[GTK_CSS_TOP], border_width[GTK_CSS_RIGHT], border_width[GTK_CSS_BOTTOM], border_width[GTK_CSS_LEFT]); for (i = 0; i < 4; i++) { if (hidden_side & (1 << i)) continue; if (border_width[i] == 0) continue; cairo_save (cr); if (i == 0) _gtk_rounded_box_path_top (border_box, &padding_box, cr); else if (i == 1) _gtk_rounded_box_path_right (border_box, &padding_box, cr); else if (i == 2) _gtk_rounded_box_path_bottom (border_box, &padding_box, cr); else if (i == 3) _gtk_rounded_box_path_left (border_box, &padding_box, cr); cairo_clip (cr); _gtk_rounded_box_path_side (&stroke_box, cr, i); gdk_cairo_set_source_rgba (cr, &colors[i]); set_stroke_style (cr, border_width[i], stroke_style, _gtk_rounded_box_guess_length (&stroke_box, i)); cairo_stroke (cr); cairo_restore (cr); } } }