summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Wildemann <gta04@metalstrolche.de>2017-06-05 21:28:17 +0200
committerStefan Wildemann <gta04@metalstrolche.de>2017-06-05 21:38:50 +0200
commit1a00d1a24ba63d40b7095d542bae89b07dd4f164 (patch)
tree2b10890d315085d562c96908bccfaa4d1f45a4ec
parent58ac737ffea75559a9d4a6d9b1e6965a8770c593 (diff)
downloadnavit-qt5_draw_bitmap.tar.gz
Correctly implement draw_drag on graphics_qt5qt5_draw_bitmap
-rw-r--r--navit/graphics/qt5/QNavitQuick.cpp4
-rw-r--r--navit/graphics/qt5/QNavitWidget.cpp6
-rw-r--r--navit/graphics/qt5/graphics_qt5.cpp44
-rw-r--r--navit/graphics/qt5/graphics_qt5.h2
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);