From 09265480ec7eeb491da98f43d5e11ec9174e7afa Mon Sep 17 00:00:00 2001
From: Dmitry Shachnev <mitya57@gmail.com>
Date: Thu, 4 Apr 2019 09:17:40 +0300
Subject: [PATCH] Use unsigned long for widget ids instead of signed long
Python's id() function returns memory addresses, which do not fit into
signed long on 32-bit systems.
In PyQt 5.12 overflow checking is enabled by default, so this causes
errors like this:
Traceback (most recent call last):
[...]
File "/usr/lib/python3/dist-packages/veusz/widgets/graph3d.py", line 246, in drawToObject
cont.assignWidgetId(id(self))
OverflowError: argument 1 overflowed: value must be in the range -2147483648 to 2147483647
---
veusz/helpers/src/threed/objects.cpp | 4 ++--
veusz/helpers/src/threed/objects.h | 8 ++++----
veusz/helpers/src/threed/scene.cpp | 16 ++++++++--------
veusz/helpers/src/threed/scene.h | 6 +++---
veusz/helpers/src/threed/threed.sip | 16 ++++++++--------
5 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/veusz/helpers/src/threed/objects.cpp b/veusz/helpers/src/threed/objects.cpp
index 3293012e..c32702e6 100644
--- a/veusz/helpers/src/threed/objects.cpp
+++ b/veusz/helpers/src/threed/objects.cpp
@@ -31,7 +31,7 @@ void Object::getFragments(const Mat4& perspM, const Mat4& outerM, FragmentVector
{
}
-void Object::assignWidgetId(long id)
+void Object::assignWidgetId(unsigned long id)
{
widgetid = id;
}
@@ -729,7 +729,7 @@ void ObjectContainer::getFragments(const Mat4& perspM, const Mat4& outerM, Fragm
objects[i]->getFragments(perspM, totM, v);
}
-void ObjectContainer::assignWidgetId(long id)
+void ObjectContainer::assignWidgetId(unsigned long id)
{
for(auto &object : objects)
object->assignWidgetId(id);
diff --git a/veusz/helpers/src/threed/objects.h b/veusz/helpers/src/threed/objects.h
index 68f4f0d6..147c52ab 100644
--- a/veusz/helpers/src/threed/objects.h
+++ b/veusz/helpers/src/threed/objects.h
@@ -33,17 +33,17 @@
class Object
{
public:
- Object() : widgetid(-1) {}
+ Object() : widgetid(0) {}
virtual ~Object();
virtual void getFragments(const Mat4& perspM, const Mat4& outerM, FragmentVector& v);
// recursive set id of child objects
- virtual void assignWidgetId(long id);
+ virtual void assignWidgetId(unsigned long id);
// id of widget which generated object
- long widgetid;
+ unsigned long widgetid;
};
class Triangle : public Object
@@ -298,7 +298,7 @@ class ObjectContainer : public Object
}
// recursive set id of child objects
- void assignWidgetId(long id);
+ void assignWidgetId(unsigned long id);
public:
Mat4 objM;
diff --git a/veusz/helpers/src/threed/scene.cpp b/veusz/helpers/src/threed/scene.cpp
index 3bb88f4d..83730360 100644
--- a/veusz/helpers/src/threed/scene.cpp
+++ b/veusz/helpers/src/threed/scene.cpp
@@ -528,12 +528,12 @@ Scene::DrawCallback::~DrawCallback()
{
}
-long Scene::idPixel(Object* root,
- QPainter* painter,
- const Camera& cam,
- double x1, double y1, double x2, double y2,
- double scale,
- double scaling, int x, int y)
+unsigned long Scene::idPixel(Object* root,
+ QPainter* painter,
+ const Camera& cam,
+ double x1, double y1, double x2, double y2,
+ double scale,
+ double scaling, int x, int y)
{
constexpr int box = 3;
@@ -543,7 +543,7 @@ long Scene::idPixel(Object* root,
{
public:
IdDrawCallback()
- : lastwidgetid(-1),
+ : lastwidgetid(0),
pixrender(2*box+1,2*box+1)
{
pixrender.fill(QColor(254,254,254));
@@ -565,7 +565,7 @@ long Scene::idPixel(Object* root,
}
}
- long lastwidgetid;
+ unsigned long lastwidgetid;
QPixmap pixrender;
QImage lastimage;
};
diff --git a/veusz/helpers/src/threed/scene.h b/veusz/helpers/src/threed/scene.h
index 108d58c7..60afa84e 100644
--- a/veusz/helpers/src/threed/scene.h
+++ b/veusz/helpers/src/threed/scene.h
@@ -66,9 +66,9 @@ class Scene
double x1, double y1, double x2, double y2, double scale);
// find widget id of pixel painted by drawing scene at (x, y)
- long idPixel(Object* root, QPainter* painter, const Camera& cam,
- double x1, double y1, double x2, double y2, double scale,
- double scaling, int x, int y);
+ unsigned long idPixel(Object* root, QPainter* painter, const Camera& cam,
+ double x1, double y1, double x2, double y2, double scale,
+ double scaling, int x, int y);
public:
// last screen matrix
diff --git a/veusz/helpers/src/threed/threed.sip b/veusz/helpers/src/threed/threed.sip
index 385fc6eb..2903e096 100644
--- a/veusz/helpers/src/threed/threed.sip
+++ b/veusz/helpers/src/threed/threed.sip
@@ -324,8 +324,8 @@ class Object /NoDefaultCtors/
%End
public:
virtual ~Object();
- virtual void assignWidgetId(long id);
- long widgetid;
+ virtual void assignWidgetId(unsigned long id);
+ unsigned long widgetid;
};
class Triangle : public Object /NoDefaultCtors/
@@ -446,7 +446,7 @@ class ObjectContainer : public Object
public:
ObjectContainer();
void addObject(Object* obj /Transfer/);
- void assignWidgetId(long id);
+ void assignWidgetId(unsigned long id);
Mat4 objM;
};
@@ -538,11 +538,11 @@ class Scene
void render(Object* root,
QPainter* painter, const Camera& cam,
double x1, double y1, double x2, double y2, double scale);
- long idPixel(Object* root,
- QPainter* painter, const Camera& cam,
- double x1, double y1, double x2, double y2,
- double scale,
- double scaling, int x, int y);
+ unsigned long idPixel(Object* root,
+ QPainter* painter, const Camera& cam,
+ double x1, double y1, double x2, double y2,
+ double scale,
+ double scaling, int x, int y);
public:
Mat3 screenM;