diff --git a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml index 24f096f2..d09b95d6 100644 --- a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml +++ b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml @@ -25,7 +25,8 @@ Grid.Row="1" Grid.Column="0"> - + + + + + + + + + + + + + + + + diff --git a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cpp b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cpp index d83fcaf3..171a4459 100644 --- a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cpp +++ b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cpp @@ -11,12 +11,14 @@ using namespace CalculatorApp::ViewModel; using namespace concurrency; using namespace GraphControl; using namespace Platform; +using namespace std; using namespace std::chrono; using namespace Utils; using namespace Windows::Foundation::Collections; using namespace Windows::Storage::Streams; using namespace Windows::System; using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; using namespace Windows::UI::Xaml::Data; using namespace Windows::UI::Xaml::Input; using namespace Windows::UI::Xaml::Media; @@ -49,3 +51,23 @@ void GraphingCalculator::ViewModel::set(GraphingCalculatorViewModel^ vm) RaisePropertyChanged(StringReference(sc_ViewModelPropertyName)); } } + +void GraphingCalculator::ScaleRangeTextBox_KeyDown(Object^ sender, KeyRoutedEventArgs^ e) +{ + 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); + + Graph->ScaleRange(centerX, centerY, scale); + + e->Handled = true; + } +} diff --git a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.h b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.h index fc095ae8..1a0ad5e6 100644 --- a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.h +++ b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.h @@ -22,6 +22,8 @@ namespace CalculatorApp private: 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); + private: CalculatorApp::ViewModel::GraphingCalculatorViewModel^ m_viewModel; }; diff --git a/src/GraphControl/Control/Grapher.cpp b/src/GraphControl/Control/Grapher.cpp index 3a434cb1..535d20f7 100644 --- a/src/GraphControl/Control/Grapher.cpp +++ b/src/GraphControl/Control/Grapher.cpp @@ -66,6 +66,20 @@ namespace GraphControl } } + void Grapher::ScaleRange(double centerX, double centerY, double scale) + { + if (m_graph) + { + if (auto renderer = m_graph->GetRenderer()) + { + if (SUCCEEDED(renderer->ScaleRange(centerX, centerY, scale))) + { + 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 b969aed0..b29ec74b 100644 --- a/src/GraphControl/Control/Grapher.h +++ b/src/GraphControl/Control/Grapher.h @@ -100,6 +100,8 @@ namespace GraphControl } #pragma endregion + void ScaleRange(double centerX, double centerY, double scale); + protected: #pragma region Control Overrides void OnApplyTemplate() override;