Wed, 25 May 2022 20:36:34 +0300
Fix pick() picking from weird places on the screen with high DPI scaling
glReadPixels reads data from the frame buffer, which contains data after
high DPI scaling, so any reads to that need to take this scaling into account
6 | 1 | #include <QBrush> |
2 | #include <QFont> | |
14 | 3 | #include "object.h" |
89 | 4 | #include "widgets/vec3editor.h" |
153
2f79053c2e9a
Renamed modeleditcontext.cpp -> modeleditor.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
141
diff
changeset
|
5 | #include "modeleditor.h" |
3 | 6 | |
46 | 7 | static std::int32_t getIdForNewObject() |
6 | 8 | { |
46 | 9 | static std::int32_t id = 0; |
6 | 10 | id += 1; |
11 | return id; | |
12 | } | |
3 | 13 | |
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
14 | ldraw::Object::Object() : |
6 | 15 | id {getIdForNewObject()} |
3 | 16 | { |
17 | } | |
18 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
19 | ldraw::Object::~Object() |
3 | 20 | { |
21 | } | |
22 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
23 | bool ldraw::Object::hasColor() const |
3 | 24 | { |
25 | return false; | |
26 | } | |
27 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
28 | QVariant ldraw::Object::getProperty(Property id) const |
3 | 29 | { |
30 | Q_UNUSED(id); | |
31 | return {}; | |
32 | } | |
33 | ||
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
34 | void ldraw::Object::setProperty(SetPropertyResult* result, const PropertyKeyValue& pair) |
3 | 35 | { |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
36 | Q_UNUSED(result) |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
37 | Q_UNUSED(pair) |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
38 | } |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
39 | |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
40 | /** |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
41 | * @brief public interface to setProperty |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
42 | */ |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
43 | ldraw::Object::SetPropertyResult ldraw::Object::setProperty(const PropertyKeyValue& pair) |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
44 | { |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
45 | SetPropertyResult result; |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
46 | this->setProperty(&result, pair); |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
47 | return result; |
3 | 48 | } |
49 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
50 | QBrush ldraw::Object::textRepresentationForeground() const |
6 | 51 | { |
52 | return {}; | |
53 | } | |
54 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
55 | QBrush ldraw::Object::textRepresentationBackground() const |
6 | 56 | { |
57 | return {}; | |
58 | } | |
59 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
60 | QFont ldraw::Object::textRepresentationFont() const |
6 | 61 | { |
62 | return {}; | |
63 | } | |
64 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
65 | void ldraw::Object::getPolygons(std::vector<gl::Polygon>& polygons, GetPolygonsContext* context) const |
21 | 66 | { |
67 | Q_UNUSED(polygons) | |
68 | Q_UNUSED(context) | |
69 | } | |
70 | ||
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
46
diff
changeset
|
71 | const glm::vec3& ldraw::Object::getPoint(int index) const |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
46
diff
changeset
|
72 | { |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
73 | Q_UNUSED(index); |
81
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
46
diff
changeset
|
74 | throw BadPointIndex{}; |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
46
diff
changeset
|
75 | } |
62373840e33a
object editor widgets start to form up
Teemu Piippo <teemu@hecknology.net>
parents:
46
diff
changeset
|
76 | |
132
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
77 | /** |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
78 | * @brief Serializes the object into a stream of bytes for internal storage. |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
79 | * @param stream Data stream to serialize into |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
80 | */ |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
81 | QDataStream& ldraw::Object::serialize(QDataStream &stream) const |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
82 | { |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
83 | return stream << static_cast<int>(this->typeIdentifier()); |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
84 | } |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
85 | |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
86 | /** |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
87 | * @brief Deserializes the object from a stream of bytes coming from internal storage. |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
88 | * @param stream Data stream to serialize from. |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
89 | * @note @c ldraw::Object::serialize will insert a type enumerator. Before calling this function, |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
90 | * this enumerator is assumed to have been handled as the object class needs to be initialized based |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
91 | * on the value of this enumerator. |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
92 | */ |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
93 | QDataStream& ldraw::Object::deserialize(QDataStream &stream) |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
94 | { |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
95 | return stream; |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
96 | } |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
97 | |
158
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
153
diff
changeset
|
98 | QString ldraw::Object::iconName() const |
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
153
diff
changeset
|
99 | { |
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
153
diff
changeset
|
100 | return ""; |
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
153
diff
changeset
|
101 | } |
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
153
diff
changeset
|
102 | |
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
103 | ldraw::ColoredObject::ColoredObject(const Color color_index) : |
13 | 104 | colorIndex{color_index} |
3 | 105 | { |
106 | } | |
107 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
108 | bool ldraw::ColoredObject::hasColor() const |
3 | 109 | { |
110 | return true; | |
111 | } | |
112 | ||
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
113 | QVariant ldraw::ColoredObject::getProperty(Property id) const |
3 | 114 | { |
115 | switch (id) | |
116 | { | |
117 | case Property::Color: | |
89 | 118 | return QVariant::fromValue<Color>(colorIndex); |
3 | 119 | default: |
13 | 120 | return Object::getProperty(id); |
3 | 121 | } |
122 | } | |
123 | ||
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
124 | void ldraw::ColoredObject::setProperty(SetPropertyResult* result, const PropertyKeyValue& pair) |
3 | 125 | { |
89 | 126 | LDRAW_OBJECT_HANDLE_SET_PROPERTY(Color, {colorIndex = value;}); |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
127 | Object::setProperty(result, pair); |
3 | 128 | } |
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
129 | |
132
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
130 | /** |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
131 | * @brief @overload @c ldraw::Object::serialize |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
132 | * @param stream |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
133 | * @return stream |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
134 | */ |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
135 | QDataStream& ldraw::ColoredObject::serialize(QDataStream& stream) const |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
136 | { |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
137 | return Object::serialize(stream) << this->colorIndex; |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
138 | } |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
139 | |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
140 | /** |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
141 | * @brief @overload @c ldraw::Object::deserialize |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
142 | * @param stream |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
143 | * @return stream |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
144 | */ |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
145 | QDataStream& ldraw::ColoredObject::deserialize(QDataStream& stream) |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
146 | { |
134
f77d2230e87c
Add remaining serialize methods
Teemu Piippo <teemu@hecknology.net>
parents:
132
diff
changeset
|
147 | return Object::deserialize(stream) >> this->colorIndex; |
132
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
148 | } |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
149 | |
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
150 | QString ldraw::Empty::textRepresentation() const |
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
151 | { |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
152 | return ""; |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
153 | } |
132
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
154 | |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
155 | ldraw::Object::Type ldraw::Empty::typeIdentifier() const |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
156 | { |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
157 | return Type::Empty; |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
89
diff
changeset
|
158 | } |
141 | 159 | |
160 | QString ldraw::Empty::toLDrawCode() const | |
161 | { | |
162 | return ""; | |
163 | } | |
177
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
164 | |
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
165 | QString ldraw::Empty::typeName() const |
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
166 | { |
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
167 | return QObject::tr("empty"); |
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
168 | } |