diff options
Diffstat (limited to 'navit')
98 files changed, 3254 insertions, 2029 deletions
diff --git a/navit/Makefile.am b/navit/Makefile.am deleted file mode 100644 index 16cb81d58..000000000 --- a/navit/Makefile.am +++ /dev/null @@ -1,248 +0,0 @@ -include $(top_srcdir)/Makefile.inc -comma=, -SUBDIRS=fib-1.1 support -if PLUGINS - SUBDIRS += . -endif -DIST_SUBDIRS=autoload binding map maptool fib-1.1 font fonts gui graphics osd plugin speech support vehicle xpm maps -SUBDIRS+=autoload binding map font gui graphics osd plugin speech vehicle xpm - -MODULES = $(wildcard $(top_builddir)/navit/binding/*/*.la $(top_builddir)/navit/font/*/*.la $(top_builddir)/navit/graphics/*/*.la $(top_builddir)/navit/gui/*/*.la $(top_builddir)/navit/map/*/*.la $(top_builddir)/navit/osd/*/*.la $(top_builddir)/navit/speech/*/*.la $(top_builddir)/navit/vehicle/*/*.la) - -if FONTS - SUBDIRS += fonts -endif -if !PLUGINS - SUBDIRS += . -endif - -if MAPTOOL - SUBDIRS += maptool -endif - -if BUILD_SAMPLEMAP - SUBDIRS += maps -endif - - -AM_CPPFLAGS = -I$(top_srcdir)/navit/fib-1.1 @NAVIT_CFLAGS@ @ZLIB_CFLAGS@ -DPREFIX=\"@prefix@\" -DLIBDIR=\"@libdir@\" -DMODULE=navit -BUILT_SOURCES = version.h navit_config.h - -if BIN_NAVIT - bin_PROGRAMS = navit -endif - -if SHARED_LIBNAVIT - lib_LTLIBRARIES = lib@LIBNAVIT@.la - lib@LIBNAVIT@_la_LDFLAGS = -avoid-version @MODULE_LDFLAGS@ @NAVIT_SOCKET_LDFLAGS@ -no-undefined -Wl,--no-undefined -else - noinst_LTLIBRARIES = lib@LIBNAVIT@.la -endif -lib@LIBNAVIT@_la_LIBADD = @NAVIT_LIBS@ @WORDEXP_LIBS@ @ZLIB_LIBS@ @INTLLIBS@ -Lfib-1.1 -lfib @MODULE_LIBADD@ @CRYPTO_LIBS@ - -if SUPPORT_WIN32CE - lib@LIBNAVIT@_la_LIBADD += -Lsupport/libc -lsupport_libc -endif - -pkgdata_DATA = navit.xml - -EXTRA_DIST = navit_shipped.xml navit.dtd - -lib@LIBNAVIT@_la_SOURCES = announcement.c atom.c attr.c cache.c callback.c command.c config_.c coord.c country.c data_window.c debug.c \ - event.c event_glib.h file.c geom.c graphics.c gui.c item.c layout.c log.c main.c map.c maps.c \ - linguistics.c mapset.c maptype.c menu.c messages.c bookmarks.c bookmarks.h navit.c navigation.c osd.c param.c phrase.c plugin.c popup.c \ - profile.c profile_option.c projection.c roadprofile.c route.c search.c search_houseno_interpol.c script.c speech.c start_real.c \ - transform.c track.c util.c vehicle.c vehicleprofile.c xmlconfig.c \ - announcement.h atom.h attr.h attr_def.h cache.h callback.h color.h command.h config_.h coord.h country.h \ - android.h data.h data_window.h data_window_int.h debug.h destination.h draw_info.h endianess.h event.h \ - file.h geom.h graphics.h gtkext.h gui.h item.h item_def.h keys.h log.h layer.h layout.h linguistics.h main.h map-share.h map.h\ - map_data.h mapset.h maptype.h menu.h messages.h navigation.h navit.h osd.h \ - param.h phrase.h plugin.h point.h plugin_def.h projection.h popup.h route.h profile.h roadprofile.h search.h search_houseno_interpol.h \ - speech.h start_real.h transform.h track.h types.h util.h vehicle.h vehicleprofile.h window.h xmlconfig.h zipfile.h \ - navit_lfs.h navit_nls.c navit_nls.h sunriset.c sunriset.h glib_slice.h - -XSLTS=@XSLTS@ -navit.xml: navit_shipped.xml $(foreach xslt, $(subst $(comma), ,$(XSLTS)), $(addsuffix .xslt,$(addprefix xslt/,$(xslt)))) navit_android_xml - cp $< navit.xml.new - if [ ! -f navit.dtd ]; then cp -f $(top_srcdir)/navit/navit.dtd .; fi - for i in $^; do if [ "$${i%.xslt}" != "$$i" ]; then echo "Applying $$i" ; @SAXON@ -snone navit.xml.new $$i >navit.xml.tmp || exit ; mv -f navit.xml.tmp navit.xml.new || exit ; fi ; done - mv -f navit.xml.new navit.xml - rm -f navit.xml.tmp - -navit_android_xml: navit_shipped.xml -if SUPPORT_ANDROID -# new android xml files for (mdpi,ldpi,hdpi) - cp $(srcdir)/navit_shipped.xml navit_android.xml.new - if [ ! -f navit.dtd ]; then cp -f $(top_srcdir)/navit/navit.dtd .; fi - -# # now apply any other xslt files (this would allow for pedestrian plugin) -# for i in $(foreach xslt, $(subst $(comma), ,$(XSLTS)), $(addsuffix .xslt,$(addprefix xslt/,$(xslt)))); do if [ "$${i%.xslt}" != "$$i" ]; then j=`basename $$i` ; if [ "$$j" != "android.xslt" ] ; then echo "Android: Applying $$i" ; @SAXON@ -snone navit_android.xml.new $(srcdir)/"$$i" >navit_android.xml.new.tmp || exit ; mv navit_android.xml.new.tmp navit_android.xml.new || exit ; fi ; fi ; done -# # for now disable pedestrian plugin (zoff99) - - @SAXON@ -snone navit_android.xml.new $(srcdir)/xslt/android_mdpi.xslt >navit_android_mdpi.xml.tmp - @SAXON@ -snone navit_android.xml.new $(srcdir)/xslt/android_ldpi.xslt >navit_android_ldpi.xml.tmp - @SAXON@ -snone navit_android.xml.new $(srcdir)/xslt/android_hdpi.xslt >navit_android_hdpi.xml.tmp - rm -f navit_android.xml.new - rm -f navit_android.xml.new.tmp - mv -f navit_android_mdpi.xml.tmp navit_android_mdpi.xml - mv -f navit_android_ldpi.xml.tmp navit_android_ldpi.xml - mv -f navit_android_hdpi.xml.tmp navit_android_hdpi.xml - rm -f navit_android_mdpi.xml.tmp - rm -f navit_android_ldpi.xml.tmp - rm -f navit_android_hdpi.xml.tmp -else - echo "no Android support" -endif - -if SUPPORT_ANDROID - lib@LIBNAVIT@_la_SOURCES += android.c - navit_SOURCES = - navit_LDADD = - -v_int = $$(cat $(srcdir)/android/Android_Market_Version_int.txt|grep v_int|cut -d ":" -f 2) -v_name = "0.5.0-"$$(LANG=C svnversion $(top_srcdir) 2> /dev/null|tr -d ":A-Z" 2> /dev/null) - -android/AndroidManifest.xml: android/AndroidManifest.xml.in - mkdir -p $(builddir)/android - sed '0,/<uses-sdk/!d' <$< >$@ - for i in $(subst $(comma), ,@ANDROID_PERMISSIONS@); do echo " <uses-permission android:name=\"android.permission.$$i\" />" >>$@; done - sed '0,/<uses-sdk/d' <$< >>$@ - sed -e "s/@ANDROID_VERSION_INT@/$(v_int)/" <$@ >android/AndroidManifest.xml.tmp - mv -f android/AndroidManifest.xml.tmp $@ - sed -e "s/@ANDROID_VERSION_NAME@/$(v_name)/" <$@ >android/AndroidManifest.xml.tmp - mv -f android/AndroidManifest.xml.tmp $@ - -android/build.xml: android/AndroidManifest.xml android/dummy.txt -# this is needed, otherwise somehow the files cant be deleted - mkdir -p $(builddir)/android/src/ - if [ "$(builddir)" != "$(srcdir)" ]; then chmod -R u+w $(builddir)/android/src/; fi - if [ "$(builddir)" != "$(srcdir)" ]; then rm -Rf $(builddir)/android/src/; fi - if [ "$(builddir)" != "$(srcdir)" ]; then cp -rpf $(srcdir)/android/* $(builddir)/android; fi - touch $(srcdir)/android/dummy.txt - touch $(builddir)/android/dummy.txt - android update project -t @ANDROID_PROJECT@ -p android - -apkg-all: all android/build.xml navit.xml - mkdir -p android/libs/armeabi - cp .libs/*.so android/libs/armeabi/libnavit.so - for i in */*/.libs/*.so ; do sed 's&lib_data_data_org\.navitproject\.navit_lib_&/data/data/org.navitproject.navit/lib/lib&' <$$i >android/libs/armeabi/$$(basename $$i); done - - for i in $(shell cd $(srcdir)/../po && echo ??_*.po.in ??.po.in); do echo Gnerating strings.xml from $$i ; mkdir -p $(builddir)/android/res/values-$$(echo $$i | sed -e s/\\.po\\.in// -e s/_/-r/) ; @SAXON@ $(srcdir)/android/res/values/strings.xml $(srcdir)/android/po2xml.xslt po_file=$(abs_top_srcdir)/po/$$i >$(builddir)/android/res/values-$$(echo $$i | sed -e s/\\.po\\.in// -e s/_/-r/)/strings.xml ; done - - mkdir -p android/res/drawable-ldpi - mkdir -p android/res/drawable-mdpi - mkdir -p android/res/drawable-hdpi - for i in $(shell cd $(srcdir)/xpm && echo *.xpm); do convert $(srcdir)/xpm/$$i android/res/drawable-mdpi/$${i%.xpm}.png; done - for i in $(shell cd $(srcdir)/xpm && echo *.xpm); do convert -resize 75% $(srcdir)/xpm/$$i android/res/drawable-ldpi/$${i%.xpm}.png; done - for i in $(shell cd $(srcdir)/xpm && echo *.xpm); do convert -resize 150% $(srcdir)/xpm/$$i android/res/drawable-hdpi/$${i%.xpm}.png; done - -# for i in $(shell cd $(srcdir)/xpm && echo *.png); do cp $(srcdir)/xpm/$$i android/res/drawable-mdpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done -# for i in $(shell cd $(srcdir)/xpm && echo *.png); do cp $(srcdir)/xpm/$$i android/res/drawable-ldpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done -# for i in $(shell cd $(srcdir)/xpm && echo *.png); do cp $(srcdir)/xpm/$$i android/res/drawable-hdpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done - - for i in $(shell cd $(srcdir)/xpm && echo *.png); do convert $(srcdir)/xpm/$$i android/res/drawable-mdpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done - for i in $(shell cd $(srcdir)/xpm && echo *.png); do convert -resize 75% $(srcdir)/xpm/$$i android/res/drawable-ldpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done - for i in $(shell cd $(srcdir)/xpm && echo *.png); do convert -resize 150% $(srcdir)/xpm/$$i android/res/drawable-hdpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done - -# if [ "$(builddir)" != "$(srcdir)" ]; then for i in $(shell cd $(builddir)/xpm && echo *.png); do cp $(builddir)/xpm/$$i android/res/drawable-mdpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done ; fi -# if [ "$(builddir)" != "$(srcdir)" ]; then for i in $(shell cd $(builddir)/xpm && echo *.png); do cp $(builddir)/xpm/$$i android/res/drawable-ldpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done ; fi -# if [ "$(builddir)" != "$(srcdir)" ]; then for i in $(shell cd $(builddir)/xpm && echo *.png); do cp $(builddir)/xpm/$$i android/res/drawable-hdpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done ; fi - - if [ "$(builddir)" != "$(srcdir)" ]; then for i in $(shell cd $(builddir)/xpm && echo *.png); do convert $(builddir)/xpm/$$i android/res/drawable-mdpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done ; fi - if [ "$(builddir)" != "$(srcdir)" ]; then for i in $(shell cd $(builddir)/xpm && echo *.png); do convert -resize 75% $(builddir)/xpm/$$i android/res/drawable-ldpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done ; fi - if [ "$(builddir)" != "$(srcdir)" ]; then for i in $(shell cd $(builddir)/xpm && echo *.png); do convert -resize 150% $(builddir)/xpm/$$i android/res/drawable-hdpi/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done ; fi - - mkdir -p android/res/raw - for i in $(shell cd ../po && echo *.mo); do cp ../po/$$i android/res/raw/$$( echo $$i | tr "[A-Z]" "[a-z]") ; done -# cp navit.xml android/res/raw - cp navit_android_mdpi.xml android/res/raw/navitmdpi.xml - cp navit_android_ldpi.xml android/res/raw/navitldpi.xml - cp navit_android_hdpi.xml android/res/raw/navithdpi.xml - -apkg: apkg-all - touch $(srcdir)/android/dummy.txt - touch $(builddir)/android/dummy.txt - cd android && ant debug - -apkg-release: apkg-all - touch $(srcdir)/android/dummy.txt - touch $(builddir)/android/dummy.txt - cd android && ant release - jarsigner $$(cat ~/.keystore_args) android/bin/Navit-unsigned.apk mykey -# zipalign -f 4 android/bin/Navit-unsigned.apk android/bin/Navit-unsigned-aligned.apk -else -navit_SOURCES = start.c -navit_LDADD = lib@LIBNAVIT@.la - -endif - -if EVENT_GLIB - lib@LIBNAVIT@_la_SOURCES += event_glib.c -endif - -navit_LDFLAGS = -export-dynamic - -if !PLUGINS - lib@LIBNAVIT@_la_SOURCES += builtin.c - lib@LIBNAVIT@_la_LIBADD += $(MODULES) -endif - - -navit_LDADD += @NAVIT_LIBS@ @WORDEXP_LIBS@ @ZLIB_LIBS@ @CRYPTO_LIBS@ @INTLLIBS@ - - -if SUPPORT_WIN32 - navit_LDADD += resource.rsc -if SUPPORT_WIN32CE - navit_LDADD += -lcommctrl -Lsupport/libc -else - navit_LDADD += -lgdi32 -lcomctl32 -lwinmm -endif - - -resource.rsc: $(top_srcdir)/navit/gui/win32/resources/resource.rc - $(WINDRES) -I $(top_srcdir)/navit/gui/win32/resources $(top_srcdir)/navit/gui/win32/resources/resource.rc resource.rsc -endif - -.PHONY: version.h.tmp - -version.h.tmp: - echo "#include \"config.h\"" >version.h.tmp -if SOURCE_MODE_SVN - echo "#define SVN_VERSION \"$$(LANG=C svnversion $(top_srcdir) 2>/dev/null)\"" >>version.h.tmp -else - echo "#define SVN_VERSION \"@SOURCE_MODE@\"" >>version.h.tmp -endif - echo "#define GIT_VERSION \"$(shell git describe --abbrev=8 --dirty --always --tags)\"" >>version.h.tmp - echo "#define NAVIT_VARIANT \"@NAVIT_VARIANT@\"" >>version.h.tmp - if ! diff version.h.tmp version.h >/dev/null 2>/dev/null; \ - then \ - mv -f version.h.tmp version.h; \ - fi - -version.h: version.h.tmp - -navit_config.h: ../config.h - cp ../config.h navit_config.h.tmp - if ! diff navit_config.h.tmp navit_config.h >/dev/null 2>/dev/null; \ - then \ - mv -f navit_config.h.tmp navit_config.h; \ - fi - - -distclean-local: - rm -f version.h version.h.tmp navit_config.h navit_config.h.tmp builtin.c support-builtin.c navit.xml resurce.rsc - if [ "$(top_builddir)" != "$(top_srcdir)" ]; then rm -f navit.dtd; fi - -builtin.c: $(top_builddir)/config.h - ls $(top_builddir)/navit/*/*/*.la | sed -e "s/\.la/_init(void);/" -e "s/.*lib/extern void module_/" >builtin.c - echo "extern void builtin_init(void);" >>builtin.c - echo "void builtin_init(void) {" >>builtin.c - ls $(top_builddir)/navit/*/*/*.la | grep -v shapefile | sed -e "s/\.la/_init();/" -e "s/.*\\/lib/ module_/" >>builtin.c - echo "}" >>builtin.c -support-builtin.c: $(top_builddir)/config.h - ls $(top_builddir)/navit/support/*/*.la | sed -e "s/\.la/_init(void);/" -e "s/.*lib/extern void module_/" >support-builtin.c - echo "extern void builtin_init(void);" >>support-builtin.c - echo "void builtin_init(void) {" >>support-builtin.c - ls $(top_builddir)/navit/support/*/*.la | sed -e "s/\.la/_init();/" -e "s/.*\\/lib/ module_/" >>support-builtin.c - echo "}" >>support-builtin.c diff --git a/navit/android/AndroidManifest.xml.cmake b/navit/android/AndroidManifest.xml.cmake index b5bd757cb..7aa882bb8 100644 --- a/navit/android/AndroidManifest.xml.cmake +++ b/navit/android/AndroidManifest.xml.cmake @@ -37,5 +37,15 @@ <activity android:name=".NavitDownloadSelectMapActivity"></activity> <activity android:name=".NavitAddressResultListActivity"></activity> <activity android:name=".FileBrowserActivity"></activity> + <activity + android:name="org.acra.dialog.CrashReportDialog" + android:theme="@android:style/Theme.Dialog" + android:launchMode="singleInstance" + android:excludeFromRecents="true" + android:finishOnTaskLaunch="true"/> + <service + android:name="org.acra.sender.SenderService" + android:exported="false" + android:process=":acra" /> </application> </manifest> diff --git a/navit/android/AndroidManifest.xml.in b/navit/android/AndroidManifest.xml.in deleted file mode 100644 index 085276623..000000000 --- a/navit/android/AndroidManifest.xml.in +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.navitproject.navit" - android:sharedUserId="org.navitproject.navit" - android:versionCode="@ANDROID_VERSION_INT@" - android:versionName="@ANDROID_VERSION_NAME@" - android:installLocation="auto"> - <application android:label="@string/app_name" - android:icon="@drawable/icon" - android:name=".NavitAppConfig" - android:theme="@style/NavitTheme"> - <activity android:name="Navit" - android:label="@string/app_name" - android:configChanges="locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale|screenSize"> - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - <intent-filter> - <action android:name="android.intent.action.VIEW" /> - <category android:name="android.intent.category.DEFAULT" /> - <data android:scheme="google.navigation" /> - </intent-filter> - </activity> - <activity android:name=".NavitAddressSearchActivity"></activity> - <activity android:name=".NavitDownloadSelectMapActivity"></activity> - <activity android:name=".NavitAddressResultListActivity"></activity> - <activity android:name=".FileBrowserActivity"></activity> - </application> - <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19"/> - <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:resizeable="true" android:anyDensity="true"/> - <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> - <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> - <uses-permission android:name="android.permission.WAKE_LOCK" /> - <uses-permission android:name="android.permission.INTERNET" /> - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> -</manifest> diff --git a/navit/android/libs/acra-4.3.0b2.jar b/navit/android/libs/acra-4.3.0b2.jar Binary files differdeleted file mode 100644 index 259a69581..000000000 --- a/navit/android/libs/acra-4.3.0b2.jar +++ /dev/null diff --git a/navit/android/libs/acra-4.8.5.jar b/navit/android/libs/acra-4.8.5.jar Binary files differnew file mode 100644 index 000000000..f0044ece8 --- /dev/null +++ b/navit/android/libs/acra-4.8.5.jar diff --git a/navit/android/libs/android-support-v4.jar b/navit/android/libs/android-support-v4.jar Binary files differnew file mode 100644 index 000000000..aa0b1a5cc --- /dev/null +++ b/navit/android/libs/android-support-v4.jar diff --git a/navit/android/res/values/strings.xml b/navit/android/res/values/strings.xml index 0aadefa7e..3a730e807 100644 --- a/navit/android/res/values/strings.xml +++ b/navit/android/res/values/strings.xml @@ -76,5 +76,9 @@ <!-- TTS --> <string name="TTS_title_data_missing">System text to speech engine data is missing</string> <string name="TTS_qery_install_data">Navit can use any text to speech engine installed on your device. The currently selected engine reports it is unable to speak in your language. Should we ask the system to show voice download dialog?</string> + + <!-- Permissions dialog--> + <string name="permissions_not_granted">Navit needs permission to access GPS and read the map.\nIf you change your mind please restart Navit and grant the permissions</string> + <string name="permissions_info_box_title">One or more ungranted permissions</string> </resources> diff --git a/navit/android/src/org/navitproject/navit/Navit.java b/navit/android/src/org/navitproject/navit/Navit.java index c8578df07..1b5d8fb50 100644 --- a/navit/android/src/org/navitproject/navit/Navit.java +++ b/navit/android/src/org/navitproject/navit/Navit.java @@ -55,6 +55,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Point;
+import android.Manifest;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
@@ -62,6 +63,8 @@ import android.os.Bundle; import android.os.Environment;
import android.os.Message;
import android.os.PowerManager;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
@@ -115,6 +118,7 @@ public class Navit extends Activity static final String FIRST_STARTUP_FILE = NAVIT_DATA_SHARE_DIR + "/has_run_once.txt";
public static final String NAVIT_PREFS = "NavitPrefs";
Boolean isFullscreen = false;
+ private static final int MY_PERMISSIONS_REQUEST_ALL = 101;
/**
@@ -303,8 +307,8 @@ public class Navit extends Activity PendingIntent appIntent = PendingIntent.getActivity(getApplicationContext(), 0, getIntent(), 0);
// FIXME : needs a fix for sdk 23
// NavitNotification.setLatestEventInfo(getApplicationContext(), "Navit", getString(R.string.notification_event_default), appIntent); // Set the text in the notification
- NavitNotification.flags|=Notification.FLAG_ONGOING_EVENT; // Ensure that the notification appears in Ongoing
- nm.notify(R.string.app_name, NavitNotification); // Set the notification
+// NavitNotification.flags|=Notification.FLAG_ONGOING_EVENT; // Ensure that the notification appears in Ongoing
+// nm.notify(R.string.app_name, NavitNotification); // Set the notification
// Status and navigation bar sizes
// These are platform defaults and do not change with rotation, but we have to figure out which ones apply
@@ -322,7 +326,12 @@ public class Navit extends Activity navigation_bar_width = (nwid > 0) ? resources.getDimensionPixelSize(nwid) : 0;
Log.d(TAG, String.format("status_bar_height=%d, action_bar_default_height=%d, navigation_bar_height=%d, navigation_bar_height_landscape=%d, navigation_bar_width=%d",
status_bar_height, action_bar_default_height, navigation_bar_height, navigation_bar_height_landscape, navigation_bar_width));
-
+ if ((ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)||
+ (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
+ Log.d (TAG,"ask for permission(s)");
+ ActivityCompat.requestPermissions(this,
+ new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION},MY_PERMISSIONS_REQUEST_ALL);
+ }
// get the local language -------------
Locale locale = java.util.Locale.getDefault();
String lang = locale.getLanguage();
@@ -481,7 +490,40 @@ public class Navit extends Activity show_soft_keyboard_now_showing = true;
}
}
-
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
+ switch (requestCode) {
+ case MY_PERMISSIONS_REQUEST_ALL: {
+ if (grantResults.length > 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED
+ && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
+ // ok, we got permissions
+ } else {
+ AlertDialog.Builder infobox = new AlertDialog.Builder(this);
+ infobox.setTitle(getString(R.string.permissions_info_box_title)); // TRANS
+ infobox.setCancelable(false);
+ final TextView message = new TextView(this);
+ message.setFadingEdgeLength(20);
+ message.setVerticalFadingEdgeEnabled(true);
+ RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
+ message.setLayoutParams(rlp);
+ final SpannableString s = new SpannableString(getString(R.string.permissions_not_granted)); // TRANS
+ message.setText(s);
+ message.setMovementMethod(LinkMovementMethod.getInstance());
+ infobox.setView(message);
+ // TRANS
+ infobox.setPositiveButton(getString(R.string.initial_info_box_OK), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface arg0, int arg1) {
+ exit();
+ }
+ });
+ infobox.show();
+ }
+ return;
+ }
+ }
+ }
+
private void parseNavigationURI(String schemeSpecificPart) {
String naviData[]= schemeSpecificPart.split("&");
Pattern p = Pattern.compile("(.*)=(.*)");
@@ -864,8 +906,8 @@ public class Navit extends Activity public void exit()
{
- NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- nm.cancel(R.string.app_name);
+// NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+// nm.cancel(R.string.app_name);
NavitVehicle.removeListener();
NavitDestroy();
}
diff --git a/navit/android/src/org/navitproject/navit/NavitAppConfig.java b/navit/android/src/org/navitproject/navit/NavitAppConfig.java index 32f003f18..13ccc9bb4 100755 --- a/navit/android/src/org/navitproject/navit/NavitAppConfig.java +++ b/navit/android/src/org/navitproject/navit/NavitAppConfig.java @@ -8,10 +8,14 @@ import org.navitproject.navit.NavitAddressSearchActivity.NavitAddress; import android.app.Application;
import android.content.SharedPreferences;
import android.util.Log;
-
+import org.acra.*;
import org.acra.annotation.*;
-@ReportsCrashes(formKey = "dGlrNVRIOVVKYjB0UGVoLUZPanlzWFE6MQ")
+//@ReportsCrashes(formKey = "dGlrNVRIOVVKYjB0UGVoLUZPanlzWFE6MQ")
+@ReportsCrashes(mailTo = "android@navit-project.org",
+ mode = ReportingInteractionMode.TOAST,
+ resToastText = R.string.app_name)
+
public class NavitAppConfig extends Application {
private static final int MAX_LAST_ADDRESSES = 10;
diff --git a/navit/attr_def.h b/navit/attr_def.h index 264365c2e..04848d987 100644 --- a/navit/attr_def.h +++ b/navit/attr_def.h @@ -281,7 +281,7 @@ ATTR_UNUSED ATTR_UNUSED ATTR_UNUSED ATTR(window_title) -ATTR_UNUSED +ATTR(qt5_platform) ATTR_UNUSED /* poi */ ATTR_UNUSED diff --git a/navit/autoload/Makefile.am b/navit/autoload/Makefile.am deleted file mode 100644 index 4ca10b6fa..000000000 --- a/navit/autoload/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -SUBDIRS= -if USE_OSSO - SUBDIRS += osso -endif - -DIST_SUBDIRS= osso diff --git a/navit/autoload/osso/Makefile.am b/navit/autoload/osso/Makefile.am deleted file mode 100644 index bb965beb3..000000000 --- a/navit/autoload/osso/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @LIBOSSO_CFLAGS@ -I$(top_srcdir) -I$(top_srcdir)/navit -DMODULE=plugin_osso -moduleautoload_LTLIBRARIES = libplugin_osso.la -libplugin_osso_la_LDFLAGS=-module -avoid-version @NAVIT_MODULE_LDFLAGS@ @LIBOSSO_LIBS@ #-Wl,--no-undefined - -libplugin_osso_la_SOURCES = osso.c diff --git a/navit/binding/Makefile.am b/navit/binding/Makefile.am deleted file mode 100644 index 6b782b48a..000000000 --- a/navit/binding/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -SUBDIRS= -if BINDING_PYTHON - SUBDIRS+=python -endif -if BINDING_DBUS - SUBDIRS+=dbus -endif - -if BINDING_WIN32 - SUBDIRS+=win32 -endif - - -DIST_SUBDIRS=python dbus win32 - diff --git a/navit/binding/dbus/Makefile.am b/navit/binding/dbus/Makefile.am deleted file mode 100644 index 1e6334291..000000000 --- a/navit/binding/dbus/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @DBUS_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=binding_dbus -modulebinding_LTLIBRARIES = libbinding_dbus.la -libbinding_dbus_la_SOURCES = binding_dbus.c -libbinding_dbus_la_LIBADD = @DBUS_LIBS@ -libbinding_dbus_la_LDFLAGS = -module -avoid-version - -servicedir = @DBUS_SERVICE_DIR@ -service_in_files = org.navit_project.navit.service.in -service_DATA = $(service_in_files:.service.in=.service) - -$(service_DATA): $(service_in_files) Makefile - sed -e "s|\@bindir\@|$(bindir)|" $< > $@ - -EXTRA_DIST = $(service_in_files) - -distclean-local: - rm -f $(service_DATA) diff --git a/navit/binding/python/Makefile.am b/navit/binding/python/Makefile.am deleted file mode 100644 index a71632317..000000000 --- a/navit/binding/python/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @PYTHON_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=binding_python -modulebinding_LTLIBRARIES = libbinding_python.la -libbinding_python_la_SOURCES = binding_python.c config.c navit.c pcoord.c route.c navigation.c attr.c common.h -libbinding_python_la_LIBADD = @PYTHON_LIBS@ -libbinding_python_la_LDFLAGS = -module -avoid-version diff --git a/navit/binding/win32/Makefile.am b/navit/binding/win32/Makefile.am deleted file mode 100644 index f25c28d3e..000000000 --- a/navit/binding/win32/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = -I$(top_srcdir)/navit -I$(top_srcdir)/navit/binding/win32 @NAVIT_CFLAGS@ -DMODULE=binding_win32 -if PLUGINS -modulebinding_LTLIBRARIES = libbinding_win32.la -else -noinst_LTLIBRARIES = libbinding_win32.la -endif -libbinding_win32_la_SOURCES = binding_win32.c binding_win32.h -libbinding_win32_la_LIBADD = -libbinding_win32_la_LDFLAGS = -module -avoid-version -bin_PROGRAMS=tell_navit -tell_navit_LDADD = @NAVIT_LIBS@ -if SUPPORT_WIN32CE - tell_navit_LDADD += -L$(top_builddir)/navit/support/libc -lsupport_libc -endif diff --git a/navit/event.c b/navit/event.c index 667e5bdc3..5aee40689 100644 --- a/navit/event.c +++ b/navit/event.c @@ -77,6 +77,15 @@ event_remove_watch(struct event_watch *ev) event_methods.remove_watch(ev); } +/** + * Add an event timeout + * + * @param the timeout itself in msec + * @param multi 0 means that the timeout will fire only once, 1 means that it will repeat + * @param the callback to call when the timeout expires + * + * @returns the result of the event_methods.add_timeout() call + */ struct event_timeout * event_add_timeout(int timeout, int multi, struct callback *cb) { diff --git a/navit/fib-1.1/Makefile.am b/navit/fib-1.1/Makefile.am deleted file mode 100644 index 7c7b2a130..000000000 --- a/navit/fib-1.1/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -noinst_LTLIBRARIES = libfib.la -libfib_la_SOURCES = fib.c fib.h fibpriv.h -EXTRA_DIST=README configure.in fh_extractmin.3 fh_makeheap.3 fh_makekeyheap.3 fibtest.c fibtest2.c tt.c use.c diff --git a/navit/font/Makefile.am b/navit/font/Makefile.am deleted file mode 100644 index 620280e6f..000000000 --- a/navit/font/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -SUBDIRS= -if FONT_FREETYPE - SUBDIRS+=freetype -endif diff --git a/navit/font/freetype/Makefile.am b/navit/font/freetype/Makefile.am deleted file mode 100644 index 4c081e391..000000000 --- a/navit/font/freetype/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @FREETYPE2_CFLAGS@ @FONTCONFIG_CFLAGS@ @FRIBIDI2_CFLAGS@ @FRIBIDI_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=font_freetype -if PLUGINS - modulefont_LTLIBRARIES = libfont_freetype.la -else - noinst_LTLIBRARIES = libfont_freetype.la -endif -libfont_freetype_la_SOURCES = font_freetype.c font_freetype.h -libfont_freetype_la_LDFLAGS = @FREETYPE2_LIBS@ @FONTCONFIG_LIBS@ @FRIBIDI2_LIBS@ @FRIBIDI_LIBS@ -module -avoid-version diff --git a/navit/fonts/Makefile.am b/navit/fonts/Makefile.am deleted file mode 100644 index d8ea2633b..000000000 --- a/navit/fonts/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -include $(top_srcdir)/Makefile.inc - -fonts_DATA = -fonts_DATA += LiberationMono-Bold.ttf -fonts_DATA += LiberationMono-BoldItalic.ttf -fonts_DATA += LiberationMono-Italic.ttf -fonts_DATA += LiberationMono-Regular.ttf -fonts_DATA += LiberationSans-Bold.ttf -fonts_DATA += LiberationSans-BoldItalic.ttf -fonts_DATA += LiberationSans-Italic.ttf -fonts_DATA += LiberationSans-Regular.ttf -fonts_DATA += LiberationSerif-Bold.ttf -fonts_DATA += LiberationSerif-BoldItalic.ttf -fonts_DATA += LiberationSerif-Italic.ttf -fonts_DATA += LiberationSerif-Regular.ttf diff --git a/navit/graphics/Makefile.am b/navit/graphics/Makefile.am deleted file mode 100644 index c878b9a35..000000000 --- a/navit/graphics/Makefile.am +++ /dev/null @@ -1,25 +0,0 @@ -SUBDIRS= -if GRAPHICS_ANDROID - SUBDIRS+=android -endif -if GRAPHICS_GTK_DRAWING_AREA - SUBDIRS+=gtk_drawing_area -endif -if GRAPHICS_NULL - SUBDIRS+=null -endif -if GRAPHICS_OPENGL - SUBDIRS+=opengl -endif -if GRAPHICS_QT_QPAINTER - SUBDIRS+=qt_qpainter -endif -if GRAPHICS_SDL - SUBDIRS+=sdl -endif -if GRAPHICS_WIN32 - SUBDIRS+=win32 -endif -if GRAPHICS_GD - SUBDIRS+=gd -endif diff --git a/navit/graphics/android/Makefile.am b/navit/graphics/android/Makefile.am deleted file mode 100644 index a625edd1c..000000000 --- a/navit/graphics/android/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=graphics_android -if PLUGINS -modulegraphics_LTLIBRARIES = libgraphics_android.la -else -noinst_LTLIBRARIES = libgraphics_android.la -endif -libgraphics_android_la_SOURCES = graphics_android.c -libgraphics_android_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/graphics/egl/CMakeLists.txt b/navit/graphics/egl/CMakeLists.txt new file mode 100644 index 000000000..1943f2bc0 --- /dev/null +++ b/navit/graphics/egl/CMakeLists.txt @@ -0,0 +1,2 @@ +module_add_library(graphics_egl graphics_egl.c) + diff --git a/navit/graphics/egl/graphics_egl.c b/navit/graphics/egl/graphics_egl.c new file mode 100644 index 000000000..4d7780ff4 --- /dev/null +++ b/navit/graphics/egl/graphics_egl.c @@ -0,0 +1,1458 @@ +/** + * Navit, a modular navigation system. + * Copyright (C) 2005-2010 Navit Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include <glib.h> +#include <unistd.h> +#include <math.h> +#include <stdio.h> + +#include <time.h> + +#include "item.h" +#include "attr.h" +#include "config.h" +#include "point.h" +#include "graphics.h" +#include "color.h" +#include "plugin.h" +#include "event.h" +#include "debug.h" +#include "callback.h" +#include "keys.h" +#include "window.h" +#include "navit/font/freetype/font_freetype.h" + +#include <SDL2/SDL_image.h> +#include <GLES2/gl2.h> +#include <EGL/egl.h> + +/* + * This is work in progress * + * Remainng issues : + * - SDL mouse cursor sometimes raise an SDL assertion + * - Dashed lines to implement + * - Full Keyboard handling +*/ + +#define SCREEN_WIDTH 800 +#define SCREEN_HEIGHT 600 + +#define glF(x) x +#define glD(x) x +#define GL_F GL_FLOAT +typedef GLfloat GLf; + +struct graphics_gc_priv { + struct graphics_priv *gr; + float fr, fg, fb, fa; + float br, bg, bb, ba; + int linewidth; + unsigned char *dash_list; + int dash_count; + int dash_mask; +} graphics_gc_priv; + +struct graphics_priv { + int fill_poly; + int show_overlays; + int button_timeout; + struct point p; + int width; + int height; + int library_init; + int visible; + int overlay_enabled; + int overlay_autodisabled; + int wraparound; + GLuint framebuffer_name; + GLuint overlay_texture; + struct graphics_priv *parent; + struct graphics_priv *overlays; + struct graphics_priv *next; + struct graphics_gc_priv *background_gc; + enum draw_mode_num mode; + GLuint program; + GLint mvp_location, position_location, color_location, texture_position_location, use_texture_location, texture_location; + struct callback_list *cbl; + struct font_freetype_methods freetype_methods; + struct navit *nav; + int timeout; + int delay; + struct window window; + int dirty; //display needs to be redrawn (draw on root graphics or overlay is done) + int force_redraw; //display needs to be redrawn (draw on root graphics or overlay is done) + time_t last_refresh_time; //last display refresh time + struct graphics_opengl_platform *platform; + struct graphics_opengl_platform_methods *platform_methods; +}; + +struct graphics_image_priv { + SDL_Surface *img; +} graphics_image_priv; + + +struct graphics_opengl_platform { + SDL_Window* eglwindow; + SDL_GLContext eglcontext; + EGLDisplay egldisplay; + EGLConfig config[1]; +}; + +struct contour +{ + struct point *p; + unsigned int count; +}; + +static GHashTable *hImageData; +static int USERWANTSTOQUIT = 0; +static struct graphics_priv *graphics_priv_root; +static struct graphics_priv *graphics_opengl_new_helper(struct + graphics_methods + *meth); + +/* + * GLES 2 Compatible vertex and fragment shaders + * Taken from opengl driver + */ +const char vertex_src [] = +" \ + attribute vec2 position; \ + attribute vec2 texture_position; \ + uniform mat4 mvp; \ + varying vec2 v_texture_position; \ + \ + void main() \ + { \ + v_texture_position=texture_position; \ + gl_Position = mvp*vec4(position, 0.0, 1.0); \ + } \ +"; + +const char fragment_src [] = +" \ + uniform lowp vec4 avcolor; \ + uniform sampler2D texture; \ + uniform bool use_texture; \ + varying vec2 v_texture_position; \ + void main() \ + { \ + if (use_texture) { \ + gl_FragColor = texture2D(texture, v_texture_position); \ + } else { \ + gl_FragColor = avcolor; \ + } \ + } \ +"; + +/* +* C conversion of Efficient Polygon Triangulation +* Found at http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml +* Adapted and debugged for this use +*/ +float area(const struct contour* contour) +{ + int p, q; + int n = contour->count - 1; + float A = 0.f; + + for (p=n-1, q=0; q < n; p=q++) + { + A += contour->p[p].x * contour->p[q].y - contour->p[q].x * contour->p[p].y; + } + return A * .5f; +} + +int +inside_triangle(float Ax, float Ay, + float Bx, float By, + float Cx, float Cy, + float Px, float Py) +{ + float ax, ay, bx, by, cx, cy, apx, apy, bpx, bpy, cpx, cpy; + float cCROSSap, bCROSScp, aCROSSbp; + + ax = Cx - Bx; ay = Cy - By; + bx = Ax - Cx; by = Ay - Cy; + cx = Bx - Ax; cy = By - Ay; + apx= Px - Ax; apy= Py - Ay; + bpx= Px - Bx; bpy= Py - By; + cpx= Px - Cx; cpy= Py - Cy; + + aCROSSbp = ax*bpy - ay*bpx; + cCROSSap = cx*apy - cy*apx; + bCROSScp = bx*cpy - by*cpx; + + return ((aCROSSbp >= 0.0f) && (bCROSScp >= 0.0f) && (cCROSSap >= 0.0f)); +} + +int +snip(const struct point* pnt,int u,int v,int w,int n,int *V) +{ + int p; + float Ax, Ay, Bx, By, Cx, Cy, Px, Py; + + Ax = pnt[V[u]].x; + Ay = pnt[V[u]].y; + + Bx = pnt[V[v]].x; + By = pnt[V[v]].y; + + Cx = pnt[V[w]].x; + Cy = pnt[V[w]].y; + + if ( (((Bx-Ax)*(Cy-Ay)) - ((By-Ay)*(Cx-Ax))) < 0.f ) + return 0; + + for (p=0;p<n;p++) + { + if( (p == u) || (p == v) || (p == w) ) + continue; + Px = pnt[V[p]].x; + Py = pnt[V[p]].y; + if (inside_triangle(Ax,Ay,Bx,By,Cx,Cy,Px,Py)) + return 0; + } + + return 1; +} + +int +process_triangles(const struct contour* contour, struct contour* result) +{ + int v; + int contour_size = contour->count - 1; + int polygon_temp_size = contour_size * 80; + int final_count = 0; + result->p = malloc(sizeof(struct point) * polygon_temp_size); + + int n = contour_size; + if ( n < 3 ) return 0; + + int *V = alloca(sizeof(int)*n); + + if ( 0.0f < area(contour) ) + for (v=0; v<n; v++) V[v] = v; + else + for(v=0; v<n; v++) V[v] = (n-1)-v; + + int nv = n; + + int count = 2*nv; + + for(v=nv-1; nv>2; ) + { + /* if we loop, it is probably a non-simple polygon */ + if (0 >= (count--)) + { + //** Triangulate: ERROR - probable bad polygon! + break; + } + + /* three consecutive vertices in current polygon, <u,v,w> */ + int u = v ; if (nv <= u) u = 0; /* previous */ + v = u+1; if (nv <= v) v = 0; /* new v */ + int w = v+1; if (nv <= w) w = 0; /* next */ + + if ( snip(contour->p,u,v,w,nv,V) ) + { + int a,b,c,s,t; + + /* true names of the vertices */ + a = V[u]; b = V[v]; c = V[w]; + + /* output Triangle */ + result->p[final_count++] = contour->p[a]; + result->p[final_count++] = contour->p[b]; + result->p[final_count++] = contour->p[c]; + + if (final_count >= polygon_temp_size){ + free(result->p); + return 0; + } + + /* remove v from remaining polygon */ + for(s=v,t=v+1;t<nv;s++,t++) + V[s] = V[t]; + nv--; + + /* resest error detection counter */ + count = 2*nv; + } + } + + result->count = final_count; + + return 1; +} + +// ** Efficient Polygon Triangulation ** + +/* + * Destroys SDL/EGL context + */ +static void +sdl_egl_destroy(struct graphics_opengl_platform *egl) +{ + if (egl->eglwindow){ + SDL_GL_DeleteContext(egl->eglcontext); + SDL_DestroyWindow(egl->eglwindow); + } + g_free(egl); + SDL_Quit(); +} + +/* + * Swap EGL buffer + */ +static void +sdl_egl_swap_buffers(struct graphics_opengl_platform *egl) +{ + SDL_GL_SwapWindow(egl->eglwindow); +} + +/* + * Main graphic destroy + */ +static void +graphics_destroy(struct graphics_priv *gr) +{ + /*FIXME graphics_destroy is never called */ + gr->freetype_methods.destroy(); + g_free(gr); + gr = NULL; + sdl_egl_destroy(gr->platform); + SDL_Quit(); +} + +static void +gc_destroy(struct graphics_gc_priv *gc) +{ + g_free(gc); + gc = NULL; +} + +static void +gc_set_linewidth(struct graphics_gc_priv *gc, int w) +{ + gc->linewidth = w; +} + +static void +gc_set_dashes(struct graphics_gc_priv *gc, int width, int offset, + unsigned char *dash_list, int n) +{ + int i; + const int cOpenglMaskBits = 16; + gc->dash_count = n; + if (1 == n) { + gc->dash_mask = 0; + for (i = 0; i < cOpenglMaskBits; ++i) { + gc->dash_mask <<= 1; + gc->dash_mask |= (i / n) % 2; + } + } else if (1 < n) { + unsigned char *curr = dash_list; + int cnt = 0; //dot counter + int dcnt = 0; //dash element counter + int sum_dash = 0; + gc->dash_mask = 0; + + for (i = 0; i < n; ++i) { + sum_dash += dash_list[i]; + } + + //scale dashlist elements to max size + if (sum_dash > cOpenglMaskBits) { + int num_error[2] = { 0, 0 }; //count elements rounded to 0 for odd(drawn) and even(masked) for compensation + double factor = (1.0 * cOpenglMaskBits) / sum_dash; + for (i = 0; i < n; ++i) { //calculate dashlist max and largest common denomiator for scaling + dash_list[i] *= factor; + if (dash_list[i] == 0) { + ++dash_list[i]; + ++num_error[i % 2]; + } else if (0 < num_error[i % 2] + && 2 < dash_list[i]) { + ++dash_list[i]; + --num_error[i % 2]; + } + } + } + //calculate mask + for (i = 0; i < cOpenglMaskBits; ++i) { + gc->dash_mask <<= 1; + gc->dash_mask |= 1 - dcnt % 2; + ++cnt; + if (cnt == *curr) { + cnt = 0; + ++curr; + ++dcnt; + if (dcnt == n) { + curr = dash_list; + } + } + } + } +} + + +static void +gc_set_foreground(struct graphics_gc_priv *gc, struct color *c) +{ + gc->fr = c->r / 65535.0; + gc->fg = c->g / 65535.0; + gc->fb = c->b / 65535.0; + gc->fa = c->a / 65535.0; +} + +static void +gc_set_background(struct graphics_gc_priv *gc, struct color *c) +{ + gc->br = c->r / 65535.0; + gc->bg = c->g / 65535.0; + gc->bb = c->b / 65535.0; + gc->ba = c->a / 65535.0; +} + +static struct graphics_gc_methods gc_methods = { + gc_destroy, + gc_set_linewidth, + gc_set_dashes, + gc_set_foreground, + gc_set_background +}; + +static struct graphics_gc_priv * +gc_new(struct graphics_priv *gr, struct graphics_gc_methods *meth) +{ + struct graphics_gc_priv *gc = g_new0(struct graphics_gc_priv, 1); + + *meth = gc_methods; + gc->gr = gr; + gc->linewidth = 1; + return gc; +} + +static struct graphics_image_priv image_error; + +static struct graphics_image_priv * +image_new(struct graphics_priv *gr, struct graphics_image_methods *meth, char *name, int *w, int *h, + struct point *hot, int rotation) +{ + struct graphics_image_priv *gi; + + /* FIXME: meth is not used yet.. so gi leaks. at least xpm is small */ + + struct graphics_image_priv *curr_elem = + g_hash_table_lookup(hImageData, name); + + if (curr_elem == &image_error) { + //found but couldn't be loaded + return NULL; + } else if (curr_elem) { + //found and OK -> use hastable entry + *w = curr_elem->img->w; + *h = curr_elem->img->h; + hot->x = *w / 2; + hot->y = *h / 2; + return curr_elem; + } + + if (strlen(name) < 4) { + g_hash_table_insert(hImageData, g_strdup(name), + &image_error); + return NULL; + } + + gi = g_new0(struct graphics_image_priv, 1); + gi->img = IMG_Load(name); + if(gi->img) + { + *w=gi->img->w; + *h=gi->img->h; + hot->x=*w/2; + hot->y=*h/2; + } + else + { + /* TODO: debug "colour parse errors" on xpm */ + dbg(lvl_error,"image_new on '%s' failed: %s\n", name, IMG_GetError()); + g_free(gi); + gi = NULL; + g_hash_table_insert(hImageData, + g_strdup(name), + &image_error); + return gi; + } + + g_hash_table_insert(hImageData, g_strdup(name), gi); + return gi; +} + +static void +image_free(struct graphics_priv *gr, struct graphics_image_priv * gi) +{ +// SDL_FreeSurface(gi->img); +// g_free(gi); +} + +static void +set_color(struct graphics_priv *gr, struct graphics_gc_priv *gc) +{ + GLfloat col[4]; + col[0]=gc->fr; + col[1]=gc->fg; + col[2]=gc->fb; + col[3]=gc->fa; + glUniform4fv(gr->color_location, 1, col); +} + +static void +draw_array(struct graphics_priv *gr, struct point *p, int count, GLenum mode) +{ + int i; + GLf *x;//[count*2]; + x = alloca(sizeof(GLf)*count*2); + for (i = 0 ; i < count ; i++) { + x[i*2]=glF(p[i].x); + x[i*2+1]=glF(p[i].y); + } + + glVertexAttribPointer (gr->position_location, 2, GL_FLOAT, 0, 0, x ); + glDrawArrays(mode, 0, count); +} + +static void +draw_rectangle_do(struct graphics_priv *gr, struct point *p, int w, int h) +{ + struct point pa[4]; + pa[0]=pa[1]=pa[2]=pa[3]=*p; + pa[0].x+=w; + pa[1].x+=w; + pa[1].y+=h; + pa[3].y+=h; + draw_array(gr, pa, 4, GL_TRIANGLE_STRIP); +} + + +static void +draw_image_es(struct graphics_priv *gr, struct point *p, int w, int h, unsigned char *data) +{ + GLf x[8]; + GLuint texture; + memset(x, 0, sizeof(x)); + + glGenTextures(1, &texture); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); + + x[0]+=glF(1); + x[2]+=glF(1); + x[3]+=glF(1); + x[7]+=glF(1); + glUniform1i(gr->use_texture_location, 1); + glEnableVertexAttribArray(gr->texture_position_location); + glVertexAttribPointer (gr->texture_position_location, 2, GL_FLOAT, 0, 0, x ); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + draw_rectangle_do(gr, p, w, h); + + glUniform1i(gr->use_texture_location, 0); + glDisableVertexAttribArray(gr->texture_position_location); + + glDisable(GL_BLEND); + glDeleteTextures(1, &texture); +} + +inline void +get_overlay_pos(struct graphics_priv *gr, struct point *point_out) +{ + if (gr->parent == NULL) { + point_out->x = 0; + point_out->y = 0; + return; + } + point_out->x = gr->p.x; + if (point_out->x < 0) { + point_out->x += gr->parent->width; + } + + point_out->y = gr->p.y; + if (point_out->y < 0) { + point_out->y += gr->parent->height; + } +} + +inline void +draw_overlay(struct graphics_priv *gr) +{ + struct point p_eff; + GLf x[8]; + + get_overlay_pos(gr, &p_eff); + + memset(x, 0, 8*sizeof(GLf)); + x[0]+=glF(1); + x[1]+=glF(1); + x[2]+=glF(1); + x[5]+=glF(1); + + glUniform1i(gr->use_texture_location, 1); + glEnableVertexAttribArray(gr->texture_position_location); + glVertexAttribPointer (gr->texture_position_location, 2, GL_FLOAT, 0, 0, x); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBindTexture(GL_TEXTURE_2D, gr->overlay_texture); + + draw_rectangle_do(graphics_priv_root, &p_eff, gr->width, gr->height); + + glUniform1i(gr->use_texture_location, 0); + glDisableVertexAttribArray(gr->texture_position_location); + + glDisable(GL_BLEND); +} + +static void +draw_lines(struct graphics_priv *gr, struct graphics_gc_priv *gc, + struct point *p, int count) +{ + if ((gr->parent && !gr->parent->overlay_enabled) + || (gr->parent && gr->parent->overlay_enabled + && !gr->overlay_enabled)) { + return; + } + + glLineWidth(gc->linewidth); + + set_color(gr, gc); + graphics_priv_root->dirty = 1; + + draw_array(gr, p, count, GL_LINE_STRIP); +} + + +static void +draw_polygon(struct graphics_priv *gr, struct graphics_gc_priv *gc, + struct point *p, int count) +{ + int ok; + if ((gr->parent && !gr->parent->overlay_enabled) + || (gr->parent && gr->parent->overlay_enabled + && !gr->overlay_enabled)) { + return; + } + set_color(gr, gc); + graphics_priv_root->dirty = 1; + struct contour contour, result; + contour.count = count; + contour.p = p; + ok = process_triangles(&contour, &result); + if (ok && gr->fill_poly){ + draw_array(gr, result.p, result.count, GL_TRIANGLES); + free(result.p); + } else { + draw_array(gr, p, count, GL_LINE_STRIP); + } +} + +static void +draw_rectangle(struct graphics_priv *gr, struct graphics_gc_priv *gc, + struct point *p, int w, int h) +{ + if ((gr->parent && !gr->parent->overlay_enabled) + || (gr->parent && gr->parent->overlay_enabled + && !gr->overlay_enabled)) { + return; + } + set_color(gr, gc); + draw_rectangle_do(gr, p, w, h); + graphics_priv_root->dirty = 1; +} + +static void +display_text_draw(struct font_freetype_text *text, + struct graphics_priv *gr, struct graphics_gc_priv *fg, + struct graphics_gc_priv *bg, int color, struct point *p) +{ + int i, x, y, stride; + struct font_freetype_glyph *g, **gp; + unsigned char *shadow, *glyph; + struct color transparent = { 0x0000, 0x0000, 0x0000, 0x0000 }; + struct color black = + { fg->fr * 65535, fg->fg * 65535, fg->fb * 65535, + fg->fa * 65535 }; + struct color white = { 0xffff, 0xffff, 0xffff, 0xffff }; + + if (bg) { + if (COLOR_IS_WHITE(black) && COLOR_IS_BLACK(white)) { + black.r = 65535; + black.g = 65535; + black.b = 65535; + black.a = 65535; + + white.r = 0; + white.g = 0; + white.b = 0; + white.a = 65535; + } else if (COLOR_IS_BLACK(black) && COLOR_IS_WHITE(white)) { + white.r = 65535; + white.g = 65535; + white.b = 65535; + white.a = 65535; + + black.r = 0; + black.g = 0; + black.b = 0; + black.a = 65535; + } else { + white.r = bg->fr; + white.g = bg->fg; + white.b = bg->fb; + white.a = bg->fa; + } + } else { + white.r = 0; + white.g = 0; + white.b = 0; + white.a = 0; + } + + gp = text->glyph; + i = text->glyph_count; + x = p->x << 6; + y = p->y << 6; + while (i-- > 0) { + g = *gp++; + if (g->w && g->h && bg) { + stride = (g->w + 2) * 4; + if (color) { + shadow = g_malloc(stride * (g->h + 2)); + gr->freetype_methods.get_shadow(g, shadow, + stride, + &white, + &transparent); + + struct point p; + p.x=((x + g->x) >> 6)-1; + p.y=((y + g->y) >> 6)-1; + draw_image_es(gr, &p, g->w+2, g->h+2, shadow); + + g_free(shadow); + } + } + x += g->dx; + y += g->dy; + } + + x = p->x << 6; + y = p->y << 6; + gp = text->glyph; + i = text->glyph_count; + while (i-- > 0) { + g = *gp++; + if (g->w && g->h) { + if (color) { + stride = g->w; + if (bg) { + glyph = + g_malloc(stride * g->h * 4); + gr->freetype_methods.get_glyph(g, + glyph, + stride + * 4, + &black, + &white, + &transparent); + struct point p; + p.x=(x + g->x) >> 6; + p.y=(y + g->y) >> 6; + draw_image_es(gr, &p, g->w, g->h, glyph); + + g_free(glyph); + } + stride *= 4; + glyph = g_malloc(stride * g->h); + gr->freetype_methods.get_glyph(g, glyph, + stride, + &black, + &white, + &transparent); + struct point p; + p.x=(x + g->x) >> 6; + p.y=(y + g->y) >> 6; + draw_image_es(gr, &p, g->w, g->h, glyph); + + g_free(glyph); + } + } + x += g->dx; + y += g->dy; + } +} + +static void +draw_text(struct graphics_priv *gr, struct graphics_gc_priv *fg, + struct graphics_gc_priv *bg, struct graphics_font_priv *font, + char *text, struct point *p, int dx, int dy) +{ + if ((gr->parent && !gr->parent->overlay_enabled) + || (gr->parent && gr->parent->overlay_enabled + && !gr->overlay_enabled)) { + return; + } + + struct font_freetype_text *t; + int color = 1; + + if (!font) { + dbg(lvl_error, "no font, returning\n"); + return; + } + graphics_priv_root->dirty = 1; + + t = gr->freetype_methods.text_new(text, + (struct font_freetype_font *) + font, dx, dy); + + struct point p_eff; + p_eff.x = p->x; + p_eff.y = p->y; + + display_text_draw(t, gr, fg, bg, color, &p_eff); + gr->freetype_methods.text_destroy(t); +} + + +static void +draw_image(struct graphics_priv *gr, struct graphics_gc_priv *fg, + struct point *p, struct graphics_image_priv *img) +{ + draw_image_es(gr, p, img->img->w, img->img->h, img->img->pixels); +} + +static void +draw_drag(struct graphics_priv *gr, struct point *p) +{ + if (p) { + gr->p.x = p->x; + gr->p.y = p->y; + } +} + +static void +background_gc(struct graphics_priv *gr, struct graphics_gc_priv *gc) +{ + gr->background_gc = gc; +} + +/* + * Draws map in background + */ +static void +draw_background(struct graphics_priv *gr) +{ + struct point p_eff; + GLf x[8]; + + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glViewport(0, 0, gr->width, gr->height); + //get_overlay_pos(gr, &p_eff); + p_eff.x = gr->p.x; + p_eff.y = gr->p.y; + + memset(x, 0, 8*sizeof(GLf)); + x[0]+=glF(1); + x[1]+=glF(1); + x[2]+=glF(1); + x[5]+=glF(1); + + glUniform1i(gr->use_texture_location, 1); + glEnableVertexAttribArray(gr->texture_position_location); + glVertexAttribPointer (gr->texture_position_location, 2, GL_FLOAT, 0, 0, x); + + glDisable(GL_BLEND); + glBindTexture(GL_TEXTURE_2D, gr->overlay_texture); + + draw_rectangle_do(gr, &p_eff, gr->width, gr->height); + + glUniform1i(gr->use_texture_location, 0); + glDisableVertexAttribArray(gr->texture_position_location); +} + +/* + Drawing method : + Map and overlays are rendered in an offscreen buffer (See render to texture) + and are recomposed altogether at draw_mode_end request for root +*/ +static void +draw_mode(struct graphics_priv *gr, enum draw_mode_num mode) +{ + GLfloat matrix[16]; + struct graphics_priv *overlay = NULL; + int i; + + if (mode == draw_mode_begin){ + // Should not be necessary... + // SDL_GL_MakeCurrent(gr->platform->eglwindow, gr->platform->eglcontext); + + if (gr->parent == NULL){ + // Full redraw, reset drag position + gr->p.x = 0; + gr->p.y = 0; + } + + // Need to setup appropriate projection matrix + for (i = 0; i < 16 ; i++){ + matrix[i] = 0.0; + } + + matrix[0]=2.0 / gr->width; + matrix[5]=-2.0 / gr->height; + matrix[10]=1; + matrix[12]=-1; + matrix[13]=1; + matrix[15]=1; + glUniformMatrix4fv(gr->mvp_location, 1, GL_FALSE, matrix); + + glBindFramebuffer(GL_FRAMEBUFFER, gr->framebuffer_name); + glViewport(0,0,gr->width,gr->height); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + + if (mode == draw_mode_end && gr->parent == NULL) { + overlay = gr->overlays; + draw_background(gr); + while(overlay){ + if (gr->overlay_enabled) + draw_overlay(overlay); + overlay = overlay->next; + } + sdl_egl_swap_buffers(gr->platform); + } + + gr->mode = mode; +} + +static int +graphics_opengl_fullscreen(struct window *w, int on) +{ + return 1; +} + +static void +graphics_opengl_disable_suspend(struct window *w) +{ + // No op +} + + +static GLuint +load_shader(const char *shader_source, GLenum type) +{ + GLuint shader = glCreateShader(type); + + glShaderSource(shader, 1, &shader_source, NULL); + glCompileShader(shader); + + return shader; +} + +static void * +get_data(struct graphics_priv *this, const char *type) +{ + GLuint vertexShader; + GLuint fragmentShader; + struct window* win; + int i; + + if (!strcmp(type, "gtk_widget")) { + fprintf(stderr, + "Currently GTK gui is not yet supported with EGL graphics driver\n"); + return NULL; + } + + if(strcmp(type, "window") == 0) { + SDL_GL_MakeCurrent(this->platform->eglwindow, this->platform->eglcontext); + + glClearColor ( 0 , 0 , 0 , 1); + glClear ( GL_COLOR_BUFFER_BIT ); + + callback_list_call_attr_2(graphics_priv_root->cbl, attr_resize, + GINT_TO_POINTER(this->width), GINT_TO_POINTER(this->height)); + + this->program = glCreateProgram(); + vertexShader = load_shader(vertex_src, GL_VERTEX_SHADER); + fragmentShader = load_shader(fragment_src, GL_FRAGMENT_SHADER); + + glAttachShader(this->program, vertexShader); + glAttachShader(this->program, fragmentShader); + glLinkProgram(this->program); + glUseProgram(this->program); + + this->mvp_location = glGetUniformLocation(this->program, "mvp"); + this->position_location = glGetAttribLocation(this->program, "position"); + glEnableVertexAttribArray(this->position_location); + this->texture_position_location = glGetAttribLocation(this->program, "texture_position"); + this->color_location = glGetUniformLocation(this->program, "avcolor"); + this->texture_location = glGetUniformLocation(this->program, "texture"); + this->use_texture_location = glGetUniformLocation(this->program, "use_texture"); + + glUniform1i(this->use_texture_location, 0); + glUniform1i(this->texture_location, 0); + + win=g_new(struct window, 1); + win->priv=this; + win->disable_suspend=NULL; + win->fullscreen = graphics_opengl_fullscreen; + win->disable_suspend = graphics_opengl_disable_suspend; + return win; + } + + return NULL; + +} + +static void +overlay_disable(struct graphics_priv *gr, int disable) +{ + gr->overlay_enabled = !disable; + gr->force_redraw = 1; + draw_mode(gr, draw_mode_end); +} + +// Need more testing +static void +overlay_resize(struct graphics_priv *gr, struct point *p, int w, int h, + int wraparound) +{ + int changed = 0; + int w2, h2; + + if (w == 0) { + w2 = 1; + } else { + w2 = w; + } + + if (h == 0) { + h2 = 1; + } else { + h2 = h; + } + + gr->p = *p; + if (gr->width != w2) { + gr->width = w2; + changed = 1; + } + + if (gr->height != h2) { + gr->height = h2; + changed = 1; + } + + gr->wraparound = wraparound; + + if (changed) { + if ((w == 0) || (h == 0)) { + gr->overlay_autodisabled = 1; + } else { + gr->overlay_autodisabled = 0; + // Reset overlay texture + glDeleteTextures(1, &gr->overlay_texture); + glGenTextures(1, &gr->overlay_texture); + glBindTexture(GL_TEXTURE_2D, gr->overlay_texture); + glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, gr->width, gr->height, 0,GL_RGBA, GL_UNSIGNED_BYTE, 0); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gr->overlay_texture, 0); + } + + callback_list_call_attr_2(gr->cbl, attr_resize, + GINT_TO_POINTER(gr->width), + GINT_TO_POINTER(gr->height)); + } +} + + +static struct graphics_priv *overlay_new(struct graphics_priv *gr, + struct graphics_methods *meth, + struct point *p, int w, int h, + int wraparound); + +static struct graphics_methods graphics_methods = { + graphics_destroy, + draw_mode, + draw_lines, + draw_polygon, + draw_rectangle, + NULL, + draw_text, + draw_image, + NULL, + draw_drag, + NULL, + gc_new, + background_gc, + overlay_new, + image_new, + get_data, + image_free, + NULL, + overlay_disable, + overlay_resize, + NULL, /* set_attr, */ + NULL, /* show_native_keyboard */ + NULL, /* hide_native_keyboard */ +}; + +static struct graphics_priv * +graphics_opengl_new_helper(struct graphics_methods *meth) +{ + struct font_priv *(*font_freetype_new) (void *meth); + font_freetype_new = plugin_get_category_font("freetype"); + + if (!font_freetype_new) { + return NULL; + } + + struct graphics_priv *this = g_new0(struct graphics_priv, 1); + + font_freetype_new(&this->freetype_methods); + *meth = graphics_methods; + + meth->font_new = + (struct graphics_font_priv * + (*)(struct graphics_priv *, struct graphics_font_methods *, + char *, int, int)) this->freetype_methods.font_new; + meth->get_text_bbox = + (void (*) (struct graphics_priv *, struct graphics_font_priv *, + char *, int, int, struct point*, int)) this->freetype_methods.get_text_bbox; + return this; +} + +static void +create_framebuffer_texture(struct graphics_priv *gr) +{ + GLenum status; + // Prepare a new framebuffer object + glGenFramebuffers(1, &gr->framebuffer_name); + glBindFramebuffer(GL_FRAMEBUFFER, gr->framebuffer_name); + + glGenTextures(1, &gr->overlay_texture); + glBindTexture(GL_TEXTURE_2D, gr->overlay_texture); + glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, gr->width, gr->height, 0,GL_RGBA, GL_UNSIGNED_BYTE, 0); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gr->overlay_texture, 0); + + status = glCheckFramebufferStatus(GL_FRAMEBUFFER); + if (status != GL_FRAMEBUFFER_COMPLETE) { + printf("Error creating texture framebuffer for overlay, exiting.\n"); + SDL_Quit(); + exit(1); + } +} + +static struct graphics_priv * +overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, + struct point *p, int w, int h, int wraparound) +{ + struct graphics_priv *this = graphics_opengl_new_helper(meth); + + this->p.x = p->x; + this->p.y = p->y; + + this->width = w; + this->height = h; + this->parent = gr; + this->overlays = NULL; + this->fill_poly = 1; + + // Copy shader locations parameters + this->mvp_location = graphics_priv_root->mvp_location; + this->position_location = graphics_priv_root->position_location; + this->texture_position_location = graphics_priv_root->texture_position_location; + this->color_location = graphics_priv_root->color_location; + this->texture_location = graphics_priv_root->texture_location; + this->use_texture_location = graphics_priv_root->use_texture_location; + + if ((w == 0) || (h == 0)) { + this->overlay_autodisabled = 1; + } else { + this->overlay_autodisabled = 0; + } + this->overlay_enabled = 1; + + this->next = gr->overlays; + gr->overlays = this; + + create_framebuffer_texture(this); + + return this; +} + + +static gboolean graphics_sdl_idle(void *data) +{ + struct graphics_priv *gr = (struct graphics_priv *)data; + struct point p; + SDL_Event ev; + int ret; + char key_mod = 0; + char keybuf[8]; + char keycode; + + // Process SDL events (KEYS + MOUSE) + while(1) + { + ret = SDL_PollEvent(&ev); + + if(!ret) + break; + + switch(ev.type) + { + case SDL_MOUSEMOTION: + { + p.x = ev.motion.x; + p.y = ev.motion.y; + //gr->force_redraw = 1; + callback_list_call_attr_1(gr->cbl, attr_motion, (void *)&p); + break; + } + + case SDL_KEYDOWN: + { + memset(keybuf, 0, sizeof(keybuf)); + switch(ev.key.keysym.sym) + { + case SDLK_F1: + graphics_priv_root->fill_poly = !graphics_priv_root->fill_poly; + break; + case SDLK_F2: + graphics_priv_root->show_overlays = !graphics_priv_root->show_overlays; + break; + case SDLK_LEFT: + { + keybuf[0] = NAVIT_KEY_LEFT; + break; + } + case SDLK_RIGHT: + { + keybuf[0] = NAVIT_KEY_RIGHT; + break; + } + case SDLK_BACKSPACE: + { + keybuf[0] = NAVIT_KEY_BACKSPACE; + break; + } + case SDLK_RETURN: + { + keybuf[0] = NAVIT_KEY_RETURN; + break; + } + case SDLK_DOWN: + { + keybuf[0] = NAVIT_KEY_DOWN; + break; + } + case SDLK_PAGEUP: + { + keybuf[0] = NAVIT_KEY_ZOOM_OUT; + break; + } + case SDLK_UP: + { + keybuf[0] = NAVIT_KEY_UP; + break; + } + case SDLK_PAGEDOWN: + { + keybuf[0] = NAVIT_KEY_ZOOM_IN; + break; + } + case SDLK_ESCAPE: + { + USERWANTSTOQUIT = 1; + break; + } + default: + { + /* return unicode chars when they can be converted to ascii */ + // Need more work... + keycode = ev.key.keysym.sym; + keybuf[0] = keycode <= 127 ? keycode : 0; + break; + } + } + if (keybuf[0]) { + callback_list_call_attr_1(gr->cbl, attr_keypress, (void *)keybuf); + } + break; + } + case SDL_KEYUP: + { + break; + } + case SDL_MOUSEBUTTONDOWN: + { + p.x = ev.button.x; + p.y = ev.button.y; + graphics_priv_root->force_redraw = 1; + callback_list_call_attr_3(gr->cbl, attr_button, GINT_TO_POINTER(1), GINT_TO_POINTER((int)ev.button.button), (void *)&p); + break; + } + + case SDL_MOUSEBUTTONUP: + { + p.x = ev.button.x; + p.y = ev.button.y; + callback_list_call_attr_3(gr->cbl, attr_button, GINT_TO_POINTER(0), GINT_TO_POINTER((int)ev.button.button), (void *)&p); + break; + } + + case SDL_QUIT: + { + break; + } + default: + { + break; + } + } + } + + if (USERWANTSTOQUIT){ + SDL_Quit(); + exit(0); + } + + return TRUE; +} + + +static struct graphics_priv * +graphics_opengl_new(struct navit *nav, struct graphics_methods *meth, + struct attr **attrs, struct callback_list *cbl) +{ + struct attr *attr; + if (!event_request_system("glib", "graphics_opengl_new")) + return NULL; + + hImageData = g_hash_table_new(g_str_hash, g_str_equal); + struct graphics_priv *this = graphics_opengl_new_helper(meth); + graphics_priv_root = this; + + this->nav = nav; + this->parent = NULL; + this->overlay_enabled = 1; + this->framebuffer_name = 0; + this->overlays = NULL; + this->fill_poly = 1; + this->show_overlays = 1; + + this->width = SCREEN_WIDTH; + if ((attr = attr_search(attrs, NULL, attr_w))) + this->width = attr->u.num; + this->height = SCREEN_HEIGHT; + if ((attr = attr_search(attrs, NULL, attr_h))) + this->height = attr->u.num; + this->timeout = 100; + if ((attr = attr_search(attrs, NULL, attr_timeout))) + this->timeout = attr->u.num; + this->delay = 0; + if ((attr = attr_search(attrs, NULL, attr_delay))) + this->delay = attr->u.num; + this->cbl = cbl; + + this->framebuffer_name = 0; + + graphics_priv_root->cbl = cbl; + graphics_priv_root->width = this->width; + graphics_priv_root->height = this->height; + + struct graphics_opengl_platform *ret=g_new0(struct graphics_opengl_platform,1); + + // SDL Init + int sdl_status = SDL_Init(SDL_INIT_VIDEO|SDL_INIT_EVENTS); + + if (sdl_status != 0){ + fprintf(stderr, "\nUnable to initialize SDL: %i %s\n", sdl_status, SDL_GetError() ); + exit(1); + } + + Uint32 flags = SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN; + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0); + // I think it's not necessary to sync vblank, update is quite slow + SDL_GL_SetSwapInterval(0); + + ret->eglwindow = SDL_CreateWindow( + "Navit EGL", // window title + SDL_WINDOWPOS_UNDEFINED, // initial x position + SDL_WINDOWPOS_UNDEFINED, // initial y position + this->width, // width, in pixels + this->height, // height, in pixels + flags + ); + + if (ret->eglwindow == NULL) { + fprintf(stderr, "\nUnable to initialize SDL window: %s\n", SDL_GetError() ); + goto error; + } + + ret->eglcontext = SDL_GL_CreateContext(ret->eglwindow); + if (ret->eglcontext == NULL){ + printf("EGL context creation failed\n"); + goto error; + } + + this->platform = ret; + create_framebuffer_texture(this); + g_timeout_add(G_PRIORITY_DEFAULT+10, graphics_sdl_idle, this); + glDisable(GL_DEPTH_TEST); + return this; +error: + SDL_Quit(); + return NULL; +} + +void +plugin_init(void) +{ + plugin_register_category_graphics("egl", graphics_opengl_new); +} + diff --git a/navit/graphics/gd/Makefile.am b/navit/graphics/gd/Makefile.am deleted file mode 100644 index 67fc270ac..000000000 --- a/navit/graphics/gd/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @GD_CFLAGS@ -I$(top_srcdir) -I$(top_srcdir)/navit -DMODULE=graphics_gd -libgraphics_gd_la_LDFLAGS = @GD_LIBS@ -module -avoid-version -if PLUGINS -modulegraphics_LTLIBRARIES = libgraphics_gd.la -else -noinst_LTLIBRARIES = libgraphics_gd.la -endif -libgraphics_gd_la_SOURCES = graphics_gd.c diff --git a/navit/graphics/gtk_drawing_area/Makefile.am b/navit/graphics/gtk_drawing_area/Makefile.am deleted file mode 100644 index 79da228d7..000000000 --- a/navit/graphics/gtk_drawing_area/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @GTK2_CFLAGS@ -I$(top_srcdir) -I$(top_srcdir)/navit -DMODULE=graphics_gtk_drawing_area -modulegraphics_LTLIBRARIES = libgraphics_gtk_drawing_area.la -libgraphics_gtk_drawing_area_la_SOURCES = graphics_gtk_drawing_area.c -libgraphics_gtk_drawing_area_la_LDFLAGS = @GTK2_LIBS@ @IMLIB2_LIBS@ -module -avoid-version diff --git a/navit/graphics/null/Makefile.am b/navit/graphics/null/Makefile.am deleted file mode 100644 index a4631ff4a..000000000 --- a/navit/graphics/null/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=graphics_null -if PLUGINS -modulegraphics_LTLIBRARIES = libgraphics_null.la -else -noinst_LTLIBRARIES = libgraphics_null.la -endif -libgraphics_null_la_SOURCES = graphics_null.c -libgraphics_null_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/graphics/opengl/Makefile.am b/navit/graphics/opengl/Makefile.am deleted file mode 100644 index 02d356dd7..000000000 --- a/navit/graphics/opengl/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @OPENGL_CFLAGS@ @GLC_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=graphics_opengl -modulegraphics_LTLIBRARIES = libgraphics_opengl.la -libgraphics_opengl_la_SOURCES = graphics_opengl.c -libgraphics_opengl_la_LIBADD = @OPENGL_LIBS@ @GLC_LIBS@ -libgraphics_opengl_la_LDFLAGS = -module -avoid-version diff --git a/navit/graphics/qt5/CMakeLists.txt b/navit/graphics/qt5/CMakeLists.txt new file mode 100644 index 000000000..9c2574e8b --- /dev/null +++ b/navit/graphics/qt5/CMakeLists.txt @@ -0,0 +1,9 @@ +# Find includes in corresponding build directories +set(CMAKE_INCLUDE_CURRENT_DIR ON) +# Instruct CMake to run moc automatically when needed. +set(CMAKE_AUTOMOC ON) + +# Find the QtWidgets library +find_package(Qt5Widgets) + +module_add_library(graphics_qt5 graphics_qt5.cpp event_qt5.cpp QNavitWidget.cpp) diff --git a/navit/graphics/qt5/QNavitWidget.cpp b/navit/graphics/qt5/QNavitWidget.cpp new file mode 100644 index 000000000..fe3a618e2 --- /dev/null +++ b/navit/graphics/qt5/QNavitWidget.cpp @@ -0,0 +1,158 @@ +/** + * Navit, a modular navigation system. + * Copyright (C) 2005-2008 Navit Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include <glib.h> +#include "config.h" +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#include "item.h" +#include "point.h" +#include "graphics.h" +#include "color.h" +#include "plugin.h" +#include "event.h" +#include "debug.h" +#include "window.h" +#include "callback.h" +#if defined(WINDOWS) || defined(WIN32) || defined (HAVE_API_WIN32_CE) +#include <windows.h> +#endif +#include "graphics_qt5.h" +#include "QNavitWidget.h" +#include "QNavitWidget.moc" + +QNavitWidget :: QNavitWidget(struct graphics_priv *my_graphics_priv, + QWidget * parent, + Qt::WindowFlags flags): QWidget(parent, flags) +{ + graphics_priv = my_graphics_priv; +} + +bool QNavitWidget::event(QEvent *event) +{ + if (event->type() == QEvent::Gesture) + dbg(lvl_debug, "Gesture event caught"); + //return gestureEvent(static_cast<QGestureEvent*>(event)); + return QWidget::event(event); +} + +void QNavitWidget :: paintEvent(QPaintEvent * event) +{ +// dbg(lvl_debug,"enter\n"); + QPainter painter(this); + /* color background if any */ + if (graphics_priv->background_graphics_gc_priv != NULL) + { + painter.setPen(*graphics_priv->background_graphics_gc_priv->pen); + painter.fillRect(0, 0, graphics_priv->pixmap->width(), + graphics_priv->pixmap->height(), + *graphics_priv->background_graphics_gc_priv->brush); + } + painter.drawPixmap(0,0,*graphics_priv->pixmap); + +} + +void QNavitWidget::resizeEvent(QResizeEvent * event) +{ + QPainter * painter = NULL; + if(graphics_priv->pixmap != NULL) + { + delete graphics_priv->pixmap; + graphics_priv->pixmap = NULL; + } + + graphics_priv->pixmap=new QPixmap(size()); + graphics_priv->pixmap->fill(); + painter = new QPainter(graphics_priv->pixmap); + QBrush brush; + painter->fillRect(0, 0, width(), height(), brush); + if(painter != NULL) + delete painter; + dbg(lvl_debug,"size %dx%d\n", width(), height()); + dbg(lvl_debug,"pixmap %p %dx%d\n", graphics_priv->pixmap, graphics_priv->pixmap->width(), graphics_priv->pixmap->height()); + /* if the root window got resized, tell navit about it */ + if(graphics_priv->root) + resize_callback(width(),height()); +} + +void QNavitWidget::mouseEvent(int pressed, QMouseEvent *event) +{ + struct point p; +// dbg(lvl_debug,"enter\n"); + p.x=event->x(); + p.y=event->y(); + switch (event->button()) { + case Qt::LeftButton: + callback_list_call_attr_3(callbacks, attr_button, GINT_TO_POINTER(pressed), GINT_TO_POINTER(1), GINT_TO_POINTER(&p)); + break; + case Qt::MidButton: + callback_list_call_attr_3(callbacks, attr_button, GINT_TO_POINTER(pressed), GINT_TO_POINTER(2), GINT_TO_POINTER(&p)); + break; + case Qt::RightButton: + callback_list_call_attr_3(callbacks, attr_button, GINT_TO_POINTER(pressed), GINT_TO_POINTER(3), GINT_TO_POINTER(&p)); + break; + default: + break; + } +} + +void QNavitWidget::mousePressEvent(QMouseEvent *event) +{ +// dbg(lvl_debug,"enter\n"); + mouseEvent(1, event); +} + +void QNavitWidget::mouseReleaseEvent(QMouseEvent *event) +{ +// dbg(lvl_debug,"enter\n"); + mouseEvent(0, event); +} + +void QNavitWidget::mouseMoveEvent(QMouseEvent *event) +{ + struct point p; +// dbg(lvl_debug,"enter\n"); + p.x=event->x(); + p.y=event->y(); + callback_list_call_attr_1(callbacks, attr_motion, (void *)&p); +} + +void QNavitWidget::wheelEvent(QWheelEvent *event) +{ + struct point p; + int button; + dbg(lvl_debug,"enter"); + p.x=event->x(); // xy-coordinates of the mouse pointer + p.y=event->y(); + + if (event->delta() > 0) // wheel movement away from the person + button=4; + else if (event->delta() < 0) // wheel movement towards the person + button=5; + else + button=-1; + + if (button != -1) { + callback_list_call_attr_3(callbacks, attr_button, GINT_TO_POINTER(1), GINT_TO_POINTER(button), GINT_TO_POINTER(&p)); + callback_list_call_attr_3(callbacks, attr_button, GINT_TO_POINTER(0), GINT_TO_POINTER(button), GINT_TO_POINTER(&p)); + } + + event->accept(); +} diff --git a/navit/graphics/qt5/QNavitWidget.h b/navit/graphics/qt5/QNavitWidget.h new file mode 100644 index 000000000..3b048ccf7 --- /dev/null +++ b/navit/graphics/qt5/QNavitWidget.h @@ -0,0 +1,33 @@ +#ifndef __QNavitWidget_h +#define __QNavitWidget_h +class QNavitWidget; +#include "graphics_qt5.h" +#include <QPixmap> +#include <QWidget> +#include <QMouseEvent> +#include <QWheelEvent> +#include <QEvent> + +class QNavitWidget : public QWidget +{ + Q_OBJECT +public: + QNavitWidget(struct graphics_priv *my_graphics_priv, + QWidget * parent, + Qt::WindowFlags flags); +protected: + virtual bool event(QEvent *event); + virtual void paintEvent(QPaintEvent * event); + virtual void resizeEvent(QResizeEvent * event); + virtual void mouseEvent(int pressed, QMouseEvent *event); + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void wheelEvent(QWheelEvent * event); + + +private: + struct graphics_priv *graphics_priv; +}; +#endif + diff --git a/navit/graphics/qt5/event_qt5.cpp b/navit/graphics/qt5/event_qt5.cpp new file mode 100644 index 000000000..9cea3d921 --- /dev/null +++ b/navit/graphics/qt5/event_qt5.cpp @@ -0,0 +1,185 @@ +/** + * Navit, a modular navigation system. + * Copyright (C) 2005-2008 Navit Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include <glib.h> +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +#include "navit/point.h" +#include "navit/item.h" +#include "navit/graphics.h" +#include "navit/color.h" +#include "navit/debug.h" +#include "navit/plugin.h" +#include "navit/callback.h" +#include "navit/event.h" +#include "navit/window.h" +#include "navit/keys.h" +#include "navit/navit.h" +#if defined(WINDOWS) || defined(WIN32) || defined (HAVE_API_WIN32_CE) +#include <windows.h> +#endif +#include <QSocketNotifier> +#include "graphics_qt5.h" +#include "event_qt5.h" +#include "event_qt5.moc" + +struct event_watch { + QSocketNotifier *sn; + struct callback *cb; + int fd; +}; + +static void event_qt5_remove_timeout(struct event_timeout *to); + +qt5_navit_timer :: qt5_navit_timer (QObject * parent) : QObject(parent) +{ + timer_type=g_hash_table_new(NULL, NULL); + timer_callback=g_hash_table_new(NULL, NULL); + watches=g_hash_table_new(NULL,NULL); + dbg(lvl_debug, "qt5_navit_timer object created\n"); +} + +void qt5_navit_timer :: timerEvent (QTimerEvent * event) +{ + int id=event->timerId(); + void* multi = NULL; +// dbg(lvl_debug, "TimerEvent (%d)\n", id); + struct callback *cb=(struct callback *)g_hash_table_lookup(timer_callback, (void *)(long)id); + if (cb) + callback_call_0(cb); + /* remove timer if it was oneshot timer */ + if (g_hash_table_lookup_extended(timer_type, (void *)(long)id, NULL, &multi)) + { + /* it's still in the list */ + if(((int)(long)multi) == 0) + event_qt5_remove_timeout((struct event_timeout *)(long)id); + } +// dbg(lvl_debug, "TimerEvent (%d) leave\n", id); +} + +qt5_navit_timer * qt5_timer = NULL; + +static void +event_qt5_main_loop_run(void) +{ + + dbg(lvl_debug,"enter\n"); + if(navit_app != NULL) + navit_app->exec(); + +} + +static void event_qt5_main_loop_quit(void) +{ + dbg(lvl_debug,"enter\n"); + exit(0); +} + +static struct event_watch * +event_qt5_add_watch(int fd, enum event_watch_cond cond, struct callback *cb) +{ + dbg(lvl_debug,"enter fd=%d\n",(int)(long)fd); + struct event_watch *ret=g_new0(struct event_watch, 1); + ret->fd=fd; + ret->cb=cb; + g_hash_table_insert(qt5_timer->watches, GINT_TO_POINTER(fd), ret); + ret->sn=new QSocketNotifier(fd, QSocketNotifier::Read, qt5_timer); + QObject::connect(ret->sn, SIGNAL(activated(int)), qt5_timer, SLOT(watchEvent(int))); + return ret; +} + +static void +event_qt5_remove_watch(struct event_watch *ev) +{ + dbg(lvl_debug,"enter\n"); + g_hash_table_remove(qt5_timer->watches, GINT_TO_POINTER(ev->fd)); + delete(ev->sn); + g_free(ev); +} + + +static struct event_timeout * +event_qt5_add_timeout(int timeout, int multi, struct callback *cb) +{ + int id; + dbg(lvl_debug,"add timeout %d, mul %d, %p ==",timeout, multi, cb); + id=qt5_timer->startTimer(timeout); + dbg(lvl_debug,"%d\n", id); + g_hash_table_insert(qt5_timer->timer_callback, (void *)(long)id, cb); + g_hash_table_insert(qt5_timer->timer_type, (void *)(long)id, (void *)(long)!!multi); + return (struct event_timeout *)(long)id; +} + +static void +event_qt5_remove_timeout(struct event_timeout *to) +{ + dbg(lvl_debug,"remove timeout (%d)\n",(int)(long)to); + qt5_timer->killTimer((int)(long)to); + g_hash_table_remove(qt5_timer->timer_callback, to); + g_hash_table_remove(qt5_timer->timer_type, to); +} + + +static struct event_idle * +event_qt5_add_idle(int priority, struct callback *cb) +{ + dbg(lvl_debug,"add idle event\n"); + return (struct event_idle *)event_qt5_add_timeout(0, 1, cb); +} + +static void +event_qt5_remove_idle(struct event_idle *ev) +{ + dbg(lvl_debug,"Remove idle timeout\n"); + event_qt5_remove_timeout((struct event_timeout *) ev); +} + +static void +event_qt5_call_callback(struct callback_list *cb) +{ + dbg(lvl_debug,"enter\n"); +} + +static struct event_methods event_qt5_methods = { + event_qt5_main_loop_run, + event_qt5_main_loop_quit, + event_qt5_add_watch, + event_qt5_remove_watch, + event_qt5_add_timeout, + event_qt5_remove_timeout, + event_qt5_add_idle, + event_qt5_remove_idle, + event_qt5_call_callback, +}; + +static struct event_priv * +event_qt5_new(struct event_methods *meth) +{ + *meth=event_qt5_methods; + qt5_timer = new qt5_navit_timer(NULL); + return NULL; +} + + +void +qt5_event_init(void) +{ + plugin_register_category_event("qt5", event_qt5_new); +} diff --git a/navit/graphics/qt5/event_qt5.h b/navit/graphics/qt5/event_qt5.h new file mode 100644 index 000000000..f999d3a46 --- /dev/null +++ b/navit/graphics/qt5/event_qt5.h @@ -0,0 +1,18 @@ +#include <glib.h> +#include <QObject> + +class qt5_navit_timer : public QObject +{ + Q_OBJECT +public: + qt5_navit_timer(QObject * parent = 0); + GHashTable *timer_type; + GHashTable *timer_callback; + GHashTable *watches; +protected: + void timerEvent(QTimerEvent * event); +}; + + +void +qt5_event_init(void); diff --git a/navit/graphics/qt5/graphics_qt5.cpp b/navit/graphics/qt5/graphics_qt5.cpp new file mode 100644 index 000000000..81fec32c2 --- /dev/null +++ b/navit/graphics/qt5/graphics_qt5.cpp @@ -0,0 +1,837 @@ +/** + * Navit, a modular navigation system. + * Copyright (C) 2005-2008 Navit Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include <glib.h> +#include "config.h" +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#include "item.h" +#include "point.h" +#include "graphics.h" +#include "color.h" +#include "plugin.h" +#include "event.h" +#include "debug.h" +#include "window.h" +#include "callback.h" +#if defined(WINDOWS) || defined(WIN32) || defined (HAVE_API_WIN32_CE) +#include <windows.h> +#endif +#include "graphics_qt5.h" +#include "event_qt5.h" +#include "QNavitWidget.h" +#include <QApplication> +#include <QDesktopWidget> +#include <QPixmap> +#include <QPainter> +#include <QFont> +#include <QSvgRenderer> +#include <QPixmapCache> +#include <QDBusConnection> +#include <QDBusInterface> + +struct callback_list* callbacks; +QApplication * navit_app = NULL; + +struct graphics_font_priv { + QFont * font; +}; + +struct graphics_image_priv { + QPixmap * pixmap; +}; + +static void +graphics_destroy(struct graphics_priv *gr) +{ +// dbg(lvl_debug,"enter\n"); +#ifdef QT_QPAINTER_USE_FREETYPE + gr->freetype_methods.destroy(); +#endif + /* destroy painter */ + if(gr->painter != NULL) + delete(gr->painter); + /* destroy pixmap */ + if(gr->pixmap != NULL) + delete(gr->pixmap); + /* destroy widget */ + delete(gr->widget); + /* unregister from parent, if any */ + if(gr->parent != NULL) + { + g_hash_table_remove(gr->parent->overlays, gr); + } +#ifdef SAILFISH_OS + if(gr->display_on_ev != NULL) + { + event_remove_timeout(gr->display_on_ev); + } + if(gr->display_on_cb != NULL) + { + g_free(gr->display_on_cb); + } +#endif + /* destroy overlays hash */ + g_hash_table_destroy(gr->overlays); + /* destroy global application if destroying the last */ + if(gr->root) + { + if(navit_app != NULL) + { + delete (navit_app); + } + navit_app = NULL; + /* destroy argv if any */ + while(gr->argc > 0) + { + gr->argc --; + if(gr->argv[gr->argc] != NULL) + g_free(gr->argv[gr->argc]); + } + } + /* destroy self */ + g_free(gr); +} + +static void font_destroy(struct graphics_font_priv *font) +{ +// dbg(lvl_debug,"enter\n"); + if(font->font != NULL) + delete(font->font); + g_free(font); + +} + +static struct graphics_font_methods font_methods = { + font_destroy +}; + +static struct graphics_font_priv *font_new(struct graphics_priv *gr, struct graphics_font_methods *meth, char *font, int size, int flags) +{ + struct graphics_font_priv *font_priv; +// dbg(lvl_debug,"enter (font %s, %d)\n", font, size); + font_priv = g_new0(struct graphics_font_priv, 1); + if(font != NULL) + font_priv->font=new QFont(font,size/16); + else + font_priv->font=new QFont("Arial",size/16); + font_priv->font->setStyleStrategy(QFont::NoAntialias); + *meth=font_methods; + return font_priv; +} + +static void +gc_destroy(struct graphics_gc_priv *gc) +{ +// dbg(lvl_debug,"enter gc=%p\n", gc); + delete(gc->pen); + delete(gc->brush); + g_free(gc); +} + +static void +gc_set_linewidth(struct graphics_gc_priv *gc, int w) +{ +// dbg(lvl_debug,"enter gc=%p, %d\n", gc, w); + gc->pen->setWidth(w); +} + +static void +gc_set_dashes(struct graphics_gc_priv *gc, int w, int offset, unsigned char *dash_list, int n) +{ + if(n <= 0) + { + dbg(lvl_error, "Refuse to set dashes without dash pattern"); + } + /* use Qt dash feature */ + QVector<qreal> dashes; + gc->pen->setWidth(w); + gc->pen->setDashOffset(offset); + for(int a = 0; a < n; a ++) + { + dashes << dash_list[a]; + } + /* Qt requires the pattern to have even element count. Add the last + * element twice if n doesn't divide by two + */ + if((n % 2) != 0) + { + dashes << dash_list[n-1]; + } + gc->pen->setDashPattern(dashes); +} + +static void +gc_set_foreground(struct graphics_gc_priv *gc, struct color *c) +{ + QColor col(c->r >> 8, c->g >> 8, c->b >> 8, c->a >> 8 ); +// dbg(lvl_debug,"context %p: color %02x%02x%02x\n",gc, c->r >> 8, c->g >> 8, c->b >> 8); + gc->pen->setColor(col); + gc->brush->setColor(col); + //gc->c=*c; +} + +static void +gc_set_background(struct graphics_gc_priv *gc, struct color *c) +{ + QColor col(c->r >> 8, c->g >> 8, c->b >> 8, c->a >> 8 ); +// dbg(lvl_debug,"context %p: color %02x%02x%02x\n",gc, c->r >> 8, c->g >> 8, c->b >> 8); + //gc->pen->setColor(col); + //gc->brush->setColor(col); +} + +static struct graphics_gc_methods gc_methods = { + gc_destroy, + gc_set_linewidth, + gc_set_dashes, + gc_set_foreground, + gc_set_background +}; + +static struct graphics_gc_priv *gc_new(struct graphics_priv *gr, struct graphics_gc_methods *meth) +{ + struct graphics_gc_priv * graphics_gc_priv = NULL; +// dbg(lvl_debug,"enter gr==%p\n", gr); + graphics_gc_priv = g_new0(struct graphics_gc_priv, 1); + graphics_gc_priv->graphics_priv = gr; + graphics_gc_priv->pen=new QPen(); + graphics_gc_priv->brush=new QBrush(Qt::SolidPattern); + + *meth=gc_methods; + return graphics_gc_priv; +} + +static void image_destroy(struct graphics_image_priv *img) +{ +// dbg(lvl_debug, "enter\n"); + if(img->pixmap != NULL) + delete(img->pixmap); + g_free(img); +} + +struct graphics_image_methods image_methods ={ + image_destroy +}; + + +static struct graphics_image_priv * +image_new(struct graphics_priv *gr, struct graphics_image_methods *meth, char *path, int *w, int *h, struct point *hot, int rotation) +{ + struct graphics_image_priv * image_priv; +// dbg(lvl_debug,"enter %s, %d %d\n", path, *w, *h); + if(path[0] == 0) + { + dbg(lvl_debug,"Refuse to load image without path\n"); + return NULL; + } + QString key(path); + QString renderer_key(key); + QString extension = key.right(key.lastIndexOf(".")); + QFile imagefile(key); + if(!imagefile.exists()) + { + /* file doesn't exit. Either navit wants us to guess file name by + * ommitting exstension, or the file does really not exist. + */ + if(extension != "") + { + /*file doesn't exist. give up */ + dbg(lvl_debug,"File %s does not exist\n",path); + return NULL; + } + else + { + /* add ".svg" for renderer to try .svg file first in renderer */ + dbg(lvl_debug, "Guess extension on %s\n", path); + renderer_key += ".svg"; + } + } + image_priv = g_new0(struct graphics_image_priv, 1); + *meth = image_methods; + + /* check if this can be rendered */ + if(renderer_key.endsWith("svg")) + { + QSvgRenderer renderer(renderer_key); + if(renderer.isValid()) + { + dbg(lvl_debug,"render %s\n", path); + /* try to render this */ + /* assume "standard" size if size is not given */ + if(*w <= 0) *w = renderer.defaultSize().width(); + if(*h <= 0) *h = renderer.defaultSize().height(); + image_priv->pixmap=new QPixmap(*w, *h); + image_priv->pixmap->fill(Qt::transparent); + QPainter painter(image_priv->pixmap); + renderer.render(&painter); + } + } + + if (image_priv->pixmap == NULL) { + /*cannot be rendered. try to load it */ + dbg(lvl_debug,"cannot render %s\n",path); + image_priv->pixmap=new QPixmap(key); + } + + /* check if we got image */ + if (image_priv->pixmap->isNull()) { + g_free(image_priv); + return NULL; + } + else + { + /* check if we need to scale this */ + if((*w > 0) && (*h > 0)) + { + if((image_priv->pixmap->width() != *w) || + (image_priv->pixmap->height() != *h)) + { + dbg(lvl_debug,"scale pixmap %s, %d->%d,%d->%d\n",path, image_priv->pixmap->width(), *w, image_priv->pixmap->height(), *h); + QPixmap * scaled = new QPixmap(image_priv->pixmap->scaled(*w, *h,Qt::IgnoreAspectRatio,Qt::FastTransformation)); + delete (image_priv->pixmap); + image_priv->pixmap = scaled; + } + } + } + + *w=image_priv->pixmap->width(); + *h=image_priv->pixmap->height(); +// dbg(lvl_debug, "Got (%d,%d)\n", *w,*h); + if (hot) { + hot->x=*w/2; + hot->y=*h/2; + } + + return image_priv; +} + +static void +draw_lines(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int count) +{ + int i; + QPolygon polygon; +// dbg(lvl_debug,"enter gr=%p, gc=%p, (%d, %d)\n", gr, gc, p->x, p->y); + if(gr->painter == NULL) + return; + + for (i = 0 ; i < count ; i++) + polygon.putPoints(i, 1, p[i].x, p[i].y); + gr->painter->setPen(*gc->pen); + gr->painter->drawPolyline(polygon); + +} + +static void +draw_polygon(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int count) +{ + int i; + QPolygon polygon; +// dbg(lvl_debug,"enter gr=%p, gc=%p, (%d, %d)\n", gr, gc, p->x, p->y); + if(gr->painter == NULL) + return; + + for (i = 0 ; i < count ; i++) + polygon.putPoints(i, 1, p[i].x, p[i].y); + gr->painter->setPen(*gc->pen); + gr->painter->setBrush(*gc->brush); + /* if the polygon is transparent, we need to clear it first */ + if(!gc->brush->isOpaque()) + { + QPainter::CompositionMode mode = gr->painter->compositionMode(); + gr->painter->setCompositionMode(QPainter::CompositionMode_Clear); + gr->painter->drawPolygon(polygon); + gr->painter->setCompositionMode(mode); + } + gr->painter->drawPolygon(polygon); +} + +static void +draw_rectangle(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int w, int h) +{ +// dbg(lvl_debug,"gr=%p gc=%p %d,%d,%d,%d\n", gr, gc, p->x, p->y, w, h); + if(gr->painter == NULL) + return; + /* if the rectangle is transparent, we need to clear it first */ + if(!gc->brush->isOpaque()) + { + QPainter::CompositionMode mode = gr->painter->compositionMode(); + gr->painter->setCompositionMode(QPainter::CompositionMode_Clear); + gr->painter->fillRect(p->x,p->y, w, h, *gc->brush); + gr->painter->setCompositionMode(mode); + } + gr->painter->fillRect(p->x,p->y, w, h, *gc->brush); +} + +static void +draw_circle(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int r) +{ +// dbg(lvl_debug,"enter gr=%p, gc=%p, (%d,%d) r=%d\n", gr, gc, p->x, p->y, r); + if(gr->painter == NULL) + return; + gr->painter->setPen(*gc->pen); + gr->painter->drawArc(p->x-r/2, p->y-r/2, r, r, 0, 360*16); +} + + +static void +draw_text(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct graphics_gc_priv *bg, struct graphics_font_priv *font, char *text, struct point *p, int dx, int dy) +{ +// dbg(lvl_debug,"enter gc=%p, fg=%p, bg=%p pos(%d,%d) %s\n", gr, fg, bg, p->x, p->y, text); + QPainter *painter=gr->painter; + if(painter == NULL) + return; +#ifdef QT_QPAINTER_USE_FREETYPE + struct font_freetype_text *t; + struct font_freetype_glyph *g, **gp; + struct color transparent = {0x0000, 0x0000, 0x0000, 0x0000}; + struct color fgc; + struct color bgc; + QColor temp; + + int i,x,y; + + if (! font) + return; + /* extract colors */ + fgc.r = fg->pen->color().red() << 8; + fgc.g = fg->pen->color().green() << 8; + fgc.b = fg->pen->color().blue() << 8; + fgc.a = fg->pen->color().alpha() << 8; + if(bg != NULL) + { + bgc.r = bg->pen->color().red() << 8; + bgc.g = bg->pen->color().green() << 8; + bgc.b = bg->pen->color().blue() << 8; + bgc.a = bg->pen->color().alpha() << 8; + } + else + { + bgc = transparent; + } + + t=gr->freetype_methods.text_new(text, (struct font_freetype_font *)font, dx, dy); + x=p->x << 6; + y=p->y << 6; + gp=t->glyph; + i=t->glyph_count; + if (bg) { + while (i-- > 0) { + g=*gp++; + if (g->w && g->h) { + unsigned char *data; + QImage img(g->w+2, g->h+2, QImage::Format_ARGB32_Premultiplied); + data=img.bits(); + gr->freetype_methods.get_shadow(g,(unsigned char *)data,img.bytesPerLine(),&bgc,&transparent); + + painter->drawImage(((x+g->x)>>6)-1, ((y+g->y)>>6)-1, img); + } + x+=g->dx; + y+=g->dy; + } + } + x=p->x << 6; + y=p->y << 6; + gp=t->glyph; + i=t->glyph_count; + while (i-- > 0) { + g=*gp++; + if (g->w && g->h) { + unsigned char *data; + QImage img(g->w, g->h, QImage::Format_ARGB32_Premultiplied); + data=img.bits(); + gr->freetype_methods.get_glyph(g,(unsigned char *)data,img.bytesPerLine(),&fgc,&bgc,&transparent); + painter->drawImage((x+g->x)>>6, (y+g->y)>>6, img); + } + x+=g->dx; + y+=g->dy; + } + gr->freetype_methods.text_destroy(t); +#else + QString tmp=QString::fromUtf8(text); + QMatrix sav=gr->painter->worldMatrix(); + QMatrix m(dx/65535.0,dy/65535.0,-dy/65535.0,dx/65535.0,p->x,p->y); + painter->setWorldMatrix(m,TRUE); + painter->setPen(*fg->pen); + painter->setFont(*font->font); + painter->drawText(0, 0, tmp); + painter->setWorldMatrix(sav); +#endif +} + +static void +draw_image(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct point *p, struct graphics_image_priv *img) +{ +// dbg(lvl_debug,"enter\n"); + if(gr->painter != NULL) + gr->painter->drawPixmap(p->x, p->y, *img->pixmap); + else + dbg(lvl_debug, "Try to draw image, but no painter\n"); +} + +static void draw_drag(struct graphics_priv *gr, struct point *p) +{ + if(p != NULL) + { +// dbg(lvl_debug,"enter %p (%d,%d)\n", gr, p->x, p->y); + gr->widget->move(p->x, p->y); + } + else + { +// dbg(lvl_debug,"enter %p (NULL)\n", gr); + } +} + +static void +background_gc(struct graphics_priv *gr, struct graphics_gc_priv *gc) +{ +// dbg(lvl_debug,"register context %p on %p\n", gc, gr); + gr->background_graphics_gc_priv = gc; +} + +static void +draw_mode(struct graphics_priv *gr, enum draw_mode_num mode) +{ + switch (mode) + { + case draw_mode_begin: + dbg(lvl_debug,"Begin drawing on context %p (use == %d)\n", gr, gr->use_count); + gr->use_count ++; + if(gr->painter == NULL) + gr->painter = new QPainter(gr->pixmap); + else + dbg(lvl_debug, "drawing on %p already active\n", gr); + break; + case draw_mode_end: + dbg(lvl_debug,"End drawing on context %p (use == %d)\n", gr, gr->use_count); + gr->use_count --; + if(gr->use_count > 0) + { + dbg(lvl_debug, "drawing on %p still in use\n", gr); + } + else if(gr->painter != NULL) + { + gr->painter->end(); + delete(gr->painter); + gr->painter = NULL; + /* call repaint on widget */ + gr->widget->repaint(); + } + else + dbg(lvl_debug, "Context %p not active!\n", gr) + + break; + default: + dbg(lvl_debug,"Unknown drawing %d on context %p\n", mode, gr); + break; + } +} + +static struct graphics_priv * overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int wraparound); + +void +resize_callback(int w, int h) +{ +// dbg(lvl_debug,"enter (%d, %d)\n", w, h); + callback_list_call_attr_2(callbacks, attr_resize, + GINT_TO_POINTER(w), GINT_TO_POINTER(h)); +} + +static int +graphics_qt5_fullscreen(struct window *w, int on) +{ + struct graphics_priv * gr; +// dbg(lvl_debug,"enter\n"); + gr = (struct graphics_priv *) w->priv; + if(on) + gr->widget->setWindowState(Qt::WindowFullScreen); + else + gr->widget->setWindowState(Qt::WindowMaximized); + return 1; +} + +#ifdef SAILFISH_OS +static void +keep_display_on(struct graphics_priv * priv) +{ +// dbg(lvl_debug,"enter\n"); + QDBusConnection system = QDBusConnection::connectToBus(QDBusConnection::SystemBus, "system"); + QDBusInterface interface("com.nokia.mce", "/com/nokia/mce/request", "com.nokia.mce.request", system); + + interface.call(QLatin1String("req_display_blanking_pause")); +} +#endif + + +static void +graphics_qt5_disable_suspend(struct window *w) +{ +// dbg(lvl_debug,"enter\n"); +#ifdef SAILFISH_OS + struct graphics_priv * gr; + gr = (struct graphics_priv *) w->priv; + keep_display_on(gr); + /* to keep display on, d-bus trigger must be called at least once per second. + * to cope with fuzz, trigger it once per 30 seconds */ + gr->display_on_cb = callback_new_1(callback_cast(keep_display_on), gr); + gr->display_on_ev = event_add_timeout(30000, 1, gr->display_on_cb); +#endif +} + +static void * +get_data(struct graphics_priv *this_priv, char const *type) +{ +// dbg(lvl_debug,"enter: %s\n", type); + if (strcmp(type, "window") == 0) { + struct window *win; +// dbg(lvl_debug,"window detected\n"); + win = g_new0(struct window, 1); + win->priv = this_priv; + win->fullscreen = graphics_qt5_fullscreen; + win->disable_suspend = graphics_qt5_disable_suspend; + resize_callback(this_priv->widget->width(),this_priv->widget->height()); + return win; + } + return NULL; +} + +static void image_free(struct graphics_priv *gr, struct graphics_image_priv *priv) +{ +// dbg(lvl_debug,"enter\n"); + delete(priv->pixmap); + g_free(priv); +} + +static void get_text_bbox(struct graphics_priv *gr, struct graphics_font_priv *font, char *text, int dx, int dy, struct point *ret, int estimate) +{ +// dbg(lvl_debug,"enter %s %d %d\n", text, dx, dy); + QPainter *painter=gr->painter; + QString tmp=QString::fromUtf8(text); + if(gr->painter != NULL) + { + gr->painter->setFont(*font->font); + QRect r=painter->boundingRect(0,0,gr->pixmap->width(),gr->pixmap->height(),0,tmp); +// dbg (lvl_debug, "Text bbox: %d %d (%d,%d),(%d,%d)\n",dx, dy, r.left(), r.top(), r.right(), r.bottom()); + /* low left */ + ret[0].x = r.left(); + ret[0].y = r.bottom(); + /* top left */ + ret[1].x = r.left(); + ret[1].y = r.top(); + /* top right */ + ret[2].x = r.right(); + ret[2].y = r.top(); + /* low right */ + ret[3].x = r.right(); + ret[3].y = r.bottom(); + } +} + +static void overlay_disable(struct graphics_priv *gr, int disable) +{ + GHashTableIter iter; + struct graphics_priv * key, * value; +// dbg(lvl_debug,"enter gr=%p, %d\n", gr, disable); + + g_hash_table_iter_init (&iter, gr->overlays); + while (g_hash_table_iter_next (&iter, (void **)&key, (void **)&value)) + { + /* disable or enable all overlays of this pane */ + value->widget->setVisible(!disable); + } +} + +static void overlay_resize(struct graphics_priv *gr, struct point *p, int w, int h, int wraparound) +{ +// dbg(lvl_debug,"enter\n"); + gr->widget->move(p->x, p->y); + gr->widget->resize(w, h); + if(gr->painter != NULL) + { + delete(gr->painter); + } + delete(gr->pixmap); + gr->pixmap = new QPixmap(gr->widget->size()); + if(gr->painter != NULL) + gr->painter = new QPainter (gr->pixmap); +} + +static struct graphics_methods graphics_methods = { + graphics_destroy, + draw_mode, + draw_lines, + draw_polygon, + draw_rectangle, + draw_circle, + draw_text, + draw_image, + NULL, + draw_drag, + font_new, + gc_new, + background_gc, + overlay_new, + image_new, + get_data, + image_free, + get_text_bbox, + overlay_disable, + overlay_resize, +}; + +/* create new graphics context on given context */ +static struct graphics_priv * +overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int wraparound) +{ + struct graphics_priv * graphics_priv = NULL; + graphics_priv = g_new0(struct graphics_priv, 1); + *meth=graphics_methods; +#ifdef QT_QPAINTER_USE_FREETYPE + if (gr->font_freetype_new) { + graphics_priv->font_freetype_new=gr->font_freetype_new; + gr->font_freetype_new(&graphics_priv->freetype_methods); + meth->font_new=(struct graphics_font_priv *(*)(struct graphics_priv *, struct graphics_font_methods *, char *, int, int))graphics_priv->freetype_methods.font_new; + meth->get_text_bbox=(void (*)(struct graphics_priv*, struct graphics_font_priv*, char*, int, int, struct point*, int))graphics_priv->freetype_methods.get_text_bbox; + } +#endif + graphics_priv->widget = new QNavitWidget(graphics_priv, gr->widget, Qt::Widget); + graphics_priv->widget->move(p->x, p->y); + graphics_priv->widget->resize(w, h); + graphics_priv->widget->setVisible(true); + graphics_priv->pixmap = new QPixmap(graphics_priv->widget->size()); + graphics_priv->painter = NULL; + graphics_priv->use_count = 0; + graphics_priv->parent = gr; + graphics_priv->overlays=g_hash_table_new(NULL, NULL); + graphics_priv->root = false; + graphics_priv->argc = 0; + graphics_priv->argv[0] = NULL; + /* register on parent */ + g_hash_table_insert(gr->overlays, graphics_priv, graphics_priv); +// dbg(lvl_debug,"New overlay: %p\n", graphics_priv); + + return graphics_priv; +} + +/* create application and initial graphics context */ +static struct graphics_priv * +graphics_qt5_new(struct navit *nav, struct graphics_methods *meth, struct attr **attrs, struct callback_list *cbl) +{ + struct graphics_priv * graphics_priv = NULL; + struct attr * event_loop_system = NULL; + struct attr * platform = NULL; + struct attr * fullscreen = NULL; + //dbg(lvl_debug,"enter\n"); + + /*register graphic methods by copying in our predefined ones */ + *meth=graphics_methods; + + /* get event loop from config and request event loop*/ + event_loop_system = attr_search(attrs, NULL, attr_event_loop_system); + if (event_loop_system && event_loop_system->u.str) { + //dbg(lvl_debug, "event_system is %s\n", event_loop_system->u.str); + if (!event_request_system(event_loop_system->u.str, "graphics_qt5")) + return NULL; + } else { + /* no event system requested by config. Default to our own */ + if (!event_request_system("qt5", "graphics_qt5")) + return NULL; + } + +#ifdef QT_QPAINTER_USE_FREETYPE + struct font_priv * (*font_freetype_new)(void *meth); + /* get font plugin if present */ + font_freetype_new=(struct font_priv *(*)(void *))plugin_get_category_font("freetype"); + if (!font_freetype_new) { + dbg(lvl_error,"no freetype\n"); + return NULL; + } +#endif + + /* create root graphics layer */ + graphics_priv = g_new0(struct graphics_priv, 1); + /* Prepare argc and argv to call Qt application*/ + graphics_priv->root = true; + graphics_priv->argc = 0; + graphics_priv->argv[graphics_priv->argc] = g_strdup("navit"); + graphics_priv->argc ++; + /* Get qt platform from config */ + if ((platform=attr_search(attrs, NULL, attr_qt5_platform))) + { + graphics_priv->argv[graphics_priv->argc] = g_strdup("-platform"); + graphics_priv->argc ++; + graphics_priv->argv[graphics_priv->argc] = g_strdup(platform->u.str); + graphics_priv->argc ++; + } + /* create surrounding application */ + navit_app = new QApplication(graphics_priv->argc, graphics_priv->argv); + +#ifdef QT_QPAINTER_USE_FREETYPE + graphics_priv->font_freetype_new=font_freetype_new; + font_freetype_new(&graphics_priv->freetype_methods); + meth->font_new=(struct graphics_font_priv *(*)(struct graphics_priv *, struct graphics_font_methods *, char *, int, int))graphics_priv->freetype_methods.font_new; + meth->get_text_bbox=(void (*)(struct graphics_priv*, struct graphics_font_priv*, char*, int, int, struct point*, int))graphics_priv->freetype_methods.get_text_bbox; +#endif + callbacks = cbl; + graphics_priv->pixmap = NULL; + graphics_priv->use_count = 0; + graphics_priv->painter = NULL; + graphics_priv->parent = NULL; + graphics_priv->overlays=g_hash_table_new(NULL, NULL); + + graphics_priv->widget = new QNavitWidget(graphics_priv,NULL,Qt::Window); + if ((fullscreen=attr_search(attrs, NULL, attr_fullscreen)) && (fullscreen->u.num)) { + /* show this maximized */ + graphics_priv->widget->setWindowState(Qt::WindowFullScreen); + } + else + { + /* not maximized. Check what size to use then */ + struct attr * w = NULL; + struct attr * h = NULL; + /* default to desktop size if nothing else is given */ + QRect geomet = navit_app->desktop()->screenGeometry(graphics_priv->widget); + /* check for height */ + if ((h = attr_search(attrs, NULL, attr_h)) && (h->u.num > 100)) + geomet.setHeight(h->u.num); + /* check for width */ + if ((w = attr_search(attrs, NULL, attr_w)) && (w->u.num > 100)) + geomet.setWidth(w->u.num); + graphics_priv->widget->resize(geomet.width(), geomet.height()); + //graphics_priv->widget->setFixedSize(geomet.width(), geomet.height()); + } + /* generate initial pixmap same size as window */ + if(graphics_priv->pixmap == NULL) + graphics_priv->pixmap = new QPixmap(graphics_priv->widget->size()); + + /* tell Navit our geometry */ + resize_callback(graphics_priv->widget->width(),graphics_priv->widget->height()); + + /* show our window */ + graphics_priv->widget->show(); + return graphics_priv; +} + +void +plugin_init(void) +{ +// dbg(lvl_debug,"enter\n"); + plugin_register_category_graphics("qt5", graphics_qt5_new); + qt5_event_init(); +} diff --git a/navit/graphics/qt5/graphics_qt5.h b/navit/graphics/qt5/graphics_qt5.h new file mode 100644 index 000000000..2f19390c4 --- /dev/null +++ b/navit/graphics/qt5/graphics_qt5.h @@ -0,0 +1,63 @@ +#ifndef __graphics_qt_h +#define __graphics_qt_h +#include <glib.h> +#include <QApplication> +#include <QPixmap> +#include <QPainter> +#include <QPen> +#include <QBrush> +#include "QNavitWidget.h" + +#ifndef QT_QPAINTER_USE_FREETYPE +#define QT_QPAINTER_USE_FREETYPE 1 +#endif + +#ifndef SAILFISH_OS +#define SAILFISH_OS 1 +#endif + + +#ifdef QT_QPAINTER_USE_FREETYPE +#include "navit/font/freetype/font_freetype.h" +#endif + +struct graphics_gc_priv; +struct graphics_priv; + +struct graphics_priv { + QNavitWidget * widget; + QPixmap * pixmap; + QPainter * painter; + int use_count; + struct graphics_gc_priv * background_graphics_gc_priv; +#ifdef QT_QPAINTER_USE_FREETYPE + struct font_priv * (*font_freetype_new)(void *meth); + struct font_freetype_methods freetype_methods; +#endif +#ifdef SAILFISH_OS + struct callback *display_on_cb; + struct event_timeout *display_on_ev; +#endif + GHashTable *overlays; + struct graphics_priv * parent; + bool root; + int argc; + char * argv[4]; +}; + +struct graphics_gc_priv { + struct graphics_priv * graphics_priv; + QPen * pen; + QBrush * brush; +}; +/* central exported application info */ +extern QApplication * navit_app; + +/* navit callback list */ +extern struct callback_list* callbacks; + +void +resize_callback(int w, int h); + +#endif + diff --git a/navit/graphics/qt_qpainter/Makefile.am b/navit/graphics/qt_qpainter/Makefile.am deleted file mode 100644 index 8c55917c7..000000000 --- a/navit/graphics/qt_qpainter/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @QT_GUI_CFLAGS@ @QT_SVG_CFLAGS@ @NAVIT_CFLAGS@ -I$(top_srcdir) -I$(top_srcdir)/navit -I$(top_srcdir)/navit/graphics/qt_qpainter -DMODULE=graphics_qt_qpainter -modulegraphics_LTLIBRARIES = libgraphics_qt_qpainter.la -libgraphics_qt_qpainter_la_SOURCES = graphics_qt_qpainter.cpp graphics_qt_qpainter.h RenderArea.cpp RenderArea.h RenderArea.moc -libgraphics_qt_qpainter_la_LDFLAGS = @QT_GUI_LIBS@ @QT_SVG_LIBS@ -module -avoid-version -if GRAPHICS_QT_QPAINTER -BUILT_SOURCES = RenderArea.moc -RenderArea.moc: - @MOC@ $(srcdir)/RenderArea.h >RenderArea.moc || touch RenderArea.moc - -distclean-local: - $(RM) RenderArea.moc -endif diff --git a/navit/graphics/sdl/Makefile.am b/navit/graphics/sdl/Makefile.am deleted file mode 100644 index 1c9b4056d..000000000 --- a/navit/graphics/sdl/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @SDL_CFLAGS@ @FREETYPE2_CFLAGS@ @LIBPDL_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=graphics_sdl -modulegraphics_LTLIBRARIES = libgraphics_sdl.la -libgraphics_sdl_la_SOURCES = graphics_sdl.c raster.c raster.h -libgraphics_sdl_la_LDFLAGS = @SDL_LIBS@ @SDL_IMAGE_LIBS@ @FREETYPE2_LIBS@ @LIBPDL_LIBS@ -module -avoid-version diff --git a/navit/graphics/win32/Makefile.am b/navit/graphics/win32/Makefile.am deleted file mode 100644 index 15ec2441c..000000000 --- a/navit/graphics/win32/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @ZLIB_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=graphics_win32 -libgraphics_win32_la_SOURCES = graphics_win32.c xpm2bmp.c -libgraphics_win32_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ -if !SUPPORT_WIN32CE -libgraphics_win32_la_LDFLAGS += -Wl,-lgdi32 -endif -if PLUGINS -modulegraphics_LTLIBRARIES = libgraphics_win32.la -else -noinst_LTLIBRARIES = libgraphics_win32.la -endif diff --git a/navit/gui/Makefile.am b/navit/gui/Makefile.am deleted file mode 100644 index 10086b5a1..000000000 --- a/navit/gui/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -SUBDIRS= -if GUI_INTERNAL - SUBDIRS += internal -endif -if GUI_GTK - SUBDIRS += gtk -endif -if GUI_WIN32 - SUBDIRS += win32 -endif -if GUI_QML - SUBDIRS += qml -endif
\ No newline at end of file diff --git a/navit/gui/gtk/Makefile.am b/navit/gui/gtk/Makefile.am deleted file mode 100644 index ddcfc2ae3..000000000 --- a/navit/gui/gtk/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = -I$(top_srcdir)/navit @NAVIT_CFLAGS@ @HILDON_CFLAGS@ @GTK2_CFLAGS@ -DMODULE=gui_gtk -modulegui_LTLIBRARIES = libgui_gtk.la -libgui_gtk_la_SOURCES = datawindow.c destination.c gui_gtk_statusbar.c gui_gtk_action.c gui_gtk_window.c gui_gtk_poi.c gui_gtk.h gui_gtk_poi.h -libgui_gtk_la_LIBADD = @GTK2_LIBS@ -libgui_gtk_la_LDFLAGS = -module -avoid-version diff --git a/navit/gui/internal/Makefile.am b/navit/gui/internal/Makefile.am deleted file mode 100644 index ed819ce4e..000000000 --- a/navit/gui/internal/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/navit -I$(top_srcdir)/navit/fib-1.1 @NAVIT_CFLAGS@ -DMODULE=gui_internal -if PLUGINS -modulegui_LTLIBRARIES = libgui_internal.la -else -noinst_LTLIBRARIES = libgui_internal.la -endif -libgui_internal_la_SOURCES = gui_internal_bookmark.c gui_internal.c gui_internal_command.c gui_internal_gesture.c gui_internal_html.c gui_internal_keyboard.c gui_internal_menu.c gui_internal_poi.c gui_internal_search.c gui_internal_widget.c gui_internal_bookmark.h gui_internal_command.h gui_internal_gesture.h gui_internal.h gui_internal_html.h gui_internal_keyboard.h gui_internal_menu.h gui_internal_poi.h gui_internal_priv.h gui_internal_search.h gui_internal_widget.h -libgui_internal_la_LIBADD = -libgui_internal_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/gui/qml/Makefile.am b/navit/gui/qml/Makefile.am deleted file mode 100644 index a52b399b2..000000000 --- a/navit/gui/qml/Makefile.am +++ /dev/null @@ -1,14 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @QT_DECLARATIVE_CFLAGS@ @QT_GUI_CFLAGS@ @QT_XML_CFLAGS@ @NAVIT_CFLAGS@ -I$(top_srcdir) -I$(top_srcdir)/navit -DMODULE=gui_qml -modulegui_LTLIBRARIES = libgui_qml.la -libgui_qml_la_SOURCES = proxy.moc proxy.h ngqpoint.moc ngqpoint.h searchProxy.moc routeProxy.h searchProxy.h bookmarksProxy.moc bookmarksProxy.h vehicleProxy.moc vehicleProxy.h navitProxy.moc navitProxy.h guiProxy.moc guiProxy.h gui_qml.moc gui_qml.cpp -libgui_qml_la_LDFLAGS = @QT_DECLARATIVE_LIBS@ @QT_GUI_LIBS@ @QT_XML_LIBS@ -module -avoid-version -BUILT_SOURCES = gui_qml.moc proxy.moc ngqpoint.moc routeProxy.moc searchProxy.moc bookmarksProxy.moc vehicleProxy.moc navitProxy.moc guiProxy.moc -%.moc: %.h - @MOC@ $(srcdir)/$< > $@ || touch $@ -%.moc: %.cpp - @MOC@ $(srcdir)/$< > $@ || touch $@ -distclean-local: - -$(RM) *.moc - -SUBDIRS=skins diff --git a/navit/gui/qml/skins/Makefile.am b/navit/gui/qml/skins/Makefile.am deleted file mode 100644 index e0f29a206..000000000 --- a/navit/gui/qml/skins/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS=navit
\ No newline at end of file diff --git a/navit/gui/qml/skins/navit/Makefile.am b/navit/gui/qml/skins/navit/Makefile.am deleted file mode 100644 index 0842a330c..000000000 --- a/navit/gui/qml/skins/navit/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc - -SKIN = navit - -qmldir=$(skinsdir)/$(SKIN) - -qml_DATA = ButtonIcon.qml ToggleSwitch.qml ToggleButton.qml ListSelector.qml Slider.qml CommonHighlight.qml Cellar.qml main.qml PageMain.qml PageNavigate.qml PageAbout.qml PageBookmarksAdd.qml PageBookmarks.qml PageRoute.qml PageSearch.qml PageSearchSelector.qml PageSettingsDisplay.qml PageSettingsLocale.qml PageSettings.qml PageSettingsRules.qml PageSettingsTools.qml PageSettingsVehicle.qml PagePoi.qml PagePointInfo.qml -qml_DATA += background.svg knob.svg -qml_DATA += command.js pagenavigation.js diff --git a/navit/gui/win32/Makefile.am b/navit/gui/win32/Makefile.am deleted file mode 100644 index 06d91fac6..000000000 --- a/navit/gui/win32/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = -I$(top_srcdir)/navit -I$(top_srcdir)/navit/graphics/win32 @NAVIT_CFLAGS@ -DMODULE=gui_win32 -if PLUGINS -modulegui_LTLIBRARIES = libgui_win32.la -else -noinst_LTLIBRARIES = libgui_win32.la -endif -libgui_win32_la_SOURCES = gui_win32.c win32_gui_destination.c win32_gui_notify.c ceglue.h ceglue.c -libgui_win32_la_LIBADD = -libgui_win32_la_LDFLAGS = -module -avoid-version diff --git a/navit/map/Makefile.am b/navit/map/Makefile.am deleted file mode 100644 index d2b6efdc5..000000000 --- a/navit/map/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -SUBDIRS= -if MAP_BINFILE - SUBDIRS+=binfile -endif -if MAP_FILTER - SUBDIRS+=filter -endif -if HAVELIBGARMIN - SUBDIRS+=garmin -endif -if MAP_MG - SUBDIRS+=mg -endif -if MAP_SHAPEFILE - SUBDIRS+=shapefile -endif -if MAP_TEXTFILE - SUBDIRS+=textfile -endif -if MAP_CSV - SUBDIRS+=csv -endif - -DIST_SUBDIRS=mg textfile csv binfile garmin shapefile filter diff --git a/navit/map/binfile/Makefile.am b/navit/map/binfile/Makefile.am deleted file mode 100644 index 6bf671175..000000000 --- a/navit/map/binfile/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=map_binfile -if PLUGINS - modulemap_LTLIBRARIES = libmap_binfile.la -else - noinst_LTLIBRARIES = libmap_binfile.la -endif -libmap_binfile_la_SOURCES = binfile.c -libmap_binfile_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/map/csv/Makefile.am b/navit/map/csv/Makefile.am deleted file mode 100644 index d8670ea2c..000000000 --- a/navit/map/csv/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=map_csv -if PLUGINS - modulemap_LTLIBRARIES = libmap_csv.la -else - noinst_LTLIBRARIES = libmap_csv.la -endif -libmap_csv_la_SOURCES = csv.c csv.h quadtree.c quadtree.h -libmap_csv_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/map/filter/Makefile.am b/navit/map/filter/Makefile.am deleted file mode 100644 index 3bd14e8bf..000000000 --- a/navit/map/filter/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=map_filter -if PLUGINS - modulemap_LTLIBRARIES = libmap_filter.la -else - noinst_LTLIBRARIES = libmap_filter.la -endif -libmap_filter_la_SOURCES = filter.c -libmap_filter_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/map/garmin/Makefile.am b/navit/map/garmin/Makefile.am deleted file mode 100644 index 8fa224fc1..000000000 --- a/navit/map/garmin/Makefile.am +++ /dev/null @@ -1,33 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=map_garmin -AM_CPPFLAGS+= @LIBGARMIN_CFLAGS@ -INCLUDES=-I$(top_srcdir)/navit/map/garmin/libgarmin -AM_CPPFLAGS+=-I$(top_srcdir)/navit/map/garmin/libgarmin -AM_CPPFLAGS+=-I$(srcdir) - -modulemap_LTLIBRARIES = libmap_garmin.la -libmap_garmin_la_SOURCES = garmin.c garmin.h gar2navit.c gar2navit.h -libmap_garmin_la_LIBADD = @LIBGARMIN_LIBS@ -libmap_garmin_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ -nodist_libmap_garmin_la_SOURCES = g2nbuiltin.h -builddir = @builddir@ - -gar2navit.l$(OBJEXT): g2nbuiltin.h - -CLEANFILES = g2nbuiltin.h - -noinst_PROGRAMS=gentypes$(EXEEXT) -gentypes_SOURCES=gentypes.c - -gentypes.$(OBJEXT): gentypes.c - $(CC_FOR_BUILD) -I$(top_srcdir)/navit -I$(top_srcdir) -c -o $@ $< - -gentypes$(EXEEXT): $(gentypes_OBJECTS) $(gentypes_DEPENDENCIES) - @rm -f gentypes$(EXEEXT) - $(CCLD_FOR_BUILD) -o $@ $(gentypes_OBJECTS) - -g2nbuiltin.h: gentypes$(EXEEXT) garmintypes.txt - ./gentypes$(EXEEXT) $(top_srcdir)/navit/map/garmin/garmintypes.txt $@ - -EXTRA_DIST = garmintypes.txt - diff --git a/navit/map/garmin_img/Makefile.am b/navit/map/garmin_img/Makefile.am deleted file mode 100644 index dbbcd9b55..000000000 --- a/navit/map/garmin_img/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=map_garmin_img -modulemap_LTLIBRARIES = libmap_garmin_img.la -libmap_garmin_img_la_SOURCES = garmin_img.c -libmap_garmin_img_la_LDFLAGS = -module -avoid-version diff --git a/navit/map/mg/Makefile.am b/navit/map/mg/Makefile.am deleted file mode 100644 index ee05be835..000000000 --- a/navit/map/mg/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=map_mg -if PLUGINS - modulemap_LTLIBRARIES = libmap_mg.la -else - noinst_LTLIBRARIES = libmap_mg.la -endif -libmap_mg_la_SOURCES = map.c block.c town.c tree.c poly.c street.c mg.h -libmap_mg_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/map/shapefile/Makefile.am b/navit/map/shapefile/Makefile.am deleted file mode 100644 index f23fb8278..000000000 --- a/navit/map/shapefile/Makefile.am +++ /dev/null @@ -1,14 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @SHAPEFILE_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=map_shapefile -if PLUGINS - modulemap_LTLIBRARIES = libmap_shapefile.la -else - noinst_LTLIBRARIES = libmap_shapefile.la -endif -libmap_shapefile_la_SOURCES = shapefile.c -libmap_shapefile_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ -if HAVE_SYSTEM_SHAPEFILELIB -libmap_shapefile_la_LIBADD = @SHAPEFILE_LIBS@ -else -libmap_shapefile_la_LIBADD = $(top_builddir)/navit/support/shapefile/libsupport_shapefile.la -endif diff --git a/navit/map/textfile/Makefile.am b/navit/map/textfile/Makefile.am deleted file mode 100644 index b3190e7f7..000000000 --- a/navit/map/textfile/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=map_textfile -if PLUGINS - modulemap_LTLIBRARIES = libmap_textfile.la -else - noinst_LTLIBRARIES = libmap_textfile.la -endif -libmap_textfile_la_SOURCES = textfile.c textfile.h -libmap_textfile_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/maps/Makefile.am b/navit/maps/Makefile.am deleted file mode 100644 index 798ca6d5c..000000000 --- a/navit/maps/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -include $(top_srcdir)/Makefile.inc - -.SECONDARY: - -SAMPLE_MAP=osm_bbox_11.3,47.9,11.7,48.2 - -maptool_args=--attr-debug-level=5 -maptool=$(top_builddir)/navit/maptool/maptool - -maps_DATA = $(SAMPLE_MAP).bin $(SAMPLE_MAP).xml - -SUFFIXES=.osm.bz2 .osm.pbf .txt .shp .osm - -samplemap: $(SAMPLE_MAP).bin - -.osm.bin: - echo "Converting osm map" - $(maptool) $(maptool_args) $@.tmp <$< - mv $@.tmp $@ - -.txt.bin: - $(maptool) $(maptool_args) $@.tmp -p $(top_builddir)/navit/map/textfile/libmap_textfile.la -m "type=textfile data="$< - mv $@.tmp $@ - -.shp.bin: - $(maptool) $(maptool_args) $@.tmp -p $(top_builddir)/navit/map/shapefile/libmap_shapefile.la -m "type=shapefile data=$(subst .shp,,$<) $(SHAPEFILE_ATTRIBUTES)" - mv $@.tmp $@ - -.osm.bz2.bin: - echo "Converting osm map" - bzcat $< | $(maptool) $(maptool_args) $@.tmp - mv $@.tmp $@ - -.osm.pbf.bin: - echo "Converting osm map" - $(maptool) --protobuf $(maptool_args) $@.tmp <$< - mv $@.tmp $@ - -.bin.xml: - echo '<map type="binfile" enabled="yes" data="$$NAVIT_SHAREDIR/maps/$<"/>' >$@ - - -$(SAMPLE_MAP).osm.bz2: - echo "Downloading osm sample map" - wget -O $(SAMPLE_MAP).osm.bz2.tmp http://www.navit-project.org/maps/$(SAMPLE_MAP).osm.bz2 - mv $(SAMPLE_MAP).osm.bz2.tmp $(SAMPLE_MAP).osm.bz2 - -distclean-local: - rm -f $(SAMPLE_MAP).osm.bz2 $(SAMPLE_MAP).bin $(SAMPLE_MAP).xml - -all: diff --git a/navit/maptool/Makefile.am b/navit/maptool/Makefile.am deleted file mode 100644 index 95454a058..000000000 --- a/navit/maptool/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -include $(top_srcdir)/Makefile.inc -if !SUPPORT_ANDROID - bin_PROGRAMS = maptool - noinst_LTLIBRARIES = libmaptool.la -endif - -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit @ZLIB_CFLAGS@ @POSTGRESQL_CFLAGS@ -DMODULE=maptool -libmaptool_la_SOURCES = boundaries.c buffer.c ch.c coastline.c itembin.c itembin_buffer.c misc.c osm.c osm_o5m.c osm_psql.c osm_protobuf.c osm_protobufdb.c osm_relations.c osm_xml.c sourcesink.c tempfile.c tile.c zip.c maptool.h generated-code/fileformat.pb-c.c generated-code/fileformat.pb-c.h generated-code/osmformat.pb-c.c generated-code/osmformat.pb-c.h google/protobuf-c/protobuf-c.c google/protobuf-c/protobuf-c.h google/protobuf-c/protobuf-c-private.h -maptool_SOURCES = maptool.c -maptool_LDADD = libmaptool.la ../libnavit.la @NAVIT_LIBS@ @WORDEXP_LIBS@ @ZLIB_LIBS@ @POSTGRESQL_LIBS@ @CRYPTO_LIBS@ @INTLLIBS@ @LIBC_LIBS@ diff --git a/navit/navit.c b/navit/navit.c index 9e4ea421b..3f4678032 100644 --- a/navit/navit.c +++ b/navit/navit.c @@ -3403,61 +3403,59 @@ navit_layout_switch(struct navit *n) if (l->dayname || l->nightname) { //Ok, we know that we have profile to switch - //Check that we aren't calculating too fast - if (vehicle_get_attr(n->vehicle->vehicle, attr_position_time_iso8601,&iso8601_attr,NULL)==1) { - currTs=iso8601_to_secs(iso8601_attr.u.str); - dbg(lvl_debug,"currTs: %u:%u\n",currTs%86400/3600,((currTs%86400)%3600)/60); - } - dbg(lvl_debug,"prevTs: %u:%u\n",n->prevTs%86400/3600,((n->prevTs%86400)%3600)/60); - if (currTs-(n->prevTs)<60) { - //We've have to wait a little - return; - } - if (n->auto_switch == FALSE) - return; - if (sscanf(iso8601_attr.u.str,"%d-%02d-%02dT",&year,&month,&day) != 3) - return; - if (vehicle_get_attr(n->vehicle->vehicle, attr_position_valid, &valid_attr,NULL) && valid_attr.u.num==attr_position_valid_invalid) { - return; //No valid fix yet - } - if (vehicle_get_attr(n->vehicle->vehicle, attr_position_coord_geo,&geo_attr,NULL)!=1) { + //Check that we aren't calculating too fast + if (vehicle_get_attr(n->vehicle->vehicle, attr_position_time_iso8601,&iso8601_attr,NULL)==1) { + currTs=iso8601_to_secs(iso8601_attr.u.str); + dbg(lvl_debug,"currTs: %u:%u\n",currTs%86400/3600,((currTs%86400)%3600)/60); + } + dbg(lvl_debug,"prevTs: %u:%u\n",n->prevTs%86400/3600,((n->prevTs%86400)%3600)/60); + + if (n->auto_switch == FALSE) + return; + + if (currTs-(n->prevTs)<60) { + //We've have to wait a little + return; + } + + if (sscanf(iso8601_attr.u.str,"%d-%02d-%02dT",&year,&month,&day) != 3) + return; + if (vehicle_get_attr(n->vehicle->vehicle, attr_position_valid, &valid_attr,NULL) && valid_attr.u.num==attr_position_valid_invalid) { + return; //No valid fix yet + } + if (vehicle_get_attr(n->vehicle->vehicle, attr_position_coord_geo,&geo_attr,NULL)!=1) { //No position - no sun return; - } - //We calculate sunrise anyway, cause it is needed both for day and for night - if (__sunriset__(year,month,day,geo_attr.u.coord_geo->lng,geo_attr.u.coord_geo->lat,-5,1,&trise,&tset)!=0) { - //near the pole sun never rises/sets, so we should never switch profiles - dbg(lvl_debug,"trise: %u:%u, sun never visible, never switch profile\n",HOURS(trise),MINUTES(trise)); - n->prevTs=currTs; - return; } - trise_actual=trise; - dbg(lvl_debug,"trise: %u:%u\n",HOURS(trise),MINUTES(trise)); - dbg(lvl_debug,"dayname = %s, name =%s \n",l->dayname, l->name); - if (HOURS(trise)*60+MINUTES(trise)<(currTs%86400)/60) { - after_sunrise = TRUE; - } - dbg(lvl_debug,"nightname = %s, name = %s \n",l->nightname, l->name); - if (__sunriset__(year,month,day,geo_attr.u.coord_geo->lng,geo_attr.u.coord_geo->lat,-5,1,&trise,&tset)!=0) { - //near the pole sun never rises/sets, so we should never switch profiles - dbg(lvl_debug,"tset: %u:%u, sun always visible, never switch profile\n",HOURS(tset),MINUTES(tset)); - n->prevTs=currTs; - return; - } - dbg(lvl_debug,"tset: %u:%u\n",HOURS(tset),MINUTES(tset)); - if (((HOURS(tset)*60+MINUTES(tset)<(currTs%86400)/60)) || - ((HOURS(trise_actual)*60+MINUTES(trise_actual)>(currTs%86400)/60))) { - after_sunset = TRUE; - } - if (after_sunrise && !after_sunset && l->dayname) { - navit_set_layout_by_name(n,l->dayname); + //We calculate sunrise anyway, cause it is needed both for day and for night + if (__sunriset__(year,month,day,geo_attr.u.coord_geo->lng,geo_attr.u.coord_geo->lat,-5,1,&trise,&tset)!=0) { + dbg(lvl_debug,"near the pole sun never rises/sets, so we should never switch profiles\n"); + dbg(lvl_debug,"trise: %u:%u\n",HOURS(trise),MINUTES(trise)); + dbg(lvl_debug,"tset: %u:%u\n",HOURS(tset),MINUTES(tset)); + n->prevTs=currTs; + return; + } + trise_actual=trise; + dbg(lvl_debug,"trise: %u:%u\n",HOURS(trise),MINUTES(trise)); + dbg(lvl_debug,"tset: %u:%u\n",HOURS(tset),MINUTES(tset)); + dbg(lvl_debug,"dayname = %s, name =%s \n",l->dayname, l->name); + dbg(lvl_debug,"nightname = %s, name = %s \n",l->nightname, l->name); + if (HOURS(trise)*60+MINUTES(trise)<(currTs%86400)/60) { + after_sunrise = TRUE; + } + + if (((HOURS(tset)*60+MINUTES(tset)<(currTs%86400)/60)) || + ((HOURS(trise_actual)*60+MINUTES(trise_actual)>(currTs%86400)/60))) { + after_sunset = TRUE; + } + if (after_sunrise && !after_sunset && l->dayname) { + navit_set_layout_by_name(n,l->dayname); dbg(lvl_debug,"layout set to day\n"); - } - else if (after_sunset && l->nightname) { - navit_set_layout_by_name(n,l->nightname); - dbg(lvl_debug,"layout set to night\n"); - } - n->prevTs=currTs; + }else if (after_sunset && l->nightname) { + navit_set_layout_by_name(n,l->nightname); + dbg(lvl_debug,"layout set to night\n"); + } + n->prevTs=currTs; } } diff --git a/navit/osd/Makefile.am b/navit/osd/Makefile.am deleted file mode 100644 index f14eff62d..000000000 --- a/navit/osd/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -SUBDIRS= -DIST_SUBDIRS=core - -if OSD_CORE - SUBDIRS+=core -endif diff --git a/navit/osd/core/Makefile.am b/navit/osd/core/Makefile.am deleted file mode 100644 index 10f17f8d2..000000000 --- a/navit/osd/core/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=osd_core -if PLUGINS - moduleosd_LTLIBRARIES = libosd_core.la -else - noinst_LTLIBRARIES = libosd_core.la -endif -libosd_core_la_SOURCES = osd_core.c -libosd_core_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ - diff --git a/navit/plugin/Makefile.am b/navit/plugin/Makefile.am deleted file mode 100644 index da51c76af..000000000 --- a/navit/plugin/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -SUBDIRS= -if PLUGIN_PEDESTRIAN - SUBDIRS += pedestrian -endif - -DIST_SUBDIRS=pedestrian diff --git a/navit/plugin/pedestrian/Makefile.am b/navit/plugin/pedestrian/Makefile.am deleted file mode 100644 index 9427f44d5..000000000 --- a/navit/plugin/pedestrian/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir) -I$(top_srcdir)/navit -DMODULE=plugin_pedestrian -moduleplugin_LTLIBRARIES = libplugin_pedestrian.la -libplugin_pedestrian_la_LDFLAGS=-module -avoid-version @NAVIT_MODULE_LDFLAGS@ #-Wl,--no-undefined - -libplugin_pedestrian_la_SOURCES = pedestrian.c - -android: libplugin_pedestrian.la - cp .libs/libplugin_pedestrian.so ../../android/libs/armeabi -xslt: - cp *.xslt ../../xslt diff --git a/navit/speech/Makefile.am b/navit/speech/Makefile.am deleted file mode 100644 index 3c232db0b..000000000 --- a/navit/speech/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ -SUBDIRS= -if SPEECH_ANDROID - SUBDIRS += android -endif -if SPEECH_CMDLINE - SUBDIRS += cmdline -endif -if SPEECH_DBUS - SUBDIRS += dbus -endif -if SPEECH_ESPEAK - SUBDIRS += espeak -endif -if SPEECH_SPEECH_DISPATCHER - SUBDIRS += speech_dispatcher -endif diff --git a/navit/speech/android/Makefile.am b/navit/speech/android/Makefile.am deleted file mode 100644 index c2a0dc350..000000000 --- a/navit/speech/android/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=speech_android -if PLUGINS -modulespeech_LTLIBRARIES = libspeech_android.la -else -noinst_LTLIBRARIES = libspeech_android.la -endif -libspeech_android_la_SOURCES = speech_android.c -libspeech_android_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ - - -android: libspeech_android.la - mkdir -p ../../android/libs/armeabi/navit/speech - cp .libs/libspeech_android.so ../../android/libs/armeabi - -push: libspeech_android.la - adb push .libs/libspeech_android.so /data/data/org.navitproject.navit/lib diff --git a/navit/speech/cmdline/Makefile.am b/navit/speech/cmdline/Makefile.am deleted file mode 100644 index 4597bd934..000000000 --- a/navit/speech/cmdline/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=speech_cmdline -if PLUGINS -modulespeech_LTLIBRARIES = libspeech_cmdline.la -else -noinst_LTLIBRARIES = libspeech_cmdline.la -endif -libspeech_cmdline_la_SOURCES = speech_cmdline.c -libspeech_cmdline_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/speech/dbus/Makefile.am b/navit/speech/dbus/Makefile.am deleted file mode 100644 index abe285b15..000000000 --- a/navit/speech/dbus/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=speech_dbus -modulespeech_LTLIBRARIES = libspeech_dbus.la -libspeech_dbus_la_SOURCES = speech_dbus.c -libspeech_dbus_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/speech/espeak/Makefile.am b/navit/speech/espeak/Makefile.am deleted file mode 100644 index ecdb50324..000000000 --- a/navit/speech/espeak/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=speech_espeak -if PLUGINS -modulespeech_LTLIBRARIES = libspeech_espeak.la -else -noinst_LTLIBRARIES = libspeech_espeak.la -endif -libspeech_espeak_la_SOURCES = speak.c -libspeech_espeak_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ -L$(top_builddir)/navit/support/espeak -lsupport_espeak -if !SUPPORT_WIN32CE -libspeech_espeak_la_LDFLAGS += -Wl,-lwinmm -endif - diff --git a/navit/speech/speech_dispatcher/Makefile.am b/navit/speech/speech_dispatcher/Makefile.am deleted file mode 100644 index a040740ef..000000000 --- a/navit/speech/speech_dispatcher/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=speech_speech_dispatcher -modulespeech_LTLIBRARIES = libspeech_speech_dispatcher.la -libspeech_speech_dispatcher_la_SOURCES = speech_speech_dispatcher.c -libspeech_speech_dispatcher_la_LIBADD = @SPEECHD_LIBS@ -libspeech_speech_dispatcher_la_LDFLAGS = -module -avoid-version diff --git a/navit/support/Makefile.am b/navit/support/Makefile.am deleted file mode 100644 index 9f63840a1..000000000 --- a/navit/support/Makefile.am +++ /dev/null @@ -1,32 +0,0 @@ -SUBDIRS= -if SUPPORT_ESPEAK - SUBDIRS+=espeak -endif -if SUPPORT_EZXML - SUBDIRS+=ezxml -endif -if SUPPORT_GLIB - SUBDIRS+=glib -endif -if SUPPORT_WORDEXP - SUBDIRS+=wordexp -endif -if SUPPORT_WIN32 - SUBDIRS+=win32 -endif -if SUPPORT_ZLIB - SUBDIRS+=zlib -endif -if SUPPORT_LIBC - SUBDIRS+=libc -endif -if SUPPORT_LIBPNG - SUBDIRS+=libpng -endif -if SPEECH_ESPEAK - SUBDIRS+=espeak -endif -if !HAVE_SYSTEM_SHAPEFILELIB - SUBDIRS+=shapefile -endif -DIST_SUBDIRS=espeak ezxml glib wordexp win32 zlib libc libpng shapefile diff --git a/navit/support/espeak/Makefile.am b/navit/support/espeak/Makefile.am deleted file mode 100755 index 3de91b41f..000000000 --- a/navit/support/espeak/Makefile.am +++ /dev/null @@ -1,67 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -DMODULE=support_espeak -noinst_LTLIBRARIES = libsupport_espeak.la -libsupport_espeak_la_SOURCES = compiledict.c dictionary.c intonation.c \ - readclause.c setlengths.c numbers.c synth_mbrola.c \ - synthdata.c synthesize.c translate.c \ - tr_languages.c voices.c wavegen.c phonemelist.c klatt.c speak_init.c -libsupport_espeak_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ - -#bin_PROGRAMS = speak - -#speak_SOURCES = speak.c $(libsupport_espeak_la_SOURCES) - -nobase_pkgdata_DATA = espeak-data/af_dict espeak-data/ca_dict espeak-data/config espeak-data/cs_dict espeak-data/cy_dict -nobase_pkgdata_DATA += espeak-data/da_dict espeak-data/de_dict espeak-data/el_dict espeak-data/en_dict espeak-data/eo_dict -nobase_pkgdata_DATA += espeak-data/es_dict espeak-data/fi_dict espeak-data/fr_dict espeak-data/grc_dict espeak-data/hbs_dict -nobase_pkgdata_DATA += espeak-data/hi_dict espeak-data/hu_dict espeak-data/hy_dict espeak-data/id_dict espeak-data/is_dict -nobase_pkgdata_DATA += espeak-data/it_dict espeak-data/jbo_dict espeak-data/ku_dict espeak-data/la_dict espeak-data/lv_dict -nobase_pkgdata_DATA += espeak-data/mk_dict espeak-data/nl_dict espeak-data/no_dict -nobase_pkgdata_DATA += espeak-data/pap_dict espeak-data/phondata espeak-data/phondata-manifest espeak-data/phonindex -nobase_pkgdata_DATA += espeak-data/phontab espeak-data/pl_dict espeak-data/pt_dict espeak-data/ro_dict espeak-data/ru_dict -nobase_pkgdata_DATA += espeak-data/sk_dict espeak-data/sq_dict espeak-data/sv_dict espeak-data/sw_dict espeak-data/ta_dict -nobase_pkgdata_DATA += espeak-data/tr_dict espeak-data/vi_dict espeak-data/voices/!v/croak espeak-data/voices/!v/f1 -nobase_pkgdata_DATA += espeak-data/voices/!v/f2 espeak-data/voices/!v/f3 espeak-data/voices/!v/f4 espeak-data/voices/!v/fast -nobase_pkgdata_DATA += espeak-data/voices/!v/m1 espeak-data/voices/!v/m2 espeak-data/voices/!v/m3 espeak-data/voices/!v/m4 -nobase_pkgdata_DATA += espeak-data/voices/!v/m5 espeak-data/voices/!v/m6 espeak-data/voices/!v/m7 espeak-data/voices/!v/whisper -nobase_pkgdata_DATA += espeak-data/voices/af espeak-data/voices/bs espeak-data/voices/ca espeak-data/voices/cs -nobase_pkgdata_DATA += espeak-data/voices/cy espeak-data/voices/da espeak-data/voices/de espeak-data/voices/default -nobase_pkgdata_DATA += espeak-data/voices/el espeak-data/voices/en/en espeak-data/voices/en/en-n espeak-data/voices/en/en-rp -nobase_pkgdata_DATA += espeak-data/voices/en/en-sc espeak-data/voices/en/en-us espeak-data/voices/en/en-wi -nobase_pkgdata_DATA += espeak-data/voices/en/en-wm espeak-data/voices/eo espeak-data/voices/es espeak-data/voices/es-la -nobase_pkgdata_DATA += espeak-data/voices/fi espeak-data/voices/fr espeak-data/voices/fr-be espeak-data/voices/hi -nobase_pkgdata_DATA += espeak-data/voices/hr espeak-data/voices/hu espeak-data/voices/hy espeak-data/voices/hy-west -nobase_pkgdata_DATA += espeak-data/voices/id espeak-data/voices/is espeak-data/voices/it espeak-data/voices/ku -nobase_pkgdata_DATA += espeak-data/voices/la espeak-data/voices/lv -nobase_pkgdata_DATA += espeak-data/voices/mk espeak-data/voices/nl espeak-data/voices/no espeak-data/voices/pl -nobase_pkgdata_DATA += espeak-data/voices/pt espeak-data/voices/pt-pt espeak-data/voices/ro espeak-data/voices/ru -nobase_pkgdata_DATA += espeak-data/voices/sk espeak-data/voices/sq espeak-data/voices/sr espeak-data/voices/sv -nobase_pkgdata_DATA += espeak-data/voices/sw espeak-data/voices/ta espeak-data/voices/test/grc espeak-data/voices/test/jbo -nobase_pkgdata_DATA += espeak-data/voices/test/pap espeak-data/voices/tr espeak-data/voices/vi espeak-data/voices/zh -nobase_pkgdata_DATA += espeak-data/voices/zh-yue espeak-data/zh_dict espeak-data/zhy_dict - -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/af1_phtrans espeak-data/mbrola_ph/ca1_phtrans espeak-data/mbrola_ph/cr1_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/cs_phtrans espeak-data/mbrola_ph/de2_phtrans espeak-data/mbrola_ph/de4_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/de6_phtrans espeak-data/mbrola_ph/en1_phtrans espeak-data/mbrola_ph/es_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/fr1_phtrans espeak-data/mbrola_ph/gr2_phtrans espeak-data/mbrola_ph/grc-de6_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/hu1_phtrans espeak-data/mbrola_ph/id1_phtrans espeak-data/mbrola_ph/in1_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/it3_phtrans espeak-data/mbrola_ph/la1_phtrans espeak-data/mbrola_ph/nl_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/pl1_phtrans espeak-data/mbrola_ph/pt1_phtrans espeak-data/mbrola_ph/pt_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/ptbr4_phtrans espeak-data/mbrola_ph/ptbr_phtrans espeak-data/mbrola_ph/ro1_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/sv2_phtrans espeak-data/mbrola_ph/sv_phtrans espeak-data/mbrola_ph/us3_phtrans -#nobase_pkgdata_DATA += espeak-data/mbrola_ph/us_phtrans -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-af1 espeak-data/voices/mb/mb-af1-en -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-br1 espeak-data/voices/mb/mb-br3 espeak-data/voices/mb/mb-br4 -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-cr1 espeak-data/voices/mb/mb-cz2 espeak-data/voices/mb/mb-de2 -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-de4 espeak-data/voices/mb/mb-de4-en espeak-data/voices/mb/mb-de5 -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-de5-en espeak-data/voices/mb/mb-de6 espeak-data/voices/mb/mb-de6-grc -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-de7 espeak-data/voices/mb/mb-en1 espeak-data/voices/mb/mb-es1 -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-es2 espeak-data/voices/mb/mb-fr1 espeak-data/voices/mb/mb-fr1-en -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-fr4 espeak-data/voices/mb/mb-fr4-en espeak-data/voices/mb/mb-gr2 -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-gr2-en espeak-data/voices/mb/mb-hu1 espeak-data/voices/mb/mb-hu1-en -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-id1 espeak-data/voices/mb/mb-it3 espeak-data/voices/mb/mb-it4 -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-la1 espeak-data/voices/mb/mb-nl2 espeak-data/voices/mb/mb-nl2-en -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-pl1 espeak-data/voices/mb/mb-pl1-en espeak-data/voices/mb/mb-pt1 -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-ro1 espeak-data/voices/mb/mb-ro1-en espeak-data/voices/mb/mb-sw1 -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-sw1-en espeak-data/voices/mb/mb-sw2 espeak-data/voices/mb/mb-sw2-en -#nobase_pkgdata_DATA += espeak-data/voices/mb/mb-us1 espeak-data/voices/mb/mb-us2 espeak-data/voices/mb/mb-us3 diff --git a/navit/support/ezxml/Makefile.am b/navit/support/ezxml/Makefile.am deleted file mode 100644 index 1b091a397..000000000 --- a/navit/support/ezxml/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=support_ezxml -DEZXML_NOMMAP -noinst_LTLIBRARIES = libsupport_ezxml.la -libsupport_ezxml_la_SOURCES = ezxml.c ezxml_init.c ezxml.h diff --git a/navit/support/gettext_intl/Makefile.in b/navit/support/gettext_intl/Makefile.in deleted file mode 100644 index 05f15329e..000000000 --- a/navit/support/gettext_intl/Makefile.in +++ /dev/null @@ -1,493 +0,0 @@ -# Makefile for directory with message catalog handling library of GNU gettext -# Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU Library General Public License as published -# by the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -# USA. - -PACKAGE = @PACKAGE@ -VERSION = @VERSION@ - -SHELL = /bin/sh - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -top_builddir = .. -VPATH = $(srcdir) - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -transform = @program_transform_name@ -libdir = @libdir@ -includedir = @includedir@ -datadir = @datadir@ -localedir = $(datadir)/locale -gettextsrcdir = $(datadir)/gettext/intl -aliaspath = $(localedir) -subdir = intl - -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = @MKINSTALLDIRS@ -mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) - -l = @INTL_LIBTOOL_SUFFIX_PREFIX@ - -AR = ar -CC = @CC@ -LIBTOOL = @LIBTOOL@ -RANLIB = @RANLIB@ -YACC = @INTLBISON@ -y -d -YFLAGS = --name-prefix=__gettext - -DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ --DLIBDIR=\"$(libdir)\" -DIN_LIBINTL \ --DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \ --Dset_relocation_prefix=libintl_set_relocation_prefix \ --Drelocate=libintl_relocate \ --DDEPENDS_ON_LIBICONV=1 @DEFS@ -CPPFLAGS = @CPPFLAGS@ -CFLAGS = @CFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ - -COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) - -HEADERS = \ - gmo.h \ - gettextP.h \ - hash-string.h \ - loadinfo.h \ - plural-exp.h \ - eval-plural.h \ - localcharset.h \ - relocatable.h \ - xsize.h \ - printf-args.h printf-args.c \ - printf-parse.h wprintf-parse.h printf-parse.c \ - vasnprintf.h vasnwprintf.h vasnprintf.c \ - os2compat.h \ - libgnuintl.h.in -SOURCES = \ - bindtextdom.c \ - dcgettext.c \ - dgettext.c \ - gettext.c \ - finddomain.c \ - loadmsgcat.c \ - localealias.c \ - textdomain.c \ - l10nflist.c \ - explodename.c \ - dcigettext.c \ - dcngettext.c \ - dngettext.c \ - ngettext.c \ - plural.y \ - plural-exp.c \ - localcharset.c \ - relocatable.c \ - localename.c \ - log.c \ - printf.c \ - osdep.c \ - os2compat.c \ - intl-compat.c -OBJECTS = \ - bindtextdom.$lo \ - dcgettext.$lo \ - dgettext.$lo \ - gettext.$lo \ - finddomain.$lo \ - loadmsgcat.$lo \ - localealias.$lo \ - textdomain.$lo \ - l10nflist.$lo \ - explodename.$lo \ - dcigettext.$lo \ - dcngettext.$lo \ - dngettext.$lo \ - ngettext.$lo \ - plural.$lo \ - plural-exp.$lo \ - localcharset.$lo \ - relocatable.$lo \ - localename.$lo \ - log.$lo \ - printf.$lo \ - osdep.$lo \ - intl-compat.$lo -DISTFILES.common = Makefile.in \ -config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES) -DISTFILES.generated = plural.c -DISTFILES.normal = VERSION -DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \ -libgnuintl.h_vms Makefile.vms \ -libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc -DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \ -COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h - -all: all-@USE_INCLUDED_LIBINTL@ -all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed -all-no: all-no-@BUILD_INCLUDED_LIBINTL@ -all-no-yes: libgnuintl.$la -all-no-no: - -libintl.a libgnuintl.a: $(OBJECTS) - rm -f $@ - $(AR) cru $@ $(OBJECTS) - $(RANLIB) $@ - -libintl.la libgnuintl.la: $(OBJECTS) - $(LIBTOOL) --mode=link \ - $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ - $(OBJECTS) @LTLIBICONV@ $(LIBS) -lc \ - -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ - -rpath $(libdir) \ - -no-undefined - -# Libtool's library version information for libintl. -# Before making a gettext release, the gettext maintainer must change this -# according to the libtool documentation, section "Library interface versions". -# Maintainers of other packages that include the intl directory must *not* -# change these values. -LTV_CURRENT=7 -LTV_REVISION=0 -LTV_AGE=4 - -.SUFFIXES: -.SUFFIXES: .c .y .o .lo .sin .sed - -.c.o: - $(COMPILE) $< - -.y.c: - $(YACC) $(YFLAGS) --output $@ $< - rm -f $*.h - -bindtextdom.lo: $(srcdir)/bindtextdom.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c -dcgettext.lo: $(srcdir)/dcgettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c -dgettext.lo: $(srcdir)/dgettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c -gettext.lo: $(srcdir)/gettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c -finddomain.lo: $(srcdir)/finddomain.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c -loadmsgcat.lo: $(srcdir)/loadmsgcat.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c -localealias.lo: $(srcdir)/localealias.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c -textdomain.lo: $(srcdir)/textdomain.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c -l10nflist.lo: $(srcdir)/l10nflist.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c -explodename.lo: $(srcdir)/explodename.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c -dcigettext.lo: $(srcdir)/dcigettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c -dcngettext.lo: $(srcdir)/dcngettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c -dngettext.lo: $(srcdir)/dngettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c -ngettext.lo: $(srcdir)/ngettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c -plural.lo: $(srcdir)/plural.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c -plural-exp.lo: $(srcdir)/plural-exp.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c -localcharset.lo: $(srcdir)/localcharset.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c -relocatable.lo: $(srcdir)/relocatable.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c -localename.lo: $(srcdir)/localename.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c -log.lo: $(srcdir)/log.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c -printf.lo: $(srcdir)/printf.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c -osdep.lo: $(srcdir)/osdep.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c -intl-compat.lo: $(srcdir)/intl-compat.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c - -ref-add.sed: $(srcdir)/ref-add.sin - sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed - mv t-ref-add.sed ref-add.sed -ref-del.sed: $(srcdir)/ref-del.sin - sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed - mv t-ref-del.sed ref-del.sed - -INCLUDES = -I. -I$(srcdir) -I.. - -libgnuintl.h: $(srcdir)/libgnuintl.h.in - sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \ - -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \ - -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \ - -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \ - < $(srcdir)/libgnuintl.h.in > libgnuintl.h - -libintl.h: libgnuintl.h - cp libgnuintl.h libintl.h - -charset.alias: $(srcdir)/config.charset - $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ - mv t-$@ $@ - -check: all - -# We must not install the libintl.h/libintl.a files if we are on a -# system which has the GNU gettext() function in its C library or in a -# separate library. -# If you want to use the one which comes with this version of the -# package, you have to use `configure --with-included-gettext'. -install: install-exec install-data -install-exec: all - if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ - && test '@USE_INCLUDED_LIBINTL@' = yes; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ - $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ - $(LIBTOOL) --mode=install \ - $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ - if test "@RELOCATABLE@" = yes; then \ - dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \ - if test -n "$$dependencies"; then \ - rm -f $(DESTDIR)$(libdir)/libintl.la; \ - fi; \ - fi; \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools" \ - && test '@USE_INCLUDED_LIBINTL@' = no; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir); \ - $(LIBTOOL) --mode=install \ - $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \ - rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ - $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \ - $(LIBTOOL) --mode=uninstall \ - rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \ - else \ - : ; \ - fi - if test '@USE_INCLUDED_LIBINTL@' = yes; then \ - test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \ - temp=$(DESTDIR)$(libdir)/t-charset.alias; \ - dest=$(DESTDIR)$(libdir)/charset.alias; \ - if test -f $(DESTDIR)$(libdir)/charset.alias; then \ - orig=$(DESTDIR)$(libdir)/charset.alias; \ - sed -f ref-add.sed $$orig > $$temp; \ - $(INSTALL_DATA) $$temp $$dest; \ - rm -f $$temp; \ - else \ - if test @GLIBC21@ = no; then \ - orig=charset.alias; \ - sed -f ref-add.sed $$orig > $$temp; \ - $(INSTALL_DATA) $$temp $$dest; \ - rm -f $$temp; \ - fi; \ - fi; \ - $(mkinstalldirs) $(DESTDIR)$(localedir); \ - test -f $(DESTDIR)$(localedir)/locale.alias \ - && orig=$(DESTDIR)$(localedir)/locale.alias \ - || orig=$(srcdir)/locale.alias; \ - temp=$(DESTDIR)$(localedir)/t-locale.alias; \ - dest=$(DESTDIR)$(localedir)/locale.alias; \ - sed -f ref-add.sed $$orig > $$temp; \ - $(INSTALL_DATA) $$temp $$dest; \ - rm -f $$temp; \ - else \ - : ; \ - fi -install-data: all - if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ - $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ - $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ - dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \ - for file in $$dists; do \ - $(INSTALL_DATA) $(srcdir)/$$file \ - $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ - dists="$(DISTFILES.generated)"; \ - for file in $$dists; do \ - if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ - $(INSTALL_DATA) $$dir/$$file \ - $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - dists="$(DISTFILES.obsolete)"; \ - for file in $$dists; do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi - -install-strip: install - -installdirs: - if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ - && test '@USE_INCLUDED_LIBINTL@' = yes; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools" \ - && test '@USE_INCLUDED_LIBINTL@' = no; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir); \ - else \ - : ; \ - fi - if test '@USE_INCLUDED_LIBINTL@' = yes; then \ - test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \ - $(mkinstalldirs) $(DESTDIR)$(localedir); \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ - else \ - : ; \ - fi - -# Define this as empty until I found a useful application. -installcheck: - -uninstall: - if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ - && test '@USE_INCLUDED_LIBINTL@' = yes; then \ - rm -f $(DESTDIR)$(includedir)/libintl.h; \ - $(LIBTOOL) --mode=uninstall \ - rm -f $(DESTDIR)$(libdir)/libintl.$la; \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools" \ - && test '@USE_INCLUDED_LIBINTL@' = no; then \ - rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ - else \ - : ; \ - fi - if test '@USE_INCLUDED_LIBINTL@' = yes; then \ - if test -f $(DESTDIR)$(libdir)/charset.alias; then \ - temp=$(DESTDIR)$(libdir)/t-charset.alias; \ - dest=$(DESTDIR)$(libdir)/charset.alias; \ - sed -f ref-del.sed $$dest > $$temp; \ - if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ - rm -f $$dest; \ - else \ - $(INSTALL_DATA) $$temp $$dest; \ - fi; \ - rm -f $$temp; \ - fi; \ - if test -f $(DESTDIR)$(localedir)/locale.alias; then \ - temp=$(DESTDIR)$(localedir)/t-locale.alias; \ - dest=$(DESTDIR)$(localedir)/locale.alias; \ - sed -f ref-del.sed $$dest > $$temp; \ - if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ - rm -f $$dest; \ - else \ - $(INSTALL_DATA) $$temp $$dest; \ - fi; \ - rm -f $$temp; \ - fi; \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools"; then \ - for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi - -info dvi ps pdf html: - -$(OBJECTS): ../config.h libgnuintl.h -bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h -dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h -explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h -dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h -dcigettext.$lo: $(srcdir)/eval-plural.h -localcharset.$lo: $(srcdir)/localcharset.h -localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h -printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c - -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) - here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) - -ctags: CTAGS - -CTAGS: $(HEADERS) $(SOURCES) - here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES) - -id: ID - -ID: $(HEADERS) $(SOURCES) - here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) - - -mostlyclean: - rm -f *.a *.la *.o *.obj *.lo core core.* - rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed - rm -f -r .libs _libs - -clean: mostlyclean - -distclean: clean - rm -f Makefile ID TAGS - if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \ - rm -f ChangeLog.inst $(DISTFILES.normal); \ - else \ - : ; \ - fi - -maintainer-clean: distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - - -# GNU gettext needs not contain the file `VERSION' but contains some -# other files which should not be distributed in other packages. -distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: Makefile - if test "$(PACKAGE)" = "gettext-tools"; then \ - : ; \ - else \ - if test "$(PACKAGE)" = "gettext-runtime"; then \ - additional="$(DISTFILES.gettext)"; \ - else \ - additional="$(DISTFILES.normal)"; \ - fi; \ - $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ - for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ - if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ - cp -p $$dir/$$file $(distdir); \ - done; \ - fi - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status -# This would be more efficient, but doesn't work any more with autoconf-2.57, -# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used. -# cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -# Tell versions [3.59,3.63) of GNU make not to export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/navit/support/glib/Makefile.am b/navit/support/glib/Makefile.am deleted file mode 100644 index c268053f1..000000000 --- a/navit/support/glib/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -I$(top_srcdir)/navit/support -DMODULE=support_glib -noinst_LTLIBRARIES = libsupport_glib.la -libsupport_glib_la_SOURCES = fake.c galiasdef.c gatomic.c gerror.c \ - ghash.c glib_init.c glist.c gmem.c gmessages.c gprimes.c gprintf.c gslice.c \ - gslist.c gstrfuncs.c gstring.c gutils.c gutf8.c \ - fake.h galias.h gerror.h ghash.h glib.h glibconfig.h glibintl.h glist.h \ - gmacros.h gmem.h gmessages.h gprintf.h gprintfint.h gquark.h gslice.h \ - gslist.h gstrfuncs.h gthreadprivate.h gtypes.h diff --git a/navit/support/libc/Makefile.am b/navit/support/libc/Makefile.am deleted file mode 100644 index fae600f8f..000000000 --- a/navit/support/libc/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=support_libc -noinst_LTLIBRARIES = libsupport_libc.la -libsupport_libc_la_SOURCES = libc.c libc_init.c -if SUPPORT_WIN32CE -noinst_LIBRARIES = libc.a -libc_a_SOURCES = -endif diff --git a/navit/support/libpng/Makefile.am b/navit/support/libpng/Makefile.am deleted file mode 100644 index e8ed41c1e..000000000 --- a/navit/support/libpng/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit @ZLIB_CFLAGS@ -DMODULE=support_libpng -noinst_LTLIBRARIES = libsupport_libpng.la -libsupport_libpng_la_SOURCES = png.c pngerror.c pngget.c pngmem.c pngread.c pngrio.c pngrtran.c pngrutil.c pngset.c pngtrans.c libpng_init.c - -#bin_PROGRAMS = pngm2pnm -#pngm2pnm_LDADD=libsupport_libpng.la @ZLIB_LIBS@ - diff --git a/navit/support/shapefile/Makefile.am b/navit/support/shapefile/Makefile.am deleted file mode 100644 index 3f5115ca1..000000000 --- a/navit/support/shapefile/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=support_shapefile -noinst_LTLIBRARIES = libsupport_shapefile.la -libsupport_shapefile_la_SOURCES = dbfopen.c shpopen.c shptree.c shapefil.h diff --git a/navit/support/win32/Makefile.am b/navit/support/win32/Makefile.am deleted file mode 100644 index aee4350cb..000000000 --- a/navit/support/win32/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=support_win32 -noinst_LTLIBRARIES = libsupport_win32.la -libsupport_win32_la_SOURCES = mmap.c win32_init.c sys/mman.h ConvertUTF.c ConvertUTF.h serial_io.c addwinsock.c - diff --git a/navit/support/wordexp/Makefile.am b/navit/support/wordexp/Makefile.am deleted file mode 100644 index 44d5ad272..000000000 --- a/navit/support/wordexp/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=support_wordexp -noinst_LTLIBRARIES = libsupport_wordexp.la -libsupport_wordexp_la_SOURCES = wordexp.c wordexp_init.c wordexp.h glob.c glob.h diff --git a/navit/support/zlib/Makefile.am b/navit/support/zlib/Makefile.am deleted file mode 100644 index a49fe3ca7..000000000 --- a/navit/support/zlib/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=support_zlib -noinst_LTLIBRARIES = libsupport_zlib.la -libsupport_zlib_la_SOURCES = adler32.c crc32.c crc32.h infback.c inffast.c inffast.h inffixed.h inflate.c inflate.h inftrees.c inftrees.h zconf.h zlib.h zutil.c zutil.h zlib_init.c diff --git a/navit/tools/gpx2navit_txt/Makefile.am b/navit/tools/gpx2navit_txt/Makefile.am deleted file mode 100644 index 05f1ce1a0..000000000 --- a/navit/tools/gpx2navit_txt/Makefile.am +++ /dev/null @@ -1,27 +0,0 @@ -SUBDIRS = src man - -EXTRA_DIST = gps2shp pinatest2.gpx debian develop - -debian-dist: - dpkg-buildpackage -rfakeroot -d -tc -us -uc - -CLEANFILES = \ - pinatest2_wpt.shx \ - pinatest2_wpt.shp \ - pinatest2_wpt.dbf \ - pinatest2_trk.shx \ - pinatest2_trk.shp \ - pinatest2_trk.dbf \ - pinatest2_rte.shx \ - pinatest2_rte.shp \ - pinatest2_rte.dbf \ - pinatest2_meta.txt - -GPX2SHP=src/gpx2shp -check: $(GPX2SHP) - $(GPX2SHP) || true - $(GPX2SHP) --version - $(GPX2SHP) -s pinatest2.gpx - $(GPX2SHP) -e pinatest2.gpx - $(GPX2SHP) -p pinatest2.gpx - $(GPX2SHP) -v pinatest2.gpx > /dev/null diff --git a/navit/tools/gpx2navit_txt/man/Makefile.am b/navit/tools/gpx2navit_txt/man/Makefile.am deleted file mode 100644 index 71f0f055d..000000000 --- a/navit/tools/gpx2navit_txt/man/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -man_MANS = gpx2navit_txt.1 -EXTRA_DIST = $(man_MANS) diff --git a/navit/tools/gpx2navit_txt/src/Makefile.am b/navit/tools/gpx2navit_txt/src/Makefile.am deleted file mode 100644 index 5cce6fa3c..000000000 --- a/navit/tools/gpx2navit_txt/src/Makefile.am +++ /dev/null @@ -1,26 +0,0 @@ -bin_PROGRAMS = gpx2navit_txt - -gpx2navit_txt_SOURCES = \ - emess.h \ - geod_for.c \ - geod_inv.c \ - geod_set.c \ - geodesic.h \ - gpx2navit_txt.h \ - main.c \ - misc.c \ - utils.c \ - parser.c \ - elementControl.c\ - setwpt.c \ - setpath.c \ - setmeta.c \ - errorcode.h - -INCLUDES= -I$(srcdir) - -AM_CFLAGS = -g - -debian-dist: - dpkg-buildpackage -rfakeroot -d -tc -us -uc - diff --git a/navit/vehicle/Makefile.am b/navit/vehicle/Makefile.am deleted file mode 100644 index 80fc84db7..000000000 --- a/navit/vehicle/Makefile.am +++ /dev/null @@ -1,34 +0,0 @@ -SUBDIRS= -if VEHICLE_MAEMO - SUBDIRS += maemo -endif -if VEHICLE_ANDROID - SUBDIRS += android -endif -if VEHICLE_IPHONE - SUBDIRS += iphone -endif -if VEHICLE_DEMO - SUBDIRS += demo -endif -if VEHICLE_FILE - SUBDIRS += file -endif -if VEHICLE_GPSD - SUBDIRS += gpsd -endif -if VEHICLE_GPSD_DBUS - SUBDIRS += gpsd_dbus -endif -if VEHICLE_GYPSY - SUBDIRS += gypsy -endif -if VEHICLE_NULL - SUBDIRS += null -endif -if VEHICLE_WINCE - SUBDIRS += wince -endif -if VEHICLE_WEBOS - SUBDIRS += webos -endif diff --git a/navit/vehicle/android/Makefile.am b/navit/vehicle/android/Makefile.am deleted file mode 100644 index 7f7799acb..000000000 --- a/navit/vehicle/android/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_android -modulevehicle_LTLIBRARIES = libvehicle_android.la -libvehicle_android_la_SOURCES = vehicle_android.c -libvehicle_android_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/vehicle/demo/Makefile.am b/navit/vehicle/demo/Makefile.am deleted file mode 100644 index 5662119d4..000000000 --- a/navit/vehicle/demo/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_demo -if PLUGINS -modulevehicle_LTLIBRARIES = libvehicle_demo.la -else -noinst_LTLIBRARIES = libvehicle_demo.la -endif -libvehicle_demo_la_SOURCES = vehicle_demo.c -libvehicle_demo_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/vehicle/file/Makefile.am b/navit/vehicle/file/Makefile.am deleted file mode 100644 index ce3a45b65..000000000 --- a/navit/vehicle/file/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -modulevehicle_LTLIBRARIES = libvehicle_file.la libvehicle_pipe.la libvehicle_socket.la libvehicle_serial.la -libvehicle_file_la_CFLAGS=-DMODULE=vehicle_file -libvehicle_file_la_SOURCES = vehicle_file.c -libvehicle_file_la_LDFLAGS = -module -avoid-version @NAVIT_SOCKET_LDFLAGS@ @NAVIT_MODULE_LDFLAGS@ -libvehicle_pipe_la_CFLAGS=-DMODULE=vehicle_pipe -libvehicle_pipe_la_SOURCES = vehicle_pipe.c -libvehicle_pipe_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ -libvehicle_socket_la_CFLAGS=-DMODULE=vehicle_socket -libvehicle_socket_la_SOURCES = vehicle_socket.c -libvehicle_socket_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ -libvehicle_serial_la_CFLAGS=-DMODULE=vehicle_serial -libvehicle_serial_la_SOURCES = vehicle_serial.c -libvehicle_serial_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/vehicle/gpsd/Makefile.am b/navit/vehicle/gpsd/Makefile.am deleted file mode 100644 index 1c47ccc56..000000000 --- a/navit/vehicle/gpsd/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @GPSBT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_gpsd -modulevehicle_LTLIBRARIES = libvehicle_gpsd.la -libvehicle_gpsd_la_SOURCES = vehicle_gpsd.c -libvehicle_gpsd_la_LIBADD = @GPSD_LIBS@ @GPSBT_LIBS@ -libvehicle_gpsd_la_LDFLAGS = -module -avoid-version diff --git a/navit/vehicle/gpsd_dbus/Makefile.am b/navit/vehicle/gpsd_dbus/Makefile.am deleted file mode 100644 index 4685d2ea8..000000000 --- a/navit/vehicle/gpsd_dbus/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @DBUS_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_gpsd_dbus -modulevehicle_LTLIBRARIES = libvehicle_gpsd_dbus.la -libvehicle_gpsd_dbus_la_SOURCES = vehicle_gpsd_dbus.c -libvehicle_gpsd_dbus_la_LIBADD = @DBUS_LIBS@ -libvehicle_gpsd_dbus_la_LDFLAGS = -module -avoid-version diff --git a/navit/vehicle/gypsy/Makefile.am b/navit/vehicle/gypsy/Makefile.am deleted file mode 100644 index 1e997f23c..000000000 --- a/navit/vehicle/gypsy/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @DBUS_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_gypsy -modulevehicle_LTLIBRARIES = libvehicle_gypsy.la -libvehicle_gypsy_la_SOURCES = vehicle_gypsy.c -libvehicle_gypsy_la_LIBADD = @GYPSY_LIBS@ -libvehicle_gypsy_la_LDFLAGS = -module -avoid-version diff --git a/navit/vehicle/iphone/Makefile.am b/navit/vehicle/iphone/Makefile.am deleted file mode 100644 index 7abb872f4..000000000 --- a/navit/vehicle/iphone/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_iphone -modulevehicle_LTLIBRARIES = libvehicle_iphone.la -libvehicle_iphone_la_SOURCES = vehicle_iphone.c corelocation.m -libvehicle_iphone_la_LDFLAGS = -module -Wl,-framework,CoreLocation -libvehicle_iphone_la_LIBADD = @IPHONE_LIBS@ diff --git a/navit/vehicle/maemo/Makefile.am b/navit/vehicle/maemo/Makefile.am deleted file mode 100644 index d82bdb699..000000000 --- a/navit/vehicle/maemo/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @LIBLOCATION_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_maemo -modulevehicle_LTLIBRARIES = libvehicle_maemo.la -libvehicle_maemo_la_SOURCES = vehicle_maemo.c -libvehicle_maemo_la_LIBADD = @LIBLOCATION_LIBS@ -libvehicle_maemo_la_LDFLAGS = -module -avoid-version diff --git a/navit/vehicle/null/Makefile.am b/navit/vehicle/null/Makefile.am deleted file mode 100644 index 83387eb27..000000000 --- a/navit/vehicle/null/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_null -if PLUGINS - modulevehicle_LTLIBRARIES = libvehicle_null.la -else - noinst_LTLIBRARIES = libvehicle_null.la -endif -libvehicle_null_la_SOURCES = vehicle_null.c -libvehicle_null_la_LDFLAGS = -module -avoid-version @NAVIT_MODULE_LDFLAGS@ diff --git a/navit/vehicle/qt5/CMakeLists.txt b/navit/vehicle/qt5/CMakeLists.txt new file mode 100644 index 000000000..411d9d6ee --- /dev/null +++ b/navit/vehicle/qt5/CMakeLists.txt @@ -0,0 +1,6 @@ +# Find includes in corresponding build directories +set(CMAKE_INCLUDE_CURRENT_DIR ON) +# Instruct CMake to run moc automatically when needed. +set(CMAKE_AUTOMOC ON) + +module_add_library(vehicle_qt5 vehicle_qt5.cpp) diff --git a/navit/vehicle/qt5/vehicle_qt5.cpp b/navit/vehicle/qt5/vehicle_qt5.cpp new file mode 100644 index 000000000..d6d33d7ab --- /dev/null +++ b/navit/vehicle/qt5/vehicle_qt5.cpp @@ -0,0 +1,300 @@ +/** @file vehicle_null.c + * @brief null uses dbus signals + * + * Navit, a modular navigation system. + * Copyright (C) 2005-2008 Navit Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * @Author Tim Niemeyer <reddog@mastersword.de> + * @date 2008-2009 + */ + +#include "vehicle_qt5.h" +#include "vehicle_qt5.moc" +#include <QDateTime> +QNavitGeoReceiver::QNavitGeoReceiver (QObject * parent, struct vehicle_priv * c):QObject(parent) +{ + priv = c; + if(priv->source != NULL) + { + connect(priv->source, SIGNAL(positionUpdated(QGeoPositionInfo)),this, SLOT(positionUpdated(QGeoPositionInfo))); + } + if(priv->satellites != NULL) + { + connect(priv->satellites, SIGNAL(satellitesInUseUpdated(const QList<QGeoSatelliteInfo> &)), this, SLOT(satellitesInUseUpdated(const QList<QGeoSatelliteInfo> &))); + connect(priv->satellites, SIGNAL(satellitesInViewUpdated(const QList<QGeoSatelliteInfo> &)), this, SLOT(satellitesInViewUpdated(const QList<QGeoSatelliteInfo> &))); + } +} +void QNavitGeoReceiver::satellitesInUseUpdated(const QList<QGeoSatelliteInfo> & sats) +{ + dbg(lvl_debug, "Sats in use: %d\n", sats.count()); + priv->sats_used = sats.count(); + callback_list_call_attr_0(priv->cbl, attr_position_sats_used); +} + +void QNavitGeoReceiver::satellitesInViewUpdated(const QList<QGeoSatelliteInfo> & sats) +{ + dbg(lvl_debug, "Sats in view: %d\n", sats.count()); + priv->sats = sats.count(); + callback_list_call_attr_0(priv->cbl, attr_position_qual); +} + +void QNavitGeoReceiver::positionUpdated(const QGeoPositionInfo &info) +{ + + /* ignore stale view */ + if(info.coordinate().isValid()) + { + if(info.timestamp().toUTC().secsTo(QDateTime::currentDateTimeUtc()) > 20) + { + dbg(lvl_debug,"Ignoring old FIX\n"); + return; + } + } + + if(info.hasAttribute(QGeoPositionInfo::HorizontalAccuracy)) + { + dbg(lvl_debug,"Horizontal acc (%f)\n",info.attribute(QGeoPositionInfo::HorizontalAccuracy)); + priv->radius = info.attribute(QGeoPositionInfo::HorizontalAccuracy); + callback_list_call_attr_0(priv->cbl, attr_position_radius); + } + if(info.hasAttribute(QGeoPositionInfo::GroundSpeed)) + { + dbg(lvl_debug,"Got ground speed (%f)\n",info.attribute(QGeoPositionInfo::GroundSpeed)); + priv->speed = info.attribute(QGeoPositionInfo::GroundSpeed) * 3.6; + callback_list_call_attr_0(priv->cbl, attr_position_speed); + } + if(info.hasAttribute(QGeoPositionInfo::Direction)) + { + dbg(lvl_debug,"Direction (%f)\n",info.attribute(QGeoPositionInfo::Direction)); + priv->direction = info.attribute(QGeoPositionInfo::Direction); + callback_list_call_attr_0(priv->cbl, attr_position_direction); + } + + switch(info.coordinate().type()) + { + case QGeoCoordinate::Coordinate3D: + priv->fix_type = 2; + break; + case QGeoCoordinate::Coordinate2D: + priv->fix_type = 1; + break; + case QGeoCoordinate::InvalidCoordinate: + priv->fix_type = 0; + break; + } + + + if(info.coordinate().isValid()) + { + dbg(lvl_debug, "Got valid coordinate (lat %f, lon %f)\n", info.coordinate().latitude(), info.coordinate().longitude()); + priv->geo.lat = info.coordinate().latitude(); + priv->geo.lng = info.coordinate().longitude(); + priv->have_coords = 1; + if(info.coordinate().type() == QGeoCoordinate::Coordinate3D) + { + dbg(lvl_debug,"Got valid altitude (alt %f)\n", info.coordinate().altitude()); + priv->height = info.coordinate().altitude(); + } + //dbg(lvl_debug, "Time %s\n", info.timestamp().toUTC().toString().toLatin1().data()); + priv->fix_time = info.timestamp().toUTC().toTime_t(); + callback_list_call_attr_0(priv->cbl, attr_position_coord_geo); + } + else + { + dbg(lvl_debug, "Got invalid coordinate\n"); + priv->have_coords = 0; + callback_list_call_attr_0(priv->cbl, attr_position_coord_geo); + } +} + + +/** + * @brief Free the null_vehicle + * + * @param priv + * @returns nothing + */ +static void +vehicle_qt5_destroy(struct vehicle_priv *priv) +{ + dbg(lvl_debug,"enter\n"); + if(priv->receiver != NULL) + delete priv->receiver; + if(priv->source != NULL) + delete priv->source; + g_free(priv); +} + +/** + * @brief Provide the outside with information + * + * @param priv + * @param type TODO: What can this be? + * @param attr + * @returns true/false + */ +static int +vehicle_qt5_position_attr_get(struct vehicle_priv *priv, + enum attr_type type, struct attr *attr) +{ + struct attr * active=NULL; + dbg(lvl_debug,"enter %s\n",attr_to_name(type)); + switch (type) { + case attr_position_valid: + attr->u.num = priv->have_coords; + break; + case attr_position_fix_type: + attr->u.num = priv->fix_type; + break; + case attr_position_height: + attr->u.numd = &priv->height; + break; + case attr_position_speed: + attr->u.numd = &priv->speed; + break; + case attr_position_direction: + attr->u.numd = &priv->direction; + break; + case attr_position_radius: + attr->u.numd = &priv->radius; + break; + case attr_position_qual: + attr->u.num = priv->sats; + break; + case attr_position_sats_used: + attr->u.num = priv->sats_used; + break; + case attr_position_coord_geo: + attr->u.coord_geo = &priv->geo; + if (!priv->have_coords) + return 0; + break; + case attr_position_time_iso8601: + if (priv->fix_time) { + struct tm tm; + if (gmtime_r(&priv->fix_time, &tm)) { + strftime(priv->fixiso8601, sizeof(priv->fixiso8601), + "%Y-%m-%dT%TZ", &tm); + attr->u.str=priv->fixiso8601; + } + else { + priv->fix_time = 0; + return 0; + } + //dbg(lvl_debug,"Fix Time: %s\n", priv->fixiso8601); + } + else { + //dbg(lvl_debug,"Fix Time: 0\n"); + return 0; + } + break; + + case attr_active: + active = attr_search(priv->attrs,NULL,attr_active); + if(active != NULL) { + attr->u.num=active->u.num; + return 1; + } else + return 0; + break; + + default: + return 0; + } + dbg(lvl_debug,"ok\n"); + attr->type = type; + return 1; +} + +static int +vehicle_qt5_set_attr(struct vehicle_priv *priv, struct attr *attr) +{ + switch (attr->type) { + case attr_position_speed: + priv->speed=*attr->u.numd; + break; + case attr_position_direction: + priv->direction=*attr->u.numd; + break; + case attr_position_coord_geo: + priv->geo=*attr->u.coord_geo; + priv->have_coords=1; + break; + default: + break; + } + callback_list_call_attr_0(priv->cbl, attr->type); + return 1; +} + + +struct vehicle_methods vehicle_null_methods = { + vehicle_qt5_destroy, + vehicle_qt5_position_attr_get, + vehicle_qt5_set_attr, +}; + +/** + * @brief Create null_vehicle + * + * @param meth + * @param cbl + * @param attrs + * @returns vehicle_priv + */ +static struct vehicle_priv * +vehicle_qt5_new_qt5(struct vehicle_methods *meth, + struct callback_list *cbl, + struct attr **attrs) +{ + struct vehicle_priv *ret; + + dbg(lvl_debug, "enter\n"); + ret = g_new0(struct vehicle_priv, 1); + ret->cbl = cbl; + *meth = vehicle_null_methods; + ret->attrs = attrs; + ret->source = QGeoPositionInfoSource::createDefaultSource(NULL); + ret->satellites = QGeoSatelliteInfoSource::createDefaultSource(NULL); + if(ret->source == NULL) + { + dbg(lvl_error, "Got NO QGeoPositionInfoSource\n"); + } + else + { + dbg(lvl_debug, "Using %s\n", ret->source->sourceName().toLatin1().data()); + ret->receiver = new QNavitGeoReceiver(NULL,ret); + ret->satellites->setUpdateInterval(1000); + ret->satellites->startUpdates(); + ret->source->setUpdateInterval(500); + ret->source->startUpdates(); + } + dbg(lvl_debug, "return\n"); + return ret; +} + +/** + * @brief register vehicle_null + * + * @returns nothing + */ +void +plugin_init(void) +{ + dbg(lvl_debug, "enter\n"); + plugin_register_category_vehicle("qt5", vehicle_qt5_new_qt5); +} diff --git a/navit/vehicle/qt5/vehicle_qt5.h b/navit/vehicle/qt5/vehicle_qt5.h new file mode 100644 index 000000000..c38c45284 --- /dev/null +++ b/navit/vehicle/qt5/vehicle_qt5.h @@ -0,0 +1,58 @@ +#ifndef __vehicle_qt5_h +#define __vehicle_qt5_h + +#include <config.h> +#include <string.h> +#include <glib.h> +#include <math.h> +#include <time.h> +#include "debug.h" +#include "plugin.h" +#include "coord.h" +#include "item.h" +#include "vehicle.h" + +#include <QObject> +#include <QStringList> +#include <QGeoPositionInfoSource> +#include <QGeoSatelliteInfoSource> + +#include "callback.h" + +#include <QObject> + +class QNavitGeoReceiver; +struct vehicle_priv { + struct callback_list *cbl; + struct coord_geo geo; + double speed; + double direction; + double height; + double radius; + int fix_type; + time_t fix_time; + char fixiso8601[128]; + int sats; + int sats_used; + int have_coords; + struct attr ** attrs; + + QGeoPositionInfoSource *source; + QGeoSatelliteInfoSource *satellites; + QNavitGeoReceiver * receiver; +}; + +class QNavitGeoReceiver : public QObject +{ + Q_OBJECT +public: + QNavitGeoReceiver (QObject * parent, struct vehicle_priv * c); +public slots: + void positionUpdated(const QGeoPositionInfo &info); + void satellitesInUseUpdated(const QList<QGeoSatelliteInfo> & satellites); + void satellitesInViewUpdated(const QList<QGeoSatelliteInfo> & satellites); + +private: + struct vehicle_priv * priv; +}; +#endif
\ No newline at end of file diff --git a/navit/vehicle/webos/Makefile.am b/navit/vehicle/webos/Makefile.am deleted file mode 100644 index 15f8767fc..000000000 --- a/navit/vehicle/webos/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ @SDL_CFLAGS@ @LIBPDL_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_webos -modulevehicle_LTLIBRARIES = libvehicle_webos.la -libvehicle_webos_la_SOURCES = vehicle_webos.c bluetooth.c cJSON.c -libvehicle_webos_la_LDFLAGS = @SDL_LIBS@ @LIBPDL_LIBS@ -module -avoid-version diff --git a/navit/vehicle/wince/Makefile.am b/navit/vehicle/wince/Makefile.am deleted file mode 100644 index af6fcb19d..000000000 --- a/navit/vehicle/wince/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -include $(top_srcdir)/Makefile.inc -AM_CPPFLAGS = @NAVIT_CFLAGS@ -I$(top_srcdir)/navit -DMODULE=vehicle_wince -if PLUGINS -modulevehicle_LTLIBRARIES = libvehicle_wince.la -else -noinst_LTLIBRARIES = libvehicle_wince.la -endif -libvehicle_wince_la_SOURCES = vehicle_wince.c -libvehicle_wince_la_LDFLAGS = -module -avoid-version diff --git a/navit/xpm/Makefile.am b/navit/xpm/Makefile.am deleted file mode 100644 index 40b7cc851..000000000 --- a/navit/xpm/Makefile.am +++ /dev/null @@ -1,341 +0,0 @@ -include $(top_srcdir)/Makefile.inc - -image_DATA = cemetery.xpm -image_DATA += dumping_station.xpm -image_DATA += highway_exit.xpm -image_DATA += hunting_stand.xpm -image_DATA += level_crossing.xpm -image_DATA += tower.xpm -image_DATA += trailerpark.xpm -image_DATA += public_office.xpm - - -## Obsolete. Should be removed eventually... - -image_DATA += biergarten.xpm -image_DATA += bus_halt.xpm -image_DATA += car_dealer.xpm -image_DATA += castle.xpm -image_DATA += library.xpm -image_DATA += memorial.xpm -image_DATA += picnic.xpm -image_DATA += potable_water.xpm -image_DATA += restroom.xpm -image_DATA += sport.xpm -image_DATA += menu.xpm -image_DATA += toggle_fullscreen.xpm - -## Obsolete end - - -image_DATA += flag_bk_tr.xpm -image_DATA += flag_bk_wh.xpm -image_DATA += flag_bl_wh.xpm -image_DATA += flag_wh_bk.xpm - -image_DATA += gc_tradi.xpm -image_DATA += gc_multi.xpm -image_DATA += gc_mystery.xpm -image_DATA += gc_event.xpm -image_DATA += gc_reference.xpm -image_DATA += gc_webcam.xpm -image_DATA += gc_question.xpm -image_DATA += gc_stages.xpm - -image_DATA += nav_left_1.xpm -image_DATA += nav_left_2.xpm -image_DATA += nav_right_1.xpm -image_DATA += nav_right_2.xpm -image_DATA += nav_straight.xpm -image_DATA += nav_straight_32.xpm -image_DATA += nav_left_1_32.xpm -image_DATA += nav_left_2_32.xpm -image_DATA += nav_right_1_32.xpm -image_DATA += nav_right_2_32.xpm - -svgs = gui_about.svg -svgs += gui_actions.svg -svgs += gui_active.svg -svgs += gui_android_menu.svg -svgs += gui_bookmark.svg -svgs += gui_formerdests.svg -svgs += gui_display.svg -svgs += gui_help.svg -svgs += gui_home.svg -svgs += gui_inactive.svg -svgs += gui_map.svg -svgs += gui_maps.svg -svgs += gui_rules.svg -svgs += gui_settings.svg -svgs += gui_sound.svg -svgs += gui_sound_off.svg -svgs += gui_tools.svg -svgs += gui_fullscreen.svg -svgs += gui_leave_fullscreen.svg -svgs += gui_quit.svg -svgs += gui_stop.svg -svgs += gui_town.svg -svgs += gui_vehicle.svg -svgs += gui_vehicle_pedestrian.svg -svgs += gui_zoom_in.svg -svgs += gui_zoom_out.svg -svgs += zoom_in.svg -svgs += zoom_out.svg -svgs += gui_select_street.svg -svgs += gui_select_town.svg -svgs += gui_select_country.svg -svgs += gui_arrow_left.svg -svgs += gui_arrow_right.svg -svgs += gui_arrow_up.svg -svgs += gui_arrow_down.svg -svgs += gui_menu.svg -svgs += gui_strength_0.svg -svgs += gui_strength_1.svg -svgs += gui_strength_2.svg -svgs += gui_strength_3.svg -svgs += gui_strength_4.svg -svgs += gui_strength_5.svg -svgs += gui_minus.svg -svgs += gui_plus.svg -svgs += gui_log.svg -svgs += gui_search.svg -svgs += menu.svg -svgs += toggle_fullscreen.svg - -svgs += airport.svg -svgs += atm.svg -svgs += attraction.svg -svgs += bahai.svg -svgs += bank.svg -svgs += bar.svg -svgs += beer.svg -svgs += bench.svg -svgs += bicycle_parking.svg -svgs += bicycle_rental.svg -svgs += bicycle_shop.svg -svgs += biergarten.svg -svgs += boat_ramp.svg -svgs += boundary_stone.svg -svgs += buddhist.svg -svgs += bus.svg -svgs += bus_stop.svg -svgs += cafe.svg -svgs += camping.svg -svgs += car_dealer.svg -svgs += car_rent.svg -svgs += car_sharing.svg -svgs += casino.svg -svgs += castle.svg -svgs += church.svg -svgs += cinema.svg -svgs += cursor.svg -svgs += cursor225.svg -svgs += cursor450.svg -svgs += cursor675.svg -svgs += cursor_still.svg -svgs += dam.svg -svgs += danger.svg -svgs += daymark.svg -svgs += drinking_water.svg -svgs += emergency.svg -svgs += exit.svg -svgs += fastfood.svg -svgs += firebrigade.svg -svgs += fountain.svg -svgs += fuel.svg -svgs += golf.svg -svgs += heliport.svg -svgs += hindu.svg -svgs += hospital.svg -svgs += hotel.svg -svgs += information.svg -svgs += islamic.svg -svgs += jain.svg -svgs += jewish.svg -svgs += justice.svg -svgs += library.svg -svgs += mark.svg -svgs += memorial.svg -svgs += menu.svg -svgs += military.svg -svgs += mini_roundabout.svg -svgs += museum.svg -svgs += pagan.svg -svgs += parking.svg -svgs += pastafarian.svg -svgs += peak.svg -svgs += pharmacy.svg -svgs += picnic.svg -svgs += police.svg -svgs += post.svg -svgs += rail_station.svg -svgs += repair_service.svg -svgs += resort.svg -svgs += restaurant.svg -svgs += ruins.svg -svgs += school.svg -svgs += shelter.svg -svgs += shinto.svg -svgs += shop_apparel.svg -svgs += shop_computer.svg -svgs += shop_department.svg -svgs += shop_grocery.svg -svgs += shopping.svg -svgs += sikh.svg -svgs += skiing.svg -svgs += sport.svg -svgs += stadium.svg -svgs += status_calculating_bk.svg -svgs += status_calculating_wh.svg -svgs += status_no_destination_bk.svg -svgs += status_no_destination_wh.svg -svgs += status_no_route_bk.svg -svgs += status_no_route_wh.svg -svgs += status_position_wait_bk.svg -svgs += status_position_wait_wh.svg -svgs += status_recalculating_bk.svg -svgs += status_recalculating_wh.svg -svgs += status_routing_bk.svg -svgs += status_routing_wh.svg -svgs += swimming.svg -svgs += taoist.svg -svgs += taxi.svg -svgs += tec_common.svg -svgs += telephone.svg -svgs += theater.svg -svgs += toggle_fullscreen.svg -svgs += toilets.svg -svgs += townhall.svg -svgs += traffic_signals.svg -svgs += unknown.svg -svgs += viewpoint.svg -svgs += wifi.svg -svgs += worship.svg -svgs += zoo.svg -svgs += zoom_in.svg -svgs += zoom_out.svg - - -nav_svgs = nav_left_1_bk.svg nav_left_1_wh.svg nav_left_2_bk.svg nav_left_2_wh.svg nav_left_3_bk.svg nav_left_3_wh.svg -nav_svgs += nav_right_1_bk.svg nav_right_1_wh.svg nav_right_2_bk.svg nav_right_2_wh.svg nav_right_3_bk.svg nav_right_3_wh.svg -nav_svgs += nav_roundabout_l1_bk.svg nav_roundabout_l1_wh.svg nav_roundabout_l2_bk.svg nav_roundabout_l2_wh.svg -nav_svgs += nav_roundabout_l3_bk.svg nav_roundabout_l3_wh.svg nav_roundabout_l4_bk.svg nav_roundabout_l4_wh.svg -nav_svgs += nav_roundabout_l5_bk.svg nav_roundabout_l5_wh.svg nav_roundabout_l6_bk.svg nav_roundabout_l6_wh.svg -nav_svgs += nav_roundabout_l7_bk.svg nav_roundabout_l7_wh.svg nav_roundabout_l8_bk.svg nav_roundabout_l8_wh.svg -nav_svgs += nav_roundabout_r1_bk.svg nav_roundabout_r1_wh.svg nav_roundabout_r2_bk.svg nav_roundabout_r2_wh.svg -nav_svgs += nav_roundabout_r3_bk.svg nav_roundabout_r3_wh.svg nav_roundabout_r4_bk.svg nav_roundabout_r4_wh.svg -nav_svgs += nav_roundabout_r5_bk.svg nav_roundabout_r5_wh.svg nav_roundabout_r6_bk.svg nav_roundabout_r6_wh.svg -nav_svgs += nav_roundabout_r7_bk.svg nav_roundabout_r7_wh.svg nav_roundabout_r8_bk.svg nav_roundabout_r8_wh.svg -nav_svgs += nav_straight_bk.svg nav_straight_wh.svg nav_turnaround_left_bk.svg nav_turnaround_left_wh.svg -nav_svgs += nav_turnaround_right_bk.svg nav_turnaround_right_wh.svg nav_destination_bk.svg nav_destination_wh.svg - -flag_svgs = country_.svgz country_AD.svgz country_AE.svgz country_AF.svgz country_AG.svgz country_AI.svgz country_AL.svgz country_AM.svgz -flag_svgs += country_AN.svgz country_AO.svgz country_AQ.svgz country_AR.svgz country_AS.svgz country_AT.svgz country_AU.svgz country_AW.svgz -flag_svgs += country_AX.svgz country_AZ.svgz country_BA.svgz country_BB.svgz country_BD.svgz country_BE.svgz country_BF.svgz -flag_svgs += country_BG.svgz country_BH.svgz country_BI.svgz country_BJ.svgz country_BL.svgz country_BM.svgz country_BN.svgz -flag_svgs += country_BO.svgz country_BR.svgz country_BS.svgz country_BT.svgz country_BV.svgz country_BW.svgz country_BY.svgz -flag_svgs += country_BZ.svgz country_CA.svgz country_CC.svgz country_CD.svgz country_CF.svgz country_CG.svgz country_CH.svgz -flag_svgs += country_CI.svgz country_CK.svgz country_CL.svgz country_CM.svgz country_CN.svgz country_CO.svgz country_CR.svgz -flag_svgs += country_CU.svgz country_CV.svgz country_CX.svgz country_CY.svgz country_CZ.svgz country_DE.svgz country_DJ.svgz -flag_svgs += country_DK.svgz country_DM.svgz country_DO.svgz country_DZ.svgz country_EC.svgz country_EE.svgz country_EG.svgz -flag_svgs += country_EH.svgz country_ER.svgz country_ES.svgz country_ET.svgz country_FI.svgz country_FJ.svgz country_FK.svgz -flag_svgs += country_FM.svgz country_FO.svgz country_FR.svgz country_GA.svgz country_GB.svgz country_GD.svgz country_GE.svgz -flag_svgs += country_GF.svgz country_GG.svgz country_GH.svgz country_GI.svgz country_GL.svgz country_GM.svgz country_GN.svgz -flag_svgs += country_GP.svgz country_GQ.svgz country_GR.svgz country_GS.svgz country_GT.svgz country_GU.svgz country_GW.svgz -flag_svgs += country_GY.svgz country_HK.svgz country_HM.svgz country_HN.svgz country_HR.svgz country_HT.svgz country_HU.svgz -flag_svgs += country_ID.svgz country_IE.svgz country_IL.svgz country_IM.svgz country_IN.svgz country_IO.svgz country_IQ.svgz -flag_svgs += country_IR.svgz country_IS.svgz country_IT.svgz country_JE.svgz country_JM.svgz country_JO.svgz country_JP.svgz -flag_svgs += country_KE.svgz country_KG.svgz country_KH.svgz country_KI.svgz country_KM.svgz country_KN.svgz country_KP.svgz -flag_svgs += country_KR.svgz country_KW.svgz country_KY.svgz country_KZ.svgz country_LA.svgz country_LB.svgz country_LC.svgz -flag_svgs += country_LI.svgz country_LK.svgz country_LR.svgz country_LS.svgz country_LT.svgz country_LU.svgz country_LV.svgz -flag_svgs += country_LY.svgz country_MA.svgz country_MC.svgz country_MD.svgz country_ME.svgz country_MF.svgz country_MG.svgz -flag_svgs += country_MH.svgz country_MK.svgz country_ML.svgz country_MM.svgz country_MN.svgz country_MO.svgz country_MP.svgz -flag_svgs += country_MQ.svgz country_MR.svgz country_MS.svgz country_MT.svgz country_MU.svgz country_MV.svgz country_MW.svgz -flag_svgs += country_MX.svgz country_MY.svgz country_MZ.svgz country_NA.svgz country_NC.svgz country_NE.svgz country_NF.svgz -flag_svgs += country_NG.svgz country_NI.svgz country_NL.svgz country_NO.svgz country_NP.svgz country_NR.svgz country_NU.svgz -flag_svgs += country_NZ.svgz country_OM.svgz country_PA.svgz country_PE.svgz country_PF.svgz country_PG.svgz country_PH.svgz -flag_svgs += country_PK.svgz country_PL.svgz country_PM.svgz country_PN.svgz country_PR.svgz country_PS.svgz country_PT.svgz -flag_svgs += country_PW.svgz country_PY.svgz country_QA.svgz country_RE.svgz country_RO.svgz country_RS.svgz country_RU.svgz -flag_svgs += country_RW.svgz country_SA.svgz country_SB.svgz country_SC.svgz country_SD.svgz country_SE.svgz country_SG.svgz -flag_svgs += country_SH.svgz country_SI.svgz country_SJ.svgz country_SK.svgz country_SL.svgz country_SM.svgz country_SN.svgz -flag_svgs += country_SO.svgz country_SR.svgz country_ST.svgz country_SV.svgz country_SY.svgz country_SZ.svgz country_TC.svgz -flag_svgs += country_TD.svgz country_TF.svgz country_TG.svgz country_TH.svgz country_TJ.svgz country_TK.svgz country_TL.svgz -flag_svgs += country_TM.svgz country_TN.svgz country_TO.svgz country_TR.svgz country_TT.svgz country_TV.svgz country_TW.svgz -flag_svgs += country_TZ.svgz country_UA.svgz country_UG.svgz country_UM.svgz country_US.svgz country_UY.svgz country_UZ.svgz -flag_svgs += country_VA.svgz country_VC.svgz country_VE.svgz country_VG.svgz country_VI.svgz country_VN.svgz country_VU.svgz -flag_svgs += country_WF.svgz country_WS.svgz country_YE.svgz country_YT.svgz country_ZA.svgz country_ZM.svgz country_ZW.svgz - -if USE_SVG - image_DATA += $(svgs) $(nav_svgs) $(flag_svgs) -endif - -if USE_SVG2PNG -# Implicit rules for generating the PNG files. This only generates the -# standard size; for additional sizes see below. -%.png: $(srcdir)/%.svg - SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) $(srcdir)/navit_svg2png "@SVG2PNG@" "$@" -%.png: $(srcdir)/%.svgz - SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) $(srcdir)/navit_svg2png "@SVG2PNG@" "$@" - -pngs = $(addsuffix .png,$(basename $(svgs))) -xsize = $(word 1,$(subst x, ,$(scale))) -ysize = $(word $(words $(scale)),$(subst x, ,$(scale))) -comma =, - -# template to generate scaling rules for the various PNG sizes -define scaling_rule_template -%_$(1)_$(1).png: $(srcdir)/%.$(2) - SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) $(srcdir)/navit_svg2png "@SVG2PNG@" "$$@" -endef - -# template to generate scaling rules for the default PNG size -define scaling_rule_template_def -$(basename $(1)).png: $(srcdir)/$(1) - SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) $(srcdir)/navit_svg2png "@SVG2PNG@" "$$@" "$(2)" "$(2)" -endef - - -# png images of the user interface and other, sizes e.g. "8,16,32,48,96" -if USE_SVG2PNG_SCALES -pngs += $(foreach scale, $(subst $(comma), ,@SVG2PNG_SCALES@), $(addsuffix _$(xsize)_$(ysize).png,$(basename $(svgs)))) -# create rules from template -$(foreach extension,svg svgz, $(foreach size, $(subst $(comma), ,@SVG2PNG_SCALES@),$(eval $(call scaling_rule_template,$(size),$(extension))))) -endif - -# png state flags -if USE_SVG2PNG_SCALES_FLAG -svg2png_scales_flag = $(subst $(comma), ,@SVG2PNG_SCALES_FLAG@) -pngs += $(addsuffix .png,$(basename $(flag_svgs))) -pngs += $(foreach scale, $(wordlist 2,100,$(svg2png_scales_flag)), $(addsuffix _$(xsize)_$(ysize).png,$(basename $(flag_svgs)))) -# create rules from templates -$(foreach extension,svg svgz, $(foreach size, $(wordlist 2,100,$(svg2png_scales_flag)),$(eval $(call scaling_rule_template,$(size),$(extension))))) -$(foreach img,$(flag_svgs), $(foreach size, $(firstword $(svg2png_scales_flag)),$(eval $(call scaling_rule_template_def,$(img),$(size))))) -endif - -# png symbols for navigation -if USE_SVG2PNG_SCALES_NAV -pngs += $(foreach scale, $(subst $(comma), ,@SVG2PNG_SCALES_NAV@), $(addsuffix _$(xsize)_$(ysize).png,$(basename $(nav_svgs)))) -# create rules from template -$(foreach extension,svg svgz, $(foreach size, $(subst $(comma), ,@SVG2PNG_SCALES_NAV@),$(eval $(call scaling_rule_template,$(size),$(extension))))) -endif - -image_DATA += $(pngs) -endif - -if !SUPPORT_WIN32 - DESKTOPFILEdir=$(datadir)/applications - DESKTOPFILE_DATA = desktop_icons/navit.desktop - - ICON128dir=$(datadir)/icons/hicolor/128x128/apps - ICON128_DATA = desktop_icons/128x128/navit.png - - ICON22dir=$(datadir)/icons/hicolor/22x22/apps - ICON22_DATA = desktop_icons/22x22/navit.png -endif - -EXTRA_DIST = $(image_DATA) $(DESKTOPFILE_DATA) $(ICON128_DATA) $(ICON22_DATA) navit_svg2png - -if USE_SVG2PNG -clean: - rm -f $(pngs) -endif |