Add support for logo, displayed in viewport. Signed-off-by: Guilhem Bonnefille <guilhem.bonnefi...@gmail.com> --- src/vikmapslayer.c | 4 ++++ src/vikmapsource.c | 14 ++++++++++++++ src/vikmapsource.h | 2 ++ src/vikmapsourcedefault.c | 18 +++++++++++++++++- src/vikviewport.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/vikviewport.h | 4 ++++ src/vikwindow.c | 1 + 7 files changed, 86 insertions(+), 1 deletions(-)
diff --git a/src/vikmapslayer.c b/src/vikmapslayer.c index bf926f8..2fda822 100644 --- a/src/vikmapslayer.c +++ b/src/vikmapslayer.c @@ -848,6 +848,10 @@ static void maps_layer_draw ( VikMapsLayer *vml, VikViewport *vvp ) const gchar *copyright = vik_map_source_get_copyright ( MAPS_LAYER_NTH_TYPE(vml->maptype) ); vik_viewport_add_copyright ( vvp, copyright ); + /* Logo */ + GdkPixbuf *logo = vik_map_source_get_logo ( MAPS_LAYER_NTH_TYPE(vml->maptype) ); + vik_viewport_add_logo ( vvp, logo ); + /* get corner coords */ if ( vik_viewport_get_coord_mode ( vvp ) == VIK_COORD_UTM && ! vik_viewport_is_one_zone ( vvp ) ) { /* UTM multi-zone stuff by Kit Transue */ diff --git a/src/vikmapsource.c b/src/vikmapsource.c index 5378447..26e55ec 100644 --- a/src/vikmapsource.c +++ b/src/vikmapsource.c @@ -56,6 +56,7 @@ vik_map_source_class_init (VikMapSourceClass *klass) klass->get_copyright = NULL; klass->get_license = NULL; klass->get_license_url = NULL; + klass->get_logo = NULL; klass->get_uniq_id = NULL; klass->get_label = NULL; klass->get_tilesize_x = NULL; @@ -117,6 +118,19 @@ vik_map_source_get_license_url (VikMapSource *self) return (*klass->get_license_url)(self); } +const GdkPixbuf * +vik_map_source_get_logo (VikMapSource *self) +{ + VikMapSourceClass *klass; + g_return_val_if_fail (self != NULL, NULL); + g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), NULL); + klass = VIK_MAP_SOURCE_GET_CLASS(self); + + g_return_val_if_fail (klass->get_logo != NULL, NULL); + + return (*klass->get_logo)(self); +} + guint8 vik_map_source_get_uniq_id (VikMapSource *self) { diff --git a/src/vikmapsource.h b/src/vikmapsource.h index c0b80f3..2400fec 100644 --- a/src/vikmapsource.h +++ b/src/vikmapsource.h @@ -46,6 +46,7 @@ struct _VikMapSourceClass const gchar *(* get_copyright) (VikMapSource * self); const gchar *(* get_license) (VikMapSource * self); const gchar *(* get_license_url) (VikMapSource * self); + const GdkPixbuf *(* get_logo) (VikMapSource * self); guint8 (* get_uniq_id) (VikMapSource * self); const gchar * (* get_label) (VikMapSource * self); @@ -70,6 +71,7 @@ GType vik_map_source_get_type (void) G_GNUC_CONST; const gchar *vik_map_source_get_copyright (VikMapSource * self); const gchar *vik_map_source_get_license (VikMapSource * self); const gchar *vik_map_source_get_license_url (VikMapSource * self); +const GdkPixbuf *vik_map_source_get_logo (VikMapSource * self); guint8 vik_map_source_get_uniq_id (VikMapSource * self); const gchar *vik_map_source_get_label (VikMapSource * self); diff --git a/src/vikmapsourcedefault.c b/src/vikmapsourcedefault.c index aa2357a..a85bba9 100644 --- a/src/vikmapsourcedefault.c +++ b/src/vikmapsourcedefault.c @@ -24,6 +24,7 @@ static const gchar *map_source_get_copyright (VikMapSource *self); static const gchar *map_source_get_license (VikMapSource *self); static const gchar *map_source_get_license_url (VikMapSource *self); +static const GdkPixbuf *map_source_get_logo (VikMapSource *self); static guint8 map_source_get_uniq_id (VikMapSource *self); static const gchar *map_source_get_label (VikMapSource *self); @@ -42,7 +43,8 @@ struct _VikMapSourceDefaultPrivate gchar *copyright; gchar *license; gchar *license_url; - + GdkPixbuf *logo; + guint8 uniq_id; gchar *label; guint16 tilesize_x; @@ -79,6 +81,7 @@ vik_map_source_default_init (VikMapSourceDefault *object) priv->copyright = NULL; priv->license = NULL; priv->license_url = NULL; + priv->logo = NULL; } static void @@ -95,6 +98,8 @@ vik_map_source_default_finalize (GObject *object) priv->license = NULL; g_free (priv->license_url); priv->license_url = NULL; + g_free (priv->logo); + priv->license_url = NULL; G_OBJECT_CLASS (vik_map_source_default_parent_class)->finalize (object); } @@ -217,6 +222,7 @@ vik_map_source_default_class_init (VikMapSourceDefaultClass *klass) parent_class->get_copyright = map_source_get_copyright; parent_class->get_license = map_source_get_license; parent_class->get_license_url = map_source_get_license_url; + parent_class->get_logo = map_source_get_logo; parent_class->get_uniq_id = map_source_get_uniq_id; parent_class->get_label = map_source_get_label; parent_class->get_tilesize_x = map_source_get_tilesize_x; @@ -329,6 +335,16 @@ map_source_get_license_url (VikMapSource *self) return priv->license_url; } +static const GdkPixbuf * +map_source_get_logo (VikMapSource *self) +{ + g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL); + + VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); + + return priv->logo; +} + static guint8 map_source_get_uniq_id (VikMapSource *self) { diff --git a/src/vikviewport.c b/src/vikviewport.c index edb0cd0..a11e533 100644 --- a/src/vikviewport.c +++ b/src/vikviewport.c @@ -84,6 +84,7 @@ struct _VikViewport { GdkGC *scale_bg_gc; GSList *copyrights; + GSList *logos; /* Wether or not display OSD info */ gboolean draw_scale; @@ -345,6 +346,7 @@ void vik_viewport_clear ( VikViewport *vvp ) g_return_if_fail ( vvp != NULL ); gdk_draw_rectangle(GDK_DRAWABLE(vvp->scr_buffer), vvp->background_gc, TRUE, 0, 0, vvp->width, vvp->height); vik_viewport_reset_copyrights ( vvp ); + vik_viewport_reset_logos ( vvp ); } void vik_viewport_set_draw_scale ( VikViewport *vvp, gboolean draw_scale ) @@ -547,6 +549,27 @@ void vik_viewport_draw_centermark ( VikViewport *vvp ) } +void vik_viewport_draw_logo ( VikViewport *vvp ) +{ + g_return_if_fail ( vvp != NULL ); + + /* compute copyrights string */ + gint PAD = 10; + guint len = g_slist_length ( vvp->logos ); + gint x = vvp->width - PAD; + gint y = PAD; + int i; + for (i = 0 ; i < len ; i++) + { + GdkPixbuf *logo = g_slist_nth_data ( vvp->logos, i ); + gint width = gdk_pixbuf_get_width ( logo ); + gint height = gdk_pixbuf_get_height ( logo ); + vik_viewport_draw_pixbuf ( vvp, logo, 0, 0, x - width, y, width, height ); + x = x - width - PAD; + } + +} + void vik_viewport_sync ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); @@ -1192,3 +1215,24 @@ void vik_viewport_add_copyright ( VikViewport *vp, const gchar *copyright ) } } } + +void vik_viewport_reset_logos ( VikViewport *vp ) +{ + g_return_if_fail ( vp != NULL ); + /* do not free elem */ + g_slist_free ( vp->logos ); + vp->logos = NULL; +} + +void vik_viewport_add_logo ( VikViewport *vp, const GdkPixbuf *logo ) +{ + g_return_if_fail ( vp != NULL ); + if ( logo ) + { + GdkPixbuf *found = NULL; /* FIXME (GdkPixbuf*)g_slist_find_custom ( vp->logos, logo, (GCompareFunc)== ); */ + if ( found == NULL ) + { + vp->logos = g_slist_prepend ( vp->logos, logo ); + } + } +} diff --git a/src/vikviewport.h b/src/vikviewport.h index 4213317..a7017b1 100644 --- a/src/vikviewport.h +++ b/src/vikviewport.h @@ -138,6 +138,9 @@ gint vik_viewport_get_height ( VikViewport *vvp ); void vik_viewport_reset_copyrights ( VikViewport *vp ); void vik_viewport_add_copyright ( VikViewport *vp, const gchar *copyright ); +void vik_viewport_reset_logos ( VikViewport *vp ); +void vik_viewport_add_logo ( VikViewport *vp, const GdkPixbuf *logo ); + /* Viewport features */ void vik_viewport_draw_scale ( VikViewport *vvp ); void vik_viewport_set_draw_scale ( VikViewport *vvp, gboolean draw_scale ); @@ -146,6 +149,7 @@ void vik_viewport_draw_copyright ( VikViewport *vvp ); void vik_viewport_draw_centermark ( VikViewport *vvp ); void vik_viewport_set_draw_centermark ( VikViewport *vvp, gboolean draw_centermark ); gboolean vik_viewport_get_draw_centermark ( VikViewport *vvp ); +void vik_viewport_draw_logo ( VikViewport *vvp ); /* Color/graphics context management */ void vik_viewport_set_background_color ( VikViewport *vvp, const gchar *color ); diff --git a/src/vikwindow.c b/src/vikwindow.c index 31c36e8..0759965 100644 --- a/src/vikwindow.c +++ b/src/vikwindow.c @@ -477,6 +477,7 @@ static void draw_redraw ( VikWindow *vw ) vik_viewport_draw_scale ( vw->viking_vvp ); vik_viewport_draw_copyright ( vw->viking_vvp ); vik_viewport_draw_centermark ( vw->viking_vvp ); + vik_viewport_draw_logo ( vw->viking_vvp ); vik_viewport_set_half_drawn ( vw->viking_vvp, FALSE ); /* just in case. */ } -- 1.7.2.3 ------------------------------------------------------------------------------ The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: Pinpoint memory and threading errors before they happen. Find and fix more than 250 security defects in the development cycle. Locate bottlenecks in serial and parallel code that limit performance. http://p.sf.net/sfu/intel-dev2devfeb _______________________________________________ Viking-devel mailing list Viking-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/viking-devel Viking home page: http://viking.sf.net/