X-Git-Url: http://git.maemo.org/git/?p=navit-package;a=blobdiff_plain;f=debian%2Fpatches%2Fqt_speedup.patch;fp=debian%2Fpatches%2Fqt_speedup.patch;h=18a67560bb5f41f4391f6c9536f485aa3632cfc8;hp=0000000000000000000000000000000000000000;hb=fcd4bd62535d3ee29d1938938f16037611c11def;hpb=3334778735c0c695c896e54847bfc2b102fc48c7 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)