Browse Source

location-viewer: Use more modern API

`VectorRenderer::set_sprite_sheet_data` was deprecated in libshumate 1.1.
Instead we use `VectorSpriteSheet::add_page`, which allows to use
`GdkTexture` directly, and to add higher resolution sprites.
fractal-13
Kévin Commaille 6 months ago
parent
commit
73ff15bf6f
No known key found for this signature in database
GPG Key ID: F26F4BE20A08255B
  1. 2
      Cargo.toml
  2. 2
      meson.build
  3. 58
      src/components/media/location_viewer.rs

2
Cargo.toml

@ -68,7 +68,7 @@ gst_pbutils = { version = "0.23", package = "gstreamer-pbutils" }
gst_play = { version = "0.23", package = "gstreamer-play" }
gst_video = { version = "0.23", package = "gstreamer-video" }
gtk = { package = "gtk4", version = "0.9", features = ["gnome_47"] }
shumate = { package = "libshumate", version = "0.6" }
shumate = { package = "libshumate", version = "0.6", features = ["v1_1"] }
sourceview = { package = "sourceview5", version = "0.9" }
[dependencies.matrix-sdk]

2
meson.build

@ -37,7 +37,7 @@ dependency('gstreamer-video-1.0', version: '>= 1.20')
dependency('gtksourceview-5', version: '>= 5.0.0')
dependency('libwebp', version: '>= 1.0.0')
dependency('openssl', version: '>= 3.0.0')
dependency('shumate-1.0', version: '>= 1.0.0')
dependency('shumate-1.0', version: '>= 1.1.0')
dependency('sqlite3', version: '>= 3.24.0')
# Required by glycin crate

58
src/components/media/location_viewer.rs

@ -1,6 +1,6 @@
use adw::{prelude::*, subclass::prelude::*};
use geo_uri::GeoUri;
use gtk::{CompositeTemplate, gdk_pixbuf, gio, glib};
use gtk::{gdk, gio, glib};
use shumate::prelude::*;
use crate::i18n::gettext_f;
@ -12,7 +12,7 @@ mod imp {
use super::*;
#[derive(Debug, Default, CompositeTemplate, glib::Properties)]
#[derive(Debug, Default, gtk::CompositeTemplate, glib::Properties)]
#[template(resource = "/org/gnome/Fractal/ui/components/media/location_viewer.ui")]
#[properties(wrapper_type = super::LocationViewer)]
pub struct LocationViewer {
@ -52,27 +52,49 @@ mod imp {
"/org/gnome/Fractal/mapstyle/osm-liberty/style.json",
gio::ResourceLookupFlags::NONE,
)
.expect("Could not load map style");
let source =
.expect("should be able to load map style");
let renderer =
shumate::VectorRenderer::new("vector-tiles", &String::from_utf8_lossy(&style))
.expect("Could not read map style");
source.set_license("© OpenMapTiles © OpenStreetMap contributors");
source.set_license_uri("https://www.openstreetmap.org/copyright");
.expect("should be able to read map style");
renderer.set_license("© OpenMapTiles © OpenStreetMap contributors");
renderer.set_license_uri("https://www.openstreetmap.org/copyright");
let spritepixbuf = gdk_pixbuf::Pixbuf::from_resource(
"/org/gnome/Fractal/mapstyle/osm-liberty/sprites.png",
)
.expect("Could not load map sprites");
let spritejson = gio::resources_lookup_data(
let sprite_sheet = renderer
.sprite_sheet()
.expect("renderer should have sprite sheet");
let sprites_texture =
gdk::Texture::from_resource("/org/gnome/Fractal/mapstyle/osm-liberty/sprites.png");
let sprites_json = gio::resources_lookup_data(
"/org/gnome/Fractal/mapstyle/osm-liberty/sprites.json",
gio::ResourceLookupFlags::NONE,
)
.expect("Could not load map sprite sheet");
source
.set_sprite_sheet_data(&spritepixbuf, &String::from_utf8_lossy(&spritejson))
.expect("Could not set map sprite sheet");
self.map.set_map_source(Some(&source));
.expect("should be able to load map sprite sheet");
sprite_sheet
.add_page(
&sprites_texture,
&String::from_utf8_lossy(&sprites_json),
1.0,
)
.expect("should be able to add map sprite sheet page");
let sprites_2x_texture = gdk::Texture::from_resource(
"/org/gnome/Fractal/mapstyle/osm-liberty/sprites@2x.png",
);
let sprites_2x_json = gio::resources_lookup_data(
"/org/gnome/Fractal/mapstyle/osm-liberty/sprites@2x.json",
gio::ResourceLookupFlags::NONE,
)
.expect("should be able to load map 2x sprite sheet");
sprite_sheet
.add_page(
&sprites_2x_texture,
&String::from_utf8_lossy(&sprites_2x_json),
2.0,
)
.expect("should be able to add map 2x sprite sheet page");
self.map.set_map_source(Some(&renderer));
let viewport = self.map.viewport().expect("map has a viewport");
viewport.set_zoom_level(12.0);

Loading…
Cancel
Save