private void UpdateViews()
        {
            SplitViews.Height = this.ClientSize.Height - MainMenu.Height - SplitTab.Height;

            if (SurfaceTile != null)
            {
                int tile_x = (SurfaceTile.GetCurrentTileSheetWidth() - TileViewHScrollBar.Width) / KDefaultTileSize.Width;
                TileViewHScrollBar.Maximum = TileViewHScrollBar.LargeChange + tile_x;

                int tile_y = (SurfaceTile.GetCurrentTileSheetHeight() - TileViewVScrollBar.Height) / KDefaultTileSize.Height;
                TileViewVScrollBar.Maximum = TileViewVScrollBar.LargeChange + tile_y;

                SurfaceTile.Invalidate();
            }

            if (SurfaceLevel != null)
            {
                SSize level_size = SurfaceLevel.GetLevelSize();

                int level_x =
                    ((int)(level_size.Width * SurfaceLevel.GetTileSize().Width *SurfaceLevel.GetScaleFactor())
                     - LevelViewHScrollBar.Width) /
                    (int)(SurfaceLevel.GetTileSize().Width *SurfaceLevel.GetScaleFactor());

                LevelViewHScrollBar.Maximum =
                    Math.Max(LevelViewHScrollBar.LargeChange + level_x, LevelViewHScrollBar.LargeChange - 1);

                int level_y =
                    ((int)(level_size.Height * SurfaceLevel.GetTileSize().Height *SurfaceLevel.GetScaleFactor())
                     - LevelViewVScrollBar.Height) /
                    (int)(SurfaceLevel.GetTileSize().Height *SurfaceLevel.GetScaleFactor()) + 1;

                LevelViewVScrollBar.Maximum =
                    Math.Max(LevelViewVScrollBar.LargeChange + level_y, LevelViewVScrollBar.LargeChange - 1);

                SurfaceLevel.Invalidate();

                LabelScale.Text = "배율: " + (int)(SurfaceLevel.GetScaleFactor() * 100) + " %";

                LabelLevelName.Text = "레벨 이름: " + m_LevelName;

                LabelLevelSize.Left = SplitViews.Panel2.Width - LabelLevelSize.Width;
                LabelLevelSize.Text = "레벨 크기: " + SurfaceLevel.GetLevelSize().Width + " x " + SurfaceLevel.GetLevelSize().Height;
            }
        }
        private void SurfaceTile_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                SSize tile_size = SurfaceTile.GetTileSize();

                SSize selection_rest;
                selection_rest.Width  = m_MouseDownPos.X % tile_size.Width;
                selection_rest.Height = m_MouseDownPos.Y % tile_size.Height;

                SPosition selection_origin = m_MouseDownPos;
                SSize     selection_size   = tile_size;

                selection_size.Width  += Math.Max(e.X - m_MouseDownPos.X, 0) + selection_rest.Width;
                selection_size.Height += Math.Max(e.Y - m_MouseDownPos.Y, 0) + selection_rest.Height;

                SurfaceTile.UpdateSelection(selection_origin, selection_size);

                SurfaceLevel.UpdateSelectedTile(SurfaceTile.GetCurrentSelectionOrigin(), SurfaceTile.GetCurrentSelectionSizeInTileCount());
            }
        }