| 297 // |
297 // |
| 298 QColor GLRenderer::getMainColor() |
298 QColor GLRenderer::getMainColor() |
| 299 { |
299 { |
| 300 QColor col (gl_maincolor); |
300 QColor col (gl_maincolor); |
| 301 |
301 |
| 302 if (!col.isValid()) |
302 if (not col.isValid()) |
| 303 return QColor (0, 0, 0); |
303 return QColor (0, 0, 0); |
| 304 |
304 |
| 305 col.setAlpha (gl_maincolor_alpha * 255.f); |
305 col.setAlpha (gl_maincolor_alpha * 255.f); |
| 306 return col; |
306 return col; |
| 307 } |
307 } |
| 360 void GLRenderer::drawGLScene() |
360 void GLRenderer::drawGLScene() |
| 361 { |
361 { |
| 362 if (document() == null) |
362 if (document() == null) |
| 363 return; |
363 return; |
| 364 |
364 |
| 365 if (gl_wireframe && !isPicking()) |
365 if (gl_wireframe && not isPicking()) |
| 366 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); |
366 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); |
| 367 |
367 |
| 368 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
368 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
| 369 glEnable (GL_DEPTH_TEST); |
369 glEnable (GL_DEPTH_TEST); |
| 370 |
370 |
| 797 } |
797 } |
| 798 } |
798 } |
| 799 } |
799 } |
| 800 |
800 |
| 801 // Camera icons |
801 // Camera icons |
| 802 if (!isPicking()) |
802 if (not isPicking()) |
| 803 { |
803 { |
| 804 // Draw a background for the selected camera |
804 // Draw a background for the selected camera |
| 805 paint.setPen (m_thinBorderPen); |
805 paint.setPen (m_thinBorderPen); |
| 806 paint.setBrush (QBrush (QColor (0, 128, 160, 128))); |
806 paint.setBrush (QBrush (QColor (0, 128, 160, 128))); |
| 807 paint.drawRect (m_cameraIcons[camera()].selRect); |
807 paint.drawRect (m_cameraIcons[camera()].selRect); |
| 829 } |
829 } |
| 830 |
830 |
| 831 // Tool tips |
831 // Tool tips |
| 832 if (m_drawToolTip) |
832 if (m_drawToolTip) |
| 833 { |
833 { |
| 834 if (m_cameraIcons[m_toolTipCamera].destRect.contains (m_pos) == false) |
834 if (not m_cameraIcons[m_toolTipCamera].destRect.contains (m_pos)) |
| 835 m_drawToolTip = false; |
835 m_drawToolTip = false; |
| 836 else |
836 else |
| 837 { |
837 { |
| 838 QString label = format (formatstr, tr (g_CameraNames[m_toolTipCamera])); |
838 QString label = format (formatstr, tr (g_CameraNames[m_toolTipCamera])); |
| 839 QToolTip::showText (m_globalpos, label); |
839 QToolTip::showText (m_globalpos, label); |
| 856 y += metrics.height(); |
856 y += metrics.height(); |
| 857 } |
857 } |
| 858 } |
858 } |
| 859 |
859 |
| 860 // If we're range-picking, draw a rectangle encompassing the selection area. |
860 // If we're range-picking, draw a rectangle encompassing the selection area. |
| 861 if (m_rangepick && !isPicking() && m_totalmove >= 10) |
861 if (m_rangepick && not isPicking() && m_totalmove >= 10) |
| 862 { |
862 { |
| 863 int x0 = m_rangeStart.x(), |
863 int x0 = m_rangeStart.x(), |
| 864 y0 = m_rangeStart.y(), |
864 y0 = m_rangeStart.y(), |
| 865 x1 = m_pos.x(), |
865 x1 = m_pos.x(), |
| 866 y1 = m_pos.y(); |
866 y1 = m_pos.y(); |
| 920 |
920 |
| 921 // ============================================================================= |
921 // ============================================================================= |
| 922 // |
922 // |
| 923 void GLRenderer::mouseReleaseEvent (QMouseEvent* ev) |
923 void GLRenderer::mouseReleaseEvent (QMouseEvent* ev) |
| 924 { |
924 { |
| 925 const bool wasLeft = (m_lastButtons & Qt::LeftButton) && ! (ev->buttons() & Qt::LeftButton), |
925 const bool wasLeft = (m_lastButtons & Qt::LeftButton) && not (ev->buttons() & Qt::LeftButton), |
| 926 wasRight = (m_lastButtons & Qt::RightButton) && ! (ev->buttons() & Qt::RightButton), |
926 wasRight = (m_lastButtons & Qt::RightButton) && not (ev->buttons() & Qt::RightButton), |
| 927 wasMid = (m_lastButtons & Qt::MidButton) && ! (ev->buttons() & Qt::MidButton); |
927 wasMid = (m_lastButtons & Qt::MidButton) && not (ev->buttons() & Qt::MidButton); |
| 928 |
928 |
| 929 if (m_panning) |
929 if (m_panning) |
| 930 m_panning = false; |
930 m_panning = false; |
| 931 |
931 |
| 932 if (wasLeft) |
932 if (wasLeft) |
| 933 { |
933 { |
| 934 // Check if we selected a camera icon |
934 // Check if we selected a camera icon |
| 935 if (!m_rangepick) |
935 if (not m_rangepick) |
| 936 { |
936 { |
| 937 for (CameraIcon & info : m_cameraIcons) |
937 for (CameraIcon & info : m_cameraIcons) |
| 938 { |
938 { |
| 939 if (info.destRect.contains (ev->pos())) |
939 if (info.destRect.contains (ev->pos())) |
| 940 { |
940 { |
| 985 addDrawnVertex (m_hoverpos); |
985 addDrawnVertex (m_hoverpos); |
| 986 } break; |
986 } break; |
| 987 |
987 |
| 988 case ESelectMode: |
988 case ESelectMode: |
| 989 { |
989 { |
| 990 if (!isDrawOnly()) |
990 if (not isDrawOnly()) |
| 991 { |
991 { |
| 992 if (m_totalmove < 10) |
992 if (m_totalmove < 10) |
| 993 m_rangepick = false; |
993 m_rangepick = false; |
| 994 |
994 |
| 995 if (!m_rangepick) |
995 if (not m_rangepick) |
| 996 m_addpick = (m_keymods & Qt::ControlModifier); |
996 m_addpick = (m_keymods & Qt::ControlModifier); |
| 997 |
997 |
| 998 if (m_totalmove < 10 || m_rangepick) |
998 if (m_totalmove < 10 || m_rangepick) |
| 999 pick (ev->x(), ev->y()); |
999 pick (ev->x(), ev->y()); |
| 1000 } |
1000 } |
| 1089 if (mid || (left && shift)) |
1089 if (mid || (left && shift)) |
| 1090 { |
1090 { |
| 1091 pan (X) += 0.03f * dx * (zoom() / 7.5f); |
1091 pan (X) += 0.03f * dx * (zoom() / 7.5f); |
| 1092 pan (Y) -= 0.03f * dy * (zoom() / 7.5f); |
1092 pan (Y) -= 0.03f * dy * (zoom() / 7.5f); |
| 1093 m_panning = true; |
1093 m_panning = true; |
| 1094 } elif (left && !m_rangepick && camera() == EFreeCamera) |
1094 } |
| |
1095 elif (left && not m_rangepick && camera() == EFreeCamera) |
| 1095 { |
1096 { |
| 1096 rot (X) = rot (X) + dy; |
1097 rot (X) = rot (X) + dy; |
| 1097 rot (Y) = rot (Y) + dx; |
1098 rot (Y) = rot (Y) + dx; |
| 1098 |
1099 |
| 1099 clampAngle (rot (X)); |
1100 clampAngle (rot (X)); |
| 1100 clampAngle (rot (Y)); |
1101 clampAngle (rot (Y)); |
| 1101 } |
1102 } |
| 1102 |
1103 |
| 1103 // Start the tool tip timer |
1104 // Start the tool tip timer |
| 1104 if (!m_drawToolTip) |
1105 if (not m_drawToolTip) |
| 1105 m_toolTipTimer->start (500); |
1106 m_toolTipTimer->start (500); |
| 1106 |
1107 |
| 1107 // Update 2d position |
1108 // Update 2d position |
| 1108 m_pos = ev->pos(); |
1109 m_pos = ev->pos(); |
| 1109 m_globalpos = ev->globalPos(); |
1110 m_globalpos = ev->globalPos(); |
| 1178 |
1179 |
| 1179 // Use particularly thick lines while picking ease up selecting lines. |
1180 // Use particularly thick lines while picking ease up selecting lines. |
| 1180 glLineWidth (max<double> (gl_linethickness, 6.5f)); |
1181 glLineWidth (max<double> (gl_linethickness, 6.5f)); |
| 1181 |
1182 |
| 1182 // Clear the selection if we do not wish to add to it. |
1183 // Clear the selection if we do not wish to add to it. |
| 1183 if (!m_addpick) |
1184 if (not m_addpick) |
| 1184 { |
1185 { |
| 1185 LDObjectList oldsel = selection(); |
1186 LDObjectList oldsel = selection(); |
| 1186 getCurrentDocument()->clearSelection(); |
1187 getCurrentDocument()->clearSelection(); |
| 1187 |
1188 |
| 1188 for (LDObject* obj : oldsel) |
1189 for (LDObject* obj : oldsel) |
| 1261 LDObject* obj = LDObject::fromID (idx); |
1262 LDObject* obj = LDObject::fromID (idx); |
| 1262 assert (obj != null); |
1263 assert (obj != null); |
| 1263 |
1264 |
| 1264 // If this is an additive single pick and the object is currently selected, |
1265 // If this is an additive single pick and the object is currently selected, |
| 1265 // we remove it from selection instead. |
1266 // we remove it from selection instead. |
| 1266 if (!m_rangepick && m_addpick) |
1267 if (not m_rangepick && m_addpick) |
| 1267 { |
1268 { |
| 1268 if (obj->isSelected()) |
1269 if (obj->isSelected()) |
| 1269 { |
1270 { |
| 1270 obj->unselect(); |
1271 obj->unselect(); |
| 1271 removedObj = obj; |
1272 removedObj = obj; |
| 1869 if (firstrun) |
1870 if (firstrun) |
| 1870 { |
1871 { |
| 1871 // If this is the first run, we don't know enough to determine |
1872 // If this is the first run, we don't know enough to determine |
| 1872 // whether the zoom was to fit, so we mark in our knowledge so |
1873 // whether the zoom was to fit, so we mark in our knowledge so |
| 1873 // far and start over. |
1874 // far and start over. |
| 1874 inward = !filled; |
1875 inward = not filled; |
| 1875 firstrun = false; |
1876 firstrun = false; |
| 1876 } |
1877 } |
| 1877 else |
1878 else |
| 1878 { |
1879 { |
| 1879 // If this run filled the screen and the last one did not, the |
1880 // If this run filled the screen and the last one did not, the |
| 1880 // last run had ideal zoom - zoom a bit back and we should reach it. |
1881 // last run had ideal zoom - zoom a bit back and we should reach it. |
| 1881 if (filled && !lastfilled) |
1882 if (filled && not lastfilled) |
| 1882 { |
1883 { |
| 1883 zoomNotch (false); |
1884 zoomNotch (false); |
| 1884 break; |
1885 break; |
| 1885 } |
1886 } |
| 1886 |
1887 |
| 1887 // If this run did not fill the screen and the last one did, we've |
1888 // If this run did not fill the screen and the last one did, we've |
| 1888 // now reached ideal zoom so we're done here. |
1889 // now reached ideal zoom so we're done here. |
| 1889 if (!filled && lastfilled) |
1890 if (not filled && lastfilled) |
| 1890 break; |
1891 break; |
| 1891 |
1892 |
| 1892 inward = !filled; |
1893 inward = not filled; |
| 1893 } |
1894 } |
| 1894 |
1895 |
| 1895 lastfilled = filled; |
1896 lastfilled = filled; |
| 1896 } |
1897 } |
| 1897 |
1898 |
| 1952 |
1953 |
| 1953 // ============================================================================= |
1954 // ============================================================================= |
| 1954 // |
1955 // |
| 1955 void GLRenderer::mouseDoubleClickEvent (QMouseEvent* ev) |
1956 void GLRenderer::mouseDoubleClickEvent (QMouseEvent* ev) |
| 1956 { |
1957 { |
| 1957 if (!(ev->buttons() & Qt::LeftButton) || editMode() != ESelectMode) |
1958 if (not (ev->buttons() & Qt::LeftButton) || editMode() != ESelectMode) |
| 1958 return; |
1959 return; |
| 1959 |
1960 |
| 1960 pick (ev->x(), ev->y()); |
1961 pick (ev->x(), ev->y()); |
| 1961 |
1962 |
| 1962 if (selection().isEmpty()) |
1963 if (selection().isEmpty()) |
| 2073 if (found) |
2074 if (found) |
| 2074 document()->insertObj (i + 1, new LDEmpty); |
2075 document()->insertObj (i + 1, new LDEmpty); |
| 2075 } |
2076 } |
| 2076 } |
2077 } |
| 2077 |
2078 |
| 2078 if (meta.img && ovlobj) |
2079 if (meta.img != null && ovlobj != null) |
| 2079 { |
2080 { |
| 2080 ovlobj->setCamera (cam); |
2081 ovlobj->setCamera (cam); |
| 2081 ovlobj->setFileName (meta.fname); |
2082 ovlobj->setFileName (meta.fname); |
| 2082 ovlobj->setX (meta.ox); |
2083 ovlobj->setX (meta.ox); |
| 2083 ovlobj->setY (meta.oy); |
2084 ovlobj->setY (meta.oy); |