/** * Called whenever the graphic view has changed. * Adjusts the scrollbar ranges / steps. */ void QG_GraphicView::adjustOffsetControls() { static bool running = false; if (running) { return; } running = true; RS_DEBUG->print("QG_GraphicView::adjustOffsetControls() begin"); if (container==NULL || hScrollBar==NULL || vScrollBar==NULL) { return; } int ox = getOffsetX(); int oy = getOffsetY(); RS_Vector min = container->getMin(); RS_Vector max = container->getMax(); // no drawing yet - still allow to scroll if (max.x < min.x+1.0e-6 || max.y < min.y+1.0e-6 || max.x > RS_MAXDOUBLE || max.x < RS_MINDOUBLE || min.x > RS_MAXDOUBLE || min.x < RS_MINDOUBLE || max.y > RS_MAXDOUBLE || max.y < RS_MINDOUBLE || min.y > RS_MAXDOUBLE || min.y < RS_MINDOUBLE ) { min = RS_Vector(-10,-10); max = RS_Vector(100,100); } int minVal = (int)(-ox-toGuiDX(getWidth())*0.5 - QG_SCROLLMARGIN - getBorderLeft()); int maxVal = (int)(-ox+toGuiDX(getWidth())*0.5 + QG_SCROLLMARGIN + getBorderRight()); hScrollBar->setValue(0); if (minVal<=maxVal) { hScrollBar->setRange(minVal, maxVal); } //hScrollBar->setMinValue(minVal); //hScrollBar->setMaxValue(maxVal); minVal = (int)(oy-toGuiDY(getHeight())*0.5 - QG_SCROLLMARGIN - getBorderTop()); maxVal = (int)(oy+toGuiDY(getHeight())*0.5 +QG_SCROLLMARGIN + getBorderBottom()); if (minVal<=maxVal) { vScrollBar->setRange(minVal, maxVal); } //vScrollBar->setMaxValue((int)(QG_SCROLLMARGIN + getBorderBottom() // - (min.y * getFactor().y))); //vScrollBar->setMinValue((int)(getHeight() - // max.y * getFactor().y // - QG_SCROLLMARGIN - getBorderTop())); hScrollBar->setPageStep((int)(getWidth())); vScrollBar->setPageStep((int)(getHeight())); hScrollBar->setValue(-ox); vScrollBar->setValue(oy); slotHScrolled(-ox); slotVScrolled(oy); RS_DEBUG->print("H min: %d / max: %d / step: %d / value: %d\n", hScrollBar->minimum(), hScrollBar->maximum(), hScrollBar->pageStep(), ox); // DEBUG_HEADER(); RS_DEBUG->print(/*RS_Debug::D_WARNING, */"V min: %d / max: %d / step: %d / value: %d\n", vScrollBar->minimum(), vScrollBar->maximum(), vScrollBar->pageStep(), oy); RS_DEBUG->print("QG_GraphicView::adjustOffsetControls() end"); running = false; }
/** * Called whenever the graphic view has changed. * Adjusts the scrollbar ranges / steps. */ void QG_GraphicView::adjustOffsetControls() { if (scrollbars) { static bool running = false; if (running) { return; } running = true; if (container==NULL || hScrollBar==NULL || vScrollBar==NULL) { return; } int ox = getOffsetX(); int oy = getOffsetY(); RS_Vector min = container->getMin(); RS_Vector max = container->getMax(); // no drawing yet - still allow to scroll if (max.x < min.x+1.0e-6 || max.y < min.y+1.0e-6 || max.x > RS_MAXDOUBLE || max.x < RS_MINDOUBLE || min.x > RS_MAXDOUBLE || min.x < RS_MINDOUBLE || max.y > RS_MAXDOUBLE || max.y < RS_MINDOUBLE || min.y > RS_MAXDOUBLE || min.y < RS_MINDOUBLE ) { min = RS_Vector(-10,-10); max = RS_Vector(100,100); } auto factor = getFactor(); int minVal = (int)(-getWidth()*0.75 + std::min(min.x, 0.)*factor.x); int maxVal = (int)(-getWidth()*0.25 + std::max(max.x, 0.)*factor.x); if (minVal<=maxVal) { hScrollBar->setRange(minVal, maxVal); } minVal = (int)(+getHeight()*0.25 - std::max(max.y, 0.)*factor.y); maxVal = (int)(+getHeight()*0.75 - std::min(min.y, 0.)*factor.y); if (minVal<=maxVal) { vScrollBar->setRange(minVal, maxVal); } hScrollBar->setPageStep(getWidth()); vScrollBar->setPageStep(getHeight()); hScrollBar->setValue(-ox); vScrollBar->setValue(oy); slotHScrolled(-ox); slotVScrolled(oy); // RS_DEBUG->print("H min: %d / max: %d / step: %d / value: %d\n", // hScrollBar->minimum(), hScrollBar->maximum(), // hScrollBar->pageStep(), ox); // RS_DEBUG->print(/*RS_Debug::D_WARNING, */"V min: %d / max: %d / step: %d / value: %d\n", // vScrollBar->minimum(), vScrollBar->maximum(), // vScrollBar->pageStep(), oy); running = false; } }