[Git][debian-gis-team/osm-gps-map][upstream] New upstream version 1.2.1
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Sat Aug 15 09:04:17 BST 2026
Bas Couwenberg pushed to branch upstream at Debian GIS Project / osm-gps-map
Commits:
82fe2b3a by Bas Couwenberg at 2026-08-15T09:47:51+02:00
New upstream version 1.2.1
- - - - -
21 changed files:
- .github/workflows/ci.yml
- + .github/workflows/pages.yml
- − .travis.yml
- Makefile.am
- NEWS
- catalog.xml
- configure.ac
- docs/reference/Makefile.am
- examples/Makefile.am
- examples/mapviewer.py
- osmgpsmap-1.0.pc.in
- src/Makefile.am
- src/osm-gps-map-image.c
- src/osm-gps-map-osd.c
- src/osm-gps-map-polygon.c
- src/osm-gps-map-source.c
- src/osm-gps-map-source.h
- src/osm-gps-map-track.c
- src/osm-gps-map-track.h
- src/osm-gps-map-widget.c
- + tests/test.py
Changes:
=====================================
.github/workflows/ci.yml
=====================================
@@ -1,20 +1,21 @@
-name: C/C++ CI
+name: CI
on:
push:
- branches: [ master ]
+ branches: [master]
pull_request:
- branches: [ master ]
+ branches: [master]
jobs:
build:
-
runs-on: ubuntu-latest
-
steps:
- - name: install dependencies
+ - uses: actions/checkout at v5
+
+ - name: Install dependencies
run: |
- sudo apt-get -y install \
+ sudo apt-get update
+ sudo apt-get install -y \
build-essential \
autoconf \
autoconf-archive \
@@ -23,14 +24,26 @@ jobs:
gtk-doc-tools \
libglib2.0-dev \
libgtk-3-dev \
- libsoup2.4-dev \
- libgirepository1.0-dev
- - uses: actions/checkout at v2
- - name: autogen
- run: ./autogen.sh
- - name: make
- run: make
+ libsoup-3.0-dev \
+ libgirepository1.0-dev \
+ python3-gi \
+ python3-cairo \
+ gir1.2-gtk-3.0 \
+ gir1.2-gdkpixbuf-2.0 \
+ xvfb
+
+ - name: Build
+ run: |
+ ./autogen.sh --prefix=/usr
+ make -j"$(nproc)"
+
- name: make check
run: make check
+
- name: make distcheck
run: make distcheck
+
+ - name: Install and run Python tests
+ run: |
+ sudo make install
+ xvfb-run --auto-servernum python3 -m unittest discover -v tests/
=====================================
.github/workflows/pages.yml
=====================================
@@ -0,0 +1,61 @@
+name: Pages
+
+# Deploy gtk-doc HTML to the gh-pages branch on every published release
+# (RC or final). Landing page + screenshots on gh-pages are preserved.
+on:
+ release:
+ types: [published]
+
+permissions:
+ contents: write
+
+jobs:
+ docs:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout release
+ uses: actions/checkout at v5
+
+ - name: Checkout gh-pages
+ uses: actions/checkout at v5
+ with:
+ ref: gh-pages
+ path: _gh-pages
+
+ - name: Install dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y \
+ build-essential \
+ autoconf \
+ autoconf-archive \
+ automake \
+ libtool \
+ gtk-doc-tools \
+ libglib2.0-dev \
+ libgtk-3-dev \
+ libsoup-3.0-dev \
+ libgirepository1.0-dev
+
+ - name: Build documentation
+ run: |
+ ./autogen.sh --prefix=/usr --enable-gtk-doc
+ make -j"$(nproc)"
+
+ - name: Update API docs on gh-pages
+ run: |
+ set -e
+ test -d docs/reference/html
+ rm -rf _gh-pages/docs/reference/html
+ mkdir -p _gh-pages/docs/reference
+ cp -a docs/reference/html _gh-pages/docs/reference/
+ cd _gh-pages
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ git add -A docs/reference/html
+ if git diff --staged --quiet; then
+ echo "No docs changes"
+ exit 0
+ fi
+ git commit -m "docs: API reference for ${{ github.event.release.tag_name }}"
+ git push origin HEAD:gh-pages
=====================================
.travis.yml deleted
=====================================
@@ -1,10 +0,0 @@
-language: c
-sudo: required
-dist: trusty
-before_install:
-- sudo apt-get -qq update
-- sudo apt-get -qq install gtk-doc-tools libglib2.0-dev libgtk-3-dev libsoup2.4-dev libgirepository1.0-dev
-before_script:
-- ./autogen.sh --enable-gtk-doc
-script:
-- make
=====================================
Makefile.am
=====================================
@@ -16,29 +16,30 @@ doc_DATA = \
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = osmgpsmap-1.0.pc
+# Unit tests ship in the tarball (CI/git also run them in-tree).
+EXTRA_DIST = tests/test.py
+
DISTCLEANFILES = gtk-doc.make
-# ChangeLog generation from nautils
+# Drop generated ChangeLog on VPATH distclean only.
distclean-local:
if test "$(srcdir)" = "."; then :; else \
rm -f ChangeLog; \
fi
+# Build ChangeLog from full git history for dist. NEWS is the curated release notes.
ChangeLog:
- $(AM_V_GEN)if test -d "$(srcdir)/.git"; then \
- (GIT_DIR=$(top_srcdir)/.git ./missing --run git log 0.7.3.. --stat -M -C --name-status --date=short --no-color) | fmt --split-only > $@.tmp \
+ $(AM_V_GEN)if test -d "$(top_srcdir)/.git"; then \
+ (cd "$(top_srcdir)" && git log --stat -M -C --name-status --date=short --no-color) > $@.tmp \
&& mv -f $@.tmp $@ \
|| ($(RM) $@.tmp; \
- echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
- (test -f $@ || echo git-log is required to generate this file >> $@)); \
+ echo "Failed to generate ChangeLog, your ChangeLog may be outdated" >&2; \
+ (test -f $@ || echo "git-log is required to generate this file" >> $@)); \
else \
test -f $@ || \
- (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
- echo A git checkout and git-log is required to generate this file >> $@); \
+ (echo "A git checkout and git-log is required to generate ChangeLog" >&2 && \
+ echo "A git checkout and git-log is required to generate this file" >> $@); \
fi
-release: dist
- scp @PACKAGE at -@VERSION at .tar.gz root at greenbirdsystems.com:/var/www/johnstowers.co.nz/files/osm-gps-map/
-
.PHONY: ChangeLog
=====================================
NEWS
=====================================
@@ -1,3 +1,19 @@
+Changes in 1.2.1
+ * Replace deprecated G_TYPE_INSTANCE_GET_PRIVATE and g_type_class_add_private (Patrick Salecker)
+ * Add python unit tests (Patrick Salecker)
+ * Fix python example addressing requiring map source (Jochen Sprickerhof)
+ * Fix setting custom map source (Patrick Salecker)
+ * Update catalog files (Davide Gessa)
+ * Make libsoup minimum version 2.42 (Hubert Kowalski)
+ * Manage segments across date change line (Paolo Benve)
+ * Remove unnecessary warning about 2nd setup (Tormod Volden)
+ * Add OpenTopoMap map source (Philipe Weyland)
+ * Port to libsoup-3 (Sébastien Noel)
+ * Fix pkg-config file (Sébastien Noel)
+ * Move libsoup-3.0 to Requires.private in pkg-config (Grimmauld)
+ * Make add_point a GObject Introspection method (loqs)
+ * Close PixbufLoader before get_pixbuf in unit tests; fixes Glycin test failure (loqs)
+
Changes in 1.2.0
======================
* Change max allowed zoom for various maps (Rolf Eike Beer, Philipe Weyland)
=====================================
catalog.xml
=====================================
@@ -13,4 +13,4 @@
<glade-widget-group name="osmgpsmap" title="OsmGpsMap Widgets">
<glade-widget-class-ref name="OsmGpsMap" />
</glade-widget-group>
-</glade-catalog>
\ No newline at end of file
+</glade-catalog>
=====================================
configure.ac
=====================================
@@ -1,6 +1,6 @@
AC_PREREQ([2.63])
AC_INIT([osm-gps-map],
- [1.2.0],
+ [1.2.1],
[http://github.com/nzjrs/osm-gps-map/issues],
[osm-gps-map])
@@ -25,7 +25,7 @@ AM_SILENT_RULES([yes])
PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.16])
PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.0])
PKG_CHECK_MODULES(CAIRO, [cairo >= 1.8])
-PKG_CHECK_MODULES(SOUP24, [libsoup-2.4])
+PKG_CHECK_MODULES(SOUP30, [libsoup-3.0])
# The mapviewer demo also calls g_thread_init, so it needs to link against
# libgthread-2.0.
@@ -52,7 +52,7 @@ AM_CONDITIONAL(OS_WIN32, [test $os_win32 = yes])
# - If binary compatibility has been broken (eg removed or changed interfaces)
# change to C+1:0:0
# - If the interface is the same as the previous version, change to C:R+1:A
-LT_VERSION_INFO=2:0:1
+LT_VERSION_INFO=2:1:1
AC_SUBST(LT_VERSION_INFO)
GOBJECT_INTROSPECTION_REQS=0.10.0
=====================================
docs/reference/Makefile.am
=====================================
@@ -71,12 +71,12 @@ AM_CFLAGS=-I$(top_srcdir) -I$(top_builddir) \
$(GLIB_CFLAGS) \
$(GTK_CFLAGS) \
$(CAIRO_CFLAGS) \
- $(SOUP24_CFLAGS)
+ $(SOUP30_CFLAGS)
GTKDOC_LIBS=$(top_builddir)/src/libosmgpsmap-1.0.la \
$(GLIB_LIBS) \
$(GTK_LIBS) \
$(CAIRO_LIBS) \
- $(SOUP24_LIBS)
+ $(SOUP30_LIBS)
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/gtk-doc.make
=====================================
examples/Makefile.am
=====================================
@@ -4,13 +4,13 @@ OSMGPSMAP_CFLAGS = \
$(GLIB_CFLAGS) \
$(GTK_CFLAGS) \
$(CAIRO_CFLAGS) \
- $(SOUP24_CFLAGS)
+ $(SOUP30_CFLAGS)
OSMGPSMAP_LIBS = \
$(GLIB_LIBS) \
$(GTK_LIBS) \
$(CAIRO_LIBS) \
- $(SOUP24_LIBS)
+ $(SOUP30_LIBS)
## Demo Application
noinst_PROGRAMS = mapviewer polygon editable_track
=====================================
examples/mapviewer.py
=====================================
@@ -35,6 +35,7 @@ from gi.repository import (
print(f"using library: {osmgpsmap.__file__} (version {osmgpsmap._version})")
+assert osmgpsmap._version == "1.0"
class DummyMapNoGpsPoint(osmgpsmap.Map):
def do_draw_gps_point(self, drawable):
@@ -84,6 +85,7 @@ class UI(Gtk.Window):
show_zoom=True,
show_crosshair=True)
)
+ self.osm.set_property("map-source", osmgpsmap.MapSource_t.OPENSTREETMAP)
self.osm.layer_add(DummyLayer())
self.last_image = None
@@ -217,7 +219,6 @@ from in the box below. Special metacharacters may be included in this url
self.osm = osmgpsmap.Map()
self.vbox.pack_start(self.osm, True, True, 0)
- self.osm.connect("button_release_event", self.map_clicked)
self.osm.show()
def print_tiles(self):
=====================================
osmgpsmap-1.0.pc.in
=====================================
@@ -6,6 +6,7 @@ includedir=@includedir@
Name: @PACKAGE_NAME@
Description: Moving map widget using openstreet map data
Version: @PACKAGE_VERSION@
-Requires: gtk+-3.0 libsoup-2.4
+Requires: gtk+-3.0
+Requires.private: libsoup-3.0
Libs: -L${libdir} -losmgpsmap-1.0
Cflags: -I${includedir}/osmgpsmap-1.0
=====================================
src/Makefile.am
=====================================
@@ -5,13 +5,13 @@ OSMGPSMAP_CFLAGS = \
$(GLIB_CFLAGS) \
$(GTK_CFLAGS) \
$(CAIRO_CFLAGS) \
- $(SOUP24_CFLAGS)
+ $(SOUP30_CFLAGS)
OSMGPSMAP_LIBS = \
$(GLIB_LIBS) \
$(GTK_LIBS) \
$(CAIRO_LIBS) \
- $(SOUP24_LIBS)
+ $(SOUP30_LIBS)
## Shared library
libosmgpsmap_1_0_la_CFLAGS = \
=====================================
src/osm-gps-map-image.c
=====================================
@@ -34,8 +34,6 @@
#include "osm-gps-map-track.h"
#include "osm-gps-map-image.h"
-G_DEFINE_TYPE (OsmGpsMapImage, osm_gps_map_image, G_TYPE_OBJECT)
-
enum
{
PROP_0,
@@ -59,6 +57,8 @@ struct _OsmGpsMapImagePrivate
float rotation;
};
+G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMapImage, osm_gps_map_image, G_TYPE_OBJECT)
+
static void
osm_gps_map_image_get_property (GObject *object,
guint property_id,
@@ -149,8 +149,6 @@ osm_gps_map_image_class_init (OsmGpsMapImageClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (OsmGpsMapImagePrivate));
-
object_class->get_property = osm_gps_map_image_get_property;
object_class->set_property = osm_gps_map_image_set_property;
object_class->dispose = osm_gps_map_image_dispose;
@@ -216,7 +214,7 @@ osm_gps_map_image_class_init (OsmGpsMapImageClass *klass)
static void
osm_gps_map_image_init (OsmGpsMapImage *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self), OSM_TYPE_GPS_MAP_IMAGE, OsmGpsMapImagePrivate);
+ self->priv = osm_gps_map_image_get_instance_private (self);
}
OsmGpsMapImage *
=====================================
src/osm-gps-map-osd.c
=====================================
@@ -29,10 +29,6 @@
static void osm_gps_map_osd_interface_init (OsmGpsMapLayerIface *iface);
-G_DEFINE_TYPE_WITH_CODE (OsmGpsMapOsd, osm_gps_map_osd, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (OSM_TYPE_GPS_MAP_LAYER,
- osm_gps_map_osd_interface_init));
-
enum
{
PROP_0,
@@ -104,6 +100,11 @@ struct _OsmGpsMapOsdPrivate
gboolean show_copyright;
};
+G_DEFINE_TYPE_WITH_CODE (OsmGpsMapOsd, osm_gps_map_osd, G_TYPE_OBJECT,
+ G_ADD_PRIVATE(OsmGpsMapOsd)
+ G_IMPLEMENT_INTERFACE (OSM_TYPE_GPS_MAP_LAYER,
+ osm_gps_map_osd_interface_init));
+
static void osm_gps_map_osd_render (OsmGpsMapLayer *osd, OsmGpsMap *map);
static void osm_gps_map_osd_draw (OsmGpsMapLayer *osd, OsmGpsMap *map, cairo_t *cr);
static gboolean osm_gps_map_osd_busy (OsmGpsMapLayer *osd);
@@ -322,8 +323,6 @@ osm_gps_map_osd_class_init (OsmGpsMapOsdClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (OsmGpsMapOsdPrivate));
-
object_class->get_property = osm_gps_map_osd_get_property;
object_class->set_property = osm_gps_map_osd_set_property;
object_class->constructor = osm_gps_map_osd_constructor;
@@ -473,9 +472,7 @@ osm_gps_map_osd_class_init (OsmGpsMapOsdClass *klass)
static void
osm_gps_map_osd_init (OsmGpsMapOsd *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- OSM_TYPE_GPS_MAP_OSD,
- OsmGpsMapOsdPrivate);
+ self->priv = osm_gps_map_osd_get_instance_private (self);
}
static void
=====================================
src/osm-gps-map-polygon.c
=====================================
@@ -21,8 +21,6 @@
#include "converter.h"
#include "osm-gps-map-polygon.h"
-G_DEFINE_TYPE (OsmGpsMapPolygon, osm_gps_map_polygon, G_TYPE_OBJECT)
-
enum
{
PROP_0,
@@ -44,6 +42,8 @@ struct _OsmGpsMapPolygonPrivate
gboolean breakable;
};
+G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMapPolygon, osm_gps_map_polygon, G_TYPE_OBJECT)
+
#define DEFAULT_R (60000)
#define DEFAULT_G (0)
#define DEFAULT_B (0)
@@ -136,8 +136,6 @@ osm_gps_map_polygon_class_init (OsmGpsMapPolygonClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (OsmGpsMapPolygonPrivate));
-
object_class->get_property = osm_gps_map_polygon_get_property;
object_class->set_property = osm_gps_map_polygon_set_property;
object_class->dispose = osm_gps_map_polygon_dispose;
@@ -198,7 +196,7 @@ osm_gps_map_polygon_class_init (OsmGpsMapPolygonClass *klass)
static void
osm_gps_map_polygon_init (OsmGpsMapPolygon *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE((self), OSM_TYPE_GPS_MAP_POLYGON, OsmGpsMapPolygonPrivate);
+ self->priv = osm_gps_map_polygon_get_instance_private(self);
self->priv->track = osm_gps_map_track_new();
}
=====================================
src/osm-gps-map-source.c
=====================================
@@ -35,6 +35,8 @@ osm_gps_map_source_get_friendly_name(OsmGpsMapSource_t source)
return "OpenAerialMap";
case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP:
return "OpenCycleMap";
+ case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
+ return "OpenTopoMap";
case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT:
return "Public Transport";
case OSM_GPS_MAP_SOURCE_OSMC_TRAILS:
@@ -75,6 +77,8 @@ osm_gps_map_source_get_copyright(OsmGpsMapSource_t source)
return "Maps © ÖPNVKarte, Data © OpenStreetMap contributors";
case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE:
return "Maps © Maps-For-Free";
+ case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
+ return "© OpenTopoMap (CC-BY-SA)";
case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
return "Map provided by Google";
case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE:
@@ -124,6 +128,8 @@ osm_gps_map_source_get_repo_uri(OsmGpsMapSource_t source)
return NULL;
case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE:
return "https://maps-for-free.com/layer/relief/z#Z/row#Y/#Z_#X-#Y.jpg";
+ case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
+ return "https://a.tile.opentopomap.org/#Z/#X/#Y.png";
case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
return "http://mt#R.google.com/vt/lyrs=m&hl=en&x=#X&s=&y=#Y&z=#Z";
case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID:
@@ -153,6 +159,7 @@ osm_gps_map_source_get_image_format(OsmGpsMapSource_t source)
case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP:
case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT:
case OSM_GPS_MAP_SOURCE_OSMC_TRAILS:
+ case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
return "png";
case OSM_GPS_MAP_SOURCE_OPENAERIALMAP:
case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
@@ -191,6 +198,7 @@ osm_gps_map_source_get_max_zoom(OsmGpsMapSource_t source)
return OSM_MAX_ZOOM;
case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER:
case OSM_GPS_MAP_SOURCE_OPENAERIALMAP:
+ case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
return 17;
case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE:
=====================================
src/osm-gps-map-source.h
=====================================
@@ -31,6 +31,7 @@ typedef enum {
OSM_GPS_MAP_SOURCE_OPENAERIALMAP,
OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE,
OSM_GPS_MAP_SOURCE_OPENCYCLEMAP,
+ OSM_GPS_MAP_SOURCE_OPENTOPOMAP,
OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT,
OSM_GPS_MAP_SOURCE_GOOGLE_STREET,
OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE,
=====================================
src/osm-gps-map-track.c
=====================================
@@ -34,8 +34,6 @@
#include "converter.h"
#include "osm-gps-map-track.h"
-G_DEFINE_TYPE (OsmGpsMapTrack, osm_gps_map_track, G_TYPE_OBJECT)
-
enum
{
PROP_0,
@@ -68,6 +66,8 @@ struct _OsmGpsMapTrackPrivate
gboolean editable;
};
+G_DEFINE_TYPE_WITH_PRIVATE(OsmGpsMapTrack, osm_gps_map_track, G_TYPE_OBJECT)
+
#define DEFAULT_R (0.6)
#define DEFAULT_G (0)
#define DEFAULT_B (0)
@@ -168,8 +168,6 @@ osm_gps_map_track_class_init (OsmGpsMapTrackClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (OsmGpsMapTrackPrivate));
-
object_class->get_property = osm_gps_map_track_get_property;
object_class->set_property = osm_gps_map_track_set_property;
object_class->dispose = osm_gps_map_track_dispose;
@@ -282,7 +280,7 @@ osm_gps_map_track_class_init (OsmGpsMapTrackClass *klass)
static void
osm_gps_map_track_init (OsmGpsMapTrack *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE((self), OSM_TYPE_GPS_MAP_TRACK, OsmGpsMapTrackPrivate);
+ self->priv = osm_gps_map_track_get_instance_private(self);
self->priv->color.red = DEFAULT_R;
self->priv->color.green = DEFAULT_G;
=====================================
src/osm-gps-map-track.h
=====================================
@@ -72,7 +72,7 @@ GType osm_gps_map_track_get_type (void) G_GNUC_CONST;
OsmGpsMapTrack * osm_gps_map_track_new (void);
/**
* osm_gps_map_track_add_point:
- * @track: (inout): a #OsmGpsMapTrack
+ * @track: (in): a #OsmGpsMapTrack
* @point: (in): a #OsmGpsMapPoint point to add
*
* Add a point to track
=====================================
src/osm-gps-map-widget.c
=====================================
@@ -150,15 +150,6 @@
#define MAX_DOWNLOAD_TILES 10000
#define DOT_RADIUS 4.0
-#ifndef SOUP_CHECK_VERSION
-// SOUP_CHECK_VERSION was introduced only in 2.42
-#define SOUP_CHECK_VERSION(x, y, z) false
-#endif
-
-#if !SOUP_CHECK_VERSION(2, 42, 0)
-#define SOUP_OLD_SESSION
-#endif
-
struct _OsmGpsMapPrivate
{
GHashTable *tile_queue;
@@ -317,14 +308,14 @@ enum
PROP_SHOW_GPS_POINT
};
-G_DEFINE_TYPE (OsmGpsMap, osm_gps_map, GTK_TYPE_DRAWING_AREA);
+G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMap, osm_gps_map, GTK_TYPE_DRAWING_AREA);
/*
* Drawing function forward defintions
*/
static gchar *replace_string(const gchar *src, const gchar *from, const gchar *to);
static gchar *replace_map_uri(OsmGpsMap *map, const gchar *uri, int zoom, int x, int y);
-static void osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpointer user_data);
+static void osm_gps_map_tile_download_complete (SoupSession *session, GAsyncResult *result, gpointer user_data);
static void osm_gps_map_download_tile (OsmGpsMap *map, int zoom, int x, int y, gboolean redraw);
static GdkPixbuf* osm_gps_map_render_tile_upscaled (OsmGpsMap *map, GdkPixbuf *tile, int tile_zoom, int zoom, int x, int y);
@@ -740,12 +731,10 @@ osm_gps_map_blit_tile(OsmGpsMap *map, GdkPixbuf *pixbuf, cairo_t *cr, int offset
}
}
-#define MSG_RESPONSE_BODY(a) ((a)->response_body->data)
-#define MSG_RESPONSE_LEN(a) ((a)->response_body->length)
#define MSG_RESPONSE_LEN_FORMAT "%"G_GOFFSET_FORMAT
static void
-osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpointer user_data)
+osm_gps_map_tile_download_complete (SoupSession *session, GAsyncResult *result, gpointer user_data)
{
FILE *file;
OsmTileDownload *dl = (OsmTileDownload *)user_data;
@@ -753,15 +742,23 @@ osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpoi
OsmGpsMapPrivate *priv = map->priv;
gboolean file_saved = FALSE;
- if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
+ GError *error = NULL;
+ SoupMessage *msg = soup_session_get_async_result_message(session, result);
+ SoupStatus soup_status = soup_message_get_status(msg);
+ GBytes *body = soup_session_send_and_read_finish (session, result, &error);
+
+ GCancellable *cancellable = (GCancellable *)g_hash_table_lookup(priv->tile_queue, dl->uri);
+ g_object_unref (cancellable);
+
+ if (SOUP_STATUS_IS_SUCCESSFUL (soup_status)) {
/* save tile into cachedir if one has been specified */
if (priv->cache_dir) {
if (g_mkdir_with_parents(dl->folder,0700) == 0) {
file = g_fopen(dl->filename, "wb");
if (file != NULL) {
- fwrite (MSG_RESPONSE_BODY(msg), 1, MSG_RESPONSE_LEN(msg), file);
+ fwrite (g_bytes_get_data(body, NULL), 1, g_bytes_get_size(body), file);
file_saved = TRUE;
- g_debug("Wrote "MSG_RESPONSE_LEN_FORMAT" bytes to %s", MSG_RESPONSE_LEN(msg), dl->filename);
+ g_debug("Wrote "MSG_RESPONSE_LEN_FORMAT" bytes to %s", g_bytes_get_size(body), dl->filename);
fclose (file);
}
@@ -786,7 +783,7 @@ osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpoi
/* parse file directly from memory */
if (extension) {
loader = gdk_pixbuf_loader_new_with_type (extension+1, NULL);
- if (!gdk_pixbuf_loader_write (loader, (unsigned char*)MSG_RESPONSE_BODY(msg), MSG_RESPONSE_LEN(msg), NULL))
+ if (!gdk_pixbuf_loader_write (loader, (unsigned char*)g_bytes_get_data(body, NULL), g_bytes_get_size(body), NULL))
{
g_warning("Error: Decoding of image failed");
}
@@ -824,21 +821,21 @@ osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpoi
g_free(dl->filename);
g_free(dl);
} else {
- if ((msg->status_code == SOUP_STATUS_NOT_FOUND) || (msg->status_code == SOUP_STATUS_FORBIDDEN)) {
+ if ((soup_status == SOUP_STATUS_NOT_FOUND) || (soup_status == SOUP_STATUS_FORBIDDEN)) {
g_hash_table_insert(priv->missing_tiles, dl->uri, NULL);
g_hash_table_remove(priv->tile_queue, dl->uri);
g_object_notify(G_OBJECT(map), "tiles-queued");
- } else if (msg->status_code == SOUP_STATUS_CANCELLED) {
+ } else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
/* called as application exit or after osm_gps_map_download_cancel_all */
g_hash_table_remove(priv->tile_queue, dl->uri);
g_object_notify(G_OBJECT(map), "tiles-queued");
} else {
- g_warning("Error downloading tile: %d - %s", msg->status_code, msg->reason_phrase);
- dl->ttl--;
- if (dl->ttl) {
- soup_session_requeue_message(session, msg);
- return;
- }
+ g_warning("Error downloading tile: %d - %s", soup_status, soup_status_get_phrase(soup_status));
+ //dl->ttl--;
+ //if (dl->ttl) {
+ // soup_session_requeue_message(session, msg);
+ // return;
+ //}
g_hash_table_remove(priv->tile_queue, dl->uri);
g_object_notify(G_OBJECT(map), "tiles-queued");
@@ -888,21 +885,26 @@ osm_gps_map_download_tile (OsmGpsMap *map, int zoom, int x, int y, gboolean redr
if (priv->is_google) {
//Set maps.google.com as the referrer
g_debug("Setting Google Referrer");
- soup_message_headers_append(msg->request_headers, "Referer", "http://maps.google.com/");
+ soup_message_headers_append(soup_message_get_request_headers(msg), "Referer", "http://maps.google.com/");
//For google satelite also set the appropriate cookie value
if (priv->uri_format & URI_HAS_Q) {
const char *cookie = g_getenv("GOOGLE_COOKIE");
if (cookie) {
g_debug("Adding Google Cookie");
- soup_message_headers_append(msg->request_headers, "Cookie", cookie);
+ soup_message_headers_append(soup_message_get_request_headers(msg), "Cookie", cookie);
}
}
}
- g_hash_table_insert (priv->tile_queue, dl->uri, msg);
+ GCancellable *cancellable = g_cancellable_new ();
+ g_hash_table_insert (priv->tile_queue, dl->uri, cancellable);
g_object_notify (G_OBJECT (map), "tiles-queued");
/* the soup session unrefs the message when the download finishes */
- soup_session_queue_message (priv->soup_session, msg, osm_gps_map_tile_download_complete, dl);
+ soup_session_send_and_read_async(priv->soup_session, msg,
+ G_PRIORITY_DEFAULT,
+ cancellable,
+ (GAsyncReadyCallback)osm_gps_map_tile_download_complete,
+ dl);
} else {
g_warning("Could not create soup message");
g_free(dl->uri);
@@ -1051,7 +1053,7 @@ osm_gps_map_load_tile (OsmGpsMap *map, cairo_t *cr, int zoom, int x, int y, int
g_debug("Load actual tile %d,%d (%d,%d) z:%d", x, y, offset_x, offset_y, zoom);
- if (priv->map_source == OSM_GPS_MAP_SOURCE_NULL) {
+ if (priv->map_source == OSM_GPS_MAP_SOURCE_NULL && priv->repo_uri == NULL) {
osm_gps_map_blit_tile(map, priv->null_tile, cr, offset_x, offset_y,
priv->map_zoom, target_x, target_y);
return;
@@ -1181,6 +1183,10 @@ osm_gps_map_print_track (OsmGpsMap *map, OsmGpsMapTrack *track, cairo_t *cr)
map_y0 = priv->map_y - EXTRA_BORDER;
int last_x = 0, last_y = 0;
+ int x_pi = lon2pixel(priv->map_zoom, M_PI) - map_x0;
+ int x_minus_pi = lon2pixel(priv->map_zoom, - M_PI) - map_x0;
+ int double_pi = x_pi - x_minus_pi;
+ float last_lon;
for(pt = points; pt != NULL; pt = pt->next)
{
OsmGpsMapPoint *tp = pt->data;
@@ -1190,7 +1196,33 @@ osm_gps_map_print_track (OsmGpsMap *map, OsmGpsMapTrack *track, cairo_t *cr)
/* first time through loop */
if (pt == points)
+ {
cairo_move_to(cr, x, y);
+ }
+ else if (fabs(tp->rlon - last_lon) > M_PI && x != last_x)
+ {
+ /* instead of drawing to (x, y), draw a first segment to the date change line,
+ and a second segment from the other date change line to (x, y) */
+ int interm_y;
+ if (last_lon > 0)
+ {
+ /* tp->rlon is < 0 */
+ interm_y = (int)(last_y + (float)(y - last_y) / (float)((x + double_pi) - last_x) * (float)(x_pi - last_x));
+ cairo_line_to(cr, x_pi, interm_y);
+ cairo_stroke(cr);
+ cairo_move_to(cr, x_minus_pi, interm_y);
+ }
+ else
+ {
+ /* tp->rlon is > 0 */
+ interm_y = (int)(last_y + (float)(y - last_y) / (float)((x - double_pi) - last_x) * (float)(x_minus_pi - last_x));
+ cairo_line_to(cr, x_minus_pi, interm_y);
+ cairo_stroke(cr);
+ cairo_move_to(cr, x_pi, interm_y);
+ }
+ max_x = x_pi;
+ min_x = x_minus_pi;
+ }
cairo_line_to(cr, x, y);
cairo_stroke(cr);
@@ -1217,6 +1249,7 @@ osm_gps_map_print_track (OsmGpsMap *map, OsmGpsMapTrack *track, cairo_t *cr)
last_x = x;
last_y = y;
+ last_lon = tp->rlon;
}
gtk_widget_queue_draw_area (
@@ -1643,7 +1676,7 @@ osm_gps_map_init (OsmGpsMap *object)
int i;
OsmGpsMapPrivate *priv;
- priv = G_TYPE_INSTANCE_GET_PRIVATE (object, OSM_TYPE_GPS_MAP, OsmGpsMapPrivate);
+ priv = osm_gps_map_get_instance_private (object);
object->priv = priv;
priv->pixmap = NULL;
@@ -1680,18 +1713,8 @@ osm_gps_map_init (OsmGpsMap *object)
/* set the user agent */
-#ifdef SOUP_OLD_SESSION
- // libsoup pre 2.42.0 had explicit syn/async session
- priv->soup_session =
- soup_session_async_new_with_options(SOUP_SESSION_USER_AGENT,
- USER_AGENT, NULL);
-#else
- // lisoup since 2.42.0 has universal session, only methods can be sync/async
- // and we use async
- priv->soup_session =
- soup_session_new_with_options(SOUP_SESSION_USER_AGENT,
- USER_AGENT, NULL);
-#endif
+ priv->soup_session = soup_session_new ();
+ soup_session_set_user_agent (priv->soup_session, USER_AGENT);
/* Hash table which maps tile d/l URIs to SoupMessage requests, the hashtable
must free the key, the soup session unrefs the message */
@@ -1922,10 +1945,10 @@ osm_gps_map_set_property (GObject *object, guint prop_id, const GValue *value, G
g_debug("Setting proxy server: %s", priv->proxy_uri);
GValue val = {0};
- SoupURI* uri = soup_uri_new(priv->proxy_uri);
- g_value_init(&val, SOUP_TYPE_URI);
+ GUri* uri = g_uri_parse(priv->proxy_uri, SOUP_HTTP_URI_FLAGS, NULL);
+ g_value_init(&val, G_TYPE_URI);
g_value_take_boxed(&val, uri);
- g_object_set_property(G_OBJECT(priv->soup_session),SOUP_SESSION_PROXY_URI,&val);
+ g_object_set_property(G_OBJECT(priv->soup_session),"proxy-resolver",&val);
} else {
g_free(priv->proxy_uri);
@@ -1945,7 +1968,7 @@ osm_gps_map_set_property (GObject *object, guint prop_id, const GValue *value, G
priv->user_agent = NULL;
g_value_set_string (&full_user_agent, USER_AGENT);
}
- g_object_set_property(G_OBJECT(priv->soup_session),SOUP_SESSION_USER_AGENT, &full_user_agent);
+ g_object_set_property(G_OBJECT(priv->soup_session),"user-agent", &full_user_agent);
break;
case PROP_TILE_CACHE_DIR:
if ( g_value_get_string(value) ) {
@@ -2010,9 +2033,6 @@ osm_gps_map_set_property (GObject *object, guint prop_id, const GValue *value, G
priv->map_source >= OSM_GPS_MAP_SOURCE_NULL &&
priv->map_source <= OSM_GPS_MAP_SOURCE_LAST) {
- if (!priv->is_constructed)
- g_critical("Map source setup called twice");
-
/* we now have to switch the entire map */
osm_gps_map_setup(map);
@@ -2509,8 +2529,6 @@ osm_gps_map_class_init (OsmGpsMapClass *klass)
GObjectClass* object_class;
GtkWidgetClass *widget_class;
- g_type_class_add_private (klass, sizeof (OsmGpsMapPrivate));
-
object_class = G_OBJECT_CLASS (klass);
object_class->dispose = osm_gps_map_dispose;
object_class->finalize = osm_gps_map_finalize;
@@ -2987,9 +3005,9 @@ osm_gps_map_download_maps (OsmGpsMap *map, OsmGpsMapPoint *pt1, OsmGpsMapPoint *
}
static void
-cancel_message (char *key, SoupMessage *value, SoupSession *user_data)
+cancel_message (char *key, GCancellable *cancellable, void *userdata)
{
- soup_session_cancel_message (user_data, value, SOUP_STATUS_CANCELLED);
+ g_cancellable_cancel(cancellable);
}
/**
@@ -2997,7 +3015,7 @@ cancel_message (char *key, SoupMessage *value, SoupSession *user_data)
* @map: a #OsmGpsMap widget
*
* Cancels all tiles currently being downloaded. Typically used if you wish to
- * cacel a large number of tiles queued using osm_gps_map_download_maps()
+ * cancel a large number of tiles queued using osm_gps_map_download_maps()
*
* Since: 0.7.0
**/
@@ -3005,7 +3023,7 @@ void
osm_gps_map_download_cancel_all (OsmGpsMap *map)
{
OsmGpsMapPrivate *priv = map->priv;
- g_hash_table_foreach (priv->tile_queue, (GHFunc)cancel_message, priv->soup_session);
+ g_hash_table_foreach (priv->tile_queue, (GHFunc)cancel_message, NULL);
}
/**
=====================================
tests/test.py
=====================================
@@ -0,0 +1,126 @@
+#!/usr/bin/env python3
+import unittest
+import cairo
+import io
+
+import gi
+gi.require_version('OsmGpsMap', '1.0')
+
+from gi.repository import OsmGpsMap
+from gi.repository import Gdk, GdkPixbuf, Gtk
+
+class TestOsmGpsMap(unittest.TestCase):
+ def setUp(self):
+ self.lat = 50
+ self.lon = 13
+ self.zoom = 15
+ self.osm = OsmGpsMap.Map(user_agent="test/0.1")
+
+ def test_map(self):
+ test_window = Gtk.Window()
+ test_window.set_title("OsmGpsMap")
+ test_window.connect("destroy", Gtk.main_quit)
+ test_window.show()
+ test_window.set_size_request(640, 480)
+ test_window.add(self.osm)
+ test_window.show_all()
+
+ self.osm.set_zoom(self.zoom)
+ self.assertEqual(self.osm.get_property('zoom'), self.zoom)
+ self.osm.zoom_in()
+ self.assertEqual(self.osm.get_property('zoom'), self.zoom+1)
+ self.osm.zoom_out()
+ self.assertEqual(self.osm.get_property('zoom'), self.zoom)
+
+ self.osm.set_center_and_zoom(self.lat, self.lon, self.zoom)
+ self.assertEqual(self.osm.get_property("latitude"), self.lat)
+ self.assertEqual(self.osm.get_property("longitude"), self.lon)
+
+ self.lat += 1
+ self.lon += 1
+ self.osm.set_center(self.lat, self.lon)
+ self.assertEqual(self.osm.get_property("latitude"), self.lat)
+ self.assertEqual(self.osm.get_property("longitude"), self.lon)
+
+ self.osm.set_property("map-source", OsmGpsMap.MapSource_t.OPENCYCLEMAP)
+ self.osm.set_property("map-source", OsmGpsMap.MapSource_t.OPENSTREETMAP)
+
+ self.osm.set_property("auto-center", False)
+ self.osm.set_property("auto-center", True)
+
+ self.osm.set_property("user-agent", "test/0.2")
+ self.assertEqual(self.osm.get_property("user-agent"), "test/0.2")
+ self.osm.set_property("user-agent", None)
+ self.assertEqual(self.osm.get_property("user-agent"), None)
+
+ self.osm.gps_add(self.lat, self.lon, heading=OsmGpsMap.MAP_INVALID);
+ track = self.osm.gps_get_track()
+ self.assertEqual(type(track), OsmGpsMap.MapTrack)
+ self.osm.gps_clear()
+
+ def test_layer(self):
+ osd = OsmGpsMap.MapOsd(show_zoom=True, show_coordinates=False, show_scale=False, show_dpad=True, show_gps_in_dpad=True)
+ self.osm.layer_add(osd)
+ self.osm.layer_remove(osd)
+
+ def test_image(self):
+ size = 16
+ drawable = cairo.ImageSurface(cairo.FORMAT_RGB24, size, size)
+ ctx = cairo.Context(drawable)
+ # transparent background
+ ctx.set_source_rgba(1, 1, 1, 1)
+ ctx.rectangle(0, 0, size, size)
+ ctx.fill()
+ ctx.stroke()
+ # red arc
+ ctx.set_source_rgb(1, 0, 0)
+ ctx.arc(size/2, size/2, size/2-1, 0, 3.14*2)
+ ctx.fill()
+ ctx.stroke()
+
+ # convert the cairo context to a GdkPixbuf
+ buffer = io.BytesIO()
+ drawable.write_to_png(buffer)
+ loader = GdkPixbuf.PixbufLoader.new_with_type('png')
+ loader.write(buffer.getvalue())
+ buffer.close()
+ loader.close()
+ pixbuf = loader.get_pixbuf()
+ image = pixbuf.add_alpha(True , 255, 255, 255)
+
+ for x in range(0, 5):
+ pointer = self.osm.image_add(self.lat+x, self.lon+x, image)
+
+ self.osm.image_remove(pointer)
+ self.osm.image_remove_all()
+
+ def test_track(self):
+ track = OsmGpsMap.MapTrack()
+ self.osm.track_add(track)
+
+ color = Gdk.RGBA(1, 0, 1, 0)
+ track.set_property('color', color)
+ color2 = track.get_color()
+ self.assertEqual(color, color2)
+
+ points = []
+ for x in range(0, 5):
+ point = OsmGpsMap.MapPoint.new_degrees(self.lat+x, self.lon+x)
+ track.add_point(point)
+ points.append(point)
+
+ self.assertEqual(track.n_points(), 5)
+ self.assertEqual(track.get_length(), 522318.175858659)
+
+ track.remove_point(3)
+ self.assertEqual(track.n_points(), 4)
+
+ self.assertEqual(type(track.get_point(3)), OsmGpsMap.MapPoint)
+
+ returned_points = track.get_points()
+ self.assertEqual(len(returned_points), 4)
+
+ self.osm.track_remove(track)
+
+if __name__ == "__main__":
+ unittest.main()
View it on GitLab: https://salsa.debian.org/debian-gis-team/osm-gps-map/-/commit/82fe2b3a9af652993df7c91d9f0aa7558c6ae238
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/osm-gps-map/-/commit/82fe2b3a9af652993df7c91d9f0aa7558c6ae238
You're receiving this email because of your account on salsa.debian.org. Manage all notifications: https://salsa.debian.org/-/profile/notifications | Help: https://salsa.debian.org/help
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20260815/d7fd15c0/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list