From: Henning Heinold Date: Fri, 5 Feb 2010 08:36:08 +0000 (+0100) Subject: * added qt_speedup.patch X-Git-Url: https://vcs.maemo.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fmaemo;p=navit-package * added qt_speedup.patch --- diff --git a/debian/changelog b/debian/changelog index 2a89275..55052bf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 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 index 0000000..18a6756 --- /dev/null +++ b/debian/patches/qt_speedup.patch @@ -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 + #include + #include ++#include + #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) diff --git a/debian/patches/series b/debian/patches/series index 21a3b46..3c6f6db 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -19,3 +19,4 @@ desktop_icons.patch desktop_file.patch xml_config.patch memfixes.patch +qt_speedup.patch