* added qt_speedup.patch maemo
authorHenning Heinold <heinold@inf.fu-berlin.de>
Fri, 5 Feb 2010 08:36:08 +0000 (09:36 +0100)
committerHenning Heinold <heinold@inf.fu-berlin.de>
Fri, 5 Feb 2010 08:36:08 +0000 (09:36 +0100)
debian/changelog
debian/patches/qt_speedup.patch [new file with mode: 0644]
debian/patches/series

index 2a89275..55052bf 100644 (file)
@@ -6,6 +6,7 @@ navit (0.2.0~svn2947+dfsg.1-1maemo1) unstable; urgency=low
   * new memleak fixes patch
   * don't make any png, except the system icons
   * modfied internal gui and OSD looks like on n810
+  * add qt_speedup.patch
  
  -- Henning Heinold <h.heinold@tarent.de>  Fri, 05 Feb 2010 01:06:46 +0100
 
diff --git a/debian/patches/qt_speedup.patch b/debian/patches/qt_speedup.patch
new file mode 100644 (file)
index 0000000..18a6756
--- /dev/null
@@ -0,0 +1,138 @@
+Index: navit/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp
+===================================================================
+--- navit.orig/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp     2010-02-05 09:34:05.663481790 +0100
++++ navit/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp  2010-02-05 09:35:04.852995124 +0100
+@@ -70,6 +70,7 @@
+ #include <QWidget>
+ #include <QPolygonF>
+ #include <QtGui>
++#include <QSvgRenderer>
+ #endif
+@@ -212,7 +213,7 @@
+                       QImage img=overlay->widget->pixmap->convertToImage();
+                       img.setAlphaBuffer(1);
+ #else
+-                      QImage img=overlay->widget->pixmap->toImage().convertToFormat(QImage::Format_ARGB32);
++                      QImage img=overlay->widget->pixmap->toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ #endif
+                       data=img.bits();
+                       for (i = 0 ; i < size ; i++) {
+@@ -296,11 +297,13 @@
+               delete pixmap;
+               pixmap=new QPixmap(size);
+               pixmap->fill();
+-              QPainter painter(pixmap);
+               QBrush brush;
++              QPainter painter;
++              painter.begin(pixmap);
+               painter.fillRect(0, 0, size.width(), size.height(), brush);
+-              dbg(0,"size %dx%d\n", size.width(), size.height());
+-              dbg(0,"pixmap %p %dx%d\n", pixmap, pixmap->width(), pixmap->height());
++              painter.end();
++              dbg(1,"size %dx%d\n", size.width(), size.height());
++              dbg(1,"pixmap %p %dx%d\n", pixmap, pixmap->width(), pixmap->height());
+               callback_list_call_attr_2(this->cbl, attr_resize, (void *)size.width(), (void *)size.height());
+       }
+ }
+@@ -452,6 +455,7 @@
+ //##############################################################################################################
+ struct graphics_image_priv {
+       QImage *image;
++      QSvgRenderer *renderer;
+ };
+ //##############################################################################################################
+@@ -584,14 +588,33 @@
+ 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 *ret;
++      QString filename(path);
++
++      dbg(1,"filename is %s\n", path);
+       ret=g_new0(struct graphics_image_priv, 1);
+-      ret->image=new QImage(path);
+-      if (ret->image->isNull()) {
+-              delete(ret->image);
+-              g_free(ret);
+-              return NULL;
++        if(filename.contains(".svg", Qt::CaseInsensitive)) {
++              QFile imagefile(filename);
++              if (!imagefile.open(QIODevice::ReadOnly)) {
++                      g_free(ret);
++                      return NULL;
++              }
++              QByteArray svgData = imagefile.readAll();
++              imagefile.close();
++              ret->renderer=new QSvgRenderer(svgData);
++              if (*w == -1 && *h == -1)
++                      ret->image=new QImage(ret->renderer->defaultSize(), QImage::Format_ARGB32_Premultiplied);
++              else
++                      ret->image=new QImage(QSize(*w,*h), QImage::Format_ARGB32_Premultiplied);
++      } else {
++              ret->image=new QImage(path);
++              ret->renderer=NULL;
++              if (ret->image->isNull()) {
++                      delete(ret->image);
++                      g_free(ret);
++                      return NULL;
++              }
+       }
+       *w=ret->image->width();
+       *h=ret->image->height();
+@@ -721,7 +744,7 @@
+                               data=img.bits();
+                               gr->freetype_methods.get_shadow(g,(unsigned char *)(img.jumpTable()),32,0,bgc,&transparent);
+ #else
+-                              QImage img(g->w+2, g->h+2, QImage::Format_ARGB32);
++                              QImage img(g->w+2, g->h+2, QImage::Format_ARGB32_Premultiplied);
+                               data=img.bits();
+                               gr->freetype_methods.get_shadow(g,(unsigned char *)data,32,img.bytesPerLine(),bgc,&transparent);
+ #endif
+@@ -747,7 +770,7 @@
+                       data=img.bits();
+                       gr->freetype_methods.get_glyph(g,(unsigned char *)(img.jumpTable()),32,0,fgc,bgc,&transparent);
+ #else
+-                      QImage img(g->w, g->h, QImage::Format_ARGB32);
++                      QImage img(g->w, g->h, QImage::Format_ARGB32_Premultiplied);
+                       data=img.bits();
+                       gr->freetype_methods.get_glyph(g,(unsigned char *)data,32,img.bytesPerLine(),fgc,bgc,&transparent);
+ #endif
+@@ -767,7 +790,11 @@
+ //##############################################################################################################
+ static void draw_image(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct point *p, struct graphics_image_priv *img)
+ {
+-      gr->painter->drawImage(p->x, p->y, *img->image);
++      if ( img->renderer != NULL) {
++              img->renderer->render(gr->painter, QRect(QPoint(p->x,p->y),img->image->size()));
++      } else {
++              gr->painter->drawImage(p->x, p->y, *img->image);
++      }
+ }
+ //##############################################################################################################
+@@ -926,6 +953,9 @@
+ static void
+ image_free(struct graphics_priv *gr, struct graphics_image_priv *priv)
+ {
++      if (priv->renderer != NULL) {
++              delete priv->renderer;
++      }
+       delete priv->image;
+       g_free(priv);
+ }
+@@ -1019,7 +1049,10 @@
+ static void
+ event_qt_main_loop_run(void)
+ {
+-      event_gr->app->exec();
++#if defined(Q_WS_X11) && if QT_VERSION >= 0x040500
++        QApplication::setGraphicsSystem("raster");
++#endif
++        event_gr->app->exec();
+ }
+ static void event_qt_main_loop_quit(void)
index 21a3b46..3c6f6db 100644 (file)
@@ -19,3 +19,4 @@ desktop_icons.patch
 desktop_file.patch
 xml_config.patch
 memfixes.patch
+qt_speedup.patch