public void UpdateScrollButtons()

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;
                    }
                }
            }