%***********************************************************************
\section{�s�A�m���[���̃X�N���[������̌v�Z}

��������ѐ����X�N���[���o�[�E�R���g���[���̐ݒ�ƁC��ʂ̕`���ԂƂ̊֌W��
���߂邽�߂̌v�Z���@���q�ׂ�D

\begin{figure}[h]
  \begin{center}
    \begin{overpic}[scale=1.0]{tech_memo_scroll.eps}
      \put(55, 99){\scriptsize ${\rm vsq.TotalClocks} \cdot {\rm scaleX} + {\rm pictPianoRoll.Width}$}
      \put(24, 92){\scriptsize startToDrawX}
      \put(69, 92){\scriptsize pictPianoRoll.Width}

      \put(122, 71){\scriptsize 0}
      \put(122, 49){\scriptsize vScroll.Value}
      \put(122, 43){\scriptsize vScroll.Maximum -}
      \put(129, 40){\scriptsize vScroll.LargeChange}

      \put(14, 73){\rotatebox{90}{\scriptsize startToDrawY}}
      \put(14, 36){\rotatebox{90}{\scriptsize pictPianoRoll.Height}}
      \put(5, 29){\rotatebox{90}{\scriptsize $128 \cdot \lfloor 100 \cdot {\rm scaleY} \rfloor$}}

      \put(43, 19){\scriptsize \textcolor{red}{0}}
      \put(59, 19){\scriptsize \textcolor{red}{hScroll.Value}}
      \put(82, 19){\scriptsize \textcolor{red}{${\rm hScroll.Maximum} - {\rm hScroll.LargeChange}$}}

      \put(45, 68){\color[rgb]{1.,0,0}{Viewport}}
      \put(25, 80){\color[rgb]{0,0,1.}{���z�X�N���[��}}
    \end{overpic}
  \end{center}
  \label{�}�F�X�N���[���T���}}
\end{figure}

��}�̂悤�ɁC�r���[�|�[�g�̃I�t�Z�b�g��${\rm startToDrawX}$��${\rm startToDrawX}$�Œ�`�����D
�܂��C�����X�N���[���E�R���g���[��${\rm hScroll}$��${\rm Value}$�v���p�e�B�[�̒P�ʂ�clock�C
�����X�N���[���E�R���g���[��${\rm vScroll}$��${\rm Value}$�v���p�e�B�[�̒P�ʂ�cent�ł���D
�s�A�m���[���̉�ʏ�̉������̕\���{����${\rm scaleX [pixel/clock]}$�C�c�����̕\���{����${\rm scaleY [pixel/cent]}$�Ƃ���D
\par
${\rm startToDrawX}$�C${\rm startToDrawY}$�͎��Œ�`�����F
\begin{equation}
  \left\{
  \begin{array}{l}
    {\rm startToDrawX} = {\rm hScroll.Value} \cdot {\rm scaleX},
  \\
    {\rm startToDrawY} = {\rm vScroll.Value} \cdot {\rm scaleY}.
  \end{array} \right.
\end{equation}

%-----------------------------------------------------------------------
\subsection{�����X�N���[���o�[}
${\rm startToDrawX}$�̍ő�l����эŏ��l�͎��̂悤�Ɍ��߂�.
\begin{eqnarray}
  \max ({\rm startToDrawX}) &=& {\rm vsq.TotalClocks} \cdot {\rm scaleX},
  \\
  \min ({\rm startToDrawX}) &=& 0.
\end{eqnarray}

�����X�N���[���o�[����ԉE�ɃX�N���[�����ꂽ�Ƃ��ɁChScroll.Value���ő�l���Ƃ�˂΂Ȃ�Ȃ�����C
startToDrawX�̍ő�l��scaleX�Ŋ��������̂��ChScroll.Value�̍ő�l�ƂȂ�悤�ɂ���D
�܂��C�����X�N���[���o�[�̓���̎d�l����hScroll.Value�̍ő�l��
${\rm hScroll.Maximum} - {\rm hScroll.LargeChange}$
�ł���̂ŁC���̎������藧�D
\begin{equation}
  \frac{\max( {\rm startToDrawX} )}{ {\rm scaleX} } = {\rm hScroll.Maximum} - {\rm hScroll.LargeChange}
  \label{eq:hscroll_max_limitation}
\end{equation}

����ɁC�O�Ϗ�X�N���[���o�[�̉��͈͂ƃX�N���[���{�b�N�X�̕��̔䂪�C���z�X�N���[���ƃr���[�|�[�g�̕��̔��
����ł���Ɣ��ς��ǂ��̂ŁC���̎������藧�悤�ɂ���D
\begin{equation}
  \frac{\rm pictPianoRoll.Width}{{\rm vsq.TotalClocks} \cdot {\rm scaleX} + {\rm pictPianoRoll.Width}} = \frac{\rm hScroll.LargeChange}{\rm hScroll.Maximum}
  \label{eq:hscroll_viewport-ratio_limitation}
\end{equation}

��(\ref{eq:hscroll_max_limitation})�Ǝ�(\ref{eq:hscroll_viewport-ratio_limitation})��A�������ĉ����ƁChScroll.Maximum��hScroll.LargeChange�͎��Œ�܂�D

\begin{eqnarray}
   {\rm hScroll.Maximum}     &=& {\rm vsq.TotalClocks} + \frac{\rm pictPianoRoll.Width}{\rm scaleX},\label{eq:hscroll_maximum}
   \\
   {\rm hScroll.LargeChange} &=& \frac{\rm pictPianoRoll.Width}{\rm scaleX}.\label{eq:hscroll_largechange}
\end{eqnarray}

�����ŁC�X�N���[���{�b�N�X�̎��ۂ̕\������������ɂȂ邩�𒲂ׂ�D
�����X�N���[���o�[�̍\���͂����������}�̂悤�ɂȂ��Ă���D

\begin{figure}[h]
  \begin{center}
    \begin{overpic}[width=160mm]{tech_memo_scroll_abstract.eps}
      \put(3, 6){\scriptsize thumbWidth}
      \put(140, 6){\scriptsize thumbWidth}
      \put(84, 6){\scriptsize boxWidth}
      \put(70, 22){\scriptsize hScroll.Width}
    \end{overpic}
  \end{center}
\end{figure}

�X�N���[���o�[�̓���̎d�l����C�������藧�D

\begin{equation}
  \frac{\rm boxWidth}{{\rm hScroll.Width} - 2 \cdot {\rm thumbWidth}} = \frac{\rm hScroll.LargeChange}{\rm hScroll.Maximum}.
\end{equation}

�]���āC

\begin{equation}
  {\rm boxWidth} = \frac{\rm hScroll.LargeChange}{\rm hScroll.Maximum} ({\rm hScroll.Width} - 2 \cdot {\rm thumbWidth}).\label{eq:hscroll_boxwidth_limitation}
\end{equation}

����boxWidth�́C��(\ref{eq:hscroll_maximum})�Ǝ�(\ref{eq:hscroll_largechange})�ɂ�茈�܂邪�C
���̑傫��������l�ȉ��ɂȂ�Ɣ��Ɉ����Â炭�Ȃ�ƍl������D
�����ŁC����boxWidth�̍ŏ��l��$\min({\rm boxWidth})$�Ƃ��C��(\ref{eq:hscroll_maximum})�Ǝ�(\ref{eq:hscroll_largechange})����
���߂��l�����̒l��菬�����Ȃ�ꍇ�́C�ȉ��̗v�̂Ōv�Z���邱�Ƃɂ���D

\par

boxWidth��l��$\min({\rm boxWidth})$�̒萔�Ƃ��Ĉ����D
����ƁC��(\ref{eq:hscroll_viewport-ratio_limitation})�͐��藧���Ȃ��Ȃ邪�C����͎d���Ȃ��D
�����ڂ����������C�X�N���[���{�b�N�X�����삵�ɂ������Ƃ̕����ʖڂ��Ǝv������ł���D
�]���čŏ���(\ref{eq:hscroll_max_limitation})�Ǝ�(\ref{eq:hscroll_viewport-ratio_limitation})��A�������ĉ���������ɁC
��(\ref{eq:hscroll_max_limitation})�Ǝ�(\ref{eq:hscroll_boxwidth_limitation})��A�������ĉ����D
���́C

\begin{eqnarray}
  {\rm hScroll.Maximum}     &=& \frac{{\rm vsq.TotalClocks}\left({\rm hScroll.Width - 2 \cdot {\rm thumbWidth}}\right)}{\left({\rm hScroll.Width - 2 \cdot {\rm thumbWidth}}\right) - {\rm boxWidth}},\\
  {\rm hScroll.LargeChange} &=& \frac{{\rm vsq.TotalClocks} \cdot {\rm boxWidth}}{\left({\rm hScroll.Width - 2 \cdot {\rm thumbWidth}}\right) - {\rm boxWidth}},
\end{eqnarray}

�ƂȂ�D

%-----------------------------------------------------------------------
\subsection{�����X�N���[���o�[}

startToDrawY�̍ő�l����эŏ��l�͎��̂悤�Ɍ��߂�D

\begin{eqnarray}
  \max( {\rm startToDrawY} ) &=& 128 \cdot \lfloor 100 \cdot {\rm scaleY} \rfloor - {\rm pictPianoRoll.Height},
  \\
  \min( {\rm startToDrawY} ) &=& 0.
\end{eqnarray}

�����X�N���[���o�[����ԉ��ɃX�N���[�����ꂽ�Ƃ��ɁCvScroll.Value���ő�l���Ƃ�˂΂Ȃ�Ȃ�����C
startToDrawY�̍ő�l��scaleY�Ŋ��������̂��CvScroll.Value�̍ő�l�ƂȂ�悤�ɂ���D
�܂��C�����X�N���[���o�[�̓���̎d�l����vScroll.Value�̍ő�l��
${\rm vScroll.Maximum} - {\rm vScroll.LargeChange}$�ł���̂ŁC���̎������藧�D

\begin{equation}
  \frac{\max( {\rm startToDrawY} )}{\rm scaleY} = {\rm vScroll.Maximum} - {\rm vScroll.LargeChange}.
  \label{eq:vscroll_max_limitation}
\end{equation}

����ɁC�O�Ϗ�X�N���[���o�[�̉ғ��͈͂ƃX�N���[���{�b�N�X�̍����̔䂪�C���z�X�N���[���ƃr���[�|�[�g�̍����̔��
����ł���Ɣ��ς��ǂ��̂ŁC���̎������藧�悤�ɂ���D

\begin{equation}
  \frac{\rm pictPianoRoll.Height}{128 \cdot \lfloor 100 \cdot {\rm scaleY} \rfloor} = \frac{\rm vScroll.LargeChange}{\rm vScroll.Maximum}.
  \label{eq:vscroll_viewport-ratio_limitation}
\end{equation}

��(\ref{eq:vscroll_max_limitation})�Ǝ�(\ref{eq:vscroll_viewport-ratio_limitation})��A�������ĉ����ƁC
vScroll.Maximum��vScroll.LargeChange�͎��Œ�܂�D

\begin{eqnarray}
  {\rm vScroll.Maximum}     &=& \frac{128 \cdot \lfloor 100 \cdot {\rm scaleY} \rfloor}{\rm scaleY},
  \\
  {\rm vScroll.LargeChange} &=& \frac{\rm pictPianoRoll.Height}{\rm scaleY}.
\end{eqnarray}

�����ŁC�X�N���[���{�b�N�X�̎��ۂ̕\��������������ɂȂ邩�𒲂ׂ�D
�����X�N���[���o�[�̏ꍇ�Ƒ�̓����ł���̂ŁC�X�N���[���{�b�N�X�̍���${\rm boxHeight}$�ɂ��āC�������藧�D

\begin{equation}
  {\rm boxHeight} = \frac{\rm vScroll.LargeChange}{\rm vScroll.Maximum}({\rm vScroll.Height} - 2 \cdot {\rm thumbHeight}).
  \label{eq:vscroll_boxheight_limitation}
\end{equation}

�����X�N���[���o�[�̂Ƃ��Ɠ��l�ɁCboxHeight���C�l��min(boxHeight)�̒萔�Ƃ��Ĉ����D
��(\ref{eq:vscroll_max_limitation})�Ǝ�(\ref{eq:vscroll_boxheight_limitation})��A�������ĉ����D���́C

\begin{eqnarray}
  {\rm vScroll.Maximum}     &=& \frac{128 \cdot \lfloor 100 \cdot {\rm scaleY} \rfloor - {\rm pictPianoRoll.Height}}{\rm scaleY} \times \nonumber\\
                            & & \hspace{1.0em}\frac{{\rm vScroll.Height - 2 \cdot {\rm thumbHeight}}}{{\rm vScroll.Height - 2 \cdot {\rm thumbHeight} - {\rm boxHeight}}},
  \\
  {\rm vScroll.LargeChange} &=& \frac{128 \cdot \lfloor 100 \cdot {\rm scaleY} \rfloor - {\rm pictPianoRoll.Height}}{\rm scaleY} \times \nonumber\\
                            & & \hspace{1.0em}\frac{\rm boxHeight}{{\rm vScroll.Height - 2 \cdot {\rm thumbHeight} - {\rm boxHeight}}},
\end{eqnarray}

�ƂȂ�D
