2015年04月05日

作業日誌

 『HSPからGTK+を使うためのチュートリアル』用に、GtkIconViewウィジェットの基本的な説明とサンプルプログラムを書いた。サンプルプログラムは、一応エラー吐かずに動いてるけど、メモリ開放系の関数を使ってるので、ちゃんと書けてるか不安。
posted by chrono at 21:54| Comment(0) | TrackBack(0) | 日記、雑文

2015年04月02日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを更新。

 GtkTextViewウィジェット、および関連オブジェクトの基本的な説明を追加。

2015年03月19日

2015年03月02日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを更新。

 ダイアログ系ウィジェットの簡単な説明とGtkFileChooserDialogウィジェットのサンプルプログラムを作成。

2015年02月10日

[HSP] 適当に作ったヘクスマップ描画ルーチン(改良版)

horizontal_hex_map_20150210.png vertical_hex_map_20150210.png

 正六角形を描けるかどうかはわからないけど、とりあえず数学の知識が要らない方法ということで。

#module
/* 横xi番目、縦yi番目のヘクスを横向きに描画 */
#deffunc draw_horizontal_hex int hex_width, int hex_height, int xi, int yi

if (xi \ 2) { ; 横奇数番目
yoffset = hex_height / 2 ; 縦方向の描画位置を半分ずらす
}
else {
yoffset = 0
}

xstart = ( hex_width / 4 * 3 ) * xi ; ヘクスをぴったり囲む四角形の左上X座標
ystart = hex_height * yi + yoffset ; ヘクスをぴったり囲む四角形の左上Y座標

; 左上の頂点から左回りで線を引いていく
line xstart + ( hex_width / 4 ), ystart, xstart, ystart + ( hex_height / 2 )
line xstart, ystart + ( hex_height / 2 ), xstart + ( hex_width / 4 ), ystart + hex_height
line xstart + ( hex_width / 4 ), ystart + hex_height, xstart + ( hex_width / 4 * 3 ), ystart + hex_height
line xstart + ( hex_width / 4 * 3 ), ystart + hex_height, xstart + hex_width, ystart + ( hex_height / 2 )
line xstart + hex_width, ystart + ( hex_height / 2 ), xstart + ( hex_width / 4 * 3 ), ystart
line xstart + ( hex_width / 4 * 3 ), ystart, xstart + ( hex_width / 4 ), ystart
return

/* 指定されたマス数・倍率のマップを横向きヘクスで描画 */
#deffunc draw_horizontal_hex_map int def_hex_width, int def_hex_height, int xnum, int ynum, int scale_map, int winid

; 描画に必要なサイズでウィンドウを初期化
map_width = ( ( def_hex_width / 4 * 3 * xnum ) + ( def_hex_width / 4 ) ) * scale_map + 1
map_height = ( def_hex_height * ynum ) * scale_map + 1
screen winid, map_width, map_height
title "ID " + winid

repeat xnum
xcnt = cnt
if ( xcnt \ 2 ) { ; 横奇数番目
ynum_cur = ynum - 1 ; 1個少なくてよい
}
else {
ynum_cur = ynum
}
repeat ynum_cur
draw_horizontal_hex ( def_hex_width * scale_map ), ( def_hex_height * scale_map ), xcnt, cnt
loop
loop
return "" + map_width + "," + map_height ; 描画サイズを返す
#global

#module
/* 横xi番目、縦yi番目のヘクスを縦向きに描画 */
#deffunc draw_vertical_hex int hex_width, int hex_height, int xi, int yi

if (yi \ 2) { ; 縦奇数番目
xoffset = hex_width / 2 ; 横方向の描画位置を半分ずらす
}
else {
xoffset = 0
}

xstart = hex_width * xi + xoffset ; ヘクスをぴったり囲む四角形の左上X座標
ystart = ( hex_height / 4 * 3 ) * yi ; ヘクスをぴったり囲む四角形の左上Y座標

