DlangUI de Dlang-man
D언어군귀여운
버튼을 누르면 「D언어군 귀엽다」라고 표시됩니다. D언어군 귀엽다.
소스 코드 설명
app.dimport std.stdio;
import std.random;
//サンプルコードにはdlangui.allと書いてるけどこう
import dlangui;
//サンプルコードにはDLANGUI_ENTRY_POINTと書いてるけど変わってる
mixin APP_ENTRY_POINT;
extern(C) int UIAppMain(string[] args)
{
Platform.instance.uiLanguage = "ja";
//UIのテーマを設定
Platform.instance.uiTheme = "theme_default";
//Windowを生成
auto window = Platform.instance.createWindow("Hello World!",null);
//日本語フォントの読み込み。デフォルトでは豆腐になった
auto jaFont = FontManager.instance.getFont(20,FontWeight.Normal,false,FontFamily.MonoSpace,"JKゴシックM");
//HorizontalLayoutを継承した「D言語くん可愛い」の文字が表示されるウィジェット
auto layout = new DmanLayout(jaFont);
//D言語くんクラス。画像表示するだけ
auto dman = new Dman;
//ボタン。Buttonを継承してフォントを変更出来るようにした
auto btn = (new JaButton(jaFont)).text("D言語くん可愛い!!!");
//ボタンが押された時に実行されるデリゲートを代入。引数で渡されるsrcはイベントの起こったWidget
btn.onClickListener = delegate(Widget src)
{
layout.kawaii(); //「D言語くん可愛い」を表示
return true;
};
layout.addChild(dman);
layout.addChild(btn);
//Windowにlayoutを追加
window.mainWidget = layout;
//表示
window.show();
//メッセージループ突入
return Platform.instance.enterMessageLoop();
}
class DmanLayout : HorizontalLayout
{
private:
//「D言語くん可愛い」を描画する位置の集合
Point[] textPositions;
FontRef jaFont;
this(FontRef jaFont)
{
this.jaFont = jaFont
backgroundColor = 0xFFFFC0;
}
//JavaのSwingで言うところのpaint。
override void onDraw(DrawBuf buf)
{
//親メソッドのonDrawを呼び出す。これをしないと背景が描画されなかったり
super.onDraw(buf);
//すべての「D言語くん可愛い」を再描画
foreach(str;textPositions)
jaFont.drawText(buf,str.x,str.y,"D言語くん可愛い",0xFF0000);
}
void kawaii()
{
auto rndX = uniform(0,width);
auto rndY = uniform(0,height);
textPositions ~= Point(rndX,rndY);
//onDrawの呼び出しを要求する
invalidate();
}
}
class Dman:Widget
{
private:
DrawBuf image;
this()
{
//画像をロード。DrawBufを継承したColorDrawBufというものが返ってくる
image = loadImage("compiler-dmd.png");
//ピクセル数も簡単に取得
layoutHeight = image.height;
layoutWidth = image.width;
}
override void onDraw(DrawBuf buf)
{
super.onDraw(buf);
//渡されたDrawBufに描画
buf.drawImage(0,0,image);
}
}
class JaButton:Button
{
private:
FontRef jaFont;
this(FontRef jaFont)
{
this.jaFont = jaFont;
//最大の高さを設定
maxHeight = 100;
//余白の設定
margins = Rect(50,50,50,50);
}
//fontメソッドをオーバーライドして使用されるフォントを変更
override FontRef font() @property const
{
return cast(FontRef)jaFont;
}
}
struct Point
{
int x,y;
}
DlangUI 꽤 쉽고 재미 있습니다. 델리게이트를 사용하거나 D 언어의 기능을 사용할 수있는 것이 꽤 좋습니다. D언어군귀여운
Reference
이 문제에 관하여(DlangUI de Dlang-man), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/namachan10777/items/87197400db785a6b92ce
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import std.stdio;
import std.random;
//サンプルコードにはdlangui.allと書いてるけどこう
import dlangui;
//サンプルコードにはDLANGUI_ENTRY_POINTと書いてるけど変わってる
mixin APP_ENTRY_POINT;
extern(C) int UIAppMain(string[] args)
{
Platform.instance.uiLanguage = "ja";
//UIのテーマを設定
Platform.instance.uiTheme = "theme_default";
//Windowを生成
auto window = Platform.instance.createWindow("Hello World!",null);
//日本語フォントの読み込み。デフォルトでは豆腐になった
auto jaFont = FontManager.instance.getFont(20,FontWeight.Normal,false,FontFamily.MonoSpace,"JKゴシックM");
//HorizontalLayoutを継承した「D言語くん可愛い」の文字が表示されるウィジェット
auto layout = new DmanLayout(jaFont);
//D言語くんクラス。画像表示するだけ
auto dman = new Dman;
//ボタン。Buttonを継承してフォントを変更出来るようにした
auto btn = (new JaButton(jaFont)).text("D言語くん可愛い!!!");
//ボタンが押された時に実行されるデリゲートを代入。引数で渡されるsrcはイベントの起こったWidget
btn.onClickListener = delegate(Widget src)
{
layout.kawaii(); //「D言語くん可愛い」を表示
return true;
};
layout.addChild(dman);
layout.addChild(btn);
//Windowにlayoutを追加
window.mainWidget = layout;
//表示
window.show();
//メッセージループ突入
return Platform.instance.enterMessageLoop();
}
class DmanLayout : HorizontalLayout
{
private:
//「D言語くん可愛い」を描画する位置の集合
Point[] textPositions;
FontRef jaFont;
this(FontRef jaFont)
{
this.jaFont = jaFont
backgroundColor = 0xFFFFC0;
}
//JavaのSwingで言うところのpaint。
override void onDraw(DrawBuf buf)
{
//親メソッドのonDrawを呼び出す。これをしないと背景が描画されなかったり
super.onDraw(buf);
//すべての「D言語くん可愛い」を再描画
foreach(str;textPositions)
jaFont.drawText(buf,str.x,str.y,"D言語くん可愛い",0xFF0000);
}
void kawaii()
{
auto rndX = uniform(0,width);
auto rndY = uniform(0,height);
textPositions ~= Point(rndX,rndY);
//onDrawの呼び出しを要求する
invalidate();
}
}
class Dman:Widget
{
private:
DrawBuf image;
this()
{
//画像をロード。DrawBufを継承したColorDrawBufというものが返ってくる
image = loadImage("compiler-dmd.png");
//ピクセル数も簡単に取得
layoutHeight = image.height;
layoutWidth = image.width;
}
override void onDraw(DrawBuf buf)
{
super.onDraw(buf);
//渡されたDrawBufに描画
buf.drawImage(0,0,image);
}
}
class JaButton:Button
{
private:
FontRef jaFont;
this(FontRef jaFont)
{
this.jaFont = jaFont;
//最大の高さを設定
maxHeight = 100;
//余白の設定
margins = Rect(50,50,50,50);
}
//fontメソッドをオーバーライドして使用されるフォントを変更
override FontRef font() @property const
{
return cast(FontRef)jaFont;
}
}
struct Point
{
int x,y;
}
Reference
이 문제에 관하여(DlangUI de Dlang-man), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/namachan10777/items/87197400db785a6b92ce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)