Updates ResetGrid to account for when equations are added during Manual Adjustment mode (#1231)

* updated the reset grid logic to track and set the initial range after an equation is added

* When in manual adjustment mode and an equation is added, replot the graph when reset is called

* remove members that are no longer needed

* Added logic to include the PrepareGraph() and removed re-graphing in the ResetGrid method

* skip SetDisplayRanges if TryInitialize returns a nullopt so there is no crash

* Updated the logic to handle the case where the range is updated via settings

* Fix bug with reset view hyperlink

* Updated the logic for graph settings updating the graph range

* Rebased with the latest, fixed issues with the rebase

 Author:    Stephanie Anderl <46726333+sanderl@users.noreply.github.com>

* Update the internals version of calculator to the latest so that the PrepareGraph API available
This commit is contained in:
Stephanie Anderl
2020-06-17 12:30:19 -07:00
committed by GitHub
parent 81ea002cf9
commit 76e33ef159
6 changed files with 55 additions and 27 deletions

View File

@@ -118,22 +118,36 @@ namespace GraphControl
{
if (m_graph != nullptr && m_renderMain != nullptr)
{
if (auto renderer = m_graph->GetRenderer())
if(auto renderer = m_graph->GetRenderer())
{
if (m_replot)
HRESULT hr;
// Reset the Grid using the m_initialDisplayRange properties when the user was last in Manual Adjustment mode and an equation was added.
// Reset the Grid using the TryPlotGraph method when the range is updated via Graph Settings. Return out of this block so we don't render 2 times.
// Reset the Grid using the ResetRange() in all other cases.
if (m_resetUsingInitialDisplayRange)
{
hr = renderer->SetDisplayRanges(m_initialDisplayRangeXMin, m_initialDisplayRangeXMax, m_initialDisplayRangeYMin, m_initialDisplayRangeYMax);
m_resetUsingInitialDisplayRange = false;
}
else if (m_rangeUpdatedBySettings)
{
IsKeepCurrentView = false;
m_replot = false;
TryPlotGraph(false, false);
m_rangeUpdatedBySettings = false;
GraphViewChangedEvent(this, GraphViewChangedReason::Reset);
return;
}
else if (SUCCEEDED(renderer->ResetRange()))
else
{
hr = renderer->ResetRange();
}
if (SUCCEEDED(hr))
{
m_renderMain->RunRenderPass();
GraphViewChangedEvent(this, GraphViewChangedReason::Reset);
}
GraphViewChangedEvent(this, GraphViewChangedReason::Reset);
return;
}
}
}
@@ -1097,18 +1111,31 @@ optional<vector<shared_ptr<Graphing::IEquation>>> Grapher::TryInitializeGraph(bo
{
if (keepCurrentView || IsKeepCurrentView)
{
auto renderer = m_graph->GetRenderer();
double xMin, xMax, yMin, yMax;
m_graph->GetRenderer()->GetDisplayRanges(xMin, xMax, yMin, yMax);
renderer->GetDisplayRanges(xMin, xMax, yMin, yMax);
auto initResult = m_graph->TryInitialize(graphingExp);
m_graph->GetRenderer()->SetDisplayRanges(xMin, xMax, yMin, yMax);
if (initResult != nullopt)
{
if (IsKeepCurrentView)
{
// PrepareGraph() populates the values of the graph after TryInitialize but before rendering. This allows us to get the range of the graph to be rendered.
if (SUCCEEDED(renderer->PrepareGraph()))
{
// Get the initial display ranges from the graph that was just initialized to be used in ResetGrid if they user clicks the GraphView button.
renderer->GetDisplayRanges(m_initialDisplayRangeXMin, m_initialDisplayRangeXMax, m_initialDisplayRangeYMin, m_initialDisplayRangeYMax);
m_resetUsingInitialDisplayRange = true;
}
}
m_replot = true;
renderer->SetDisplayRanges(xMin, xMax, yMin, yMax);
}
return initResult;
}
else
{
m_replot = false;
m_resetUsingInitialDisplayRange = false;
return m_graph->TryInitialize(graphingExp);
}
}

View File

@@ -254,7 +254,7 @@ public enum class GraphViewChangedReason
if (auto render = m_graph->GetRenderer())
{
render->SetDisplayRanges(xMin, xMax, yMin, yMax);
m_replot = true;
m_rangeUpdatedBySettings = true;
if (m_renderMain)
{
m_renderMain->RunRenderPass();
@@ -352,7 +352,12 @@ public enum class GraphViewChangedReason
Windows::UI::Core::CoreCursor ^ m_cachedCursor;
int m_errorType;
int m_errorCode;
bool m_replot;
bool m_resetUsingInitialDisplayRange;
bool m_rangeUpdatedBySettings;
double m_initialDisplayRangeXMin;
double m_initialDisplayRangeXMax;
double m_initialDisplayRangeYMin;
double m_initialDisplayRangeYMax;
public:
Windows::Storage::Streams::RandomAccessStreamReference ^ GetGraphBitmapStream();