diff --git a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml
index d09b95d6..bd2ff427 100644
--- a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml
+++ b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml
@@ -57,6 +57,23 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cpp b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cpp
index 171a4459..6a8ee7e5 100644
--- a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cpp
+++ b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cpp
@@ -24,7 +24,15 @@ using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Media::Imaging;
-constexpr auto sc_ViewModelPropertyName = L"ViewModel";
+namespace
+{
+ constexpr auto sc_ViewModelPropertyName = L"ViewModel";
+
+ double valFromTB(TextBox^ tb)
+ {
+ return stod(tb->Text->Data());
+ };
+}
GraphingCalculator::GraphingCalculator()
{
@@ -56,12 +64,6 @@ void GraphingCalculator::ScaleRangeTextBox_KeyDown(Object^ sender, KeyRoutedEven
{
if (e->Key == VirtualKey::Enter)
{
- auto valFromTB = [](TextBox^ tb)
- {
- wstring text = tb->Text->Data();
- return stod(text);
- };
-
double centerX = valFromTB(CenterXTextBox);
double centerY = valFromTB(CenterYTextBox);
double scale = valFromTB(ScaleTextBox);
@@ -71,3 +73,16 @@ void GraphingCalculator::ScaleRangeTextBox_KeyDown(Object^ sender, KeyRoutedEven
e->Handled = true;
}
}
+
+void GraphingCalculator::MoveRangeByRatioTextBox_KeyDown(Object^ sender, KeyRoutedEventArgs^ e)
+{
+ if (e->Key == VirtualKey::Enter)
+ {
+ double ratioX = valFromTB(RatioXTextBox);
+ double ratioY = valFromTB(RatioYTextBox);
+
+ Graph->MoveRangeByRatio(ratioX, ratioY);
+
+ e->Handled = true;
+ }
+}
diff --git a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.h b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.h
index 1a0ad5e6..4774c0d1 100644
--- a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.h
+++ b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.h
@@ -23,6 +23,7 @@ namespace CalculatorApp
void GraphingCalculator_DataContextChanged(Windows::UI::Xaml::FrameworkElement^ sender, Windows::UI::Xaml::DataContextChangedEventArgs^ args);
void ScaleRangeTextBox_KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
+ void MoveRangeByRatioTextBox_KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
private:
CalculatorApp::ViewModel::GraphingCalculatorViewModel^ m_viewModel;
diff --git a/src/GraphControl/Control/Grapher.cpp b/src/GraphControl/Control/Grapher.cpp
index 535d20f7..86809619 100644
--- a/src/GraphControl/Control/Grapher.cpp
+++ b/src/GraphControl/Control/Grapher.cpp
@@ -80,6 +80,20 @@ namespace GraphControl
}
}
+ void Grapher::MoveRangeByRatio(double ratioX, double ratioY)
+ {
+ if (m_graph)
+ {
+ if (auto renderer = m_graph->GetRenderer())
+ {
+ if (SUCCEEDED(renderer->MoveRangeByRatio(ratioX, ratioY)))
+ {
+ m_renderMain->RunRenderPass();
+ }
+ }
+ }
+ }
+
void Grapher::OnApplyTemplate()
{
auto swapChainPanel = dynamic_cast(GetTemplateChild(StringReference(s_templateKey_SwapChainPanel)));
diff --git a/src/GraphControl/Control/Grapher.h b/src/GraphControl/Control/Grapher.h
index b29ec74b..d6b57d1c 100644
--- a/src/GraphControl/Control/Grapher.h
+++ b/src/GraphControl/Control/Grapher.h
@@ -101,6 +101,7 @@ namespace GraphControl
#pragma endregion
void ScaleRange(double centerX, double centerY, double scale);
+ void MoveRangeByRatio(double ratioX, double ratioY);
protected:
#pragma region Control Overrides