using System;
using System.Collections.Generic;
using System.Text;
using Yanesdk.Ytl;
using Sdl;

namespace Yamalib.Yanesdkext.System
{
    /// <summary>
    /// SDLWindowを使うときには、メッセージをpumpしないと
    /// いけない。そのpumpを行なうためのframework
    /// </summary>
    /// <code>
    /// while (sdlFrame.PollEvent() == YanesdkResult.NoError
    ///     && !info.taskController.End)
    /// {
    ///     info.taskController.CallTask(info);
    /// }
    /// sdlFrame.Quit();
    /// </code>
    public class SDLFrameEx
    {
        /// <summary>
        /// SDLWindowを用いる場合は、必ず定期的にこれを呼び出すこと。
        /// </summary>
        /// <returns></returns>
        public static YanesdkResult PollEvent()
        {
            //	Application.DoEvents(); // これを入れておかないとWindow切り替えでもたるようだ(?)
            #region ↑原因判明
            /*

146 ナマエ：もっちり　2006/04/04(火) 12:17 [*.yournet.ne.jp] [Opera8.53/WindowsXP]

IMEバーをタスクバーから取り出すか、非表示にするか、
詳細なテキストサービスをオフにするかで解決する類かもです。 

150 ナマエ：avin　2006/04/04(火) 14:37 [*.ocn.ne.jp] [MSIE6.0/WindowsXP]

>>149
色々確認してみましたが正常に動作しているようです。
お騒がせしてすみませんでした（；´ω`）
この件は解決したということで、協力していただいた皆様有難うございましたm(_ _)m
*/
            #endregion

            unsafe
            {
                wheelup = wheeldown = false;
                SDL.SDL_Event evt = new SDL.SDL_Event();
                while (SDL.SDL_PollEvent(ref evt) != 0)
                {
                    if (evt.type == SDL.SDL_QUIT)
                    {
                        return YanesdkResult.ShouldBeQuit;
                    }

                    switch (evt.type)
                    {
                        case (byte)SDL.SDL_MOUSEBUTTONDOWN:
                            switch (evt.button.button)
                            {
                                case 4:
                                    wheelup = true;
                                    break;
                                case 5:
                                    wheeldown = true;
                                    break;
                                default:
                                    break;
                            }
                            break;
                        default:
                            break;
                    }
                }
                return YanesdkResult.NoError;
            }
        }

        private static bool wheelup;
        private static bool wheeldown;

        public static bool IsWheelUp
        {
            get
            {
                return wheelup;
            }
        }

        public static bool IsWheelDown
        {
            get
            {
                return wheeldown;
            }
        }

        /// <summary>
        /// 終了するときに呼び出す。内部的にSDL.Quitを呼び出している。
        /// MacOSの場合は必ず呼び出す必要がある。
        /// </summary>
        /// <returns></returns>
        public static void Quit()
        {
            SDL.SDL_Quit();

            if (Yanesdk.System.Platform.IsMac)
                Yanesdk.Sdl.MacAPI.MacAPI.ExitToShell();
        }
    }
}
