diff options
author | Stefan Wildemann <gta04@metalstrolche.de> | 2017-06-05 21:28:17 +0200 |
---|---|---|
committer | Stefan Wildemann <metalstrolch@users.noreply.github.com> | 2017-06-06 13:30:31 +0200 |
commit | a884714800d29a1fe271fb7337f2f36f50190900 (patch) | |
tree | 2b10890d315085d562c96908bccfaa4d1f45a4ec /navit/graphics/qt5 | |
parent | 58ac737ffea75559a9d4a6d9b1e6965a8770c593 (diff) | |
download | navit-a884714800d29a1fe271fb7337f2f36f50190900.tar.gz |
Correctly implement draw_drag on graphics_qt5R7612
Diffstat (limited to 'navit/graphics/qt5')
-rw-r--r-- | navit/graphics/qt5/QNavitQuick.cpp | 4 | ||||
-rw-r--r-- | navit/graphics/qt5/QNavitWidget.cpp | 6 | ||||
-rw-r--r-- | navit/graphics/qt5/graphics_qt5.cpp | 44 | ||||
-rw-r--r-- | navit/graphics/qt5/graphics_qt5.h | 2 |
4 files changed, 38 insertions, 18 deletions
diff --git a/navit/graphics/qt5/QNavitQuick.cpp b/navit/graphics/qt5/QNavitQuick.cpp index b87aabc57..7df3e0073 100644 --- a/navit/graphics/qt5/QNavitQuick.cpp +++ b/navit/graphics/qt5/QNavitQuick.cpp @@ -68,7 +68,7 @@ static void paintOverlays(QPainter* painter, struct graphics_priv* gp, QPaintEve if (!value->disable) { QRect rr(value->x, value->y, value->pixmap->width(), value->pixmap->height()); if (event->rect().intersects(rr)) { - dbg(lvl_debug, "draw overlay (%d, %d, %d, %d)\n", value->x, value->y, value->pixmap->width(), value->pixmap->height()); + dbg(lvl_debug, "draw overlay (%d, %d, %d, %d)\n", value->x + value->scroll_x, value->y + value->scroll_y, value->pixmap->width(), value->pixmap->height()); painter->drawPixmap(value->x, value->y, *value->pixmap); /* draw overlays of overlay if any by recursive calling */ paintOverlays(painter, value, event); @@ -89,7 +89,7 @@ void QNavitQuick::paint(QPainter* painter) painter->fillRect(boundingRect(), *graphics_priv->background_graphics_gc_priv->brush); } /* draw base */ - painter->drawPixmap(0, 0, *graphics_priv->pixmap, + painter->drawPixmap(graphics_priv->scroll_x, graphics_priv->scroll_y, *graphics_priv->pixmap, boundingRect().x(), boundingRect().y(), boundingRect().width(), boundingRect().height()); paintOverlays(painter, graphics_priv, &event); diff --git a/navit/graphics/qt5/QNavitWidget.cpp b/navit/graphics/qt5/QNavitWidget.cpp index 09034ce22..621114352 100644 --- a/navit/graphics/qt5/QNavitWidget.cpp +++ b/navit/graphics/qt5/QNavitWidget.cpp @@ -70,8 +70,8 @@ static void paintOverlays(QPainter* painter, struct graphics_priv* gp, QPaintEve if (!value->disable) { QRect rr(value->x, value->y, value->pixmap->width(), value->pixmap->height()); if (event->rect().intersects(rr)) { - dbg(lvl_debug, "draw overlay (%d, %d, %d, %d)\n", value->x, value->y, value->pixmap->width(), value->pixmap->height()); - painter->drawPixmap(value->x, value->y, *value->pixmap); + dbg(lvl_debug, "draw overlay (%d, %d, %d, %d)\n", value->x + value->scroll_x, value->y + value->scroll_y, value->pixmap->width(), value->pixmap->height()); + painter->drawPixmap(value->x + value->scroll_x, value->y + value->scroll_y, *value->pixmap); /* draw overlays of overlay if any by recursive calling */ paintOverlays(painter, value, event); } @@ -88,7 +88,7 @@ void QNavitWidget::paintEvent(QPaintEvent* event) painter.setPen(*graphics_priv->background_graphics_gc_priv->pen); painter.fillRect(event->rect(), *graphics_priv->background_graphics_gc_priv->brush); } - painter.drawPixmap(0, 0, *graphics_priv->pixmap, + painter.drawPixmap(graphics_priv->scroll_x, graphics_priv->scroll_y, *graphics_priv->pixmap, event->rect().x(), event->rect().y(), event->rect().width(), event->rect().height()); paintOverlays(&painter, graphics_priv, event); diff --git a/navit/graphics/qt5/graphics_qt5.cpp b/navit/graphics/qt5/graphics_qt5.cpp index c25944ee5..617cc3110 100644 --- a/navit/graphics/qt5/graphics_qt5.cpp +++ b/navit/graphics/qt5/graphics_qt5.cpp @@ -575,14 +575,26 @@ draw_image(struct graphics_priv* gr, struct graphics_gc_priv* fg, struct point* dbg(lvl_debug, "Try to draw image, but no painter\n"); } +/** + * @brief Enable drag offset for layer. + * @param gr private handle + * @param p vector the bitmap is moved from base to start drag, or NULL to indicate end of drag + * + * Enable drag offset for layer. Dragging the screen will be + * done this way if drag_bitmap is enabled. This is called with + * a vector given in p to start the drag, and as long as the + * drag is active. It is called with NULL to end drag. + */ 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->x = p->x; - gr->y = p->y; + dbg(lvl_debug, "enter %p (%d,%d)\n", gr, p->x, p->y); + gr->scroll_x = p->x; + gr->scroll_y = p->y; } else { - // dbg(lvl_debug,"enter %p (NULL)\n", gr); + dbg(lvl_debug, "enter %p (NULL)\n", gr); + gr->scroll_x = 0; + gr->scroll_y = 0; } } @@ -608,26 +620,29 @@ draw_mode(struct graphics_priv* gr, enum draw_mode_num mode) 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) + gr->use_count = 0; 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; + } else { + dbg(lvl_debug, "Context %p not active!\n", gr) + } #if USE_QWIDGET - /* call repaint on widget */ - if (gr->widget != NULL) - gr->widget->repaint(gr->x, gr->y, gr->pixmap->width(), gr->pixmap->height()); + /* call repaint on widget */ + if (gr->widget != NULL) + gr->widget->repaint(gr->x, gr->y, gr->pixmap->width(), gr->pixmap->height()); #endif #if USE_QML - if (gr->GPriv != NULL) - gr->GPriv->emit_update(); + if (gr->GPriv != NULL) + gr->GPriv->emit_update(); #endif - } else - dbg(lvl_debug, "Context %p not active!\n", gr) - break; + break; default: dbg(lvl_debug, "Unknown drawing %d on context %p\n", mode, gr); break; @@ -739,7 +754,6 @@ static void get_text_bbox(struct graphics_priv* gr, struct graphics_font_priv* f { int i; struct point pt; - QPainter* painter = gr->painter; QString tmp = QString::fromUtf8(text); QRect r; // dbg(lvl_debug,"enter %s %d %d\n", text, dx, dy); @@ -853,6 +867,8 @@ overlay_new(struct graphics_priv* gr, struct graphics_methods* meth, struct poin graphics_priv->use_count = 0; graphics_priv->parent = gr; graphics_priv->overlays = g_hash_table_new(NULL, NULL); + graphics_priv->scroll_x = 0; + graphics_priv->scroll_y = 0; graphics_priv->root = false; graphics_priv->argc = 0; graphics_priv->argv[0] = NULL; @@ -955,6 +971,8 @@ graphics_qt5_new(struct navit* nav, struct graphics_methods* meth, struct attr** graphics_priv->x = 0; graphics_priv->y = 0; graphics_priv->disable = 0; + graphics_priv->scroll_x = 0; + graphics_priv->scroll_y = 0; #if USE_QML graphics_priv->engine = NULL; graphics_priv->window = NULL; diff --git a/navit/graphics/qt5/graphics_qt5.h b/navit/graphics/qt5/graphics_qt5.h index bf54ef45c..f9d19616b 100644 --- a/navit/graphics/qt5/graphics_qt5.h +++ b/navit/graphics/qt5/graphics_qt5.h @@ -89,6 +89,8 @@ struct graphics_priv { int disable; int x; int y; + int scroll_x; + int scroll_y; struct graphics_gc_priv* background_graphics_gc_priv; #if HAVE_FREETYPE struct font_priv* (*font_freetype_new)(void* meth); |