Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/mapwidget.cc')
-rw-r--r--src/mapwidget.cc65
1 files changed, 56 insertions, 9 deletions
diff --git a/src/mapwidget.cc b/src/mapwidget.cc
index a33cf65..779bf91 100644
--- a/src/mapwidget.cc
+++ b/src/mapwidget.cc
@@ -25,21 +25,68 @@ MapWidget::MapWidget(QWidget *parent) : QWidget(parent)
mapwidget_zoom = 16;
// center of the map (used for dragging)
+ center_x = 0;
+ center_y = 0;
}
void MapWidget::wheelEvent(QWheelEvent *event)
{
if (event->orientation() == Qt::Vertical) {
+ int oldzoom = mapwidget_zoom;
+
mapwidget_zoom -= event->delta() / 120;
- if (mapwidget_zoom < 4)
- mapwidget_zoom = 4;
+ if (mapwidget_zoom < 1)
+ mapwidget_zoom = 1;
else if (mapwidget_zoom > 64) {
mapwidget_zoom = 64;
}
+ center_x = center_x * oldzoom / mapwidget_zoom;
+ center_y = center_y * oldzoom / mapwidget_zoom;
+
+ resizeChildren();
+ update();
+ event->accept();
+ }
+}
+
+void MapWidget::mousePressEvent(QMouseEvent *event)
+{
+ if (event->button() == Qt::RightButton) {
+ dragstart_x = event->pos().x();
+ dragstart_y = event->pos().y();
+ event->accept();
+ is_dragging = true;
+ } else {
+ is_dragging = false;
+ }
+}
+
+void MapWidget::mouseReleaseEvent(QMouseEvent *event)
+{
+ if (event->button() == Qt::RightButton) {
+ is_dragging = false;
+ }
+}
+
+void MapWidget::mouseMoveEvent(QMouseEvent *event)
+{
+ if (is_dragging) {
+ int delta_x = event->pos().x() - dragstart_x;
+ int delta_y = event->pos().y() - dragstart_y;
+
+ center_x += delta_x;
+ center_y += delta_y;
+
+ //qDebug() << "dragging " << delta_x << " " << delta_y;
+
+ dragstart_x = event->pos().x();
+ dragstart_y = event->pos().y();
+
+ event->accept();
+
resizeChildren();
update();
- event->accept();
}
}
@@ -56,7 +103,7 @@ void MapWidget::resizeChildren()
int x = width() / 2 - (int) (entity->location(1) * scale) - radius;
int y = height() / 2 - (int)(entity->location(0) * scale) - radius;
- entity->setGeometry(x, y, radius * 2 , radius * 2);
+ entity->setGeometry(center_x + x, center_y + y, radius * 2 , radius * 2);
//qDebug() << "Moving entity to " << x << " " << y;
}
@@ -71,7 +118,7 @@ void MapWidget::select(MapEntity *entity)
if (entity == mapentity) {
entity->set_selected(true);
- qDebug() << "selected entity " << entity->name();
+ //qDebug() << "selected entity " << entity->name();
emit selected(entity);
} else {
@@ -99,23 +146,23 @@ void MapWidget::paintEvent(QPaintEvent *event)
// gridsize is the size of one grid square in screen coordinates
int gridsize = width() / mapwidget_zoom;
- int x = width() / 2;
+ int x = center_x + width() / 2;
while (x > 0) {
painter.drawLine(x, 0, x, height());
x -= gridsize;
}
- x = width() / 2 + gridsize;
+ x = center_x + width() / 2 + gridsize;
while (x <= width()) {
painter.drawLine(x, 0, x, height());
x += gridsize;
}
- int y = height() / 2;
+ int y = center_y + height() / 2;
while (y > 0) {
painter.drawLine(0, y, width(), y);
y -= gridsize;
}
- y = height() / 2 + gridsize;
+ y = center_y + height() / 2 + gridsize;
while (y <= height()) {
painter.drawLine(0, y, width(), y);
y += gridsize;