1 module armos.app.window; 2 3 import armos.events; 4 import armos.math; 5 import armos.app; 6 7 /++ 8 armosで用いるWindowsの雛形となるinterfaceです.新たにWindowを実装する際はこのinterfaceを継承することでrunnerから実行できます. 9 +/ 10 interface Window{ 11 public{ 12 enum bool hasRenderer = false; 13 /++ 14 Windowsが実行するイベントを表すプロパティです. 15 +/ 16 // CoreEvents events(); 17 18 /++ 19 サイズのプロパティです 20 +/ 21 void size(Vector2i size); 22 23 /++ 24 サイズのプロパティです. 25 +/ 26 Vector2i size()const; 27 28 /++ 29 サイズのプロパティです. 30 +/ 31 Vector2i frameBufferSize()const; 32 33 /++ 34 イベントが発生している場合,登録されたイベントを実行します 35 +/ 36 void pollEvents(); 37 38 /++ 39 Windowを更新します. 40 +/ 41 void update(); 42 43 /++ 44 Windowを閉じます. 45 +/ 46 void close(); 47 48 /++ 49 Windowがフレームの最後に閉じる場合trueになります. 50 +/ 51 bool shouldClose(); 52 53 /++ 54 Windowのアスペクト比を表します 55 +/ 56 float aspect(); 57 58 /++ 59 Windowのタイトル文字列のプロパティです. 60 +/ 61 string name(); 62 63 /++ 64 Windowのタイトル文字列のプロパティです. 65 +/ 66 void name(in string str); 67 68 /// 69 // void initEvents(BaseApp, CoreEvents); 70 void select(); 71 72 /// VerticalSync 73 void verticalSync(in bool); 74 75 float pixelScreenCoordScale()const; 76 }//public 77 } 78 79 mixin template BaseWindow(){ 80 public{ 81 /++ 82 +/ 83 bool shouldClose(){return _shouldClose;} 84 85 /++ 86 +/ 87 string name(){return _name;} 88 89 /++ 90 +/ 91 void name(in string str){_name = str;} 92 93 /++ 94 +/ 95 // CoreEvents events(){ 96 // assert(_coreEvents); 97 // return _coreEvents; 98 // } 99 100 /++ 101 +/ 102 float aspect(){ 103 if(size[1]==0){ 104 return 0; 105 }else{ 106 return cast(float)size[0]/cast(float)size[1]; 107 } 108 109 } 110 111 }//public 112 113 protected{ 114 bool _shouldClose = false; 115 string _name = ""; 116 Vector2f _windowSize; 117 118 }//protected 119 } 120 121 /++ 122 現在のWindowを返す関数です. 123 +/ 124 Window currentWindow(){ 125 return mainLoop.window; 126 } 127 128 /++ 129 現在のWindowの大きさを変更する関数です. 130 +/ 131 void windowSize(Vector2i size){ 132 currentWindow.size(size); 133 } 134 135 /++ 136 現在のWindowの大きさを返す関数です. 137 +/ 138 Vector2i windowSize(){ 139 return currentWindow.size; 140 } 141 142 /++ 143 現在のWindowのアスペクト比を返す関数です. 144 +/ 145 float windowAspect(){ 146 return currentWindow.aspect; 147 } 148 149 /++ 150 +/ 151 void windowTitle(in string str){ 152 currentWindow.name = str; 153 } 154 155 /++ 156 +/ 157 string windowTitle(){ 158 return currentWindow.name; 159 } 160 161 /// 162 void verticalSync(in bool f){ 163 currentWindow.verticalSync = f; 164 }