Newer
Older
TIASShot / TIASshot / UI / PreviewMonitor.SelfTest.cs
#if SELFTEST
using System;
using System.Drawing;

namespace TIASshot {
    public partial class PreviewMonitor {

        /// <summary>
        /// 副ディスプレイが接続されている状態を模す(SELFTEST 限定).
        /// IsShown は副ディスプレイ検出時に設定される _size で決まるため,ヘッドレス環境でも
        /// Form1.ShowImage の副モニタ給餌経路(FastClone → UpdateImage)を通せるようにする.
        /// </summary>
        /// <param name="size">模擬する副ディスプレイのサイズ</param>
        internal void SelfTestForceShown(Size size) {
            _size = size;
        }

        /// <summary>
        /// 再描画タイマーの Tick 処理(RefreshTimer_Tick)を 1 回実行する(UI スレッドから呼ぶこと).
        /// ヘッドレスでは Load が発火せずタイマーが開始されないため,Tick を直接駆動する.
        /// </summary>
        internal void SelfTestRefresh() {
            RefreshTimer_Tick(this, EventArgs.Empty);
        }

        /// <summary>副モニタ(picPreview)に現在表示中の画像</summary>
        internal Image SelfTestDisplayedImage => picPreview.Image;

        /// <summary>タイマー停止と表示用 Bitmap の解放(Dispose の前に UI スレッドで呼ぶ)</summary>
        internal void SelfTestShutdown() {
            _refreshTimer.Stop();
            var shown = picPreview.Image;
            picPreview.Image = null;
            shown?.Dispose();
            Bitmap pending;
            lock (_dispBufLock) {
                pending = _dispBuf;
                _dispBuf = null;
                _isUpdateBuf = false;
            }
            pending?.Dispose();
        }
    }
}
#endif