mirror of
https://codeberg.org/comaps/comaps
synced 2026-01-06 12:34:24 +00:00
Compare commits
42 Commits
60b1ad232a
...
test/2025.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96bf6e1ec1 | ||
|
|
f477d9bb49 | ||
|
|
9ec67097fc | ||
|
|
c0bdbe1bcb | ||
|
|
006951a33c | ||
|
|
bea2148f66 | ||
|
|
9729ab9cab | ||
|
|
d448369c04 | ||
|
|
ee4675b388 | ||
|
|
515cf98cef | ||
|
|
0d01076c0f | ||
|
|
5f0bcc1486 | ||
|
|
1edcb23ab2 | ||
|
|
817b31bc5f | ||
|
|
33e4894a56 | ||
|
|
aa34159ce8 | ||
|
|
1ccea5928f | ||
|
|
ec59698f4a | ||
|
|
0c2763f3ce | ||
|
|
c9a4483f50 | ||
|
|
0eafe3482e | ||
|
|
e4275cdd3c | ||
|
|
4ef9395442 | ||
|
|
30cf2b5770 | ||
|
|
6aed26c48e | ||
|
|
dad91b82a6 | ||
|
|
7024aace6f | ||
|
|
6291133a69 | ||
|
|
1c5121d447 | ||
|
|
4398e492b8 | ||
|
|
1907e039e3 | ||
|
|
26bad5dffb | ||
|
|
4f2b479b2c | ||
|
|
a972552155 | ||
|
|
dc54c45482 | ||
|
|
1975b6a0f0 | ||
|
|
8683853f46 | ||
|
|
d7e34c2685 | ||
|
|
0028306b26 | ||
|
|
b5354fd1e3 | ||
|
|
964f82510a | ||
|
|
faf49fc574 |
17
SECURITY.md
Normal file
17
SECURITY.md
Normal file
@@ -0,0 +1,17 @@
|
||||
## Reporting Vulnerabilities
|
||||
You can report a security vulnerability by creating an issue or send mail to security@comaps.app
|
||||
|
||||
## Verifying Fingerprints
|
||||
|
||||
To [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK, use the following signing certificate fingerprints:
|
||||
```
|
||||
SHA-256: 4894e8e6963627ef660031d8593fe77297f835acb4e23810003e926135023b4c
|
||||
SHA-1: 8b7b5739f917e9f7c681671ced0c9c8562123ade
|
||||
MD5: 9cce0ffea281dc2f0e0a154d6d2e281e
|
||||
```
|
||||
|
||||
To verify CoMaps via [AppVerifier](https://github.com/soupslurpr/AppVerifier), use the following signing certificate fingerprint:
|
||||
```
|
||||
app.comaps
|
||||
48:94:E8:E6:96:36:27:EF:66:00:31:D8:59:3F:E7:72:97:F8:35:AC:B4:E2:38:10:00:3E:92:61:35:02:3B:4C
|
||||
```
|
||||
@@ -351,6 +351,7 @@ dependencies {
|
||||
implementation libs.androidx.recyclerview
|
||||
implementation libs.androidx.work.runtime
|
||||
implementation libs.androidx.lifecycle.process
|
||||
implementation libs.androidx.documentfile
|
||||
implementation libs.android.material
|
||||
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
|
||||
// https://github.com/organicmaps/organicmaps/issues/6106
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
• OpenStreetMap-Daten vom 9. Dezember
|
||||
• Material 3 Design
|
||||
• Im OSM-Editor können nun Ladestationen hinzugefügt werden
|
||||
• Schuko und Typ E Ladestationen hinzugefügt
|
||||
• Verbesserte Suchvorschläge
|
||||
• Litauische und lettische Sprachankündigungen
|
||||
• Die Fahranweisungen wurden vergrößert
|
||||
• Der Zoomlevel passt sich an die Distanz zur nächsten Abbiegung an
|
||||
• Neue Anordnung der Einstellungen
|
||||
Weitere Einzelheiten auf codeberg.org/comaps/comaps/releases
|
||||
• OpenStreetMap Daten vom 17. Dezember
|
||||
• Map download server nun wählbar
|
||||
• Warnung über veraltete Karten hinzugefügt + Knopf zum updaten
|
||||
• Vermeidung von Parkplatzwegen im Routing
|
||||
• Neuer Zoombutton
|
||||
• Verbesserte Französchische Suchsynonme
|
||||
• OSM editor: Maximale Länge für OSM-Tags werden nun geprüft
|
||||
Mehr auf codeberg.org/comaps/comaps/releases
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
• OpenStreetMap data as of December 9
|
||||
• Use Material 3 themes
|
||||
• Support charging sockets in OSM Editor
|
||||
• Added schuko/type-E charge sockets
|
||||
• Improved search results ranking
|
||||
• Enabled Lithuanian and Latvian in voice announcements
|
||||
• Improved size of driving indications
|
||||
• Base zoom level on distance to next turn
|
||||
• Reordered settings
|
||||
• OpenStreetMap data as of December 17
|
||||
• Make map download server configurable
|
||||
• Added info about outdated maps and an update button to the selected place info card
|
||||
• Avoid using parking aisles for routing
|
||||
• Changed shape of zoom buttons
|
||||
• Improved French search synonyms
|
||||
• OSM editor: check length limit for OSM tags in value validation
|
||||
More details on codeberg.org/comaps/comaps/releases
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
• Datos de OpenStreetMap a fecha 9/12.
|
||||
• Uso de temas Material 3.
|
||||
• Compatibilidad con enchufes de recarga en Editor.
|
||||
• Se añaden enchufes de recarga schuko/tipo E.
|
||||
• Se mejora la búsqueda.
|
||||
• Se habilitan el lituano y el letón en las indicaciones de voz.
|
||||
• Se aumenta el tamaño de las indicaciones de conducción.
|
||||
• Nivel de zoom base según la distancia al siguiente giro.
|
||||
• Se han reordenado los ajustes.
|
||||
|
||||
Más detalles en codeberg.org/comaps/comaps/releases
|
||||
@@ -1,10 +1,8 @@
|
||||
• Données OpenStreetMap du 9 Décembre
|
||||
• Utilisation de Material 3
|
||||
• Support de l'édition des bornes de recharge dans l'éditeur OSM
|
||||
• Ajout du type de prise schuko/type-E
|
||||
• Amélioration de l'ordre des résultats de recherche
|
||||
• Ajout du lituanien et du letton dans le guidage vocal
|
||||
• Amélioration de la taille des instructions dans la navigation
|
||||
• Niveau de zoom basé sur la distance jusqu’au prochain virage
|
||||
• Réorganisation des paramètres
|
||||
Plus de détails sur codeberg.org/comaps/comaps/releases
|
||||
• Données OpenStreetMap du 17 décembre
|
||||
• Serveur de téléchargement de cartes configurable
|
||||
• Ajout d'un message d'avertissement pour les cartes trop anciennes
|
||||
• Évitement des allées de parking dans les itinéraires
|
||||
• Mise à jour de l'apparence des boutons de zooms
|
||||
• Amélioration des synonymes de recherche en français
|
||||
• Editeur OSM: vérification de la taille limite des tags OSM
|
||||
Plus d'informations sur codeberg.org/comaps/comaps/releases
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
• Podaci OpenStreetMap karte od 9. prosinca
|
||||
• Korištenje Material 3 tema
|
||||
• Podrška za utičnice za punjenje u OSM Editoru
|
||||
• Dodane šuko/tip-E utičnice
|
||||
• Poboljšano rangiranje rezultata pretraživanja
|
||||
• Omogućeni litvanski i latvijski jezici u glasovnim najavama
|
||||
• Povećana veličina indikatora vožnje
|
||||
• Razina zumiranja se mijenja ovisno o udaljenosti do sljedećeg skretanja
|
||||
• Promijenjen redoslijed postavki
|
||||
Više detalja na codeberg.org/comaps/comaps/releases
|
||||
@@ -1,10 +0,0 @@
|
||||
• Dane OpenStreetMap z 9 grudnia
|
||||
• Użycie motywów Material 3
|
||||
• Obsługa gniazd ładowania w Edytorze OSM
|
||||
• Dodane gniazda ładowania schuko/type-E
|
||||
• Poprawiony ranking wyników wyszukiwania
|
||||
• Dodane litewskie i łotewskie komunikaty głosowe
|
||||
• Poprawiony rozmiar znaków drogowych
|
||||
• Poziom powiększenia oparty na odległości do następnego manewru
|
||||
• Zmieniona kolejność ustawień
|
||||
Więcej szczegółów na codeberg.org/comaps/comaps/releases
|
||||
@@ -1,10 +1,8 @@
|
||||
• Dados OpenStreetMap atualizados em 9 de dezembro
|
||||
• Uso do estilo Material 3
|
||||
• Suporte para tomadas de carregamento no Editor OSM
|
||||
• Adição de tomadas de carregamento Schuko/Tipo E
|
||||
• Melhoria na classificação dos resultados de busca
|
||||
• Adição dos idiomas letão e lituano nas orientações por voz
|
||||
• Melhoria no tamanho das indicações de direção
|
||||
• Nível de zoom baseado em distância até a próxima curva
|
||||
• Configurações reordenadas
|
||||
• Dados OSM de 17/12
|
||||
• Servidor de download de mapas configurável
|
||||
• Adição de informações sobre mapas desatualizados e um botão de atualização ao cartão de informações do local selecionado
|
||||
• Evita o uso de corredores de estacionamento para roteamento
|
||||
• Formato dos botões de zoom alterado
|
||||
• Sinônimos de busca em francês aprimorados
|
||||
• Editor OSM: verificação do limite de comprimento das tags do OSM na validação de valores
|
||||
Mais detalhes em codeberg.org/comaps/comaps/releases
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
• Карты OpenStreetMap от 17 декабря
|
||||
• Возможность настройки сервера для скачивания карт
|
||||
• Добавлена информация об устаревании карт и кнопка обновления (при выборе места на карте)
|
||||
• Парковочные проезды больше не используются для транзитной маршрутизации
|
||||
• Изменены кнопки масштабирования карты
|
||||
• На карту добавлены ирригационные гидранты
|
||||
• Редактор OSM: проверка максимальной длины OSM тегов
|
||||
Подробнее на codeberg.org/comaps/comaps/releases
|
||||
@@ -9,7 +9,8 @@ import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_HELP_CODE;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_RECORD_TRACK_CODE;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_SETTINGS_CODE;
|
||||
import static app.organicmaps.sdk.location.LocationState.FOLLOW;
|
||||
import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE;
|
||||
import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE_COMPASS;
|
||||
import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE_ROUTE;
|
||||
import static app.organicmaps.sdk.location.LocationState.LOCATION_TAG;
|
||||
import static app.organicmaps.sdk.util.PowerManagment.POWER_MANAGEMENT_TAG;
|
||||
import static app.organicmaps.sdk.util.Utils.dimen;
|
||||
@@ -1900,7 +1901,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
locationHelper.restartWithNewMode();
|
||||
|
||||
if ((newMode == FOLLOW || newMode == FOLLOW_AND_ROTATE) && !LocationUtils.checkFineLocationPermission(this))
|
||||
if ((newMode == FOLLOW || newMode == FOLLOW_AND_ROTATE_ROUTE || newMode == FOLLOW_AND_ROTATE_COMPASS)
|
||||
&& !LocationUtils.checkFineLocationPermission(this))
|
||||
{
|
||||
// Try to optimistically request FINE permission for FOLLOW and FOLLOW_AND_ROTATE modes.
|
||||
Logger.i(LOCATION_TAG, "Requesting ACCESS_FINE_LOCATION permission for " + LocationState.nameOf(newMode));
|
||||
|
||||
@@ -183,11 +183,16 @@ public final class UiHelpers
|
||||
drawableRes = R.drawable.ic_follow;
|
||||
tintColor = Colors.LOCATION_TINT;
|
||||
}
|
||||
case LocationState.FOLLOW_AND_ROTATE ->
|
||||
case LocationState.FOLLOW_AND_ROTATE_COMPASS ->
|
||||
{
|
||||
drawableRes = R.drawable.ic_follow_and_rotate;
|
||||
tintColor = Colors.LOCATION_TINT;
|
||||
}
|
||||
case LocationState.FOLLOW_AND_ROTATE_ROUTE ->
|
||||
{
|
||||
drawableRes = R.drawable.ic_follow_route;
|
||||
tintColor = Colors.LOCATION_TINT;
|
||||
}
|
||||
default -> throw new IllegalArgumentException("Invalid button mode: " + locationMode);
|
||||
}
|
||||
|
||||
|
||||
@@ -948,7 +948,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
|
||||
mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE);
|
||||
|
||||
if (Editor.nativeIsMapObjectUploaded())
|
||||
if (Editor.nativeAreSomeFeatureChangesUploaded())
|
||||
{
|
||||
mReset.setText(R.string.editor_place_doesnt_exist);
|
||||
return;
|
||||
@@ -966,7 +966,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
|
||||
private void reset()
|
||||
{
|
||||
if (Editor.nativeIsMapObjectUploaded())
|
||||
if (Editor.nativeAreSomeFeatureChangesUploaded())
|
||||
{
|
||||
placeDoesntExist();
|
||||
return;
|
||||
|
||||
@@ -98,6 +98,11 @@ public class NavigationController implements TrafficManager.TrafficCallback, Nav
|
||||
mSpeedLimit = topFrame.findViewById(R.id.nav_speed_limit);
|
||||
mCurrentSpeed = topFrame.findViewById(R.id.nav_current_speed);
|
||||
|
||||
View mTopbar = topFrame.findViewById(R.id.statutbar);
|
||||
ViewCompat.setOnApplyWindowInsetsListener(mTopbar,(v, windowInsets) -> {
|
||||
UiUtils.setViewNavigationTopInsetsMargin(v, windowInsets);
|
||||
return windowInsets;
|
||||
});
|
||||
// Show a blank view below the navbar to hide the menu content
|
||||
final View navigationBarBackground = mFrame.findViewById(R.id.nav_bottom_sheet_nav_bar);
|
||||
final View nextTurnContainer = mFrame.findViewById(R.id.nav_next_turn_container);
|
||||
|
||||
@@ -281,6 +281,14 @@ public final class UiUtils
|
||||
view.setPadding(systemInsets.left, systemInsets.top, systemInsets.right, view.getPaddingBottom());
|
||||
}
|
||||
|
||||
public static void setViewNavigationTopInsetsMargin(View view, WindowInsetsCompat windowInsets)
|
||||
{
|
||||
final Insets systemInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
|
||||
lp.topMargin = systemInsets.top;
|
||||
view.setLayoutParams(lp);
|
||||
}
|
||||
|
||||
public static void setupNavigationIcon(@NonNull MaterialToolbar toolbar, @NonNull View.OnClickListener listener)
|
||||
{
|
||||
View customNavigationButton = toolbar.findViewById(R.id.back);
|
||||
|
||||
@@ -49,8 +49,8 @@ public class MyPositionButton
|
||||
int colorAttr = R.attr.iconTint;
|
||||
@DimenRes
|
||||
int sizeDimen = R.dimen.map_button_icon_size;
|
||||
if (mode == LocationState.FOLLOW || mode == LocationState.FOLLOW_AND_ROTATE
|
||||
|| mode == LocationState.PENDING_POSITION)
|
||||
if (mode == LocationState.FOLLOW || mode == LocationState.FOLLOW_AND_ROTATE_ROUTE
|
||||
|| mode == LocationState.FOLLOW_AND_ROTATE_COMPASS || mode == LocationState.PENDING_POSITION)
|
||||
{
|
||||
colorAttr = com.google.android.material.R.attr.colorSecondary;
|
||||
if (mode == LocationState.PENDING_POSITION)
|
||||
@@ -69,7 +69,8 @@ public class MyPositionButton
|
||||
case LocationState.NOT_FOLLOW_NO_POSITION -> R.drawable.ic_location_off;
|
||||
case LocationState.NOT_FOLLOW -> R.drawable.ic_location_crosshair;
|
||||
case LocationState.FOLLOW -> R.drawable.ic_follow;
|
||||
case LocationState.FOLLOW_AND_ROTATE -> R.drawable.ic_follow_and_rotate;
|
||||
case LocationState.FOLLOW_AND_ROTATE_COMPASS -> R.drawable.ic_follow_and_rotate;
|
||||
case LocationState.FOLLOW_AND_ROTATE_ROUTE -> R.drawable.ic_follow_route;
|
||||
default -> throw new IllegalArgumentException("Invalid button mode: " + mode);
|
||||
};
|
||||
image = ResourcesCompat.getDrawable(resources, drawableRes, context.getTheme());
|
||||
|
||||
30
android/app/src/main/res/drawable/ic_follow_route.xml
Normal file
30
android/app/src/main/res/drawable/ic_follow_route.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:strokeColor="@android:color/white"
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M15.15 16.92l-7.04 2.8v0.4l2.63 1.07 0.98 2.67h0.39z"/>
|
||||
<path
|
||||
android:strokeColor="@android:color/white"
|
||||
android:strokeWidth="2"
|
||||
android:strokeLineJoin="miter"
|
||||
android:pathData="m 16.25,15.95 c 2.29,-2.29 1.91,-3.87 -4.06,-3.87"/>
|
||||
<path
|
||||
android:strokeColor="@android:color/white"
|
||||
android:strokeWidth="2"
|
||||
android:strokeLineJoin="miter"
|
||||
android:pathData="M8.98 7.43c-2.97 2.96-2.72 4.66 3.24 4.66"/>
|
||||
<path
|
||||
android:strokeColor="@android:color/white"
|
||||
android:strokeWidth="2"
|
||||
android:strokeLineJoin="miter"
|
||||
android:pathData="M8.89 7.51l8.83-8.79"/>
|
||||
<path
|
||||
android:strokeColor="@android:color/white"
|
||||
android:strokeWidth="2"
|
||||
android:strokeLineJoin="miter"
|
||||
android:pathData="M9.2 22.83c-0.64 0.57-2.9 2.5-3.56 3.13"/>
|
||||
</vector>
|
||||
@@ -11,13 +11,12 @@
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:id="@+id/statutbar"
|
||||
android:layout_height="15dp"
|
||||
android:layout_height="1dp"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/street_frame"
|
||||
android:layout_width="500dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/margin_half_plus_eight"
|
||||
android:layout_marginEnd="@dimen/margin_quarter"
|
||||
app:cardCornerRadius="@dimen/margin_half"
|
||||
android:elevation="@dimen/nav_elevation"
|
||||
@@ -52,7 +51,6 @@
|
||||
app:layout_constraintEnd_toStartOf="@+id/street_frame"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/statutbar"
|
||||
android:layout_marginTop="@dimen/margin_half_plus_eight"
|
||||
android:layout_marginStart="@dimen/margin_quarter"
|
||||
android:clickable="true"
|
||||
android:elevation="@dimen/nav_elevation">
|
||||
|
||||
@@ -15,7 +15,13 @@
|
||||
android:theme="@style/MwmWidget.ToolbarTheme">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/save"
|
||||
style="@style/MwmWidget.Downloader.ToolbarButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:padding="@dimen/margin_half"
|
||||
android:textAppearance="@style/MwmTextAppearance.Toolbar.Title"
|
||||
android:text="@string/editor_report_problem_send_button"/>
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?windowBackgroundForced"
|
||||
android:animateLayoutChanges="true"
|
||||
android:clickable="true"
|
||||
android:clipToPadding="false"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:background="?windowBackgroundForced"
|
||||
android:background="?cardBackground"
|
||||
android:padding="@dimen/margin_base">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?cardBackground"
|
||||
android:minHeight="@dimen/height_item_oneline"
|
||||
android:paddingStart="@dimen/margin_base_plus"
|
||||
android:paddingEnd="@dimen/margin_base_plus">
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?cardBackground"
|
||||
android:minHeight="@dimen/height_item_oneline"
|
||||
android:paddingStart="@dimen/margin_base_plus"
|
||||
android:paddingEnd="@dimen/margin_base_plus">
|
||||
|
||||
@@ -11,13 +11,12 @@
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:id="@+id/statutbar"
|
||||
android:layout_height="25dp"
|
||||
android:layout_height="1dp"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/street_frame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/margin_half_plus"
|
||||
android:layout_marginStart="@dimen/nav_street_left"
|
||||
android:layout_marginEnd="@dimen/margin_quarter"
|
||||
app:cardCornerRadius="@dimen/margin_half"
|
||||
@@ -55,7 +54,6 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/statutbar"
|
||||
android:layout_marginStart="@dimen/margin_half"
|
||||
android:layout_marginTop="@dimen/margin_half_plus"
|
||||
android:clickable="true"
|
||||
android:elevation="@dimen/nav_elevation">
|
||||
<LinearLayout
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_half_plus"
|
||||
android:textAppearance="@style/MwmTextAppearance.Title.Toolbar"
|
||||
android:textSize="@dimen/text_size_headline"
|
||||
android:fontFamily="@string/robotoMedium"
|
||||
android:gravity="center_horizontal"
|
||||
tools:text="Some long long long placeholder title"/>
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
style="@style/MwmWidget.Tab"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body3"
|
||||
tools:drawableStart="@drawable/ic_menu_open"
|
||||
tools:text="Some tab"/>
|
||||
@@ -489,7 +489,7 @@
|
||||
<string name="placepage_edit_bookmark_button">Rediger bogmærke</string>
|
||||
<string name="placepage_personal_notes_hint">Personlige notater (tekst eller html)</string>
|
||||
<string name="editor_reset_edits_message">Kassér alle lokale ændringer?</string>
|
||||
<string name="editor_reset_edits_button">Kassér</string>
|
||||
<string name="editor_reset_edits_button">Kassér ændringer</string>
|
||||
<string name="editor_remove_place_message">Slet tilføjet sted?</string>
|
||||
<string name="editor_remove_place_button">Slet</string>
|
||||
<string name="editor_place_doesnt_exist">Stedet eksisterer ikke</string>
|
||||
|
||||
@@ -497,7 +497,7 @@
|
||||
<string name="placepage_edit_bookmark_button">Muuda järjehoidjat</string>
|
||||
<string name="placepage_personal_notes_hint">Isiklikud märkmed (tekst või html)</string>
|
||||
<string name="editor_reset_edits_message">Kas loobud kõigist kohalikest muudatustest?</string>
|
||||
<string name="editor_reset_edits_button">Loobu</string>
|
||||
<string name="editor_reset_edits_button">Loobu muudatustest</string>
|
||||
<string name="editor_remove_place_message">Kas kustutad lisatud koha?</string>
|
||||
<string name="editor_remove_place_button">Kustuta</string>
|
||||
<string name="editor_place_doesnt_exist">Kohta pole olemas</string>
|
||||
@@ -911,4 +911,10 @@
|
||||
<string name="place_page_update_too_old_map">Uuenda piirkonna kaardiandmeid</string>
|
||||
<string name="place_page_too_old_to_edit">Kuna kaardiandmed on liiga vanad, siis OpenStreetMapi muutmise võimalus on lülitatud välja.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Hääljuhiste kasutamine on lülitatud välja: kõnesünteesimootorit pole saadaval</string>
|
||||
<string name="download_resources_custom_url_summary_none">Pole määratud</string>
|
||||
<string name="advanced">Täiendavad seadistused</string>
|
||||
<string name="download_resources_custom_url_title">Sinu oma kaardiserver</string>
|
||||
<string name="download_resources_custom_url_message">Kui tahad kasutada oma kaardiserverit, siis lisa ta siia. CoMapsi vaikimisi serveri kasutamiseks jäta tühjaks.</string>
|
||||
<string name="download_resources_custom_url_hint">https://cdn-fi-1.comaps.app/</string>
|
||||
<string name="download_resources_custom_url_error_scheme">Palun sisesta täismahuline võrguaadress, mille alguses on https:// ja lõpus /</string>
|
||||
</resources>
|
||||
|
||||
@@ -851,4 +851,6 @@
|
||||
<string name="place_page_update_too_old_map">Atjaunināt karšu apgabalu</string>
|
||||
<string name="place_page_too_old_to_edit">OpenStreetMap labošana ir atspējota, jo kartes dati ir pārāk veci.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Balss norādes atspējotas: nav pieejams teksta pārveidošanas runā dzinējs</string>
|
||||
<string name="prefs_speed_cameras_information">Brīdinājumi par ātruma noteikšanas kamerā ir atspējoti valstīs, kurās šādus brīdinājumus aizliedz vietējais likums.</string>
|
||||
<string name="navigation_start_tts_message">"Uzsāk navigāciju, balss norāžu valoda: "</string>
|
||||
</resources>
|
||||
|
||||
@@ -84,10 +84,10 @@
|
||||
<item name="transitRulerBackground">@color/white_4</item>
|
||||
<item name="transitStepDivider">@drawable/dot_divider</item>
|
||||
<item name="accentColorSelector">@color/accent_color_selector</item>
|
||||
<item name="android:textAppearance">@style/TextAppearance</item>
|
||||
<item name="android:textAppearanceSmall">@style/TextAppearance.Small</item>
|
||||
<item name="android:textAppearanceMedium">@style/TextAppearance.Medium</item>
|
||||
<item name="android:textAppearanceLarge">@style/TextAppearance.Large</item>
|
||||
<item name="android:textAppearance">@style/MwmTextAppearance.Body3</item>
|
||||
<item name="android:textAppearanceSmall">@style/MwmTextAppearance.Body4</item>
|
||||
<item name="android:textAppearanceMedium">@style/MwmTextAppearance.Body2</item>
|
||||
<item name="android:textAppearanceLarge">@style/MwmTextAppearance.Body1</item>
|
||||
<item name="drivingOptionsViewBg">@color/bg_primary_dark</item>
|
||||
<item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item>
|
||||
<item name="elevationProfilePropIconTint">@color/white_secondary</item>
|
||||
|
||||
@@ -511,7 +511,7 @@
|
||||
<string name="placepage_edit_bookmark_button">编辑书签</string>
|
||||
<string name="placepage_personal_notes_hint">个人注记(文字或 html)</string>
|
||||
<string name="editor_reset_edits_message">舍弃所有本地更改?</string>
|
||||
<string name="editor_reset_edits_button">舍弃</string>
|
||||
<string name="editor_reset_edits_button">舍弃更改</string>
|
||||
<string name="editor_remove_place_message">删除已添加的地点?</string>
|
||||
<string name="editor_remove_place_button">删除</string>
|
||||
<string name="editor_place_doesnt_exist">该地点不存在</string>
|
||||
@@ -917,4 +917,10 @@
|
||||
<string name="place_page_app_too_old_description">您当前的地图数据非常旧,请更新 CoMaps 应用。</string>
|
||||
<string name="place_page_update_too_old_map">更新地图区域</string>
|
||||
<string name="place_page_too_old_to_edit">由于地图数据太旧,OpenStreetMap 编辑被禁用。</string>
|
||||
<string name="download_resources_custom_url_hint">https://cdn-fi-1.comaps.app/</string>
|
||||
<string name="download_resources_custom_url_summary_none">未设置</string>
|
||||
<string name="download_resources_custom_url_error_scheme">请输入以 https:// 开头、以 / 结尾的完整 URL</string>
|
||||
<string name="advanced">高级</string>
|
||||
<string name="download_resources_custom_url_title">自定义地图服务器</string>
|
||||
<string name="download_resources_custom_url_message">覆盖用于地图下载的默认地图下载服务器。留空则使用 CoMaps 默认服务器。</string>
|
||||
</resources>
|
||||
|
||||
@@ -27,9 +27,9 @@
|
||||
<item>type2_combo</item>
|
||||
<item>nacs</item>
|
||||
<item>chademo</item>
|
||||
<item>type1</item>
|
||||
<item>type2_cable</item>
|
||||
<item>type2</item>
|
||||
<item>type2_cable</item>
|
||||
<item>type1</item>
|
||||
<item>schuko</item>
|
||||
<item>unknown</item>
|
||||
</string-array>
|
||||
|
||||
@@ -15,11 +15,6 @@
|
||||
<item name="android:textStyle">bold</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmTextAppearance.Title.Toolbar">
|
||||
<item name="android:textSize">@dimen/text_size_toolbar</item>
|
||||
<item name="android:fontFamily">@string/robotoMedium</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmTextAppearance.Headline">
|
||||
<item name="android:textSize">@dimen/text_size_headline</item>
|
||||
<item name="android:textColor">?android:textColorPrimary</item>
|
||||
@@ -121,10 +116,6 @@
|
||||
<item name="android:textColor">@color/bg_cards</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmTextAppearance.Toolbar.Title.Button">
|
||||
<item name="android:textSize">@dimen/text_size_body_3</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmTextAppearance.NavMenu">
|
||||
<item name="android:textStyle">bold</item>
|
||||
</style>
|
||||
|
||||
@@ -287,13 +287,6 @@
|
||||
<item name="android:textColor">@color/text_light</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmWidget.Tab">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textAppearance">@style/MwmTextAppearance.Body3</item>
|
||||
<item name="android:gravity">center</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmWidget.TabLayout" parent="Widget.Design.TabLayout">
|
||||
<item name="tabMaxWidth">0dp</item>
|
||||
<item name="tabTextAppearance">@style/MwmTextAppearance.Tab</item>
|
||||
@@ -305,16 +298,6 @@
|
||||
<item name="tabSelectedTextColor">@color/white_primary</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmWidget.Downloader.ToolbarButton">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">match_parent</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:layout_gravity">end|center_vertical</item>
|
||||
<item name="android:background">?selectableItemBackgroundBorderless</item>
|
||||
<item name="android:padding">@dimen/margin_half</item>
|
||||
<item name="android:textAppearance">@style/MwmTextAppearance.Toolbar.Title.Button</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmWidget.MaterialCalendar.Theme.FullScreen.Dark"
|
||||
parent="ThemeOverlay.Material3.MaterialCalendar.Fullscreen">
|
||||
<item name="colorSurface">@color/material_calendar_surface_dark</item>
|
||||
@@ -325,26 +308,6 @@
|
||||
<item name="colorSurface">@color/material_calendar_surface_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance" parent="MwmTextAppearance.Body3"/>
|
||||
|
||||
<style name="TextAppearance.Small" parent="MwmTextAppearance.Body4"/>
|
||||
|
||||
<style name="TextAppearance.Medium" parent="MwmTextAppearance.Body2"/>
|
||||
|
||||
<style name="TextAppearance.Large" parent="MwmTextAppearance.Body1">
|
||||
<item name="android:textSize">@dimen/text_size_toolbar</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Inverse" parent="MwmTextAppearance.Body3.Light"/>
|
||||
|
||||
<style name="TextAppearance.Small.Inverse" parent="MwmTextAppearance.Body4.Light"/>
|
||||
|
||||
<style name="TextAppearance.Medium.Inverse" parent="MwmTextAppearance.Body2.Light"/>
|
||||
|
||||
<style name="TextAppearance.Large.Inverse" parent="MwmTextAppearance.Body1.Light">
|
||||
<item name="android:textSize">@dimen/text_size_toolbar</item>
|
||||
</style>
|
||||
|
||||
<style
|
||||
name="MwmTheme.BottomSheetDialog"
|
||||
parent="@style/ThemeOverlay.Material3.BottomSheetDialog">
|
||||
@@ -377,9 +340,6 @@
|
||||
<style name="MwmWidget.M3.Button" parent="Widget.Material3.Button">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textColor">?accentButtonTextColor</item>
|
||||
<item name="backgroundTint">@null</item>
|
||||
<item name="cornerRadius">20dp</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
</style>
|
||||
|
||||
@@ -389,13 +349,11 @@
|
||||
|
||||
<style name="MwmWidget.M3.Button.Secondary" parent="@style/Widget.Material3.Button.OutlinedButton">
|
||||
<item name="android:textSize">16sp</item>
|
||||
<item name="strokeColor">?colorSecondary</item>
|
||||
<item name="android:textColor">?colorSecondary</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmWidget.M3.FAB.Primary" parent="@style/Widget.Material3.FloatingActionButton.Primary">
|
||||
<item name="shapeAppearance">@style/ShapeAppearanceOverlay.Material3.FloatingActionButton</item>
|
||||
<item name="rippleColor">@null</item>
|
||||
<item name="backgroundTint">?colorSecondary</item>
|
||||
<item name="tint">?android:textColorPrimaryInverse</item>
|
||||
</style>
|
||||
|
||||
@@ -85,14 +85,14 @@
|
||||
<item name="transitRulerBackground">@color/black_4</item>
|
||||
<item name="transitStepDivider">@drawable/dot_divider</item>
|
||||
<item name="accentColorSelector">@color/accent_color_selector</item>
|
||||
<item name="android:textAppearance">@style/TextAppearance</item>
|
||||
<item name="android:textAppearanceSmall">@style/TextAppearance.Small</item>
|
||||
<item name="android:textAppearanceMedium">@style/TextAppearance.Medium</item>
|
||||
<item name="android:textAppearanceLarge">@style/TextAppearance.Large</item>
|
||||
<item name="android:textAppearanceInverse">@style/TextAppearance.Inverse</item>
|
||||
<item name="android:textAppearanceSmallInverse">@style/TextAppearance.Small.Inverse</item>
|
||||
<item name="android:textAppearanceMediumInverse">@style/TextAppearance.Medium.Inverse</item>
|
||||
<item name="android:textAppearanceLargeInverse">@style/TextAppearance.Large.Inverse</item>
|
||||
<item name="android:textAppearance">@style/MwmTextAppearance.Body3</item>
|
||||
<item name="android:textAppearanceSmall">@style/MwmTextAppearance.Body4</item>
|
||||
<item name="android:textAppearanceMedium">@style/MwmTextAppearance.Body2</item>
|
||||
<item name="android:textAppearanceLarge">@style/MwmTextAppearance.Body1</item>
|
||||
<item name="android:textAppearanceInverse">@style/MwmTextAppearance.Body3.Light</item>
|
||||
<item name="android:textAppearanceSmallInverse">@style/MwmTextAppearance.Body4.Light</item>
|
||||
<item name="android:textAppearanceMediumInverse">@style/MwmTextAppearance.Body2.Light</item>
|
||||
<item name="android:textAppearanceLargeInverse">@style/MwmTextAppearance.Body1.Light</item>
|
||||
<item name="drivingOptionsViewBg">@color/bg_primary_dark</item>
|
||||
<item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item>
|
||||
<item name="elevationProfilePropIconTint">@color/black_secondary</item>
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
[versions]
|
||||
androidGradlePlugin = "8.11.2"
|
||||
androidGradlePlugin = "8.13.2"
|
||||
androidxCarApp = "1.7.0"
|
||||
|
||||
[libraries]
|
||||
android-tools = { module = "com.android.tools.build:gradle", version.ref = "androidGradlePlugin" }
|
||||
triplet-play-publisher = { module = "com.github.triplet.gradle:play-publisher", version = "3.12.1" }
|
||||
triplet-play-publisher = { module = "com.github.triplet.gradle:play-publisher", version = "3.13.0" }
|
||||
huawei-publish = { module = "ru.cian:huawei-publish-gradle-plugin", version = "1.4.2" }
|
||||
android-tools-desugar = { module = "com.android.tools:desugar_jdk_libs", version = "2.1.5" }
|
||||
microg-services-location = { module = "org.microg.gms:play-services-location", version = "0.3.6.244735" }
|
||||
androidx-core = { module = "androidx.core:core", version = "1.17.0" }
|
||||
jetbrains-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version = "2.2.20" }
|
||||
jetbrains-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version = "2.2.21" }
|
||||
androidx-annotation = { module = "androidx.annotation:annotation", version = "1.9.1" }
|
||||
androidx-appcompat = { module = "androidx.appcompat:appcompat", version = "1.7.1" }
|
||||
androidx-car-app = { module = "androidx.car.app:app", version.ref = "androidxCarApp" }
|
||||
@@ -21,12 +21,13 @@ androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version
|
||||
androidx-work-runtime = { module = "androidx.work:work-runtime", version = "2.10.5" }
|
||||
androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version = "2.9.4" }
|
||||
androidx-media = { module = "androidx.media:media", version = "1.7.1" }
|
||||
androidx-documentfile= { module = "androidx.documentfile:documentfile", version ="1.1.0" }
|
||||
android-material = { module = "com.google.android.material:material", version = "1.12.0" }
|
||||
google-guava = { module = "com.google.guava:guava", version = "33.4.8-android" }
|
||||
google-guava = { module = "com.google.guava:guava", version = "33.5.0-android" }
|
||||
appdevnext-androidchart = { module = "com.github.AppDevNext:AndroidChart", version = "3.1.0.31" }
|
||||
androidx-test-junit = { module = "androidx.test.ext:junit", version = "1.3.0" }
|
||||
junit = { module = "junit:junit", version = "4.13.2" }
|
||||
mockito-core = { module = "org.mockito:mockito-core", version = "5.20.0" }
|
||||
mockito-core = { module = "org.mockito:mockito-core", version = "5.21.0" }
|
||||
|
||||
[plugins]
|
||||
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
|
||||
|
||||
@@ -126,6 +126,7 @@ dependencies {
|
||||
implementation libs.androidx.recyclerview
|
||||
implementation libs.androidx.preference
|
||||
implementation libs.android.material
|
||||
implementation libs.androidx.documentfile
|
||||
|
||||
testImplementation libs.junit
|
||||
}
|
||||
|
||||
1
android/sdk/src/main/assets/mapcss-mapping.csv
Symbolic link
1
android/sdk/src/main/assets/mapcss-mapping.csv
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../data/mapcss-mapping.csv
|
||||
|
@@ -580,10 +580,10 @@ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeGetMapObject
|
||||
return static_cast<jint>(osm::Editor::Instance().GetFeatureStatus(g_editableMapObject.GetID()));
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeIsMapObjectUploaded(JNIEnv * env, jclass clazz)
|
||||
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeAreSomeFeatureChangesUploaded(JNIEnv * env, jclass clazz)
|
||||
{
|
||||
return osm::Editor::Instance().IsFeatureUploaded(g_editableMapObject.GetID().m_mwmId,
|
||||
g_editableMapObject.GetID().m_index);
|
||||
return osm::Editor::Instance().AreSomeFeatureChangesUploaded(g_editableMapObject.GetID().m_mwmId,
|
||||
g_editableMapObject.GetID().m_index);
|
||||
}
|
||||
|
||||
// static nativeMakeLocalizedName(String langCode, String name);
|
||||
|
||||
@@ -190,5 +190,5 @@ public final class Editor
|
||||
|
||||
@FeatureStatus
|
||||
public static native int nativeGetMapObjectStatus();
|
||||
public static native boolean nativeIsMapObjectUploaded();
|
||||
public static native boolean nativeAreSomeFeatureChangesUploaded();
|
||||
}
|
||||
|
||||
@@ -20,7 +20,8 @@ public final class LocationState
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({PENDING_POSITION, NOT_FOLLOW_NO_POSITION, NOT_FOLLOW, FOLLOW, FOLLOW_AND_ROTATE})
|
||||
@IntDef({PENDING_POSITION, NOT_FOLLOW_NO_POSITION, NOT_FOLLOW, FOLLOW, FOLLOW_AND_ROTATE_COMPASS,
|
||||
FOLLOW_AND_ROTATE_ROUTE})
|
||||
@interface Value
|
||||
{}
|
||||
|
||||
@@ -29,7 +30,8 @@ public final class LocationState
|
||||
public static final int NOT_FOLLOW_NO_POSITION = 1;
|
||||
public static final int NOT_FOLLOW = 2;
|
||||
public static final int FOLLOW = 3;
|
||||
public static final int FOLLOW_AND_ROTATE = 4;
|
||||
public static final int FOLLOW_AND_ROTATE_COMPASS = 4;
|
||||
public static final int FOLLOW_AND_ROTATE_ROUTE = 5;
|
||||
|
||||
// These constants should correspond to values defined in platform/location.hpp
|
||||
// Leave 0-value as no any error.
|
||||
@@ -69,7 +71,8 @@ public final class LocationState
|
||||
case NOT_FOLLOW_NO_POSITION -> "NOT_FOLLOW_NO_POSITION";
|
||||
case NOT_FOLLOW -> "NOT_FOLLOW";
|
||||
case FOLLOW -> "FOLLOW";
|
||||
case FOLLOW_AND_ROTATE -> "FOLLOW_AND_ROTATE";
|
||||
case FOLLOW_AND_ROTATE_COMPASS -> "FOLLOW_AND_ROTATE_COMPASS";
|
||||
case FOLLOW_AND_ROTATE_ROUTE -> "FOLLOW_AND_ROTATE_ROUTE";
|
||||
default -> "Unknown: " + mode;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1122,7 +1122,7 @@
|
||||
<string name="type.shop.doityourself">Tienda de bricolaje</string>
|
||||
<string name="type.shop.dry_cleaning">Tintorería</string>
|
||||
<string name="type.shop.electronics">Electrónica</string>
|
||||
<string name="type.shop.erotic">Sex Shop</string>
|
||||
<string name="type.shop.erotic">Tienda erótica</string>
|
||||
<string name="type.shop.fabric">Tienda de telas</string>
|
||||
<string name="type.shop.farm">Tienda de alimentos de granja</string>
|
||||
<string name="type.shop.fashion_accessories">Accesorios de moda</string>
|
||||
|
||||
@@ -457,4 +457,12 @@
|
||||
<string name="type.entrance.exit">Izhod (samo)</string>
|
||||
<string name="type.healthcare.laboratory">Zdravstveni laboratorij</string>
|
||||
<string name="type.healthcare.psychotherapist">Psihoterapevt</string>
|
||||
<string name="type.highway.cycleway.tunnel">Predor</string>
|
||||
<string name="type.highway.elevator">Dvigalo</string>
|
||||
<string name="type.highway.footway">Pešpot</string>
|
||||
<string name="type.highway.footway.sidewalk">Pločnik</string>
|
||||
<string name="type.highway.footway.crossing">Prehod za pešce</string>
|
||||
<string name="type.highway.footway.area">Površina za pešce</string>
|
||||
<string name="type.highway.footway.bridge">Most za pešce</string>
|
||||
<string name="type.highway.footway.tunnel">Predor za pešce</string>
|
||||
</resources>
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
<!-- Compared to wilderness_hut its smaller and simpler, without a fireplace. -->
|
||||
<string name="type.amenity.shelter.basic_hut">Bivouac Hut</string>
|
||||
<!-- A traditional 3-walled shelter (one side open), suitable for overnight camping. -->
|
||||
<string name="type.amenity.shelter.lean_to">Lean-to Shelter</string>
|
||||
<string name="type.amenity.shelter.lean_to">Lean-to Sleep Shelter</string>
|
||||
<string name="type.amenity.public_bath">Public Bath</string>
|
||||
<string name="type.amenity.shower">Shower</string>
|
||||
<string name="type.amenity.stripclub">Stripclub</string>
|
||||
@@ -198,7 +198,7 @@
|
||||
<string name="type.amenity.vending_machine.food">Food Dispenser</string>
|
||||
<string name="type.amenity.vending_machine.newspapers">Newspaper Dispenser</string>
|
||||
<string name="type.amenity.vending_machine.parking_tickets">Parking Meter</string>
|
||||
<string name="type.amenity.vending_machine.public_transport_tickets">Ticket Machine</string>
|
||||
<string name="type.amenity.vending_machine.public_transport_tickets">Public Transport Ticket Machine</string>
|
||||
<string name="type.amenity.vending_machine.sweets">Sweets Dispenser</string>
|
||||
<string name="type.amenity.vending_machine.excrement_bags">Excrement Bags Dispenser</string>
|
||||
<string name="type.amenity.parcel_locker">Parcel Locker</string>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"shop-farm|@category_food|@shop": "Farm food",
|
||||
"shop-garden_centre|@shop": "4Garden Centre|U+1F3E1",
|
||||
"shop-grocery|@category_food|@shop": "Grocery",
|
||||
"shop-health_food|@category_food|@shop": "7Health food|7Healthy food|healthfood|organic|vegan|vegetarian",
|
||||
"shop-health_food|@category_food|@shop": "7Health food|7Healthy food|healthfood|organic",
|
||||
"shop-hearing_aids|@shop": "7Hearing Aids",
|
||||
"shop-mobile_phone|@shop": "4Cell Phones|4Mobile Phones|6smartphones|electronics store|U+1F4F1|U+1F4F2",
|
||||
"shop-florist|@shop": "4Florist|U+1F337|U+1F338|U+1F339|U+1F33A|U+1F33B|U+1F33C|U+1F490|U+1F33E|4flowers|flower shop|floral shop|floral arrangements|same day flowers|bouquet",
|
||||
@@ -81,6 +81,9 @@
|
||||
"amenity-townhall": "3Town Hall|townhall|city hall|guildhall|village hall|4municipal hall|civic centre",
|
||||
"tourism-attraction|@category_tourism": "4Attraction|U+1F3A0|U+1F3A1|U+1F3A2|U+1F3AA",
|
||||
"tourism-artwork": "3Artwork|U+1F3A8",
|
||||
"tourism-artwork-sculpture": "Sculpture|Artwork|U+1F3A8",
|
||||
"tourism-artwork-statue": "Statue|Artwork|U+1F3A8",
|
||||
"tourism-artwork-painting": "Painting|Artwork|U+1F3A8",
|
||||
"tourism-viewpoint|@category_tourism": "4Viewpoint|Vista",
|
||||
"tourism-information": "4Tourist Information|4information|U+1F481",
|
||||
"tourism-picnic_site|amenity-bbq|leisure-picnic_table": "3Picnic Site|picnic|Barbecue Grill|Picnic Table|bbq|Barbec",
|
||||
@@ -197,7 +200,7 @@
|
||||
"amenity-school": "3School|U+1F392|U+1F3EB",
|
||||
"amenity-shelter": "4Shelter|refuge",
|
||||
"amenity-shelter-basic_hut": "basic hut|3Bivouac Hut|Bivvy|Bothy|Hut",
|
||||
"amenity-shelter-lean_to": "3Lean-to Shelter|4Shelter|Refuge|lean shelter|shelter",
|
||||
"amenity-shelter-lean_to": "3Lean-to Sleep Shelter|4Shelter|Refuge|lean shelter|Lean-to Shelter",
|
||||
"amenity-stripclub": "Stripclub|strip club",
|
||||
"amenity-telephone": "2Phone|U+260E|U+1F4DE|5Telephone",
|
||||
"@category_toilet": "3Toilet|toilets|4Restroom|potty|WC|water closet",
|
||||
@@ -365,20 +368,21 @@
|
||||
"shop-pet|@shop": "3Pet",
|
||||
"tourism-zoo|@category_tourism|@category_children": "2Zoo",
|
||||
"attraction-animal": "Animal Enclosure",
|
||||
"tourism-information-office|amenity-ranger_station|@category_tourism": "4Tourism office|6Ranger station",
|
||||
"tourism-information-visitor_centre|amenity-ranger_station|@category_tourism": "3Visitor centre|6Ranger station",
|
||||
"tourism-information-office|amenity-ranger_station|@category_tourism": "4Tourist Office|Tourism office|6Ranger station|Information",
|
||||
"tourism-information-visitor_centre|amenity-ranger_station|@category_tourism": "3Visitor centre|6Ranger station|Information",
|
||||
"amenity-community_centre": "4Community centre",
|
||||
"amenity-compressed_air": "6Compressed air",
|
||||
"amenity-courthouse": "4Courthouse",
|
||||
"amenity-vending_machine-cigarettes": "4Cigarette dispenser",
|
||||
"amenity-vending_machine-coffee": "4Coffee dispenser|Coffee",
|
||||
"amenity-vending_machine-condoms": "4Condoms dispenser|Condoms|Condomat",
|
||||
"amenity-vending_machine-drinks": "4Drinks dispenser|4Beverages",
|
||||
"amenity-vending_machine-food|@category_food": "4Food dispenser|Food|Snacks",
|
||||
"amenity-vending_machine": "Vending Machine",
|
||||
"amenity-vending_machine-cigarettes": "4Cigarette dispenser|Vending Machine",
|
||||
"amenity-vending_machine-coffee": "4Coffee dispenser|Coffee|Vending Machine",
|
||||
"amenity-vending_machine-condoms": "4Condoms dispenser|Condoms|Condomat|Vending Machine",
|
||||
"amenity-vending_machine-drinks": "4Drinks dispenser|4Beverages|Vending Machine",
|
||||
"amenity-vending_machine-food|@category_food": "4Food dispenser|Food|Snacks|Vending Machine",
|
||||
"amenity-vending_machine-parking_tickets|@category_parking": "4Parking tickets|3Pay and Display|Parkomat|Parking Meter",
|
||||
"amenity-vending_machine-public_transport_tickets|@category_transport": "6Ticket machine|Transport Tickets|Tickets|4Fare machine|Bus tickets|Train tickets|Ticketing",
|
||||
"amenity-vending_machine-public_transport_tickets|@category_transport": "4Public Transport Ticket Machine|6Ticket machine|Transport Tickets|Tickets|4Fare machine|Bus tickets|Train tickets|Ticketing|Vending Machine",
|
||||
"amenity-vending_machine-newspapers": "4Newspaper Dispenser|Newspapers",
|
||||
"amenity-vending_machine-sweets": "4Sweets Dispenser|Sweets|4Candies|Lollies",
|
||||
"amenity-vending_machine-sweets": "4Sweets Dispenser|Sweets|4Candies|Lollies|Vending Machine",
|
||||
"amenity-vending_machine-excrement_bags": "5Excrement Bags Dispenser|4Poop Bags|3Dog Poop Bags|Animal Waste",
|
||||
"amenity-parcel_locker|@category_post": "4Parcel Locker|4Parcel Pickup",
|
||||
"shop-outpost": "4Pickup Point|4Parcel Pickup",
|
||||
@@ -398,6 +402,7 @@
|
||||
"tourism-chalet|@category_hotel": "5Holiday Cottage|5vacation home|4Chalet",
|
||||
"tourism-information-board": "Information Board",
|
||||
"tourism-information-map": "Tourist map|map|4Information",
|
||||
"tourism-information-guidepost": "Guidepost",
|
||||
"aerialway-station": "Aerialway Station|5Cable car station",
|
||||
"aeroway-helipad": "4Helipad",
|
||||
"barrier-border_control": "4Border Control",
|
||||
@@ -453,7 +458,7 @@
|
||||
"shop-tattoo": "Tattoo Parlour|4tattoos",
|
||||
"shop-variety_store|@category_shopping|@shop": "4Variety|6Dollar store|5Pound shop|5Five and dime",
|
||||
"shop-video|@shop": "4Video|3DVD|videoshop|5video shop|video rental|video rental shop|video rental store",
|
||||
"shop-video_games|@shop": "Video games|4videogames|video games|videogames|gaming|games|U+1F47E|U+1F579|U+1F3AE",
|
||||
"shop-video_games|@shop": "Video games|4videogames|video games|videogames|gaming|games|video game|videogame|U+1F47E|U+1F579|U+1F3AE",
|
||||
"tourism-wilderness_hut|@category_hotel": "4Wilderness Hut|5backcountry hut|hut|mountain hut|bothy|bivvy",
|
||||
"tourism-gallery|@category_tourism": "3Art Gallery|3Gallery|museum",
|
||||
"tourism-theme_park|@category_tourism|@category_children": "5Theme park|Amusement park",
|
||||
@@ -499,6 +504,7 @@
|
||||
"leisure-track": "Track",
|
||||
"leisure-bandstand": "5Bandstand",
|
||||
"power-plant": "Power Plant",
|
||||
"power-generator-wind": "Wind Generator",
|
||||
"shop-auction|@category_secondhand": "4Auction|Auctioneer|Auction House",
|
||||
"shop-collector|@category_shopping|@category_secondhand": "Collectables|Collector",
|
||||
"man_made-cairn": "4Cairn",
|
||||
|
||||
4620
data/countries.txt
4620
data/countries.txt
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"World": {
|
||||
"languages": ["int_name", "en", "default"]
|
||||
},
|
||||
"WorldCoasts": {
|
||||
"languages": ["int_name", "en", "default"]
|
||||
},
|
||||
"Abkhazia": {
|
||||
"languages": ["ab", "ru"]
|
||||
},
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
-->
|
||||
<!-- TODO: grouping like in <type id="shop-bag" group="shop"> is not currently used,
|
||||
see https://github.com/organicmaps/organicmaps/pull/7678#issuecomment-2017488467
|
||||
-->
|
||||
-->
|
||||
<editor>
|
||||
<!-- TODO: disabling is not implemented, remove? see a todo in Editor::GetEditableProperties() -->
|
||||
<disable everywhere="no">
|
||||
@@ -122,10 +122,10 @@
|
||||
</value>
|
||||
</field>
|
||||
<!-- Uncomment this and other ele fields when the code supports it. -->
|
||||
<!-- <field name="ele">-->
|
||||
<!-- <tag k="ele" />-->
|
||||
<!-- <value type="number" />-->
|
||||
<!-- </field>-->
|
||||
<!-- <field name="ele"> -->
|
||||
<!-- <tag k="ele" /> -->
|
||||
<!-- <value type="number" /> -->
|
||||
<!-- </field> -->
|
||||
<!-- Skipping FMD_TURN_LANES. -->
|
||||
<field name="email">
|
||||
<tag k="email" />
|
||||
@@ -135,9 +135,9 @@
|
||||
<tag k="addr:postcode" />
|
||||
</field>
|
||||
<!-- Uncomment this and other wiki fields when the code supports it. -->
|
||||
<!-- <field name="wikipedia" editable="no">-->
|
||||
<!-- <tag k="wikipedia" />-->
|
||||
<!-- </field>-->
|
||||
<!-- <field name="wikipedia" editable="no"> -->
|
||||
<!-- <tag k="wikipedia" /> -->
|
||||
<!-- </field> -->
|
||||
<!-- Skipping FMD_MAXSPEED. -->
|
||||
<field name="flats">
|
||||
<tag k="addr:flats" />
|
||||
@@ -175,10 +175,10 @@
|
||||
</field>
|
||||
<!-- Field groups. -->
|
||||
<field_group name="charge_sockets">
|
||||
<field_ref name="socket_type1_count" />
|
||||
<field_ref name="socket_type1_output" />
|
||||
<field_ref name="socket_type2_count" />
|
||||
<field_ref name="socket_type2_output" />
|
||||
<field_ref name="socket_type1_count" />
|
||||
<field_ref name="socket_type1_output" />
|
||||
<field_ref name="socket_type2_count" />
|
||||
<field_ref name="socket_type2_output" />
|
||||
</field_group>
|
||||
<field_group name="address">
|
||||
<field_ref name="street" />
|
||||
@@ -236,11 +236,11 @@
|
||||
<types>
|
||||
<type id="aeroway-aerodrome" editable="no">
|
||||
<include group="poi" />
|
||||
<!-- <include field="ele" />-->
|
||||
<!-- <include field="ele" /> -->
|
||||
</type>
|
||||
<type id="aeroway-airport" editable="no">
|
||||
<include group="poi" />
|
||||
<!-- <include field="ele" />-->
|
||||
<!-- <include field="ele" /> -->
|
||||
</type>
|
||||
<type id="amenity-atm" group="banking" priority="low">
|
||||
<include field="opening_hours" />
|
||||
@@ -394,32 +394,25 @@
|
||||
<type id="amenity-pharmacy" group="shop">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-buddhist" can_add="no">
|
||||
<type id="amenity-place_of_worship-buddhist">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-christian" can_add="no">
|
||||
<type id="amenity-place_of_worship-christian">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-hindu" can_add="no">
|
||||
<type id="amenity-place_of_worship-hindu">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-jewish" can_add="no">
|
||||
<type id="amenity-place_of_worship-jewish">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-muslim" can_add="no">
|
||||
<type id="amenity-place_of_worship-muslim">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-shinto" can_add="no">
|
||||
<type id="amenity-place_of_worship-shinto">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-taoist" can_add="no">
|
||||
<type id="amenity-place_of_worship-taoist">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="amenity-place_of_worship">
|
||||
@@ -519,7 +512,7 @@
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="amenity-charging_station">
|
||||
<include group="charge_sockets" />
|
||||
<include group="charge_sockets" />
|
||||
<include field="opening_hours" />
|
||||
<include field="operator" />
|
||||
</type>
|
||||
@@ -632,23 +625,23 @@
|
||||
</type>
|
||||
<type id="historic-archaeological_site" group="historic">
|
||||
<include group="poi" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<type id="historic-castle" group="historic">
|
||||
<include group="poi" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<type id="historic-memorial" group="historic">
|
||||
<include field="name" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<type id="historic-monument" group="historic">
|
||||
<include field="name" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<type id="historic-ruins" group="historic">
|
||||
<include field="name" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<type id="historic-aircraft" group="historic">
|
||||
<include field="name" />
|
||||
@@ -696,7 +689,7 @@
|
||||
<!-- Not addable as mapping as a node is uncommon, also ambiguous with amenity-grave_yard -->
|
||||
<type id="landuse-cemetery" can_add="no">
|
||||
<include group="poi" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<!-- Not addable as mapping as a node is uncommon -->
|
||||
<type id="leisure-garden" can_add="no">
|
||||
@@ -705,6 +698,9 @@
|
||||
<type id="leisure-resort">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-sport-swimming">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
@@ -714,7 +710,7 @@
|
||||
<!-- Not addable as mapping as a node is uncommon -->
|
||||
<type id="leisure-stadium" can_add="no">
|
||||
<include group="poi_internet" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<!-- Not addable as mapping as a node is uncommon -->
|
||||
<type id="leisure-swimming_pool" can_add="no">
|
||||
@@ -723,7 +719,7 @@
|
||||
</type>
|
||||
<type id="natural-cave_entrance" group="historic">
|
||||
<include field="name" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<type id="natural-geyser">
|
||||
<include field="name" />
|
||||
@@ -733,8 +729,8 @@
|
||||
</type>
|
||||
<type id="natural-peak">
|
||||
<include field="name" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="ele" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
<!-- <include field="ele" /> -->
|
||||
</type>
|
||||
<type id="natural-spring">
|
||||
<include field="name" />
|
||||
@@ -742,10 +738,9 @@
|
||||
<type id="waterway-waterfall">
|
||||
<include field="name" />
|
||||
<include field="height" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<!-- Too generic to be added -->
|
||||
<type id="office" can_add="no">
|
||||
<type id="office" group="office">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="office-company" group="office">
|
||||
@@ -775,7 +770,7 @@
|
||||
<!-- Not addable because ambiguous with landuse=farmyard -->
|
||||
<type id="place-farm" can_add="no">
|
||||
<include group="poi_internet" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
|
||||
<!-- Do not allow to edit settlements.
|
||||
@@ -842,6 +837,12 @@
|
||||
<type id="shop-bathroom_furnishing" group="shop">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="shop-beauty-nails">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="shop-beauty-day_spa">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="shop-beauty">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
@@ -1102,7 +1103,7 @@
|
||||
</type>
|
||||
<type id="tourism-alpine_hut" group="accomodation">
|
||||
<include group="poi_internet" />
|
||||
<!-- <include field="ele" />-->
|
||||
<!-- <include field="ele" /> -->
|
||||
<include field="opening_hours" />
|
||||
<include field="website" />
|
||||
</type>
|
||||
@@ -1112,12 +1113,22 @@
|
||||
<type id="tourism-aquarium">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="tourism-artwork-sculpture">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<type id="tourism-artwork-statue">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<type id="tourism-artwork-painting">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<type id="tourism-artwork">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<!-- Not addable because OSM category is too broad and due to vandalism problems -->
|
||||
<type id="tourism-attraction" can_add="no">
|
||||
<include group="poi_internet" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
<!-- <include field="wikipedia" /> -->
|
||||
</type>
|
||||
<type id="attraction-animal">
|
||||
<include field="name" />
|
||||
@@ -1144,26 +1155,22 @@
|
||||
<include group="poi_internet" />
|
||||
<include field="self_service" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-office" can_add="no">
|
||||
<type id="tourism-information-office">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-visitor_centre" can_add="no">
|
||||
<type id="tourism-information-visitor_centre">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-board" can_add="no">
|
||||
<type id="tourism-information-board">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-map" can_add="no">
|
||||
<type id="tourism-information-map">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-guidepost" can_add="no">
|
||||
<type id="tourism-information-guidepost">
|
||||
</type>
|
||||
<type id="tourism-information">
|
||||
<!-- Too generic to add -->
|
||||
<type id="tourism-information" can_add="no">
|
||||
<include group="poi" />
|
||||
</type>
|
||||
<type id="amenity-ranger_station">
|
||||
@@ -1185,6 +1192,12 @@
|
||||
<type id="amenity-compressed_air" />
|
||||
<type id="amenity-bbq" />
|
||||
<type id="leisure-slipway" />
|
||||
<type id="amenity-shelter-basic_hut">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<type id="amenity-shelter-lean_to">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<type id="amenity-shelter">
|
||||
<include field="name" />
|
||||
</type>
|
||||
@@ -1382,6 +1395,9 @@
|
||||
<type id="leisure-indoor_play">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-fitness_centre-sport-yoga">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-fitness_centre">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
@@ -1406,7 +1422,7 @@
|
||||
<type id="man_made-petroleum_well">
|
||||
<include field="name" />
|
||||
<include field="operator" />
|
||||
<!-- <include field="ele" />-->
|
||||
<!-- <include field="ele" /> -->
|
||||
</type>
|
||||
<type id="man_made-water_well">
|
||||
<include field="name" />
|
||||
@@ -1433,10 +1449,14 @@
|
||||
<type id="man_made-lighthouse">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<type id="man_made-mast-communication" />
|
||||
<type id="man_made-mast" />
|
||||
<type id="man_made-survey_point">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<type id="power-generator-wind">
|
||||
<include field="operator" />
|
||||
</type>
|
||||
<type id="man_made-windmill">
|
||||
<include field="name" />
|
||||
</type>
|
||||
@@ -1509,67 +1529,50 @@
|
||||
<type id="leisure-escape_game">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Uncomment this after our editor core supports complex types
|
||||
<type id="amenity-vending_machine-parking_tickets">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-public_transport_tickets">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-cigarettes">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="cigarettes" />
|
||||
<include field="operator" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-coffee">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="coffee" />
|
||||
<include field="operator" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-condoms">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="condoms" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-drinks">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="drinks" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-excrement_bags">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-coffee">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-condoms">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-food">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="food" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-newspapers">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="newspapers" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-sweets">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="sweets" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="shop-car_repair-tyres">
|
||||
<tag k="shop" v="car_repair" />
|
||||
<tag k="service" v="tyres" />
|
||||
<include group="poi_internet" />
|
||||
<type id="amenity-vending_machine">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-climbing">
|
||||
<tag k="leisure" v="sports_centre" />
|
||||
<tag k="sport" v="climbing" />
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-shooting">
|
||||
<tag k="leisure" v="sports_centre" />
|
||||
<tag k="sport" v="shooting" />
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-swimming">
|
||||
<tag k="leisure" v="sports_centre" />
|
||||
<tag k="sport" v="swimming" />
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-yoga">
|
||||
<tag k="leisure" v="sports_centre" />
|
||||
<tag k="sport" v="yoga" />
|
||||
<include group="poi_internet" />
|
||||
</type-->
|
||||
<!-- Not addable as mapping as a node is uncommon -->
|
||||
<type id="natural-beach" can_add="no">
|
||||
<include field="name" />
|
||||
@@ -1581,9 +1584,6 @@
|
||||
<type id="building-address" can_add="yes">
|
||||
<include group="address" />
|
||||
</type>
|
||||
<!-- Uncomment this after a map style is added
|
||||
<type id="man_made-surveillance">
|
||||
</type-->
|
||||
<type id="tourism-theme_park">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# highway|bus_stop;[highway=bus_stop];;name;int_name;22;
|
||||
# It contains:
|
||||
# - type name: "highway|bus_stop" ("|" is converted to "-" internally)
|
||||
# - mapcss selectors for tags: "[highway=bus_stop]", multiple selectors are separated with commas
|
||||
# - mapcss selectors for tags: "[highway=bus_stop]", multiple selectors are separated with commas, best practice tagging for OSM editor is listed first
|
||||
# - "x" for a deprecated type or an empty cell otherwise
|
||||
# - primary title tag (usually "name")
|
||||
# - secondary title tag (usually "int_name")
|
||||
@@ -101,7 +101,7 @@ natural|wetland;33;
|
||||
deprecated:highway|track|grade3:04.4024;[highway=track][tracktype=grade3];x;name;int_name;34;highway|track
|
||||
# ~1M usages.
|
||||
power|minor_line;[power=minor_line][!location];;;;35;
|
||||
amenity|school;[amenity=school],[education=school];;name;int_name;36;
|
||||
amenity|school;[amenity=school][education=school],[amenity=school],[education=school];;;;36;
|
||||
# Dedicated/segregated cycleways (e.g. segregated paths are converted into cycleways + footways, see osm2type.cpp).
|
||||
highway|cycleway;37;
|
||||
# ~16M usages.
|
||||
@@ -202,7 +202,7 @@ landuse|commercial;111;
|
||||
moved:railway|station:05.2024;112;railway|station
|
||||
deprecated:highway|path|hiking:04.2024;[highway=path][route=hiking],[highway=path][sac_scale=hiking];x;name;int_name;113;highway|path
|
||||
# ~200k usages.
|
||||
amenity|hospital;114;
|
||||
amenity|hospital;[amenity=hospital][healthcare=hospital],[amenity=hospital],[healthcare=hospital];;;;114;
|
||||
# TODO: merge with "intermittent".
|
||||
waterway|stream|ephemeral;[waterway=stream][intermittent=ephemeral];;name;int_name;115;
|
||||
highway|trunk|bridge;[highway=trunk][bridge?];;name;int_name;116;
|
||||
@@ -210,7 +210,7 @@ highway|trunk|bridge;[highway=trunk][bridge?];;name;int_name;116;
|
||||
amenity|post_office;117;
|
||||
# ~230k usages.
|
||||
landuse|quarry;118;
|
||||
amenity|pharmacy;119;
|
||||
amenity|pharmacy;[amenity=pharmacy][healthcare=pharmacy],[amenity=pharmacy],[healthcare=pharmacy];;;;119;
|
||||
man_made|pier;120;
|
||||
# ~220k usages.
|
||||
highway|motorway_junction;121;
|
||||
@@ -276,7 +276,7 @@ deprecated:natural|wood|coniferous:01.2020;[natural=wood][wood=coniferous],[natu
|
||||
landuse|recreation_ground;173;
|
||||
landuse|village_green;174;
|
||||
amenity|drinking_water;175;
|
||||
amenity|university;[amenity=university],[education=university];;name;int_name;176;
|
||||
amenity|university;[amenity=university][education=university],[amenity=university],[education=university];;;;176;
|
||||
highway|secondary_link;177;
|
||||
power|substation;178;
|
||||
railway|tram_stop;179;
|
||||
@@ -309,7 +309,7 @@ power|portal;204;
|
||||
# Marsh 500K usages, wet_meadow 160K
|
||||
natural|wetland|marsh;[natural=wetland][wetland=marsh],[natural=wetland][wetland=wet_meadow],[natural=wetland][wetland=dambo];;;;205;
|
||||
leisure|stadium;206;
|
||||
amenity|doctors;207;
|
||||
amenity|doctors;[amenity=doctors][healthcare=doctor],[amenity=doctors],[healthcare=doctor];;;;207;
|
||||
railway|disused;208;
|
||||
aeroway|runway;209;
|
||||
railway|halt;210;
|
||||
@@ -327,7 +327,7 @@ sport|swimming;220;
|
||||
leisure|track;221;
|
||||
sport|skateboard;222;
|
||||
barrier|retaining_wall;223;
|
||||
amenity|college;[amenity=college],[education=college];;name;int_name;224;
|
||||
amenity|college;[amenity=college][education=college],[amenity=college],[education=college];;;;224;
|
||||
sport|baseball;225;
|
||||
highway|service|area;[highway=service][area?];;name;int_name;226;
|
||||
highway|residential|area;[highway=residential][area?];;name;int_name;227;
|
||||
@@ -625,9 +625,9 @@ toilets|yes;502;
|
||||
highway|trunk_link|tunnel;[highway=trunk_link][tunnel?];;name;int_name;503;
|
||||
drinking_water|yes;[drinking_water=yes],[drinking_water=treated],[drinking_water:refill=yes];;;;504;
|
||||
drinking_water|no;505;
|
||||
amenity|sailing_school;[amenity=sailing_school],[education=sailing_school];;name;int_name;506;
|
||||
amenity|flight_school;[amenity=sailing_school],[education=flight_school];;name;int_name;507;
|
||||
amenity|prep_school;[amenity=prep_school],[education=prep_school];;name;int_name;508;
|
||||
amenity|sailing_school;[amenity=sailing_school][education=sailing_school],[amenity=sailing_school],[education=sailing_school];;;;506;
|
||||
amenity|flight_school;[amenity=flight_school][education=flight_school],[amenity=flight_school],[education=flight_school];;;;507;
|
||||
amenity|prep_school;[amenity=prep_school][education=prep_school],[amenity=prep_school],[education=prep_school];;;;508;
|
||||
amenity|car_pooling;509;
|
||||
social_facility|soup_kitchen;510;
|
||||
social_facility|food_bank;511;
|
||||
@@ -1160,8 +1160,8 @@ railway|subway_entrance|madrid;[railway=subway_entrance][city=madrid];;name;int_
|
||||
railway|subway_entrance|roma;[railway=subway_entrance][city=roma];;name;int_name;1033;
|
||||
railway|subway_entrance|spb;[railway=subway_entrance][city=spb];;name;int_name;1034;
|
||||
aerialway|drag_lift;1035;
|
||||
amenity|dentist;1036;
|
||||
amenity|clinic;1037;
|
||||
amenity|dentist;[amenity=dentist][healthcare=dentist],[amenity=dentist],[healthcare=dentist];;;;1036;
|
||||
amenity|clinic;[amenity=clinic][healthcare=clinic],[amenity=clinic],[healthcare=clinic];;;;1037;
|
||||
barrier|entrance;1038;
|
||||
barrier|border_control;1039;
|
||||
shop|laundry;1040;
|
||||
@@ -1257,8 +1257,8 @@ amenity|vending_machine|food;[amenity=vending_machine][vending=food];;name;int_n
|
||||
amenity|vending_machine|newspapers;[amenity=vending_machine][vending=newspapers];;name;int_name;1130;
|
||||
amenity|vending_machine|sweets;[amenity=vending_machine][vending=sweets];;name;int_name;1131;
|
||||
leisure|dance;[leisure=dance],[amenity=dancing_school];;;;1132;
|
||||
amenity|music_school;[amenity=music_school],[education=music_school];;name;int_name;1133;
|
||||
amenity|language_school;[amenity=language_school],[education=language_school];;name;int_name;1134;
|
||||
amenity|music_school;[amenity=music_school][education=music_school],[amenity=music_school],[education=music_school];;;;1133;
|
||||
amenity|language_school;[amenity=language_school][education=language_school],[amenity=language_school],[education=language_school];;;;1134;
|
||||
historic|city_gate;1135;
|
||||
sport|padel;1136;
|
||||
sport|futsal;1137;
|
||||
@@ -1285,7 +1285,7 @@ shop|charity;1157;
|
||||
hwtag|toll;1158;
|
||||
amenity|arts_centre;1159;
|
||||
amenity|biergarten;1160;
|
||||
amenity|driving_school;[amenity=driving_school],[education=driving_school];;name;int_name;1161;
|
||||
amenity|driving_school;[amenity=driving_school][education=driving_school],[amenity=driving_school],[education=driving_school];;;;1161;
|
||||
amenity|food_court;1162;
|
||||
amenity|ice_cream;1163;
|
||||
amenity|internet_cafe;1164;
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 7 and column 16.
|
108
data/sound-strings/ta.json/localize.json
Normal file
108
data/sound-strings/ta.json/localize.json
Normal file
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"make_a_slight_right_turn":"லேசாக வலதுபுறம் திரும்புங்கள்.",
|
||||
"make_a_slight_right_turn_street":"NULL",
|
||||
"make_a_slight_right_turn_street_verb":"NULL",
|
||||
"make_a_right_turn":"வலதுபுறமாக திரும்புங்கள்.",
|
||||
"make_a_right_turn_street":"NULL",
|
||||
"make_a_sharp_right_turn":"கூர்மையாக வலதுபுறம் திரும்புங்கள்.",
|
||||
"make_a_sharp_right_turn_street":"NULL",
|
||||
"enter_the_roundabout":"ரவுண்டபௌட்டை நுழையுங்கள்.",
|
||||
"enter_the_roundabout_street":"NULL",
|
||||
"enter_the_roundabout_street_verb":"NULL",
|
||||
"leave_the_roundabout":"ரவுண்டபௌட்டை வெளியேறுங்கள்.",
|
||||
"leave_the_roundabout_street":"NULL",
|
||||
"leave_the_roundabout_street_verb":"NULL",
|
||||
"make_a_slight_left_turn":"லேசாக இடதுபுறம் திரும்புங்கள்.",
|
||||
"make_a_slight_left_turn_street":"NULL",
|
||||
"make_a_slight_left_turn_street_verb":"NULL",
|
||||
"make_a_left_turn":"இடதுபுறமாக திரும்புங்கள்.",
|
||||
"make_a_left_turn_street":"NULL",
|
||||
"make_a_sharp_left_turn":"கூர்மையாக இடதுபுறம் திரும்புங்கள்.",
|
||||
"make_a_sharp_left_turn_street":"NULL",
|
||||
"make_a_u_turn":"U-வழியில் திரும்புங்கள்.",
|
||||
"make_a_u_turn_street":"NULL",
|
||||
"make_a_u_turn_street_verb":"NULL",
|
||||
"go_straight":"நேரா போங்க.",
|
||||
"exit":"வெளியேறுங்கள்.",
|
||||
"onto":"நோக்கி",
|
||||
"take_exit_number":"வெளியேறும் வழி எடுங்கள்",
|
||||
"take_exit_number_street_verb":"NULL",
|
||||
"route_recalculating":"வழி மறுபடி கணிக்கிறது",
|
||||
"destination":"நீங்கள் வருவீர்கள்.",
|
||||
"you_have_reached_the_destination":"நீங்கள் வந்துவிட்டீர்கள்..",
|
||||
"in_50_meters":"ஐம்பது மீட்டரில்",
|
||||
"in_100_meters":"நூறு மீட்டரில்",
|
||||
"in_200_meters":"இருநூறு மீட்டரில்",
|
||||
"in_250_meters":"இருநூற்று ஐம்பது மீட்டரில்",
|
||||
"in_300_meters":"முன்னூறு மீட்டரில்",
|
||||
"in_400_meters":"நானூறு மீட்டரில்",
|
||||
"in_500_meters":"ஐநூறு மீட்டரில்",
|
||||
"in_600_meters":"அறுநூறு மீட்டரில்",
|
||||
"in_700_meters":"எழுநூறு மீட்டரில்",
|
||||
"in_750_meters":"எழுநூறு ஐம்பது மீட்டரில்",
|
||||
"in_800_meters":"எண்ணூறு மீட்டரில்",
|
||||
"in_900_meters":"தொள்ளாயிரம் மீட்டரில்",
|
||||
"in_1_kilometer":"ஒரு கிலோமீட்டரில்",
|
||||
"in_1_5_kilometers":"ஒன்றரை கிலோமீட்டரில்",
|
||||
"in_2_kilometers":"இரண்டு கிலோமீட்டரில்",
|
||||
"in_2_5_kilometers":"இரண்டரை கிலோமீட்டரில்",
|
||||
"in_3_kilometers":"மூன்று கிலோமீட்டரில்",
|
||||
"then":"அடுத்தது",
|
||||
"dist_direction_onto_street":"%1$s %4$s %3$s %5$s %2$s",
|
||||
"take_the_1_exit":"ஒன்றாம் வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_1_exit_street":"NULL",
|
||||
"take_the_1_exit_street_verb":"NULL",
|
||||
"take_the_2_exit":"இரண்டாம் வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_2_exit_street":"NULL",
|
||||
"take_the_2_exit_street_verb":"NULL",
|
||||
"take_the_3_exit":"மூன்றாம் வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_3_exit_street":"NULL",
|
||||
"take_the_3_exit_street_verb":"NULL",
|
||||
"take_the_4_exit":"நான்காவது வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_4_exit_street":"NULL",
|
||||
"take_the_4_exit_street_verb":"NULL",
|
||||
"take_the_5_exit":"ஐந்தாவது வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_5_exit_street":"NULL",
|
||||
"take_the_5_exit_street_verb":"NULL",
|
||||
"take_the_6_exit":"ஆறாவது வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_6_exit_street":"NULL",
|
||||
"take_the_6_exit_street_verb":"NULL",
|
||||
"take_the_7_exit":"ஏழாவது வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_7_exit_street":"NULL",
|
||||
"take_the_7_exit_street_verb":"NULL",
|
||||
"take_the_8_exit":"எட்டாவது வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_8_exit_street":"NULL",
|
||||
"take_the_8_exit_street_verb":"NULL",
|
||||
"take_the_9_exit":"ஒன்பதாவது வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_9_exit_street":"NULL",
|
||||
"take_the_9_exit_street_verb":"NULL",
|
||||
"take_the_10_exit":"பத்தாவது வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_10_exit_street":"NULL",
|
||||
"take_the_10_exit_street_verb":"NULL",
|
||||
"take_the_11_exit":"பதினொன்றாவது வெளியேறும் வழி எடுங்கள்.",
|
||||
"take_the_11_exit_street":"NULL",
|
||||
"take_the_11_exit_street_verb":"NULL",
|
||||
"in_50_feet":"ஐம்பது அடியில்",
|
||||
"in_100_feet":"நூறு அடியில்",
|
||||
"in_200_feet":"இருநூறு அடியில்",
|
||||
"in_300_feet":"முன்னூறு அடியில்",
|
||||
"in_400_feet":"நானூறு அடியில்",
|
||||
"in_500_feet":"ஐநூறு அடியில்",
|
||||
"in_600_feet":"அறுநூறு அடியில்",
|
||||
"in_700_feet":"எழுநூறு அடியில்",
|
||||
"in_800_feet":"எண்ணூறு அடியில்",
|
||||
"in_900_feet":"தொள்ளாயிரம் அடியில்",
|
||||
"in_1000_feet":"ஆயிரம் அடியில்",
|
||||
"in_1500_feet":"ஆயிரம் ஐநூறு அடியில்",
|
||||
"in_2000_feet":"இரண்டு ஆயிரம் அடியில்",
|
||||
"in_2500_feet":"இரண்டு ஆயிரம் ஐநூறு அடியில்",
|
||||
"in_3000_feet":"மூன்று ஆயிரம் அடியில்",
|
||||
"in_3500_feet":"மூன்று ஆயிரம் ஐநூறு அடியில்",
|
||||
"in_4000_feet":"நான்கு ஆயிரம் அடியில்",
|
||||
"in_4500_feet":"நான்கு ஆயிரம் ஐநூறு அடியில்",
|
||||
"in_5000_feet":"ஐந்து ஆயிரம் அடியில்",
|
||||
"in_1_mile":"ஒன்று மைலில்",
|
||||
"in_1_5_miles":"ஒன்றரை மைலில்",
|
||||
"in_2_miles":"இரண்டு மைலில்",
|
||||
"unknown_camera":"கேமரா முன்னால் இருக்கிறது"
|
||||
}
|
||||
@@ -2455,9 +2455,9 @@ node|z17-[amenity=parking],
|
||||
{icon-image: parking-m.svg;font-size: 11;icon-min-distance: 10}
|
||||
|
||||
node|z16-[amenity=car_pooling],
|
||||
{icon-image: parking-pooling-s.svg;icon-min-distance: 5;}
|
||||
{icon-image: parking_pooling-s.svg;icon-min-distance: 5;}
|
||||
node|z17-[amenity=car_pooling],
|
||||
{icon-image: parking-pooling-m.svg;font-size: 11;icon-min-distance: 10}
|
||||
{icon-image: parking_pooling-m.svg;font-size: 11;icon-min-distance: 10}
|
||||
|
||||
node|z16-[amenity=parking][location=underground],
|
||||
{icon-image:parking_underground-m.svg;}
|
||||
|
||||
@@ -734,7 +734,7 @@ node|z18-[amenity=water_point][drinking_water=not],
|
||||
node|z15-[amenity=parking],
|
||||
{icon-image: parking-m.svg;icon-min-distance: 10;font-size: 12.5;}
|
||||
node|z15-[amenity=car_pooling],
|
||||
{icon-image: parking-pooling-m.svg;icon-min-distance: 10;font-size: 12.5;}
|
||||
{icon-image: parking_pooling-m.svg;icon-min-distance: 10;font-size: 12.5;}
|
||||
node|z17[amenity=parking],
|
||||
node|z17[amenity=car_pooling],
|
||||
{icon-min-distance: 15;font-size: 13.75;}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"data_format": 1,
|
||||
"data_url": "https://codeberg.org/comaps/comaps/raw/branch/main/data/taginfo.json",
|
||||
"data_updated": "20251120T121118Z",
|
||||
"data_updated": "20251228T203737Z",
|
||||
"project": {
|
||||
"name": "CoMaps",
|
||||
"description": "CoMaps is a community-focused privacy navigation iOS & Android app for travelers - drivers, hikers, and cyclists.",
|
||||
@@ -176,7 +176,7 @@
|
||||
"description": "amenity=car_pooling",
|
||||
"key": "amenity",
|
||||
"value": "car_pooling",
|
||||
"icon_url": "https://codeberg.org/comaps/comaps/raw/branch/main/data/styles/default/light/symbols/parking-pooling-m.svg"
|
||||
"icon_url": "https://codeberg.org/comaps/comaps/raw/branch/main/data/styles/default/light/symbols/parking_pooling-m.svg"
|
||||
},
|
||||
{
|
||||
"description": "amenity=car_rental",
|
||||
@@ -431,6 +431,12 @@
|
||||
"value": "hunting_stand",
|
||||
"icon_url": "https://codeberg.org/comaps/comaps/raw/branch/main/data/styles/default/light/symbols/hunting-tower-m.svg"
|
||||
},
|
||||
{
|
||||
"description": "amenity=hydrant",
|
||||
"key": "amenity",
|
||||
"value": "hydrant",
|
||||
"icon_url": "https://codeberg.org/comaps/comaps/raw/branch/main/data/styles/default/light/symbols/hydrant-m.svg"
|
||||
},
|
||||
{
|
||||
"description": "amenity=ice_cream",
|
||||
"key": "amenity",
|
||||
|
||||
@@ -68,6 +68,10 @@ and apply the [Ubuntu workarounds accordingly](#workarounds-for-older-ubuntu-ver
|
||||
|
||||
```bash
|
||||
sudo dnf install -y \
|
||||
awk \
|
||||
wget \
|
||||
optipng \
|
||||
git \
|
||||
clang \
|
||||
cmake \
|
||||
ninja-build \
|
||||
@@ -80,8 +84,13 @@ sudo dnf install -y \
|
||||
qt6-qtpositioning \
|
||||
qt6-qtpositioning-devel \
|
||||
qt6-qtsvg-devel \
|
||||
python3-protobuf \
|
||||
sqlite-devel
|
||||
python3-pip \
|
||||
sqlite-devel \
|
||||
libXrandr-devel \
|
||||
libXinerama-devel \
|
||||
libXcursor-devel \
|
||||
libXi-devel
|
||||
pip3 install "protobuf<3.21" --break-system-packages
|
||||
```
|
||||
|
||||
#### Alpine
|
||||
|
||||
@@ -239,7 +239,7 @@ final class CarPlayService: NSObject {
|
||||
MapTemplateBuilder.configureBaseUI(mapTemplate: mapTemplate)
|
||||
if currentPositionMode == .pendingPosition {
|
||||
mapTemplate.leadingNavigationBarButtons = []
|
||||
} else if currentPositionMode == .follow || currentPositionMode == .followAndRotate {
|
||||
} else if currentPositionMode == .follow || currentPositionMode == .followAndRotateCompass || currentPositionMode == .followAndRotateRoute {
|
||||
MapTemplateBuilder.setupDestinationButton(mapTemplate: mapTemplate)
|
||||
} else {
|
||||
MapTemplateBuilder.setupRecenterButton(mapTemplate: mapTemplate)
|
||||
@@ -623,22 +623,32 @@ extension CarPlayService: CarPlayRouterListener {
|
||||
extension CarPlayService: LocationModeListener {
|
||||
func processMyPositionStateModeEvent(_ mode: MWMMyPositionMode) {
|
||||
currentPositionMode = mode
|
||||
guard let rootMapTemplate = rootMapTemplate,
|
||||
let info = rootMapTemplate.userInfo as? MapInfo,
|
||||
info.type == CPConstants.TemplateType.main else {
|
||||
|
||||
// make sure we have a rootMapTemplate
|
||||
guard let rootMapTemplate = rootMapTemplate else {
|
||||
return
|
||||
}
|
||||
|
||||
// exit if we're navigating
|
||||
guard let info = rootMapTemplate.userInfo as? MapInfo,
|
||||
info.type == CPConstants.TemplateType.main else {
|
||||
MapTemplateBuilder.updateMyPositionModeButton(mapTemplate: rootMapTemplate, newMode: mode)
|
||||
return
|
||||
}
|
||||
switch mode {
|
||||
case .follow, .followAndRotate:
|
||||
case .follow, .followAndRotateCompass, .followAndRotateRoute:
|
||||
if !rootMapTemplate.isPanningInterfaceVisible {
|
||||
MapTemplateBuilder.setupDestinationButton(mapTemplate: rootMapTemplate)
|
||||
MapTemplateBuilder.updateMyPositionModeButton(mapTemplate: rootMapTemplate, newMode: mode)
|
||||
}
|
||||
case .notFollow:
|
||||
if !rootMapTemplate.isPanningInterfaceVisible {
|
||||
MapTemplateBuilder.setupRecenterButton(mapTemplate: rootMapTemplate)
|
||||
MapTemplateBuilder.updateMyPositionModeButton(mapTemplate: rootMapTemplate, newMode: mode)
|
||||
}
|
||||
case .pendingPosition, .notFollowNoPosition:
|
||||
rootMapTemplate.leadingNavigationBarButtons = []
|
||||
MapTemplateBuilder.updateMyPositionModeButton(mapTemplate: rootMapTemplate, newMode: mode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ final class MapTemplateBuilder {
|
||||
case startPanning
|
||||
case zoomIn
|
||||
case zoomOut
|
||||
case myPositionMode
|
||||
}
|
||||
enum BarButtonType {
|
||||
case dismissPaning
|
||||
@@ -28,7 +29,7 @@ final class MapTemplateBuilder {
|
||||
configureBaseUI(mapTemplate: mapTemplate)
|
||||
if positionMode == .pendingPosition {
|
||||
mapTemplate.leadingNavigationBarButtons = []
|
||||
} else if positionMode == .follow || positionMode == .followAndRotate {
|
||||
} else if positionMode == .follow || positionMode == .followAndRotateCompass || positionMode == .followAndRotateRoute {
|
||||
setupDestinationButton(mapTemplate: mapTemplate)
|
||||
} else {
|
||||
setupRecenterButton(mapTemplate: mapTemplate)
|
||||
@@ -69,7 +70,10 @@ final class MapTemplateBuilder {
|
||||
let zoomOutButton = buildMapButton(type: .zoomOut) { _ in
|
||||
FrameworkHelper.zoomMap(.out)
|
||||
}
|
||||
mapTemplate.mapButtons = [panningButton, zoomInButton, zoomOutButton]
|
||||
let myPositionModeButton = buildMapButton(type: .myPositionMode) { _ in
|
||||
FrameworkHelper.switchMyPositionMode()
|
||||
}
|
||||
mapTemplate.mapButtons = [myPositionModeButton, panningButton, zoomInButton, zoomOutButton]
|
||||
|
||||
let settingsButton = buildBarButton(type: .settings) { _ in
|
||||
let gridTemplate = SettingsTemplateBuilder.buildGridTemplate()
|
||||
@@ -99,7 +103,10 @@ final class MapTemplateBuilder {
|
||||
let panningButton = buildMapButton(type: .startPanning) { _ in
|
||||
mapTemplate.showPanningInterface(animated: true)
|
||||
}
|
||||
mapTemplate.mapButtons = [panningButton]
|
||||
let myPositionModeButton = buildMapButton(type: .myPositionMode) { _ in
|
||||
FrameworkHelper.switchMyPositionMode()
|
||||
}
|
||||
mapTemplate.mapButtons = [myPositionModeButton, panningButton]
|
||||
setupMuteAndRedirectButtons(template: mapTemplate)
|
||||
let endButton = buildBarButton(type: .endRoute) { _ in
|
||||
CarPlayService.shared.cancelCurrentTrip()
|
||||
@@ -117,6 +124,28 @@ final class MapTemplateBuilder {
|
||||
mapTemplate.leadingNavigationBarButtons = [destinationButton]
|
||||
}
|
||||
|
||||
class func updateMyPositionModeButton(mapTemplate: CPMapTemplate, newMode: MWMMyPositionMode) {
|
||||
let button = CPMapButton(handler: { _ in
|
||||
FrameworkHelper.switchMyPositionMode()
|
||||
})
|
||||
|
||||
switch newMode {
|
||||
case .pendingPosition:
|
||||
button.image = UIImage(systemName: "location.fill")
|
||||
case .notFollowNoPosition:
|
||||
button.image = UIImage(systemName: "location")
|
||||
case .notFollow:
|
||||
button.image = UIImage(systemName: "location")
|
||||
case .follow:
|
||||
button.image = UIImage(systemName: "location.fill")
|
||||
case .followAndRotate:
|
||||
button.image = UIImage(systemName: "location.north.line.fill")
|
||||
}
|
||||
if mapTemplate.mapButtons.count > 0 {
|
||||
mapTemplate.mapButtons[0] = button
|
||||
}
|
||||
}
|
||||
|
||||
class func setupRecenterButton(mapTemplate: CPMapTemplate) {
|
||||
let recenterButton = buildBarButton(type: .recenter) { _ in
|
||||
FrameworkHelper.switchMyPositionMode()
|
||||
@@ -166,6 +195,8 @@ final class MapTemplateBuilder {
|
||||
button.image = UIImage(systemName: "plus")
|
||||
case .zoomOut:
|
||||
button.image = UIImage(systemName: "minus")
|
||||
case .myPositionMode:
|
||||
button.image = UIImage(systemName: "location")
|
||||
}
|
||||
// Remove code below once Apple has fixed its issue with the button background
|
||||
if #unavailable(iOS 26) {
|
||||
@@ -176,6 +207,8 @@ final class MapTemplateBuilder {
|
||||
button.focusedImage = UIImage(systemName: "plus.circle.fill")
|
||||
case .zoomOut:
|
||||
button.focusedImage = UIImage(systemName: "minus.circle.fill")
|
||||
case .myPositionMode:
|
||||
button.image = UIImage(systemName: "location.fill")
|
||||
}
|
||||
}
|
||||
return button
|
||||
|
||||
@@ -91,7 +91,8 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
|
||||
case MWMMyPositionModeNotFollow:
|
||||
case MWMMyPositionModeNotFollowNoPosition: [locBtn setStyleNameAndApply: @"ButtonGetPosition"]; break;
|
||||
case MWMMyPositionModeFollow: [locBtn setStyleNameAndApply: @"ButtonFollow"]; break;
|
||||
case MWMMyPositionModeFollowAndRotate: [locBtn setStyleNameAndApply: @"ButtonFollowAndRotate"]; break;
|
||||
case MWMMyPositionModeFollowAndRotateCompass: [locBtn setStyleNameAndApply: @"ButtonFollowAndRotateCompass"]; break;
|
||||
case MWMMyPositionModeFollowAndRotateRoute: [locBtn setStyleNameAndApply: @"ButtonFollowAndRotateRoute"]; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -632,7 +632,8 @@ NSString *const kAboutSegue = @"Map2About";
|
||||
case MWMMyPositionModeNotFollow:
|
||||
break;
|
||||
case MWMMyPositionModeFollow:
|
||||
case MWMMyPositionModeFollowAndRotate:
|
||||
case MWMMyPositionModeFollowAndRotateCompass:
|
||||
case MWMMyPositionModeFollowAndRotateRoute:
|
||||
self.disableStandbyOnLocationStateMode = YES;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,8 @@ static inline MWMMyPositionMode mwmMyPositionMode(location::EMyPositionMode mode
|
||||
case location::EMyPositionMode::NotFollowNoPosition: return MWMMyPositionModeNotFollowNoPosition;
|
||||
case location::EMyPositionMode::NotFollow: return MWMMyPositionModeNotFollow;
|
||||
case location::EMyPositionMode::Follow: return MWMMyPositionModeFollow;
|
||||
case location::EMyPositionMode::FollowAndRotate: return MWMMyPositionModeFollowAndRotate;
|
||||
case location::EMyPositionMode::FollowAndRotateCompass: return MWMMyPositionModeFollowAndRotateCompass;
|
||||
case location::EMyPositionMode::FollowAndRotateRoute: return MWMMyPositionModeFollowAndRotateRoute;
|
||||
}
|
||||
}
|
||||
} // namespace location_helpers
|
||||
|
||||
@@ -50,7 +50,8 @@ std::string DebugPrint(MWMMyPositionMode mode) {
|
||||
case MWMMyPositionModeNotFollowNoPosition: return "MWMMyPositionModeNotFollowNoPosition";
|
||||
case MWMMyPositionModeNotFollow: return "MWMMyPositionModeNotFollow";
|
||||
case MWMMyPositionModeFollow: return "MWMMyPositionModeFollow";
|
||||
case MWMMyPositionModeFollowAndRotate: return "MWMMyPositionModeFollowAndRotate";
|
||||
case MWMMyPositionModeFollowAndRotateCompass: return "MWMMyPositionModeFollowAndRotateCompass";
|
||||
case MWMMyPositionModeFollowAndRotateRoute: return "MWMMyPositionModeFollowAndRotateRoute";
|
||||
}
|
||||
CHECK(false, ("Unsupported value", static_cast<int>(mode)));
|
||||
}
|
||||
@@ -367,7 +368,8 @@ void setShowLocationAlert(BOOL needShow) {
|
||||
case MWMMyPositionModeNotFollowNoPosition:
|
||||
case MWMMyPositionModeNotFollow: manager.geoMode = GeoMode::NotInPosition; break;
|
||||
case MWMMyPositionModeFollow: manager.geoMode = GeoMode::InPosition; break;
|
||||
case MWMMyPositionModeFollowAndRotate: manager.geoMode = GeoMode::FollowAndRotate; break;
|
||||
case MWMMyPositionModeFollowAndRotateCompass:
|
||||
case MWMMyPositionModeFollowAndRotateRoute: manager.geoMode = GeoMode::FollowAndRotate; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ NSUInteger constexpr kMaxPredictionCount = 20;
|
||||
|
||||
- (void)setMyPositionMode:(MWMMyPositionMode)mode
|
||||
{
|
||||
self.isLastPositionModeValid = (mode == MWMMyPositionModeFollowAndRotate);
|
||||
self.isLastPositionModeValid = (mode == MWMMyPositionModeFollowAndRotateCompass);
|
||||
[self restart];
|
||||
}
|
||||
|
||||
|
||||
@@ -3,5 +3,6 @@ typedef NS_CLOSED_ENUM(NSUInteger, MWMMyPositionMode) {
|
||||
MWMMyPositionModeNotFollowNoPosition,
|
||||
MWMMyPositionModeNotFollow,
|
||||
MWMMyPositionModeFollow,
|
||||
MWMMyPositionModeFollowAndRotate
|
||||
MWMMyPositionModeFollowAndRotateCompass,
|
||||
MWMMyPositionModeFollowAndRotateRoute
|
||||
};
|
||||
|
||||
@@ -41,13 +41,14 @@ final class ThemeManager: NSObject {
|
||||
}
|
||||
}(actualTheme)
|
||||
|
||||
if Settings.mapAppearance == .light {
|
||||
let isCarPlayActive = CarPlayService.shared.isCarplayActivated
|
||||
if !isCarPlayActive, Settings.mapAppearance == .light {
|
||||
if actualTheme == .vehicleDay || actualTheme == .vehicleNight {
|
||||
FrameworkHelper.setTheme(.vehicleDay)
|
||||
} else {
|
||||
FrameworkHelper.setTheme(.day)
|
||||
}
|
||||
} else if Settings.mapAppearance == .dark {
|
||||
} else if !isCarPlayActive, Settings.mapAppearance == .dark {
|
||||
if actualTheme == .vehicleDay || actualTheme == .vehicleNight {
|
||||
FrameworkHelper.setTheme(.vehicleNight)
|
||||
} else {
|
||||
|
||||
@@ -7,7 +7,8 @@ enum MapStyleSheet: String, CaseIterable {
|
||||
case mapButtonPending = "ButtonPending"
|
||||
case mapButtonGetPosition = "ButtonGetPosition"
|
||||
case mapButtonFollow = "ButtonFollow"
|
||||
case mapButtonFollowAndRotate = "ButtonFollowAndRotate"
|
||||
case mapButtonFollowAndRotateCompass = "ButtonFollowAndRotateCompass"
|
||||
case mapButtonFollowAndRotateRoute = "ButtonFollowAndRotateRoute"
|
||||
case mapButtonMapBookmarks = "ButtonMapBookmarks"
|
||||
case mapPromoDiscoveryButton = "PromoDiscroveryButton"
|
||||
case mapButtonBookmarksBack = "ButtonBookmarksBack"
|
||||
@@ -67,10 +68,14 @@ extension MapStyleSheet: IStyleSheet {
|
||||
return .add { s in
|
||||
s.mwmImage = "btn_follow"
|
||||
}
|
||||
case .mapButtonFollowAndRotate:
|
||||
case .mapButtonFollowAndRotateCompass:
|
||||
return .add { s in
|
||||
s.mwmImage = "btn_follow_and_rotate"
|
||||
}
|
||||
case .mapButtonFollowAndRotateRoute:
|
||||
return .add { s in
|
||||
s.mwmImage = "btn_follow_route"
|
||||
}
|
||||
case .mapButtonMapBookmarks:
|
||||
return .add { s in
|
||||
s.mwmImage = "ic_routing_bookmark"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
21
iphone/Maps/Images.xcassets/Location/btn_follow_route_dark.imageset/Contents.json
vendored
Normal file
21
iphone/Maps/Images.xcassets/Location/btn_follow_route_dark.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "btn_follow_route_dark.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
iphone/Maps/Images.xcassets/Location/btn_follow_route_dark.imageset/btn_follow_route_dark.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/Location/btn_follow_route_dark.imageset/btn_follow_route_dark.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
21
iphone/Maps/Images.xcassets/Location/btn_follow_route_highlighted_dark.imageset/Contents.json
vendored
Normal file
21
iphone/Maps/Images.xcassets/Location/btn_follow_route_highlighted_dark.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "btn_follow_route_highlighted_dark.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
21
iphone/Maps/Images.xcassets/Location/btn_follow_route_highlighted_light.imageset/Contents.json
vendored
Normal file
21
iphone/Maps/Images.xcassets/Location/btn_follow_route_highlighted_light.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "btn_follow_route_highlighted_light.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
21
iphone/Maps/Images.xcassets/Location/btn_follow_route_light.imageset/Contents.json
vendored
Normal file
21
iphone/Maps/Images.xcassets/Location/btn_follow_route_light.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "btn_follow_route_light.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
iphone/Maps/Images.xcassets/Location/btn_follow_route_light.imageset/btn_follow_route_light.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/Location/btn_follow_route_light.imageset/btn_follow_route_light.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -680,7 +680,7 @@
|
||||
"editor_edits_sent_message" = "Din note vil blive sendt til OpenStreetMap";
|
||||
"editor_comment_hint" = "Kommentar…";
|
||||
"editor_reset_edits_message" = "Kassér alle lokale ændringer?";
|
||||
"editor_reset_edits_button" = "Kassér";
|
||||
"editor_reset_edits_button" = "Kassér ændringer";
|
||||
"editor_remove_place_message" = "Slet tilføjet sted?";
|
||||
"editor_remove_place_button" = "Slet";
|
||||
"editor_place_doesnt_exist" = "Stedet eksisterer ikke";
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
"type.amenity.shelter.basic_hut" = "Bivouac Hut";
|
||||
|
||||
/* A traditional 3-walled shelter (one side open), suitable for overnight camping. */
|
||||
"type.amenity.shelter.lean_to" = "Lean-to Shelter";
|
||||
"type.amenity.shelter.lean_to" = "Lean-to Sleep Shelter";
|
||||
"type.amenity.public_bath" = "Public Bath";
|
||||
"type.amenity.shower" = "Shower";
|
||||
"type.amenity.stripclub" = "Stripclub";
|
||||
@@ -208,7 +208,7 @@
|
||||
"type.amenity.vending_machine.food" = "Food Dispenser";
|
||||
"type.amenity.vending_machine.newspapers" = "Newspaper Dispenser";
|
||||
"type.amenity.vending_machine.parking_tickets" = "Parking Meter";
|
||||
"type.amenity.vending_machine.public_transport_tickets" = "Ticket Machine";
|
||||
"type.amenity.vending_machine.public_transport_tickets" = "Public Transport Ticket Machine";
|
||||
"type.amenity.vending_machine.sweets" = "Sweets Dispenser";
|
||||
"type.amenity.vending_machine.excrement_bags" = "Excrement Bags Dispenser";
|
||||
"type.amenity.parcel_locker" = "Parcel Locker";
|
||||
|
||||
@@ -1220,7 +1220,7 @@
|
||||
"type.shop.doityourself" = "Tienda de bricolaje";
|
||||
"type.shop.dry_cleaning" = "Tintorería";
|
||||
"type.shop.electronics" = "Electrónica";
|
||||
"type.shop.erotic" = "Sex Shop";
|
||||
"type.shop.erotic" = "Tienda erótica";
|
||||
"type.shop.fabric" = "Tienda de telas";
|
||||
"type.shop.farm" = "Tienda de alimentos de granja";
|
||||
"type.shop.fashion_accessories" = "Accesorios de moda";
|
||||
|
||||
@@ -681,7 +681,7 @@
|
||||
"editor_edits_sent_message" = "Sinu märkus saadetakse OpenStreetMapile";
|
||||
"editor_comment_hint" = "Kommenteeri…";
|
||||
"editor_reset_edits_message" = "Kas loobud kõigist kohalikest muudatustest?";
|
||||
"editor_reset_edits_button" = "Loobu";
|
||||
"editor_reset_edits_button" = "Loobu muudatustest";
|
||||
"editor_remove_place_message" = "Kas kustutad lisatud koha?";
|
||||
"editor_remove_place_button" = "Kustuta";
|
||||
"editor_place_doesnt_exist" = "Kohta pole olemas";
|
||||
|
||||
@@ -456,3 +456,11 @@
|
||||
"type.entrance.exit" = "Izhod (samo)";
|
||||
"type.healthcare.laboratory" = "Zdravstveni laboratorij";
|
||||
"type.healthcare.psychotherapist" = "Psihoterapevt";
|
||||
"type.highway.cycleway.tunnel" = "Predor";
|
||||
"type.highway.elevator" = "Dvigalo";
|
||||
"type.highway.footway" = "Pešpot";
|
||||
"type.highway.footway.sidewalk" = "Pločnik";
|
||||
"type.highway.footway.crossing" = "Prehod za pešce";
|
||||
"type.highway.footway.area" = "Površina za pešce";
|
||||
"type.highway.footway.bridge" = "Most za pešce";
|
||||
"type.highway.footway.tunnel" = "Predor za pešce";
|
||||
|
||||
@@ -683,7 +683,7 @@
|
||||
"editor_edits_sent_message" = "您的说明将发送至 OpenStreetMap";
|
||||
"editor_comment_hint" = "备注…";
|
||||
"editor_reset_edits_message" = "舍弃所有本地更改?";
|
||||
"editor_reset_edits_button" = "舍弃";
|
||||
"editor_reset_edits_button" = "舍弃更改";
|
||||
"editor_remove_place_message" = "删除已添加的地点?";
|
||||
"editor_remove_place_button" = "删除";
|
||||
"editor_place_doesnt_exist" = "该地点不存在";
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
27AF18562E1DB63000CD41E2 /* PowerSavingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */; };
|
||||
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18572E1DB63900CD41E2 /* Appearance.swift */; };
|
||||
27AF185A2E1DB64500CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */; };
|
||||
27FDBF212EEEFC830045621D /* mapcss-mapping.csv in Resources */ = {isa = PBXBuildFile; fileRef = 27FDBF202EEEFC830045621D /* mapcss-mapping.csv */; };
|
||||
3304306D21D4EAFB00317CA3 /* SearchCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3304306C21D4EAFB00317CA3 /* SearchCategoryCell.swift */; };
|
||||
33046832219C57180041F3A8 /* CategorySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33046831219C57180041F3A8 /* CategorySettingsViewController.swift */; };
|
||||
337F98A621D37B7400C8AC27 /* SearchTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337F98A521D37B7400C8AC27 /* SearchTabViewController.swift */; };
|
||||
@@ -789,6 +790,7 @@
|
||||
27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowerSavingMode.swift; sourceTree = "<group>"; };
|
||||
27AF18572E1DB63900CD41E2 /* Appearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Appearance.swift; sourceTree = "<group>"; };
|
||||
27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncingSpeedTrapsWhileVoiceRouting.swift; sourceTree = "<group>"; };
|
||||
27FDBF202EEEFC830045621D /* mapcss-mapping.csv */ = {isa = PBXFileReference; lastKnownFileType = text; name = "mapcss-mapping.csv"; path = "/Users/yannikbloscheck/Apps/CoMaps/Code/data/mapcss-mapping.csv"; sourceTree = "<absolute>"; };
|
||||
28A0AB4B0D9B1048005BE974 /* Maps_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Maps_Prefix.pch; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 2; path = main.mm; sourceTree = "<group>"; tabWidth = 2; };
|
||||
30034C5C2B3F0B74005D961A /* az */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = az; path = az.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
@@ -3948,6 +3950,7 @@
|
||||
6B9978341C89A316003B8AA0 /* editor.config */,
|
||||
978D4A30199A11E600D72CA7 /* faq.html */,
|
||||
BB7626B41E8559980031D71C /* icudt75l.dat */,
|
||||
27FDBF202EEEFC830045621D /* mapcss-mapping.csv */,
|
||||
F623DA6A1C9C2731006A3436 /* opening_hours_how_to_edit.html */,
|
||||
FA85F632145DDDC20090E1A0 /* packed_polygons.bin */,
|
||||
451950391B7A3E070085DA05 /* patterns.txt */,
|
||||
@@ -4201,6 +4204,7 @@
|
||||
34F73F9F1E082FF800AC1FD6 /* Localizable.strings in Resources */,
|
||||
340E1EF21E2F614400CE49BF /* Main.storyboard in Resources */,
|
||||
F6E2FE521E097BA00083EBEC /* MWMActionBarButton.xib in Resources */,
|
||||
27FDBF212EEEFC830045621D /* mapcss-mapping.csv in Resources */,
|
||||
EDBD68072B625724005DD151 /* LocationServicesDisabledAlert.xib in Resources */,
|
||||
993DF0CA23F6BD0600AC231A /* ElevationDetailsViewController.xib in Resources */,
|
||||
F623DA6F1C9C2E62006A3436 /* MWMAddPlaceNavigationBar.xib in Resources */,
|
||||
|
||||
@@ -186,7 +186,7 @@ import AVFoundation
|
||||
return mapAppearance
|
||||
}
|
||||
|
||||
return .auto
|
||||
return .light
|
||||
}
|
||||
set {
|
||||
UserDefaults.standard.set(newValue.rawValue, forKey: userDefaultsKeyMapAppearance)
|
||||
|
||||
@@ -158,7 +158,7 @@ void registerCellsForTableView(std::vector<MWMEditorCellID> const & cells, UITab
|
||||
[self configNavBar];
|
||||
auto const & fid = m_mapObject.GetID();
|
||||
self.featureStatus = osm::Editor::Instance().GetFeatureStatus(fid.m_mwmId, fid.m_index);
|
||||
self.isFeatureUploaded = osm::Editor::Instance().IsFeatureUploaded(fid.m_mwmId, fid.m_index);
|
||||
self.isFeatureUploaded = osm::Editor::Instance().AreSomeFeatureChangesUploaded(fid.m_mwmId, fid.m_index);
|
||||
m_newAdditionalLanguages.clear();
|
||||
if (self.isCreating)
|
||||
{
|
||||
@@ -1089,7 +1089,7 @@ void registerCellsForTableView(std::vector<MWMEditorCellID> const & cells, UITab
|
||||
- (void)tapOnButtonCell:(UITableViewCell *)cell
|
||||
{
|
||||
auto const & fid = m_mapObject.GetID();
|
||||
self.isFeatureUploaded = osm::Editor::Instance().IsFeatureUploaded(fid.m_mwmId, fid.m_index);
|
||||
self.isFeatureUploaded = osm::Editor::Instance().AreSomeFeatureChangesUploaded(fid.m_mwmId, fid.m_index);
|
||||
NSIndexPath * ip = [self.tableView indexPathForCell:cell];
|
||||
[self.tableView reloadRowsAtIndexPaths:@[ ip ] withRowAnimation:UITableViewRowAnimationFade];
|
||||
|
||||
|
||||
@@ -260,6 +260,14 @@ WeekDayView getWeekDayView()
|
||||
});
|
||||
}
|
||||
|
||||
- (IBAction)extendedToggleButtonTap
|
||||
{
|
||||
id<MWMPlacePageOpeningHoursCellProtocol> delegate = self.delegate;
|
||||
if (delegate.isEditor) {
|
||||
[delegate setOpeningHoursCellExpanded:!delegate.openingHoursCellExpanded];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
- (BOOL)isExpanded
|
||||
|
||||
@@ -172,17 +172,30 @@
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fNU-1q-AiR">
|
||||
<rect key="frame" x="0.0" y="127" width="320" height="122"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<gestureRecognizers/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="122" id="Ifb-EB-LIb"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hYN-dO-J0e" userLabel="Editor Button">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="249"/>
|
||||
<state key="normal" title="Button"/>
|
||||
<buttonConfiguration key="configuration" style="plain"/>
|
||||
<connections>
|
||||
<action selector="extendedToggleButtonTap" destination="KGk-i7-Jjw" eventType="touchUpInside" id="BSf-KC-HgD"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="fNU-1q-AiR" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="08I-np-9jr"/>
|
||||
<constraint firstAttribute="trailing" secondItem="hYN-dO-J0e" secondAttribute="trailing" id="0Vo-1D-dPq"/>
|
||||
<constraint firstAttribute="trailing" secondItem="fNU-1q-AiR" secondAttribute="trailing" id="2Hz-cA-KuN"/>
|
||||
<constraint firstItem="hYN-dO-J0e" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="GVQ-l4-vnQ"/>
|
||||
<constraint firstItem="0kQ-hh-2Cy" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="60" id="KwF-TF-PmH"/>
|
||||
<constraint firstAttribute="trailing" secondItem="0kQ-hh-2Cy" secondAttribute="trailing" constant="32" id="RqH-0b-AyG"/>
|
||||
<constraint firstItem="hYN-dO-J0e" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="Sav-rp-wo2"/>
|
||||
<constraint firstItem="swk-um-XzG" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="VsQ-qI-dIi"/>
|
||||
<constraint firstAttribute="bottom" secondItem="hYN-dO-J0e" secondAttribute="bottom" id="Xe1-4J-wRh"/>
|
||||
<constraint firstItem="0kQ-hh-2Cy" firstAttribute="top" secondItem="swk-um-XzG" secondAttribute="bottom" id="Xrh-Vg-VYg"/>
|
||||
<constraint firstItem="swk-um-XzG" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="p14-Mi-kcR"/>
|
||||
<constraint firstItem="fNU-1q-AiR" firstAttribute="top" secondItem="0kQ-hh-2Cy" secondAttribute="bottom" id="uKD-bb-yHT"/>
|
||||
@@ -192,6 +205,7 @@
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="Background"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</tableViewCellContentView>
|
||||
<gestureRecognizers/>
|
||||
<inset key="separatorInset" minX="60" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||
<connections>
|
||||
<outlet property="currentDay" destination="swk-um-XzG" id="CJG-LQ-Pu8"/>
|
||||
|
||||
@@ -81,7 +81,7 @@ public:
|
||||
QPainter painter(device);
|
||||
painter.fillRect(QRectF(0.0, 0.0, device->width(), device->height()), Qt::white);
|
||||
|
||||
auto const shapedText = m_mng->ShapeText(m_utf8, m_fontPixelSize, m_lang);
|
||||
auto const shapedText = m_mng->ShapeText(m_utf8, m_fontPixelSize);
|
||||
|
||||
std::cout << "Total width: " << shapedText.m_lineWidthInPixels << '\n';
|
||||
std::cout << "Max height: " << shapedText.m_maxLineHeightInPixels << '\n';
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "drape/harfbuzz_shaping.hpp"
|
||||
|
||||
#include "platform/platform.hpp"
|
||||
#include "platform/preferred_languages.hpp"
|
||||
|
||||
#include "coding/hex.hpp"
|
||||
#include "coding/reader.hpp"
|
||||
@@ -328,6 +329,9 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
TUniBlockIter m_lastUsedBlock;
|
||||
std::vector<std::unique_ptr<Font>> m_fonts;
|
||||
|
||||
std::string const lang = languages::GetCurrentOrig();
|
||||
hb_language_t const m_language = hb_language_from_string(lang.data(), static_cast<int>(lang.size()));
|
||||
|
||||
// Required to use std::string_view as a search key for std::unordered_map::find().
|
||||
struct StringHash : public std::hash<std::string_view>
|
||||
{
|
||||
@@ -563,21 +567,8 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
return m_impl->m_fonts[key.m_fontIndex]->GetGlyphImage(key.m_glyphId, pixelHeight, sdf);
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
hb_language_t OrganicMapsLanguageToHarfbuzzLanguage(int8_t lang)
|
||||
{
|
||||
// TODO(AB): can langs be converted faster?
|
||||
auto const svLang = StringUtf8Multilang::GetLangByCode(lang);
|
||||
auto const hbLanguage = hb_language_from_string(svLang.data(), static_cast<int>(svLang.size()));
|
||||
if (hbLanguage == HB_LANGUAGE_INVALID)
|
||||
return hb_language_get_default();
|
||||
return hbLanguage;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
// This method is NOT multithreading-safe.
|
||||
text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight, int8_t lang)
|
||||
text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
static int const fontSize = fontPixelHeight;
|
||||
@@ -591,9 +582,6 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
|
||||
auto const [text, segments] = harfbuzz_shaping::GetTextSegments(utf8);
|
||||
|
||||
// TODO(AB): Optimize language conversion.
|
||||
hb_language_t const hbLanguage = OrganicMapsLanguageToHarfbuzzLanguage(lang);
|
||||
|
||||
text::TextMetrics allGlyphs;
|
||||
// For SplitText it's enough to know if the last visual (first logical) segment is RTL.
|
||||
allGlyphs.m_isRTL = segments.back().m_direction == HB_DIRECTION_RTL;
|
||||
@@ -609,7 +597,8 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
static_cast<int>(text.size()), substring.m_start, substring.m_length);
|
||||
hb_buffer_set_direction(m_impl->m_harfbuzzBuffer, substring.m_direction);
|
||||
hb_buffer_set_script(m_impl->m_harfbuzzBuffer, substring.m_script);
|
||||
hb_buffer_set_language(m_impl->m_harfbuzzBuffer, hbLanguage);
|
||||
// TODO: This property is static, is it possible to set it only once?
|
||||
hb_buffer_set_language(m_impl->m_harfbuzzBuffer, m_impl->m_language);
|
||||
|
||||
auto u32CharacterIter{text.begin() + substring.m_start};
|
||||
auto const end{u32CharacterIter + substring.m_length};
|
||||
@@ -646,10 +635,4 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
|
||||
return allGlyphs;
|
||||
}
|
||||
|
||||
text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight, char const * lang)
|
||||
{
|
||||
return ShapeText(utf8, fontPixelHeight, StringUtf8Multilang::GetLangIndex(lang));
|
||||
}
|
||||
|
||||
} // namespace dp
|
||||
|
||||
@@ -73,8 +73,7 @@ public:
|
||||
int GetFontIndex(strings::UniChar unicodePoint);
|
||||
int GetFontIndex(std::u16string_view sv);
|
||||
|
||||
text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight, int8_t lang);
|
||||
text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight, char const * lang);
|
||||
text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight);
|
||||
|
||||
GlyphImage GetGlyphImage(GlyphFontAndId key, int pixelHeight, bool sdf) const;
|
||||
|
||||
|
||||
@@ -231,14 +231,6 @@ void SymbolsTexture::Invalidate(ref_ptr<dp::GraphicsContext> context, std::strin
|
||||
Load(context, skinPathName, allocator);
|
||||
}
|
||||
|
||||
void SymbolsTexture::Invalidate(ref_ptr<dp::GraphicsContext> context, std::string const & skinPathName,
|
||||
ref_ptr<HWTextureAllocator> allocator,
|
||||
std::vector<drape_ptr<HWTexture>> & internalTextures)
|
||||
{
|
||||
internalTextures.push_back(std::move(m_hwTexture));
|
||||
Invalidate(context, skinPathName, allocator);
|
||||
}
|
||||
|
||||
ref_ptr<Texture::ResourceInfo> SymbolsTexture::FindResource(Texture::Key const & key, bool & newResource)
|
||||
{
|
||||
newResource = false;
|
||||
|
||||
@@ -36,8 +36,6 @@ public:
|
||||
|
||||
void Invalidate(ref_ptr<dp::GraphicsContext> context, std::string const & skinPathName,
|
||||
ref_ptr<HWTextureAllocator> allocator);
|
||||
void Invalidate(ref_ptr<dp::GraphicsContext> context, std::string const & skinPathName,
|
||||
ref_ptr<HWTextureAllocator> allocator, std::vector<drape_ptr<HWTexture>> & internalTextures);
|
||||
|
||||
bool IsSymbolContained(std::string const & symbolName) const;
|
||||
|
||||
|
||||
@@ -73,6 +73,12 @@ public:
|
||||
|
||||
static bool IsPowerOfTwo(uint32_t width, uint32_t height);
|
||||
|
||||
void DeferredCleanup(std::vector<drape_ptr<HWTexture>> & toCleanup)
|
||||
{
|
||||
toCleanup.push_back(std::move(m_hwTexture));
|
||||
Destroy();
|
||||
}
|
||||
|
||||
protected:
|
||||
void Destroy();
|
||||
bool AllocateTexture(ref_ptr<dp::GraphicsContext> context, ref_ptr<HWTextureAllocator> allocator);
|
||||
|
||||
@@ -87,6 +87,10 @@ drape_ptr<Texture> CreateArrowTexture(ref_ptr<dp::GraphicsContext> context,
|
||||
useDefaultResourceFolder ? StaticTexture::kDefaultResource : std::string(),
|
||||
dp::TextureFormat::RGBA8, textureAllocator, true /* allowOptional */);
|
||||
}
|
||||
|
||||
// There is no "arrow-texture.png".
|
||||
// BackendRenderer::m_arrow3dPreloadedData mesh is used by default.
|
||||
/// @todo Texture arrow is still present in case if somebody wants to use it?
|
||||
return make_unique_dp<StaticTexture>(context, "arrow-texture.png", StaticTexture::kDefaultResource,
|
||||
dp::TextureFormat::RGBA8, textureAllocator, true /* allowOptional */);
|
||||
}
|
||||
@@ -315,39 +319,7 @@ void TextureManager::Init(ref_ptr<dp::GraphicsContext> context, Params const & p
|
||||
m_smaaSearchTexture = make_unique_dp<StaticTexture>(context, "smaa-search.png", StaticTexture::kDefaultResource,
|
||||
dp::TextureFormat::Red, make_ref(m_textureAllocator));
|
||||
|
||||
// Initialize patterns (reserved ./data/patterns.txt lines count).
|
||||
std::set<PenPatternT> patterns;
|
||||
|
||||
double const visualScale = params.m_visualScale;
|
||||
uint32_t rowsCount = 0;
|
||||
impl::ParsePatternsList(params.m_patterns, [&](buffer_vector<double, 8> const & pattern)
|
||||
{
|
||||
PenPatternT toAdd;
|
||||
for (double d : pattern)
|
||||
toAdd.push_back(PatternFloat2Pixel(d * visualScale));
|
||||
|
||||
if (!patterns.insert(toAdd).second)
|
||||
return;
|
||||
|
||||
if (IsTrianglePattern(toAdd))
|
||||
{
|
||||
rowsCount = rowsCount + toAdd[2] + toAdd[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT_EQUAL(toAdd.size(), 2, ());
|
||||
++rowsCount;
|
||||
}
|
||||
});
|
||||
|
||||
m_stipplePenTexture = make_unique_dp<StipplePenTexture>(StipplePenTextureSize(rowsCount, m_maxTextureSize),
|
||||
make_ref(m_textureAllocator));
|
||||
|
||||
LOG(LDEBUG, ("Patterns texture size =", m_stipplePenTexture->GetWidth(), m_stipplePenTexture->GetHeight()));
|
||||
|
||||
ref_ptr<StipplePenTexture> stipplePenTex = make_ref(m_stipplePenTexture);
|
||||
for (auto const & p : patterns)
|
||||
stipplePenTex->ReservePattern(p);
|
||||
InitStipplePen(params);
|
||||
|
||||
// Initialize colors (reserved ./data/colors.txt lines count).
|
||||
std::vector<dp::Color> colors;
|
||||
@@ -372,7 +344,7 @@ void TextureManager::Init(ref_ptr<dp::GraphicsContext> context, Params const & p
|
||||
m_maxGlypsCount = static_cast<uint32_t>(ceil(kGlyphAreaCoverage * textureSquare / averageGlyphSquare));
|
||||
|
||||
std::string_view constexpr kSpace{" "};
|
||||
m_spaceGlyph = m_glyphManager->ShapeText(kSpace, dp::kBaseFontSizePixels, "en").m_glyphs.front().m_key;
|
||||
m_spaceGlyph = m_glyphManager->ShapeText(kSpace, dp::kBaseFontSizePixels).m_glyphs.front().m_key;
|
||||
|
||||
LOG(LDEBUG, ("Glyphs texture size =", kGlyphsTextureSize, "with max glyphs count =", m_maxGlypsCount));
|
||||
|
||||
@@ -380,25 +352,73 @@ void TextureManager::Init(ref_ptr<dp::GraphicsContext> context, Params const & p
|
||||
m_nothingToUpload.clear();
|
||||
}
|
||||
|
||||
void TextureManager::InitStipplePen(Params const & params)
|
||||
{
|
||||
// Initialize patterns (reserved ./data/patterns.txt lines count).
|
||||
std::set<PenPatternT> patterns;
|
||||
uint32_t rowsCount = 0;
|
||||
|
||||
impl::ParsePatternsList(params.m_patterns, [&](buffer_vector<double, 8> const & pattern)
|
||||
{
|
||||
PenPatternT toAdd;
|
||||
for (double d : pattern)
|
||||
toAdd.push_back(PatternFloat2Pixel(d * params.m_visualScale));
|
||||
|
||||
if (!patterns.insert(toAdd).second)
|
||||
return;
|
||||
|
||||
if (IsTrianglePattern(toAdd))
|
||||
{
|
||||
rowsCount = rowsCount + toAdd[2] + toAdd[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT_EQUAL(toAdd.size(), 2, ());
|
||||
++rowsCount;
|
||||
}
|
||||
});
|
||||
|
||||
m_stipplePenTexture = make_unique_dp<StipplePenTexture>(StipplePenTextureSize(rowsCount, m_maxTextureSize),
|
||||
make_ref(m_textureAllocator));
|
||||
|
||||
LOG(LDEBUG, ("Patterns texture size =", m_stipplePenTexture->GetWidth(), m_stipplePenTexture->GetHeight()));
|
||||
|
||||
ref_ptr<StipplePenTexture> stipplePenTex = make_ref(m_stipplePenTexture);
|
||||
for (auto const & p : patterns)
|
||||
stipplePenTex->ReservePattern(p);
|
||||
}
|
||||
|
||||
void TextureManager::OnSwitchMapStyle(ref_ptr<dp::GraphicsContext> context)
|
||||
{
|
||||
CHECK(m_isInitialized, ());
|
||||
|
||||
bool const isVulkan = context->GetApiVersion() == dp::ApiVersion::Vulkan;
|
||||
|
||||
// Here we need invalidate only textures which can be changed in map style switch.
|
||||
// Now we update only symbol textures, if we need update other textures they must be added here.
|
||||
// For Vulkan we use m_texturesToCleanup to defer textures destroying.
|
||||
for (auto const & m_symbolTexture : m_symbolTextures)
|
||||
for (auto const & texture : m_symbolTextures)
|
||||
{
|
||||
ref_ptr<SymbolsTexture> symbolsTexture = make_ref(m_symbolTexture);
|
||||
ASSERT(symbolsTexture != nullptr, ());
|
||||
ref_ptr<SymbolsTexture> symbolsTexture = make_ref(texture);
|
||||
if (isVulkan)
|
||||
symbolsTexture->DeferredCleanup(m_texturesToCleanup);
|
||||
|
||||
if (context->GetApiVersion() != dp::ApiVersion::Vulkan)
|
||||
symbolsTexture->Invalidate(context, m_resPostfix, make_ref(m_textureAllocator));
|
||||
else
|
||||
symbolsTexture->Invalidate(context, m_resPostfix, make_ref(m_textureAllocator), m_texturesToCleanup);
|
||||
symbolsTexture->Invalidate(context, m_resPostfix, make_ref(m_textureAllocator));
|
||||
}
|
||||
}
|
||||
|
||||
void TextureManager::OnVisualScaleChanged(ref_ptr<dp::GraphicsContext> context, Params const & params)
|
||||
{
|
||||
m_resPostfix = params.m_resPostfix;
|
||||
|
||||
OnSwitchMapStyle(context);
|
||||
|
||||
if (context->GetApiVersion() == dp::ApiVersion::Vulkan)
|
||||
m_stipplePenTexture->DeferredCleanup(m_texturesToCleanup);
|
||||
|
||||
InitStipplePen(params);
|
||||
}
|
||||
|
||||
void TextureManager::InvalidateArrowTexture(ref_ptr<dp::GraphicsContext> context,
|
||||
std::string const & texturePath /* = {} */,
|
||||
bool useDefaultResourceFolder /* = false */)
|
||||
@@ -416,10 +436,13 @@ void TextureManager::ApplyInvalidatedStaticTextures()
|
||||
}
|
||||
}
|
||||
|
||||
void TextureManager::GetTexturesToCleanup(std::vector<drape_ptr<HWTexture>> & textures)
|
||||
std::vector<drape_ptr<HWTexture>> TextureManager::GetTexturesToCleanup()
|
||||
{
|
||||
CHECK(m_isInitialized, ());
|
||||
std::swap(textures, m_texturesToCleanup);
|
||||
|
||||
auto res = std::move(m_texturesToCleanup);
|
||||
m_texturesToCleanup.clear();
|
||||
return res;
|
||||
}
|
||||
|
||||
bool TextureManager::GetSymbolRegionSafe(std::string const & symbolName, SymbolRegion & region)
|
||||
@@ -467,8 +490,7 @@ text::TextMetrics TextureManager::ShapeSingleTextLine(float fontPixelHeight, std
|
||||
// TODO(AB): Is this mutex too slow?
|
||||
std::lock_guard lock(m_calcGlyphsMutex);
|
||||
|
||||
// TODO(AB): Fix hard-coded lang.
|
||||
auto textMetrics = m_glyphManager->ShapeText(utf8, fontPixelHeight, "en");
|
||||
auto textMetrics = m_glyphManager->ShapeText(utf8, fontPixelHeight);
|
||||
|
||||
auto const & glyphs = textMetrics.m_glyphs;
|
||||
|
||||
|
||||
@@ -77,7 +77,9 @@ public:
|
||||
|
||||
void Init(ref_ptr<dp::GraphicsContext> context, Params const & params);
|
||||
void OnSwitchMapStyle(ref_ptr<dp::GraphicsContext> context);
|
||||
void GetTexturesToCleanup(std::vector<drape_ptr<HWTexture>> & textures);
|
||||
void OnVisualScaleChanged(ref_ptr<dp::GraphicsContext> context, Params const & params);
|
||||
|
||||
std::vector<drape_ptr<HWTexture>> GetTexturesToCleanup();
|
||||
|
||||
bool GetSymbolRegionSafe(std::string const & symbolName, SymbolRegion & region);
|
||||
void GetSymbolRegion(std::string const & symbolName, SymbolRegion & region);
|
||||
@@ -121,6 +123,8 @@ public:
|
||||
ref_ptr<HWTextureAllocator> GetTextureAllocator() const;
|
||||
|
||||
private:
|
||||
void InitStipplePen(Params const & params);
|
||||
|
||||
struct GlyphGroup
|
||||
{
|
||||
std::set<GlyphFontAndId> m_glyphKeys;
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
#include "drape/support_manager.hpp"
|
||||
#include "drape/texture_manager.hpp"
|
||||
|
||||
#include "indexer/scales.hpp"
|
||||
|
||||
#include "platform/platform.hpp"
|
||||
|
||||
#include "base/file_name_utils.hpp"
|
||||
@@ -355,18 +353,37 @@ void BackendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
m_trafficGenerator->InvalidateTexturesCache();
|
||||
m_transitBuilder->RebuildSchemes(m_context, m_texMng);
|
||||
|
||||
// For Vulkan we initialize deferred cleaning up.
|
||||
if (m_context->GetApiVersion() == dp::ApiVersion::Vulkan)
|
||||
{
|
||||
std::vector<drape_ptr<dp::HWTexture>> textures;
|
||||
m_texMng->GetTexturesToCleanup(textures);
|
||||
if (!textures.empty())
|
||||
{
|
||||
m_commutator->PostMessage(ThreadsCommutator::RenderThread,
|
||||
make_unique_dp<CleanupTexturesMessage>(std::move(textures)), MessagePriority::Normal);
|
||||
}
|
||||
}
|
||||
CleanupTextures();
|
||||
break;
|
||||
}
|
||||
|
||||
case Message::Type::VisualScaleChanged:
|
||||
{
|
||||
ref_ptr<VisualScaleChangedMessage> msg = message;
|
||||
msg->FilterDependentMessages();
|
||||
|
||||
CHECK(m_context != nullptr, ());
|
||||
|
||||
dp::TextureManager::Params params;
|
||||
params.m_resPostfix = VisualParams::Instance().GetResourcePostfix();
|
||||
params.m_visualScale = df::VisualParams::Instance().GetVisualScale();
|
||||
#ifdef BUILD_DESIGNER
|
||||
params.m_patterns = "patterns_design.txt";
|
||||
#else
|
||||
params.m_patterns = "patterns.txt";
|
||||
#endif // BUILD_DESIGNER
|
||||
|
||||
m_texMng->OnVisualScaleChanged(m_context, params);
|
||||
|
||||
RecacheMapShapes();
|
||||
RecacheGui(m_lastWidgetsInfo, false /* needResetOldGui */);
|
||||
#ifdef RENDER_DEBUG_INFO_LABELS
|
||||
RecacheDebugLabels();
|
||||
#endif
|
||||
m_trafficGenerator->InvalidateTexturesCache();
|
||||
m_transitBuilder->RebuildSchemes(m_context, m_texMng);
|
||||
|
||||
CleanupTextures();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -611,21 +628,8 @@ void BackendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
m_arrow3dPreloadedData = Arrow3d::PreloadMesh(m_arrow3dCustomDecl, m_texMng);
|
||||
}
|
||||
|
||||
// Recache map shapes.
|
||||
RecacheMapShapes();
|
||||
|
||||
// For Vulkan we initialize deferred cleaning up.
|
||||
if (m_context->GetApiVersion() == dp::ApiVersion::Vulkan)
|
||||
{
|
||||
std::vector<drape_ptr<dp::HWTexture>> textures;
|
||||
m_texMng->GetTexturesToCleanup(textures);
|
||||
if (!textures.empty())
|
||||
{
|
||||
m_commutator->PostMessage(ThreadsCommutator::RenderThread,
|
||||
make_unique_dp<CleanupTexturesMessage>(std::move(textures)), MessagePriority::Normal);
|
||||
}
|
||||
}
|
||||
|
||||
CleanupTextures();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -772,6 +776,18 @@ void BackendRenderer::RecacheMapShapes()
|
||||
m_commutator->PostMessage(ThreadsCommutator::RenderThread, std::move(msg), MessagePriority::Normal);
|
||||
}
|
||||
|
||||
void BackendRenderer::CleanupTextures()
|
||||
{
|
||||
// For Vulkan we initialize deferred cleaning up.
|
||||
if (m_context->GetApiVersion() == dp::ApiVersion::Vulkan)
|
||||
{
|
||||
auto textures = m_texMng->GetTexturesToCleanup();
|
||||
if (!textures.empty())
|
||||
m_commutator->PostMessage(ThreadsCommutator::RenderThread,
|
||||
make_unique_dp<CleanupTexturesMessage>(std::move(textures)), MessagePriority::Normal);
|
||||
}
|
||||
}
|
||||
|
||||
void BackendRenderer::FlushGeometry(TileKey const & key, dp::RenderState const & state,
|
||||
drape_ptr<dp::RenderBucket> && buffer)
|
||||
{
|
||||
|
||||
@@ -83,6 +83,7 @@ private:
|
||||
void RecacheGui(gui::TWidgetsInitInfo const & initInfo, bool needResetOldGui);
|
||||
void RecacheChoosePositionMark();
|
||||
void RecacheMapShapes();
|
||||
void CleanupTextures();
|
||||
|
||||
#ifdef RENDER_DEBUG_INFO_LABELS
|
||||
void RecacheDebugLabels();
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "drape/support_manager.hpp"
|
||||
|
||||
#include "platform/settings.hpp"
|
||||
#include "routing/base/followed_polyline.hpp"
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
@@ -40,7 +41,7 @@ DrapeEngine::DrapeEngine(Params && params)
|
||||
|
||||
using namespace location;
|
||||
EMyPositionMode mode = PendingPosition;
|
||||
if (settings::Get(kLocationStateMode, mode) && mode == FollowAndRotate)
|
||||
if (settings::Get(kLocationStateMode, mode) && mode == FollowAndRotateCompass)
|
||||
{
|
||||
// If the screen rect setting in follow and rotate mode is missing or invalid, it could cause
|
||||
// invalid animations, so the follow and rotate mode should be discarded.
|
||||
@@ -441,13 +442,12 @@ void DrapeEngine::SetCompassInfo(location::CompassInfo const & info)
|
||||
MessagePriority::Normal);
|
||||
}
|
||||
|
||||
void DrapeEngine::SetGpsInfo(location::GpsInfo const & info, bool isNavigable, double distToNextTurn, double speedLimit,
|
||||
void DrapeEngine::SetGpsInfo(location::GpsInfo const & info, df::NavigationContext const & navigationContext,
|
||||
location::RouteMatchingInfo const & routeInfo)
|
||||
{
|
||||
m_threadCommutator->PostMessage(
|
||||
ThreadsCommutator::RenderThread,
|
||||
make_unique_dp<GpsInfoMessage>(info, isNavigable, distToNextTurn, speedLimit, routeInfo),
|
||||
MessagePriority::Normal);
|
||||
m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread,
|
||||
make_unique_dp<GpsInfoMessage>(info, navigationContext, routeInfo),
|
||||
MessagePriority::Normal);
|
||||
}
|
||||
|
||||
void DrapeEngine::SwitchMyPositionNextMode()
|
||||
@@ -474,12 +474,13 @@ void DrapeEngine::StopLocationFollow()
|
||||
MessagePriority::Normal);
|
||||
}
|
||||
|
||||
void DrapeEngine::FollowRoute(int preferredZoomLevel, int preferredZoomLevel3d, bool enableAutoZoom, bool isArrowGlued)
|
||||
void DrapeEngine::FollowRoute(int preferredZoomLevel, int preferredZoomLevel3d, bool enableAutoZoom, bool isArrowGlued,
|
||||
bool allowRouteRotation)
|
||||
{
|
||||
m_threadCommutator->PostMessage(
|
||||
ThreadsCommutator::RenderThread,
|
||||
make_unique_dp<FollowRouteMessage>(preferredZoomLevel, preferredZoomLevel3d, enableAutoZoom, isArrowGlued),
|
||||
MessagePriority::Normal);
|
||||
m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread,
|
||||
make_unique_dp<FollowRouteMessage>(preferredZoomLevel, preferredZoomLevel3d,
|
||||
enableAutoZoom, isArrowGlued, allowRouteRotation),
|
||||
MessagePriority::Normal);
|
||||
}
|
||||
|
||||
void DrapeEngine::SetModelViewListener(ModelViewChangedHandler && fn)
|
||||
@@ -897,10 +898,8 @@ void DrapeEngine::UpdateVisualScale(double vs, bool needStopRendering)
|
||||
if (needStopRendering)
|
||||
SetRenderingEnabled();
|
||||
|
||||
RecacheGui(false);
|
||||
RecacheMapShapes();
|
||||
m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread,
|
||||
make_unique_dp<RecoverContextDependentResourcesMessage>(), MessagePriority::Normal);
|
||||
m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, make_unique_dp<UpdateVisualScaleMessage>(),
|
||||
MessagePriority::High);
|
||||
}
|
||||
|
||||
void DrapeEngine::UpdateMyPositionRoutingOffset(bool useDefault, int offsetY)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "drape_frontend/my_position_controller.hpp"
|
||||
#include "routing/base/followed_polyline.hpp"
|
||||
#include "traffic/traffic_info.hpp"
|
||||
|
||||
#include "drape_frontend/backend_renderer.hpp"
|
||||
@@ -154,7 +156,7 @@ public:
|
||||
void UpdateMapStyle();
|
||||
|
||||
void SetCompassInfo(location::CompassInfo const & info);
|
||||
void SetGpsInfo(location::GpsInfo const & info, bool isNavigable, double distToNextTurn, double speedLimit,
|
||||
void SetGpsInfo(location::GpsInfo const & info, df::NavigationContext const & navigationContext,
|
||||
location::RouteMatchingInfo const & routeInfo);
|
||||
void SwitchMyPositionNextMode();
|
||||
void LoseLocation();
|
||||
@@ -171,7 +173,8 @@ public:
|
||||
|
||||
dp::DrapeID AddSubroute(SubrouteConstPtr subroute);
|
||||
void RemoveSubroute(dp::DrapeID subrouteId, bool deactivateFollowing);
|
||||
void FollowRoute(int preferredZoomLevel, int preferredZoomLevel3d, bool enableAutoZoom, bool isArrowGlued);
|
||||
void FollowRoute(int preferredZoomLevel, int preferredZoomLevel3d, bool enableAutoZoom, bool isArrowGlued,
|
||||
bool allowRouteRotation);
|
||||
void DeactivateRouteFollowing();
|
||||
void SetSubrouteVisibility(dp::DrapeID subrouteId, bool isVisible);
|
||||
dp::DrapeID AddRoutePreviewSegment(m2::PointD const & startPt, m2::PointD const & finishPt);
|
||||
|
||||
@@ -438,8 +438,8 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
break;
|
||||
#endif
|
||||
ref_ptr<GpsInfoMessage> msg = message;
|
||||
m_myPositionController->OnLocationUpdate(msg->GetInfo(), msg->IsNavigable(), msg->GetDistanceToNextTurn(),
|
||||
msg->GetSpeedLimit(), m_userEventStream.GetCurrentScreen());
|
||||
m_myPositionController->OnLocationUpdate(msg->GetInfo(), msg->GetNavigationContext(),
|
||||
m_userEventStream.GetCurrentScreen());
|
||||
|
||||
location::RouteMatchingInfo const & info = msg->GetRouteInfo();
|
||||
if (info.HasDistanceFromBegin())
|
||||
@@ -512,7 +512,8 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
if (m_pendingFollowRoute != nullptr)
|
||||
{
|
||||
FollowRoute(m_pendingFollowRoute->m_preferredZoomLevel, m_pendingFollowRoute->m_preferredZoomLevelIn3d,
|
||||
m_pendingFollowRoute->m_enableAutoZoom, m_pendingFollowRoute->m_isArrowGlued);
|
||||
m_pendingFollowRoute->m_enableAutoZoom, m_pendingFollowRoute->m_isArrowGlued,
|
||||
m_pendingFollowRoute->m_allowRouteRotation);
|
||||
m_pendingFollowRoute.reset();
|
||||
}
|
||||
break;
|
||||
@@ -584,13 +585,14 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
// receive FollowRoute message before FlushSubroute message, so we need to postpone its processing.
|
||||
if (m_routeRenderer->GetSubroutes().empty())
|
||||
{
|
||||
m_pendingFollowRoute = std::make_unique<FollowRouteData>(
|
||||
msg->GetPreferredZoomLevel(), msg->GetPreferredZoomLevelIn3d(), msg->EnableAutoZoom(), msg->IsArrowGlued());
|
||||
m_pendingFollowRoute =
|
||||
std::make_unique<FollowRouteData>(msg->GetPreferredZoomLevel(), msg->GetPreferredZoomLevelIn3d(),
|
||||
msg->EnableAutoZoom(), msg->IsArrowGlued(), msg->AllowRouteRotation());
|
||||
}
|
||||
else
|
||||
{
|
||||
FollowRoute(msg->GetPreferredZoomLevel(), msg->GetPreferredZoomLevelIn3d(), msg->EnableAutoZoom(),
|
||||
msg->IsArrowGlued());
|
||||
msg->IsArrowGlued(), msg->AllowRouteRotation());
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -640,51 +642,11 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
break;
|
||||
}
|
||||
|
||||
case Message::Type::RecoverContextDependentResources:
|
||||
{
|
||||
UpdateContextDependentResources();
|
||||
break;
|
||||
}
|
||||
case Message::Type::RecoverContextDependentResources: UpdateContextDependentResources(); break;
|
||||
|
||||
case Message::Type::UpdateMapStyle:
|
||||
{
|
||||
#ifdef BUILD_DESIGNER
|
||||
classificator::Load();
|
||||
#endif // BUILD_DESIGNER
|
||||
case Message::Type::UpdateMapStyle: UpdateAll<SwitchMapStyleMessage>(); break;
|
||||
|
||||
// Clear all graphics.
|
||||
for (RenderLayer & layer : m_layers)
|
||||
{
|
||||
layer.m_renderGroups.clear();
|
||||
layer.m_isDirty = false;
|
||||
}
|
||||
|
||||
// Must be recreated on map style changing.
|
||||
CHECK(m_context != nullptr, ());
|
||||
m_transitBackground = make_unique_dp<ScreenQuadRenderer>(m_context);
|
||||
|
||||
// Invalidate read manager.
|
||||
{
|
||||
BaseBlockingMessage::Blocker blocker;
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
|
||||
make_unique_dp<InvalidateReadManagerRectMessage>(blocker), MessagePriority::Normal);
|
||||
blocker.Wait();
|
||||
}
|
||||
|
||||
// Delete all messages which can contain render states (and textures references inside).
|
||||
auto f = [this]() { InstantMessageFilter([](ref_ptr<Message> msg) { return msg->ContainsRenderState(); }); };
|
||||
|
||||
// Notify backend renderer and wait for completion.
|
||||
{
|
||||
BaseBlockingMessage::Blocker blocker;
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
|
||||
make_unique_dp<SwitchMapStyleMessage>(blocker, std::move(f)), MessagePriority::Normal);
|
||||
blocker.Wait();
|
||||
}
|
||||
|
||||
UpdateContextDependentResources();
|
||||
break;
|
||||
}
|
||||
case Message::Type::VisualScaleChanged: UpdateAll<VisualScaleChangedMessage>(); break;
|
||||
|
||||
case Message::Type::AllowAutoZoom:
|
||||
{
|
||||
@@ -1023,6 +985,46 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
}
|
||||
}
|
||||
|
||||
template <class MessageT>
|
||||
void FrontendRenderer::UpdateAll()
|
||||
{
|
||||
#ifdef BUILD_DESIGNER
|
||||
classificator::Load();
|
||||
#endif // BUILD_DESIGNER
|
||||
|
||||
// Clear all graphics.
|
||||
for (RenderLayer & layer : m_layers)
|
||||
{
|
||||
layer.m_renderGroups.clear();
|
||||
layer.m_isDirty = false;
|
||||
}
|
||||
|
||||
// Must be recreated on map style changing.
|
||||
CHECK(m_context != nullptr, ());
|
||||
m_transitBackground = make_unique_dp<ScreenQuadRenderer>(m_context);
|
||||
|
||||
// Invalidate read manager.
|
||||
{
|
||||
BaseBlockingMessage::Blocker blocker;
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
|
||||
make_unique_dp<InvalidateReadManagerRectMessage>(blocker), MessagePriority::Normal);
|
||||
blocker.Wait();
|
||||
}
|
||||
|
||||
// Delete all messages which can contain render states (and textures references inside).
|
||||
auto f = [this]() { InstantMessageFilter([](ref_ptr<Message> msg) { return msg->ContainsRenderState(); }); };
|
||||
|
||||
// Notify backend renderer and wait for completion.
|
||||
{
|
||||
BaseBlockingMessage::Blocker blocker;
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread, make_unique_dp<MessageT>(blocker, std::move(f)),
|
||||
MessagePriority::Normal);
|
||||
blocker.Wait();
|
||||
}
|
||||
|
||||
UpdateContextDependentResources();
|
||||
}
|
||||
|
||||
std::unique_ptr<threads::IRoutine> FrontendRenderer::CreateRoutine()
|
||||
{
|
||||
return std::make_unique<Routine>(*this);
|
||||
@@ -1057,10 +1059,11 @@ void FrontendRenderer::UpdateContextDependentResources()
|
||||
}
|
||||
|
||||
void FrontendRenderer::FollowRoute(int preferredZoomLevel, int preferredZoomLevelIn3d, bool enableAutoZoom,
|
||||
bool isArrowGlued)
|
||||
bool isArrowGlued, bool allowRouteRotation)
|
||||
{
|
||||
m_myPositionController->ActivateRouting(
|
||||
!m_enablePerspectiveInNavigation ? preferredZoomLevel : preferredZoomLevelIn3d, enableAutoZoom, isArrowGlued);
|
||||
!m_enablePerspectiveInNavigation ? preferredZoomLevel : preferredZoomLevelIn3d, enableAutoZoom, isArrowGlued,
|
||||
allowRouteRotation);
|
||||
|
||||
if (m_enablePerspectiveInNavigation)
|
||||
AddUserEvent(make_unique_dp<SetAutoPerspectiveEvent>(true /* isAutoPerspective */));
|
||||
|
||||
@@ -247,6 +247,9 @@ private:
|
||||
void ReleaseResources();
|
||||
void UpdateContextDependentResources();
|
||||
|
||||
template <class MessageT>
|
||||
void UpdateAll();
|
||||
|
||||
void BeginUpdateOverlayTree(ScreenBase const & modelView);
|
||||
void UpdateOverlayTree(ScreenBase const & modelView, drape_ptr<RenderGroup> & renderGroup);
|
||||
void EndUpdateOverlayTree();
|
||||
@@ -258,7 +261,8 @@ private:
|
||||
using TRenderGroupRemovePredicate = std::function<bool(drape_ptr<RenderGroup> const &)>;
|
||||
void RemoveRenderGroupsLater(TRenderGroupRemovePredicate const & predicate);
|
||||
|
||||
void FollowRoute(int preferredZoomLevel, int preferredZoomLevelIn3d, bool enableAutoZoom, bool isArrowGlued);
|
||||
void FollowRoute(int preferredZoomLevel, int preferredZoomLevelIn3d, bool enableAutoZoom, bool isArrowGlued,
|
||||
bool allowRouteRotation);
|
||||
|
||||
bool CheckRouteRecaching(ref_ptr<BaseSubrouteData> subrouteData);
|
||||
|
||||
@@ -369,17 +373,20 @@ private:
|
||||
|
||||
struct FollowRouteData
|
||||
{
|
||||
FollowRouteData(int preferredZoomLevel, int preferredZoomLevelIn3d, bool enableAutoZoom, bool isArrowGlued)
|
||||
FollowRouteData(int preferredZoomLevel, int preferredZoomLevelIn3d, bool enableAutoZoom, bool isArrowGlued,
|
||||
bool allowRouteRotation)
|
||||
: m_preferredZoomLevel(preferredZoomLevel)
|
||||
, m_preferredZoomLevelIn3d(preferredZoomLevelIn3d)
|
||||
, m_enableAutoZoom(enableAutoZoom)
|
||||
, m_isArrowGlued(isArrowGlued)
|
||||
, m_allowRouteRotation(allowRouteRotation)
|
||||
{}
|
||||
|
||||
int m_preferredZoomLevel;
|
||||
int m_preferredZoomLevelIn3d;
|
||||
bool m_enableAutoZoom;
|
||||
bool m_isArrowGlued;
|
||||
bool m_allowRouteRotation;
|
||||
};
|
||||
|
||||
std::unique_ptr<FollowRouteData> m_pendingFollowRoute;
|
||||
|
||||
@@ -103,6 +103,7 @@ std::string DebugPrint(Message::Type msgType)
|
||||
case Message::Type::EnableIsolines: return "EnableIsolines";
|
||||
case Message::Type::OnEnterBackground: return "OnEnterBackground";
|
||||
case Message::Type::Arrow3dRecache: return "Arrow3dRecache";
|
||||
case Message::Type::VisualScaleChanged: return "VisualScaleChanged";
|
||||
}
|
||||
ASSERT(false, ("Unknown message type."));
|
||||
return "Unknown type";
|
||||
|
||||
@@ -103,7 +103,8 @@ public:
|
||||
NotifyGraphicsReady,
|
||||
EnableIsolines,
|
||||
OnEnterBackground,
|
||||
Arrow3dRecache
|
||||
Arrow3dRecache,
|
||||
VisualScaleChanged,
|
||||
};
|
||||
|
||||
virtual ~Message() = default;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user