#assistants: fix visual artefacts

This commit is contained in:
Ivan Mahonin 2018-04-10 18:37:05 +07:00
parent 97f86c58c7
commit 409d8b5dae
2 changed files with 12 additions and 7 deletions

View file

@ -472,6 +472,7 @@ SceneViewer::SceneViewer(ImageUtils::FullScreenWidget *parent)
, m_eraserPointerOn(false)
, m_backupTool("")
, m_clipRect()
, m_dirty()
, m_isPicking(false)
, m_current3DDevice(NONE)
, m_sideRasterPos()
@ -1363,6 +1364,7 @@ static void drawFpsGraph(int t0, int t1) {
//#define FPS_HISTOGRAM
void SceneViewer::paintGL() {
m_dirty = false;
#ifdef _DEBUG
if (!check_framebuffer_status()) {
/* QGLWidget の widget 生成/削除のタイミングで(platform によって?)
@ -1689,6 +1691,7 @@ bool SceneViewer::is3DView() const {
//-----------------------------------------------------------------------------
void SceneViewer::invalidateAll() {
m_dirty = true;
m_clipRect.empty();
update();
if (m_vRuler) m_vRuler->update();
@ -1706,6 +1709,7 @@ void SceneViewer::navigatorPan(const QPoint &delta) {
//-----------------------------------------------------------------------------
void SceneViewer::GLInvalidateAll() {
m_dirty = true;
m_clipRect.empty();
update();
if (m_vRuler) m_vRuler->update();
@ -1715,17 +1719,15 @@ void SceneViewer::GLInvalidateAll() {
//-----------------------------------------------------------------------------
void SceneViewer::GLInvalidateRect(const TRectD &rect) {
// there is a case that this function is called more than once before
// paintGL() is called
if (!m_clipRect.isEmpty())
m_clipRect += rect;
else
if (!m_dirty || rect.isEmpty())
m_clipRect = rect;
else if (!m_clipRect.isEmpty())
m_clipRect += rect;
m_dirty = true;
update();
if (m_vRuler) m_vRuler->update();
if (m_hRuler) m_hRuler->update();
}
//-----------------------------------------------------------------------------
// delta.x: right panning, pixel; delta.y: down panning, pixel
@ -2253,11 +2255,13 @@ int SceneViewer::pick(const TPointD &point) {
// we could be painting OUTSIDE a paintEvent()...
TRectD oldClipRect(m_clipRect);
bool oldDirty(m_dirty);
m_clipRect = TRectD(point.x, point.y, point.x + 1, point.y + 1);
paintGL(); // draw identifiable objects
m_clipRect = oldClipRect;
m_dirty = oldDirty;
m_previewMode = previewMode;
@ -2571,4 +2575,4 @@ void SceneViewer::onContextAboutToBeDestroyed() {
makeCurrent();
m_lutCalibrator->cleanup();
doneCurrent();
}
}

View file

@ -136,6 +136,7 @@ class SceneViewer final : public GLWidgetForHighDpi,
bool m_eraserPointerOn;
QString m_backupTool;
TRectD m_clipRect;
bool m_dirty;
bool m_isPicking;