Update Calculator keyboard for greater consistency and extensibility (#688)

This commit is contained in:
Pepe Rivera
2019-10-03 15:56:44 -07:00
committed by GitHub
parent 9cb0932eaa
commit 55074c2312
34 changed files with 3151 additions and 1181 deletions

View File

@@ -0,0 +1,80 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#include "pch.h"
#include "ControlSizeTrigger.h"
using namespace CalculatorApp::Views::StateTriggers;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
DEPENDENCY_PROPERTY_INITIALIZATION(ControlSizeTrigger, Source);
DEPENDENCY_PROPERTY_INITIALIZATION(ControlSizeTrigger, MinHeight);
DEPENDENCY_PROPERTY_INITIALIZATION(ControlSizeTrigger, MinWidth);
ControlSizeTrigger::ControlSizeTrigger()
{
SetActive(false);
}
ControlSizeTrigger::~ControlSizeTrigger()
{
UnregisterSizeChanged(Source);
}
void ControlSizeTrigger::OnSourcePropertyChanged(FrameworkElement^ oldValue, FrameworkElement^ newValue)
{
UnregisterSizeChanged(oldValue);
RegisterSizeChanged(newValue);
}
void ControlSizeTrigger::RegisterSizeChanged(FrameworkElement^ element)
{
if (element == nullptr) { return; }
if (element != Source)
{
UnregisterSizeChanged(Source);
}
m_sizeChangedToken =
element->SizeChanged += ref new SizeChangedEventHandler(this, &ControlSizeTrigger::OnSizeChanged);
}
void ControlSizeTrigger::UnregisterSizeChanged(FrameworkElement^ element)
{
if ((element != nullptr) && (m_sizeChangedToken.Value != 0))
{
element->SizeChanged -= m_sizeChangedToken;
m_sizeChangedToken.Value = 0;
}
}
void ControlSizeTrigger::OnSizeChanged(Object^ sender, SizeChangedEventArgs^ e)
{
UpdateIsActive(e->NewSize);
}
void ControlSizeTrigger::UpdateIsActive(Size sourceSize)
{
if (Source != nullptr && MinWidth > 0 || MinHeight > 0)
{
if (MinHeight > 0 && MinWidth > 0)
{
SetActive((sourceSize.Height >= MinHeight) && (sourceSize.Width >= MinWidth));
}
else if (MinHeight > 0)
{
SetActive(sourceSize.Height >= MinHeight);
}
else
{
SetActive(sourceSize.Width >= MinWidth);
}
}
else
{
SetActive(false);
}
}

View File

@@ -0,0 +1,37 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
#include "CalcViewModel/Common/Utils.h"
namespace CalculatorApp::Views::StateTriggers
{
public ref class ControlSizeTrigger sealed : public Windows::UI::Xaml::StateTriggerBase
{
public:
ControlSizeTrigger();
DEPENDENCY_PROPERTY_OWNER(ControlSizeTrigger);
DEPENDENCY_PROPERTY_WITH_CALLBACK(Windows::UI::Xaml::FrameworkElement^, Source);
DEPENDENCY_PROPERTY_WITH_DEFAULT(double, MinHeight, 0.0);
DEPENDENCY_PROPERTY_WITH_DEFAULT(double, MinWidth, 0.0);
private:
~ControlSizeTrigger();
void OnSourcePropertyChanged(Windows::UI::Xaml::FrameworkElement^ oldValue, Windows::UI::Xaml::FrameworkElement^ newValue);
void RegisterSizeChanged(Windows::UI::Xaml::FrameworkElement^ element);
void UnregisterSizeChanged(Windows::UI::Xaml::FrameworkElement^ element);
void OnSizeChanged(Platform::Object^ sender, Windows::UI::Xaml::SizeChangedEventArgs^ e);
void UpdateIsActive(Windows::Foundation::Size sourceSize);
private:
Windows::Foundation::EventRegistrationToken m_sizeChangedToken;
};
}