OpenSiv3Dでフレックスボックスを使ったUIレイアウトができるライブラリです
Note
現在Windows版Siv3Dのみ対応しています (Mac,Linux,Webは今後対応予定)
Important
OpenSiv3D v0.6.15以外のバージョンでは正しく動作しない可能性があります
-
Windows版 OpenSiv3D SDK v0.6.15をインストールする
-
FlexLayoutの最新版zipファイルをダウンロード
Releases →
FlexLayout-Windows.zip -
OpenSiv3D SDKのフォルダを開き、ダウンロードした.zipファイルの中身をコピーする
SDKのフォルダを簡単に開く方法
Win+Rキーを押し、以下のコマンドを実行してください:explorer.exe %SIV3D_0_6_15%install_flexlayout.mp4
-
Visual Studioで通常通りOpenSiv3Dのプロジェクトを作成する
-
Main.cppなどの先頭に、FlexLayout.hppをインクルードする#include <Siv3D.hpp> + #include <FlexLayout.hpp> ...
| アクションゲーム風UI | FlexLayout Showcase |
|---|---|
![]() |
![]() |
| ソースコード (Gist) | サンプルプロジェクト |
<Layout>:レイアウトファイルの宣言
<Box>:ボックスレイアウトに対応したコンテナー
<Label>:テキストを描画できる要素 (改行には<br/>を使用)
属性:
id:文書全体で一意のIDclass:要素のクラスstyle:インラインCSS
記述例:
<Layout> <Box id="root"> <Label class="label">Hello, World!</Label> </Box> </Layout>
-
Layout{ U"hoge/レイアウトファイル.xml", FlexLayout::EnableHotReload::No }- レイアウトファイルのファイルパスを指定して初期化
- 第2引数をFlexLayout::EnableHotReload::Yesにすると、ファイルの保存時にレイアウトファイルを自動で再読み込みします
-
Layout{ Arg::code=U"<Layout>...</Layout>" }- レイアウトのXMLを直接指定して初期化
-
load()レイアウトを読み込む
読み込みに失敗した場合はfalseを返しますが、現在のレイアウトには影響しません -
reload()ファイルを再読み込み (ファイルパスを指定した場合のみ使用可)
-
update()ホットリロード、レイアウトの更新を実行
引数にはレイアウトで使用する横幅、縦幅を設定できます -
document()ルート要素を取得します (
FlexLayout::Box)
実装例:
#include <Siv3D.hpp> #include "FlexLayout/Layout.hpp" void Main() { FlexLayout::Layout layout{ U"Layout.xml" }; while(System::Update()) { layout.update(Scene::Rect()); auto root = layout.document(); } }
-
getElementsByClassName(class)クラス名から要素を検索
-
getElementById(id)IDから要素を1つだけ取得
ここで取得した要素は、reloadなどで再読み込みしても参照が保持されます -
marginAreaRect(),borderAreaRect(),paddingAreaRect(),contentAreaRect()ボックスモデルの各領域を取得
参照:CSS 基本ボックスモデル入門 -
getStyle(U"property")要素のスタイルを取得
値が設定されていない場合、空の配列を返します -
setStyle(U"property", ...)要素のスタイルを設定
-
asLabel()FlexLayout::Labelのインスタンスを取得 (<Label/>で宣言されていた時のみ有効)
-
draw(...)ラベルの文字列を描画
-
text(),setText(text)ラベルの文字列を取得,更新
(描画に反映させるにはFlexLayout::Layout::update()の呼び出しが必要です)
BoxとLabelはインラインCSSによるスタイル設定に対応しています
各プロパティの詳細についてはMDN Web Docsなどを参照してください
- レイアウト関連
- align*
align-contentalign-itemsalign-self
aspect-ratiodisplay- flex*
flex(flex-basis,flex-grow,flex-shrink)flex-flow(flex-direction,flex-wrap)
gap(row-gap,column-gap)positiontop,right,bottom,leftjustify-contentdirectionmargin(margin-top,margin-right,margin-bottom,margin-left)padding(padding-top,padding-right,padding-bottom,padding-left)border-width(border-top-width,border-right-width,border-bottom-width,border-left-width)width(min-width,min-height)height(max-width,max-height)
- align*
- ラベル関連
font-sizeline-height- 実数倍率のみ対応
text-align
pc, ch, em, ex, ic, lh


