SDXFrameWork 0.13 SDXFrameWork

- Main Page
- Related Pages
- Classes

All Classes Namespaces Functions Variables Enumerations Enumerator Pages
System.h
1 //Copyright © 2014 SDXFramework
2 //[License]GNU Affero General Public License, version 3
3 //[Contact]http://sourceforge.jp/projects/dxframework/
4 #pragma once
5 #include <Multimedia/Window.h>
6 #include <Multimedia/Input.h>
7 #include <Multimedia/Font.h>
8
9 namespace SDX
10 {
11 enum class Platform
12 {
13 Windows,
14 MacOSX,
15 GNU_Linux,
16 iOS,
17 Android,
18 Unknown,
19 };
20
23 class System
24 {
25 friend class Window;
26
27 private:
28 MONO_STATE(System)
29
30
31 static bool& IsEnd()
32 {
33 static bool isEnd;
34 return isEnd;
35 }
36 public:
37 static std::string inputText;
38 static std::string textComposition;
39 static int textCursor;
40 static int textSelection_len;
41
45 static void Initialise(const char* ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ = false)
46 {
47 if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0)
48 {
49 exit(1);
50 return;
51 }
52
53 #ifndef TABLET
54 SDL_JoystickEventState(SDL_ENABLE);
55
56 if (SDL_NumJoysticks() > 0)
57 {
58 Input::pad.Open();
59 }
60 #endif
61
62 SubWindow::mainWindow.Create(ウィンドウ名,幅,高さ,フルスクリーンフラグ);
63 Screen::SetRenderer(Renderer::mainRenderer);
64 Window::SetWindow(SubWindow::mainWindow);
65
66 //タブレットと画面サイズを合わせる
67 #ifdef TABLET
68 int dpiX;
69 int dpiY;
70 SDL_GetWindowSize(SubWindow::mainWindow.handle, &dpiX, &dpiY);
71 SubWindow::mainWindow.aspect = (double)dpiX / dpiY;
72 SDL_RenderSetLogicalSize(Screen::GetHandle(), 幅, 高さ);
73 #endif
74 //デフォルトフォントの設定
75 setlocale(LC_CTYPE, "jpn");//文字コードを日本語に
76
77 #ifndef OMIT_SDL2_TTF
78 TTF_Init();
79 #endif
80 Drawing::SetDefaultFont(SystemFont::Gothic, 16 , 2 );
81 SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVERYTHING);
82
83 //音声関連の初期化
84 Mix_Init(MIX_INIT_MP3 | MIX_INIT_OGG);
85 Mix_OpenAudio(44100, AUDIO_S16, 2, 1024);
86 Mix_AllocateChannels(16);
87
88 Mix_HookMusicFinished(Music::Finished);
89
90 SDL_StopTextInput();
91
92 IsEnd() = false;
93 }
94
97 static bool End()
98 {
99 #ifndef OMIT_SDL2_TTF
100 TTF_Quit();
101 #endif
102 Mix_CloseAudio();
103 Mix_Quit();
104 SDL_Quit();
105 Window::activeWindow->Destroy();
106 IsEnd() = true;
107 return true;
108 }
109
111 static bool Update(bool 描画更新フラグ = true)
112 {
113 if (描画更新フラグ)
114 {
115 Screen::Flip();
116 Screen::Clear();
117 }
118 Input::Update();
119 bool result = System::ProcessMessage();
120
121 Music::Update();
122
123 return result;
124 }
125
130 static bool ProcessMessage()
131 {
132 SDL_Event event;
133
134 while (SDL_PollEvent(&event))
135 {
136 switch (event.type)
137 {
138 case SDL_WINDOWEVENT:
139 switch (event.window.event)
140 {
141 case SDL_WINDOWEVENT_CLOSE:
142 #ifndef TABLET
143 //ここでIDに応じてDestroy等する
144 SubWindow::CheckWindowID(event.window.windowID);
145 if (SubWindow::mainWindow.handle == nullptr)
146 {
147 IsEnd() = true;
148 for (auto it : SubWindow::windowS)
149 {
150 it->Destroy();
151 }
152 }
153 #endif
154 break;
155 #ifdef TABLET
156 case SDL_WINDOWEVENT_MINIMIZED:
157 //スリープに入った時、再生中ならBGMを停止する
158 if (Music::Check())
159 {
160 Mix_PauseMusic();
161 }
162 break;
163 case SDL_WINDOWEVENT_RESTORED:
164 //BGMを止めていたら、再開する
165 Mix_ResumeMusic();
166 break;
167 #endif
168 }
169 break;
170 case SDL_QUIT:
171 IsEnd() = true;
172 break;
173 case SDL_TEXTINPUT:
174 inputText += event.text.text;
175 break;
176 case SDL_TEXTEDITING:
177 //Windowsでは無効
178 textComposition = event.edit.text;
179 textCursor = event.edit.start;
180 textSelection_len = event.edit.length;
181 break;
182 default:
183 Input::GetState(event);
184 break;
185 }
186 }
187
188 return !IsEnd();
189 }
190
192 static void Wait(int 停止ミリ秒)
193 {
194 SDL_Delay(停止ミリ秒);
195 }
196
198 static void WaitKey()
199 {
200 while (!Keyboard::HoldAnyKey() && System::ProcessMessage()){}
201 }
202
204 static Platform GetPlatform()
205 {
206 #ifdef __WINDOWS__
207 return Platform::Windows;
208 #elif defined(__MACOSX__)
209 return Platform::MacOSX;
210 #elif defined(__LINUX__)
211 return Platform::GNU_Linux;
212 #elif defined(__ANDROID__)
213 return Platform::Android;
214 #elif defined(__IPHONEOS__)
215 return Platform::iOS;
216 #endif
217 return Platform::Unknown;
218 }
219
222 static bool IsTablet()
223 {
224 #ifdef __WINDOWS__
225 return false;
226 #elif defined(__MACOSX__)
227 return false;
228 #elif defined(__LINUX__)
229 return false;
230 #elif defined(__ANDROID__)
231 return true;
232 #elif defined(__IPHONEOS__)
233 return true;
234 #endif
235 return false;
236 }
237
238 };
239 }
SDX::System::Wait
static void Wait(int 停止ミリ秒)
指定ミリ秒処理を停止する.
Definition: System.h:192
SDX::Input::Update
static void Update()
入力状態を更新.
Definition: Input.h:42
SDX::System::WaitKey
static void WaitKey()
なんらかのキーが入力されるまで処理を停止する.
Definition: System.h:198
SDX::Screen::Flip
static bool Flip()
描画内容を反映.
Definition: Screen.h:62
SDX::System::Initialise
static void Initialise(const char *ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ=false)
ライブラリの初期化.
Definition: System.h:45
SDX::System
ライブラリの初期化やシステム的な処理を行う関数群.
Definition: System.h:23
SDX::System::Update
static bool Update(bool 描画更新フラグ=true)
各種更新処理をまとめて行う.
Definition: System.h:111
SDX::SubWindow::Create
bool Create(const char *ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ=false)
Windowの初期化と生成.
Definition: SubWindow.h:77
SDX::Screen::Clear
static bool Clear()
画面を消去する.
Definition: Screen.h:69
SDX::System::GetPlatform
static Platform GetPlatform()
プラットフォームを取得する.
Definition: System.h:204
SDX::Input::pad
static Joypad pad
ジョイパッド
Definition: Input.h:22
SDX::Window::SetWindow
static void SetWindow(SubWindow &アクティブにするSubWindow=SubWindow::mainWindow)
SubWindowをアクティブにする.
Definition: Window.h:34
SDX::Music::Update
static bool Update()
fadeOut付きで終了した後に次Musicを再生するための処理.
Definition: Music.h:233
SDX::System::End
static bool End()
ライブラリの終了処理.
Definition: System.h:97
SDX::Screen::GetHandle
static SDL_Renderer * GetHandle()
スクリーンハンドルを取得.
Definition: Screen.h:26
SDX::Screen::SetRenderer
static void SetRenderer(Renderer &描画先Renderer=Renderer::mainRenderer)
アクティブなRendererを設定.
Definition: Screen.h:40
SDX::System::IsTablet
static bool IsTablet()
タブレット端末かどうかを取得.
Definition: System.h:222
SDX::Keyboard::HoldAnyKey
static bool HoldAnyKey()
いずれかのキーが押されているか取得.
Definition: Keyboard.h:454
SDX::System::ProcessMessage
static bool ProcessMessage()
OSのメッセージ処理を行う.
Definition: System.h:130
SDX::Renderer::mainRenderer
static Renderer & mainRenderer
メインウィンドウのレンダラー
Definition: Renderer.h:49
SDX::Joypad::Open
void Open()
ジョイパッドを起動.
Definition: Joypad.h:114
SDX::SubWindow::mainWindow
static SubWindow mainWindow
現在アクティブなウィンドウ
Definition: SubWindow.h:46
SDX::SubWindow::Destroy
bool Destroy()
SubWindowを削除.
Definition: SubWindow.h:102
SDX::Drawing::SetDefaultFont
static void SetDefaultFont(const char *フォント名, int 大きさ, int 行間=0, bool 高品質レンダリング=true)
デフォルトのフォントを設定する.
Definition: Drawing.h:291
SDX::Music::Check
static bool Check()
再生中か確認.
Definition: Music.h:186
SDX::Window::activeWindow
static SubWindow * activeWindow
現在アクティブなウィンドウ
Definition: Window.h:24
SDX::Window
アクティブなSubWindowを操作するクラス.
Definition: Window.h:14
SDX::Input::GetState
static void GetState(SDL_Event &event)
入力の状態変化を取得.
Definition: Input.h:59