Always-on-Top mode implemented (#579)

This commit is contained in:
Wei (Waley) Zhang
2019-07-30 17:53:39 -07:00
committed by Pepe Rivera
parent af8322617f
commit 796d171960
30 changed files with 849 additions and 125 deletions

View File

@@ -27,6 +27,9 @@ using namespace Windows::UI::Xaml::Navigation;
DEPENDENCY_PROPERTY_INITIALIZATION(OverflowTextBlock, IsActive);
DEPENDENCY_PROPERTY_INITIALIZATION(OverflowTextBlock, TextStyle);
DEPENDENCY_PROPERTY_INITIALIZATION(OverflowTextBlock, TokensUpdated);
DEPENDENCY_PROPERTY_INITIALIZATION(OverflowTextBlock, ColumnWidth);
DEPENDENCY_PROPERTY_INITIALIZATION(OverflowTextBlock, ColumnHeight);
DEPENDENCY_PROPERTY_INITIALIZATION(OverflowTextBlock, ScrollButtonFontSize);
void OverflowTextBlock::OnApplyTemplate()
{
@@ -64,6 +67,12 @@ void OverflowTextBlock::OnApplyTemplate()
m_itemsControl = safe_cast<ItemsControl ^>(uiElement);
}
uiElement = GetTemplateChild("EditableToken");
if (uiElement != nullptr)
{
m_editableToken = safe_cast<TextBlock ^>(uiElement);
}
UpdateAllState();
}
@@ -144,13 +153,25 @@ void OverflowTextBlock::OnScrollClick(_In_ Object ^ sender, _In_ RoutedEventArgs
void OverflowTextBlock::UpdateScrollButtons()
{
if (m_itemsControl == nullptr || m_expressionContainer == nullptr)
if (m_expressionContainer == nullptr)
{
return;
}
double editableTokenWidth = 0;
if (m_editableToken != nullptr && m_editableToken->Visibility == ::Visibility::Visible)
{
editableTokenWidth = m_editableToken->ActualWidth;
}
double itemsControlWidth = 0;
if (m_itemsControl != nullptr && m_itemsControl->Visibility == ::Visibility::Visible)
{
itemsControlWidth = m_itemsControl->ActualWidth;
}
// When the width is smaller than the container, don't show any
if (m_itemsControl->ActualWidth <= m_expressionContainer->ActualWidth)
if (itemsControlWidth + editableTokenWidth <= m_expressionContainer->ActualWidth)
{
ShowHideScrollButtons(::Visibility::Collapsed, ::Visibility::Collapsed);
}
@@ -161,7 +182,7 @@ void OverflowTextBlock::UpdateScrollButtons()
{
ShowHideScrollButtons(::Visibility::Visible, ::Visibility::Visible);
}
// Width is larger than the container and left most part of the number is shown. Should be able to scroll left.
// Width is larger than the container and left most part of the number is shown. Should be able to scroll right.
else if (m_expressionContainer->HorizontalOffset == 0)
{
ShowHideScrollButtons(::Visibility::Collapsed, ::Visibility::Visible);

View File

@@ -18,10 +18,14 @@ namespace CalculatorApp
}
DEPENDENCY_PROPERTY_OWNER(OverflowTextBlock);
DEPENDENCY_PROPERTY_WITH_CALLBACK(bool, TokensUpdated);
DEPENDENCY_PROPERTY(bool, IsActive);
DEPENDENCY_PROPERTY(Windows::UI::Xaml::Style ^, TextStyle);
DEPENDENCY_PROPERTY(double, ColumnWidth);
DEPENDENCY_PROPERTY(double, ColumnHeight);
DEPENDENCY_PROPERTY(double, ScrollButtonFontSize);
void OnTokensUpdatedPropertyChanged(bool oldValue, bool newValue);
void UpdateScrollButtons();
void UnregisterEventHandlers();
@@ -34,7 +38,6 @@ namespace CalculatorApp
void OnPointerEntered(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e);
void OnPointerExited(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e);
void ShowHideScrollButtons(Windows::UI::Xaml::Visibility vLeft, Windows::UI::Xaml::Visibility vRight);
void OnTokensUpdatedPropertyChanged(bool oldValue, bool newValue);
void OnViewChanged(_In_opt_ Platform::Object ^ sender, _In_opt_ Windows::UI::Xaml::Controls::ScrollViewerViewChangedEventArgs ^ args);
void UpdateVisualState();
@@ -47,6 +50,7 @@ namespace CalculatorApp
bool m_scrollingLeft;
bool m_scrollingRight;
bool m_isAccessibilityViewControl;
Windows::UI::Xaml::Controls::TextBlock ^ m_editableToken;
Windows::UI::Xaml::Controls::ItemsControl ^ m_itemsControl;
Windows::UI::Xaml::Controls::ScrollViewer ^ m_expressionContainer;
Windows::UI::Xaml::Controls::Button ^ m_scrollLeft;