in src/Calculator/Controls/OverflowTextBlock.cs [142:197]
public void UpdateScrollButtons()
{
if (m_expressionContent == null || m_expressionContainer == null || m_scrollLeft == null || m_scrollRight == null)
{
return;
}
var realOffset = m_expressionContainer.HorizontalOffset + m_expressionContainer.Padding.Left + m_expressionContent.Margin.Left;
var scrollLeftVisibility = realOffset > SCROLL_BUTTONS_APPROXIMATION_RANGE ? Visibility.Visible : Visibility.Collapsed;
var scrollRightVisibility = realOffset + m_expressionContainer.ActualWidth + SCROLL_BUTTONS_APPROXIMATION_RANGE < m_expressionContent.ActualWidth
? Visibility.Visible
: Visibility.Collapsed;
bool shouldTryFocusScrollRight = false;
if (m_scrollLeft.Visibility != scrollLeftVisibility)
{
if (scrollLeftVisibility == Visibility.Collapsed)
{
shouldTryFocusScrollRight = m_scrollLeft.Equals(FocusManager.GetFocusedElement());
}
m_scrollLeft.Visibility = scrollLeftVisibility;
}
if (m_scrollRight.Visibility != scrollRightVisibility)
{
if (scrollRightVisibility == Visibility.Collapsed && m_scrollLeft.Visibility == Visibility.Visible
&& m_scrollRight.Equals(FocusManager.GetFocusedElement()))
{
m_scrollLeft.Focus(FocusState.Programmatic);
}
m_scrollRight.Visibility = scrollRightVisibility;
}
if (shouldTryFocusScrollRight && scrollRightVisibility == Visibility.Visible)
{
m_scrollRight.Focus(FocusState.Programmatic);
}
if (ScrollButtonsPlacement == OverflowButtonPlacement.Above && m_expressionContent != null)
{
double left = m_scrollLeft != null && m_scrollLeft.Visibility == Visibility.Visible ? ScrollButtonsWidth : 0;
double right = m_scrollRight != null && m_scrollRight.Visibility == Visibility.Visible ? ScrollButtonsWidth : 0;
if (m_expressionContainer.Padding.Left != left || m_expressionContainer.Padding.Right != right)
{
m_expressionContainer.ViewChanged -= OnViewChanged;
m_expressionContainer.Padding = new Thickness(left, 0, right, 0);
m_expressionContent.Margin = new Thickness(-left, 0, -right, 0);
m_expressionContainer.UpdateLayout();
m_expressionContainer.Measure(m_expressionContainer.RenderSize);
m_expressionContainer.ViewChanged += OnViewChanged;
}
}
}