; 上側の頂点から左回りで線を引いていく
line xstart + ( hex_width / 2 ), ystart, xstart, ystart + ( hex_height / 4 )
line xstart, ystart + ( hex_height / 4 ), xstart, ystart + ( hex_height / 4 * 3 )
line xstart, ystart + ( hex_height / 4 * 3 ), xstart + ( hex_width / 2 ), ystart + hex_height
line xstart + ( hex_width / 2 ), ystart + hex_height, xstart + hex_width, ystart + ( hex_height / 4 * 3 )
line xstart + hex_width, ystart + ( hex_height / 4 * 3 ), xstart + hex_width, ystart + ( hex_height / 4 )
line xstart + hex_width, ystart + ( hex_height / 4 ), xstart + ( hex_width / 2 ), ystart
return

/* 指定されたマス数・倍率のマップを縦向きヘクスで描画 */
#deffunc draw_vertical_hex_map int def_hex_width, int def_hex_height, int xnum, int ynum, int scale_map, int winid

; 描画に必要なサイズでウィンドウを初期化
map_width = def_hex_width * xnum * scale_map + 1
map_height = ( ( def_hex_height / 4 * 3 * ynum ) + ( def_hex_height / 4 ) ) * scale_map + 1

screen winid, map_width, map_height
title "ID " + winid

repeat ynum
ycnt = cnt
if ( ycnt \ 2 ) { ; 縦奇数番目
xnum_cur = xnum - 1 ; 1個少なくてよい
}
else {
xnum_cur = xnum
}
repeat xnum_cur
draw_vertical_hex ( def_hex_width * scale_map ), ( def_hex_height * scale_map ), cnt, ycnt
loop
loop
return "" + map_width + "," + map_height ; 描画サイズを返す
#global

; マス数・倍率・ウィンドウIDを指定してマップ描画
def_hex_width = 32 ; ヘクスのデフォルトの幅(横向き時。4で割れる数が良い)
def_hex_height = 28 ; ヘクスのデフォルトの高さ(横向き時。2で割れる数が良い)
xnum = 7 ; 横マス数
ynum = 8 ; 縦マス数
scale = 1 ; 描画倍率(正整数)
draw_horizontal_hex_map def_hex_width, def_hex_height, xnum, ynum, scale, 0
draw_vertical_hex_map def_hex_height, def_hex_width, ynum, xnum, scale, 1
stop

posted by chrono at 17:43| Comment(0) | TrackBack(0) | HSP

2015年02月04日

[HSP] 適当に作ったヘクスマップ描画ルーチン

hex_map_id0.png hex_map_id1.png

 ゲーム制作経験ない人が勢いで作ったので細かいところが少しおかしいかも。

#module
#const HEX_WIDTH_DEF 36 ; ヘクス横幅デフォルト(4の倍数)
#const HEX_HEIGHT_DEF 32 ; ヘクス縦幅デフォルト(2の倍数)

/* 横xi番目、縦yi番目のヘクスを横向きに描画 */
#deffunc draw_hex int xi, int yi, int scale_hex

HEX_WIDTH = HEX_WIDTH_DEF * scale_hex ; 描画するヘクス横幅
HEX_HEIGHT = HEX_HEIGHT_DEF * scale_hex ; 描画するヘクス縦幅

if (xi \ 2) { ; 横奇数番目
yoffset = HEX_HEIGHT / 2 ; 縦方向の描画位置を半分ずらす
}
else {
yoffset = 0
}

xstart = ( HEX_WIDTH / 4 * 3 ) * xi ; ヘクスをぴったり囲む四角形の左上X座標
ystart = HEX_HEIGHT * yi + yoffset ; ヘクスをぴったり囲む四角形の左上Y座標

