179 lines
6 KiB
Diff
179 lines
6 KiB
Diff
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;
|