; 左上の頂点から左回りで線を引いていく
line xstart + ( HEX_WIDTH / 4 ), ystart, xstart, ystart + ( HEX_HEIGHT / 2 )
line xstart, ystart + ( HEX_HEIGHT / 2 ), xstart + ( HEX_WIDTH / 4 ), ystart + HEX_HEIGHT
line xstart + ( HEX_WIDTH / 4 ), ystart + HEX_HEIGHT, xstart + ( HEX_WIDTH / 4 * 3 ), ystart + HEX_HEIGHT
line xstart + ( HEX_WIDTH / 4 * 3 ), ystart + HEX_HEIGHT, xstart + HEX_WIDTH, ystart + ( HEX_HEIGHT / 2 )
line xstart + HEX_WIDTH, ystart + ( HEX_HEIGHT / 2 ), xstart + ( HEX_WIDTH / 4 * 3 ), ystart
line xstart + ( HEX_WIDTH / 4 * 3 ), ystart, xstart + ( HEX_WIDTH / 4 ), ystart
return

/* 指定されたマス数・倍率のマップを横向きヘクスで描画 */
#deffunc draw_hex_map int xnum, int ynum, int scale_map, int winid

; 描画に必要なサイズでウィンドウを初期化
map_width = ( ( HEX_WIDTH_DEF / 4 * 3 * xnum ) + ( HEX_WIDTH_DEF / 4 ) ) * scale_map
map_height = ( HEX_HEIGHT_DEF * ynum ) * scale_map
screen winid, map_width, map_height
title "ID " + winid

repeat xnum
xcnt = cnt
if ( xcnt \ 2 ) { ; 横奇数番目
ynum_cur = ynum - 1 ; 1個少なくてよい
}
else {
ynum_cur = ynum
}
repeat ynum_cur
draw_hex xcnt, cnt, scale_map
loop
loop
return "" + map_width + "," + map_height ; 描画サイズを返す
#global

; マス数・倍率・ウィンドウIDを指定してマップ描画
xnum = 7 ; 横マス数
ynum = 5 ; 縦マス数
scale = 1 ; 描画倍率(正整数)
id = 0 ; 描画するウィンドウID
draw_hex_map xnum, ynum, scale, id

; 描画サイズ取得
sizestr = refstr
split sizestr, ",", wid, hei
wid = int( wid )
hei = int( hei )

; 90度回転して別ウィンドウにコピー
screen 1, hei, wid
title "ID 1"
gmode 0, wid, hei
pos ( hei / 2 ), ( wid / 2 )
grotate id, 0, 0, 1.57, wid, hei
stop
posted by chrono at 19:40| Comment(0) | TrackBack(0) | HSP

2015年01月26日

作業日誌

 GtkFontChooserDialogのサンプルプログラム作成。

 やっぱbinフォルダにPATHを通さずに使おうとするのは、不毛なんだろうなあ。Windows向けGTK+アプリケーションを他人に使ってもらう時は、バンドルアーカイブもダウンロードしてもらうのが一番簡単?
posted by chrono at 15:02| Comment(0) | TrackBack(0) | 日記、雑文

2015年01月25日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを更新。

 メッセージダイアログ、色選択ダイアログのサンプルプログラム作成。

 クリップボード、プログレスバー、スピナーの簡単な説明とサンプルプログラム作成。

2015年01月22日

WindowsでPATHを通さずにGtkFileChooserを動かす方法

 Windowsでバイナリ版GTK+を使う場合、アーカイブのbinフォルダにPATHを通してしまえば、基本的に不都合なく動くっぽい。

 ただ、PATHが通っていない時に最低限必要なファイルが知りたかったので、いろいろ試して調べてみた。

 DLLがプログラムと同じフォルダにあれば、大抵のウィジェットは動くが、動かないものの一つがGtkFileChooser系。

 これを動かすには、アーカイブのshare\glib-2.0\schemasフォルダを同じ場所にコピーしておけばいい。(HSP経由で動作確認)
posted by chrono at 05:52| Comment(0) | TrackBack(0) | Windows

2015年01月12日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを更新。

 【主な変更】

 2章に「ライブラリの基本的な構成と使い方」の節を追加。

 9章「メニューバー(GtkMenuBar)とツールバー(GtkToolbar)」の基本的な説明とサンプルプログラムを書いた。