X



トップページLinux
926コメント335KB

GTK+プログラミング

0726login:Penguin
垢版 |
2012/04/15(日) 02:03:04.26ID:Z1/ZfeAU
threadやmutex関係もgtk_の方は廃止になって、g_の方のみになった。3。0あたりから
基本的な関数はglibに集約して、ツールキット的な関数のみgtk 3で担当するように住み分けされた
コンパイルの最中に廃止された関数と表示がでるソースは、いずれソースを書き換えないとビルド不能になる
ちなみに最も基本的なlibcでも現在開発ラインの最新版だとgetsが本当にソースから廃止されてるので、getsが使われてるソースをビルドできなくなってる
0727login:Penguin
垢版 |
2012/04/15(日) 08:43:51.29ID:khsJyTTq
ガチで使えないキット(GTK)
0729login:Penguin
垢版 |
2012/05/03(木) 19:08:20.54ID:2lAo9jqg
フォントサイズって10.5ptとか小数点で設定できる?
0730login:Penguin
垢版 |
2012/05/04(金) 06:17:57.12ID:phIzEGLj
フォントサイズの指定方法がわかってて
小数点の指定ができるかって疑問なら
やってみて自分で確認すりゃいいのに。
0731login:Penguin
垢版 |
2012/05/04(金) 11:44:12.10ID:LzE47Zaa
型がguintみたいだが
0733login:Penguin
垢版 |
2012/05/09(水) 14:47:56.27ID:M8lWcVDx
Gtk.TreeView.Selection.Mode = Gtk.SelectionMode.Multiple;
に変更すると得られるGtk.TreeIterがおかしくなってしまう
のですが、Multipleの時はSelection.GetSelectedは使えない
のでしょうか?
0734login:Penguin
垢版 |
2012/05/15(火) 22:46:57.21ID:PyXbSQll
Gtk.Label page_label = new Gtk.Label (title);
page_label.KeyReleaseEvent += delegate {
Console.WriteLine("!"); //←呼び出されない理由を説明してほしい!
};
0735login:Penguin
垢版 |
2012/05/16(水) 07:38:42.69ID:1Jlqt6RC
gtk_widget_set_events()
0736login:Penguin
垢版 |
2012/05/16(水) 21:45:01.79ID:oMuQxzgz
GTKは親切ではないなーと楽をしてきただけに思いますw

>>735
ありがとうございます
しかし、それらしいのが見つかりません
0737login:Penguin
垢版 |
2012/05/23(水) 21:46:04.65ID:jdgnkMvj
GTKのGUIは更新をサボる癖があるようですが
無理やり更新させる方法はないでしょうか?
0738login:Penguin
垢版 |
2012/05/23(水) 21:50:35.79ID:jdgnkMvj
更新するWidgetを間違えてた!
解決
0739login:Penguin
垢版 |
2012/06/08(金) 19:02:58.11ID:BmPo410Y
Gtk-CRITICAL **: IA__gtk_main_quit: assertion `main_loops != NULL' failed

メインループ内でGtk.Application.Quit ();を呼ぶなって事だろうけど
終了させる方法はないのでしょうか?
0741login:Penguin
垢版 |
2012/06/09(土) 03:50:44.00ID:xIQyunsc
gtk_main_quit()のソースコードを読めば解決。
0742login:Penguin
垢版 |
2012/06/10(日) 07:41:42.40ID:NypXeHdm
>>739
launcher みたいの作ろうとしてるんだろうか…
いまいちどういうことなのか判らないんだけど

logメッセージを抑制したいなら glib 2.32から

http://www.mail-archive.com/geany-devel@uvena.de/msg06039.html
G_LOG_LEVEL_CRITICAL
log level for critical messages, see g_critical(). This level is also
used for messages produced by g_return_if_fail() and g_return_val_if_fail().

ある程度デフォルトだと出力されなくなるみたい
onにするときは環境変数G_MESSAGES_DEBUG=allで以前と同じ動作になるらしい
0743login:Penguin
垢版 |
2012/07/04(水) 15:28:28.70ID:RZglH82u
from gi.repository import Gtk
0744login:Penguin
垢版 |
2012/08/07(火) 21:52:39.08ID:4kcOLz8m
このスレ的にはGTKのものをそのまま叩くっていうのは危険なこと?
0747login:Penguin
垢版 |
2012/08/09(木) 09:21:30.12ID:n/9/m8Sd
え?ラッパーライブラリを介さず直接コールするって意味じゃないの?
0750login:Penguin
垢版 |
2012/09/11(火) 19:25:22.84ID:AmLZmZH+
取り敢えずgtk_main_quit()
0751login:Penguin
垢版 |
2012/11/27(火) 12:00:27.00ID:Mwv1yHjg
UbuntuでPyGTKを利用してアプリケーションを作っているのですが、一部パーミッションが与えられていないファイルへの書き込みを行いたいと考えております。

Ubuntu Software Centerからアプリケーションをインストールしようとすると、Authenticateというポップアップが出てきてパスワードを入力するとsudoの様にアプリケーションのインストールができますが、これはどのように実現しているのでしょうか?

自分でも書き込めるようにパーミッションを変更していることを前提にしているのですが、変更方法を知らない人や、一々変更した後にアプリケーションを起動するのが煩わしい人向けに、アプリケーションからsudoのようなことができないかと考えております。
0752login:Penguin
垢版 |
2012/11/27(火) 23:24:04.63ID:p3EAvFxY
>>751
pyは使えないのですが、この話はGTKのスレの質問でしょうかね?
Cだったらstatとchmod使うところじゃないかと。
0753login:Penguin
垢版 |
2012/11/27(火) 23:44:47.91ID:2Faa51y/
>>751
もしかして:gksu

$ sudo command
のかわりに
$ gksu command
ってやると
GUIでパスワード聞かれる
0754login:Penguin
垢版 |
2012/11/28(水) 00:24:58.73ID:JU9FPiAT
口下手な>>753は、gksuを参考にlibgksuを使えと言いたいんだな?
libgksuのpythonバインディングもあるから安心だって言いたいんだよな?
0755login:Penguin
垢版 |
2012/11/28(水) 16:35:00.90ID:a6DQ5WYq
polkit
0757login:Penguin
垢版 |
2013/02/09(土) 09:31:18.23ID:cnWShbXp
質問させてください。
gtkmm2.4ベースでプログラムをいじっているのですが、画面操作せずにGtk::Dialogを閉じる方法が分かりません
Dialog作成→threadで特定の処理を開始→処理終了→※Dialogを閉じる(画面操作せずに)
と言う流れをプログレス表示などをして処理したいのですがrunした後にresponseをしてもhideしてもDialogが消えません
根本的に分かっていないのでしょうが・・・上記のような処理をするにはどうしたら良いのでしょうか?
0758login:Penguin
垢版 |
2013/03/07(木) 14:11:29.83ID:QnTnog/x
こう書く方法ないかな?
public class Window :Gtk.Window{
}
0760login:Penguin
垢版 |
2013/03/08(金) 18:55:04.44ID:Eqvj3fL9
vala優秀そうだね
でもwindowsでも使いまわしたいのでmonoから外れたくない
0762login:Penguin
垢版 |
2013/03/23(土) 10:23:11.54ID:PyYsgXcc
Gtk::Dialogはon_delete_eventを呼ばないのですか?
処理が途中の場合とかにダイアログを閉じるのを中止したいのですが、何処で中止させたらいいのやら
0763login:Penguin
垢版 |
2013/03/23(土) 16:14:11.15ID:oI1eFSYR
ちょっとチャレンジしてみることにしました
FreeBasic導入したら、GTK+とCairoが入っていたので。
ネットとサンプルを参考にしながら、
ちょこちょこと弄ってみます。

お手軽に描写の綺麗なプログラムが書けるってことは素晴らしい。
0764762
垢版 |
2013/03/23(土) 16:55:08.61ID:PyYsgXcc
結局add_buttonで追加したボタンを使うのではなく、アクションエリアに普通のボタンを追加し、
connectしたメソッドで処理チェックを行なった後にresponseでIDを投げる事で一応動きは出来たみたいです。
もっと簡単な方法はないですか?
0765login:Penguin
垢版 |
2013/05/07(火) 16:10:42.57ID:6dLQJSLO
ちょっとスレチになるかもなんですけど、GTK使われたアプリをWindowsで自動操作したいのですが
WM_LBUTTONDOWNなどで座標を直接指定でやってるんですけどMenuBar以外が反応してくれないです
どうすればいいでしょうか?
0767login:Penguin
垢版 |
2013/07/03(水) NY:AN:NY.ANID:5x5esxXj
FreeWnn スレッドより:
http://toro.2ch.net/test/read.cgi/unix/1084551838/l50

457 :名無しさん@お腹いっぱい。:2012/07/05(木) NY:AN:NY.AN
gtk2アプリにkinput2で入力する場合に、kinput2のステータス表示の「[あ]」が
真っ黒になってしまう問題の解決法の俺様メモ。

gtk2のソースの、modules/input/gtkimcontextxim.cの
on_status_window_expose_event()関数が変更されたのが原因。

これを、gtk+-2.21.5(以前)のソースのgtkimcontextxim.cに戻せば桶。

modules/input以下のサブディレクトリだけmakeして、
できたim-xim.soだけ置き換えればよい。

ソースにバグありとみた。
0768login:Penguin
垢版 |
2013/09/23(月) 01:43:22.12ID:pt1QWlbc
http://www.tarnyko.net/en/
ここでWindows版のBroadway実行環境を配布してたから試してみたけど
遅くて使いものにならん…
asm.jsは良い感じなんで、GTK+アプリをそのままasm.jsにコンパイルして
ブラウザで実行出来るようにしてくれたら最高だがな。
0769login:Penguin
垢版 |
2013/10/24(木) 11:46:06.77ID:YHoA8g0Q
同一アプリ上で、IconViewからFrameとかImageへDrag & Dropって
可能なんでしょうか・・・。

そんな感じのサンプルをご存知でしたら教えてくださいm(_ _)m
0770769
垢版 |
2013/10/25(金) 16:54:19.59ID:2AmnlVsx
すみません、>>769は出来るようになりました。
drop側の設定に問題がありました。

ところで、Imageから別のImageへのDrag & Dropは可能なんでしょうか。
Dragしても、IconViewの時のようにカーソルが変化しません・・・。
0771login:Penguin
垢版 |
2014/05/24(土) 00:08:41.16ID:jA6HOcWn
gtkmmでProgressBarの描画更新はどうやったらええねん
set_fractionしても途中を描画してくれない
0773771
垢版 |
2014/05/24(土) 09:12:07.41ID:ESO9FbEd
>>772
それアクティビティモードというのと違う?
ナイトライダーをしたいわけではないんよ・・・
0774login:Penguin
垢版 |
2014/05/24(土) 12:34:03.59ID:3aXipg2f
>>771,773
set_fraction() で、その都度増分を変えて、すぐ更新したいってこと?
queue_draw() で、PrograssBar の on_draw イベントを呼んでみたら?
0775771
垢版 |
2014/05/24(土) 14:58:12.72ID:ESO9FbEd
>>774
はい、その通りです。お付き合い頂き有り難う御座います。
queue_draw()を試してみましたが、表示のされ方は変わりませんでした。
試したコードを貼り付けようとしたのですが、行数の制限で書けませんでしたので、部分的に書き込みます。
ググって見ているのですが・・・何かお気づきの点がありましたらよろしくお願い致します。

プログレスバーとボタンを配置し、ボタンが押された時に動くようにしました。
drawBtn.signal_clicked().connect( sigc::mem_fun( *this, &ProgressWindow::on_draw_prog ) );

void ProgressWindow::on_draw_prog() {
progBar.set_fraction( 0.0 );
for( int i=0; i<100; i++ ) {
progBar.set_fraction( (double)i/100.0 );
// progBar.queue_draw();
sleep( 1 );
}
progBar.set_fraction( progBar.get_fraction() + 0.01 );
}
0776login:Penguin
垢版 |
2014/05/24(土) 16:46:51.13ID:3aXipg2f
おそくなってゴメン、こんな感じでどうでしょう?
ttp://www.dotup.org/uploda/www.dotup.org5080741.gz.html
>>772 であげたチュートリアルのコードをいじったものです。

SpinButton の値を 0 から 100 (%)までの任意の値に変更して "Update" ボタンを押すと
ProgressBar の状態が変化します。

examplewindow.cc の on_button_update を見れば分かるかと思います。
0777login:Penguin
垢版 |
2014/05/24(土) 17:31:46.88ID:3aXipg2f
あれ? queue_draw() いらねーな。w
0778771
垢版 |
2014/05/24(土) 22:15:14.18ID:SrMGc3rQ
>>776
コードまで書いて頂き有り難う御座います。
コンパイルして動作を見ましたら、進捗状況の変化を確認できました。
しかしながらon_button_update内で下記コードのようなループを回しset_fractionするようにしてみましたら
相変わらず最後の表示だけするようです。実際の処理ではループを回して進捗状況をset_fractionします。
む〜もう少しネットをあさってみます。

void ExampleWindow::on_button_update()
{
m_ProgressBar.set_fraction( 0.0 );
for( int i=0; i<100; i++ ) {
m_ProgressBar.set_fraction( (double)i/100.0 );
m_ProgressBar.queue_draw();
sleep( 1 );
}
}
0779771
垢版 |
2014/05/24(土) 23:11:20.28ID:SrMGc3rQ
なんかそれっぽい動きになったけどこれでいいのかね・・・イベント強制執行みたいな

[変更前]
m_ProgressBar.queue_draw();
sleep( 1 );
[変更後]
usleep( 50000 );
while( Gtk::Main::events_pending() ) Gtk::Main::iteration( true );
0781771
垢版 |
2014/05/25(日) 10:38:49.48ID:OwNsCCvJ
タイマーか〜処理がスパゲッティーになりかけているから使いづらいんだよね
アクティビティモードの時は使いやすそう。
今少し弄っているんだけど、set_pulse_stepでステップ量設定しても反映されないな
0783login:Penguin
垢版 |
2014/06/08(日) 10:20:05.83ID:kFAavqfc
ComboBoxでドロップダウンアイテムを選択した時に発生する
イベントってなに?
0785login:Penguin
垢版 |
2014/09/22(月) 18:34:36.01ID:eWn3ghjY
本当は先にこっちへ書くべきだった。
gtk_mode
gtk_fashion
gtk_style
gtk_pattern
0786login:Penguin
垢版 |
2014/10/03(金) 20:31:58.89ID:3j8hGaDn
みなさん、人工言語の
高級低級の長所短所のチンチンはご存知?
0788login:Penguin
垢版 |
2014/10/05(日) 09:12:43.76ID:6cVZzLYB
技術系スレには自分で人口無能を作っちゃう人もいるからな。
>>786が人間とは限らないよ
0789login:Penguin
垢版 |
2014/10/05(日) 12:54:17.13ID:8NkrJ1Fe
かわいいかっぽれ
0790login:Penguin
垢版 |
2014/10/05(日) 14:16:26.58ID:8NkrJ1Fe
人の嫌がる事をすすんでしましょう
0791login:Penguin
垢版 |
2014/12/27(土) 20:58:23.25ID:FwEwRAao
すみませんが質問させてください
gtkmmでボタンを作りボタンを押された時にソケットで通信しようとしたのですが
select関数をした時に「リソースが一時的に利用できません」と出てしまい動きません
コンストラクタでselect関数を使うと動くのですが・・・
gtkmmに通信を阻害する要因とか有るのでしょうか?
0792login:Penguin
垢版 |
2014/12/28(日) 23:07:33.76ID:aGqgOq87
学校の課題でシューティングゲーム作ってるんですが、cairoで表示した複数の画像の手前、奥の位置関係を変えることってできますか?
0794login:Penguin
垢版 |
2016/01/23(土) 21:11:40.92ID:XkMlkiDd
昨日からC+GTKでプログラム作ってるんだけど質問。treeviewでリスト表示してる状態で、キー入力すると、
なんか入力ボックスが開いて入力させるんだけど、これを止めさせる方法がわからない
表示だけさせたいんで、編集できるかも?って感触を持たせたくない
エラー表示させる積りはないけど、無視したい
多分、単純な事なんだろうけど...
0795login:Penguin
垢版 |
2017/02/04(土) 12:26:02.78ID:KMsE1Vqa
>>794
既に解決してるかもしれないけど
GtkTreeViewのプロパティにある「検索可能」フラグをOffにすればよいみたい
0796login:Penguin
垢版 |
2017/02/12(日) 13:51:10.49ID:+yRaNQxe
g++ (GCC) 6.3.1 20170109、gtkmm 3.22.0でフォントの描画画像を取得するテストプログラムを
作っているのだけど Gdk::Pixbuf::create( get_window(), 0, 0, get_width(), get_height() );
で取得した画像がon_drawで描く前の状態を取ってきているみたいで一つ前の表示になってしまいます
on_drawで描画した後の画像を取得するにはどうしたら良いでしょうか?
(set_double_bufferedも疑ったのですがこちらは関係ないような気がします)
提示する情報が分からず情報不足かも知れませんが宜しくお願いします
0797796
垢版 |
2017/02/12(日) 17:47:04.39ID:+yRaNQxe
コールバック関数内で描画に関わる関数を呼んで、その次にPixbufを取り出す関数を読んでたのですが
どうもコールバック関数が終わるまでイベントが処理されないようでした
強制的にイベントを処理する下記コードを追加して上手く動く様になりました

while( Gtk::Main::events_pending() ) {
Gtk::Main::iteration( true );
usleep( 1000 );
}

出来ればDrawingAreaに描画しなくてもPixbufを取り出せると良いのですが・・・
(Pango::Layoutあたりから直接画像イメージを作れないでしょうか)
0798login:Penguin
垢版 |
2017/05/24(水) 13:46:02.74ID:TLlefqX7
GTKってどうなの?
GTKかQtkかなんやんでQtにしたんだけど(当時kdevelopってQtの開発環境があったんだよね、今もあるけど)。
0799login:Penguin
垢版 |
2017/05/24(水) 14:19:50.72ID:pbxEBOft
今からやるならQtのほうがいいんでね?
これからGTK+4で阿鼻叫喚になるのと対照的に、Qt5へ移行したばっかだし
0800login:Penguin
垢版 |
2017/05/24(水) 14:29:06.20ID:TJNNAVtb
>>798
ウインドウ内でうねうね動かせて視覚効果高いのがのがQt。Qtならゲームも作れる。
そうゆうの全く無理で地味でも、ちょうど良いコンパクトサイズのボタン等が充実しててツール作ったりするのに適してるのがGTK。
0801login:Penguin
垢版 |
2017/05/24(水) 18:53:21.69ID:cGg4zBc+
GTK+4以降では、「安定なAPI体系はハナから持たない」って認識でいいの?
ffmpegのように絶え間なくAPIが変化し続けることになる?
で、バージョン番号もブラウザのようにうなぎ上りになるのか
0803login:Penguin
垢版 |
2017/05/24(水) 22:24:13.70ID:0wlGVdsK
なるほど
ffmpegほどキ○ガイな方針ではないのね
0805login:Penguin
垢版 |
2017/06/24(土) 17:57:54.57ID:cdtIIsj7
IconViewをラベルだけで使うみたいなもんかね
Pythonですまんが

from gi.repository import Gtk
from gi.repository import GObject

bname = ["Arlo", "Cosmo", "Elmo", "Hugo", "Jethro",
        "Laszlo", "Milo", "Nemo", "Otto", "Ringo",
        "Rocco", "Rollo"]
model = Gtk.ListStore(GObject.TYPE_STRING)
for n in bname:
    t = model.append()
    model.set(t, 0, n)
view = Gtk.IconView(model)
view.set_text_column(0)
win = Gtk.Window()
win.add(view)
win.show_all()
win.connect("delete-event", Gtk.main_quit)
Gtk.main()
0806804
垢版 |
2017/06/26(月) 15:14:10.11ID:y5aZk+CQ
>>805
なるほど、IconView でテキストか。
できたできた、
どうもありがとう!
0807login:Penguin
垢版 |
2017/07/04(火) 04:00:58.40ID:Rpvk2+Dl
gtk勉強しようかと思うんだけどもうオワコン?
でもQtバインディングよりgtkバインディングのほうが多いしなぁ...

gtk4で大幅に進化したりしないかな
0808login:Penguin
垢版 |
2017/07/04(火) 13:24:32.59ID:8Z5Rtw2V
両方やってみればいい
考えてるほど時間も労力も掛からないよ
0809login:Penguin
垢版 |
2017/07/11(火) 15:53:30.96ID:9jKfhw2z
window のサイズをいい感じ?にできる関数があるか、
お知恵を拝借。

(1) やったこと
GtkWindow に対して、GtkToolbar しか置いてない。
toolbar に、gtk_toolbar_insert() でボタンを4つ横並びに置く。
window のサイズは未指定。

(2) 動作確認
右の方のボタンが矢印でまとめられて?
メニューみたいに表示される。
(横幅を広げると、横並びに表示される)

(3) 所感
相当前に gtk_toolbar_append_element() (deprecated) 等で
配置したときは、横並びに表示されて、
window のサイズはちょうどいい具合に表示されていた(ように思う)。

ボタンが、矢印でまとめられないで、横並びに表示されるように
window のサイズをいい感じ?にできる関数がある?
(意味わかんなかったらゴメンw)
gtk_widget_set_size_request() でざっくりで指定しないとダメかなあ。
0810login:Penguin
垢版 |
2017/07/11(火) 21:23:00.28ID:w3xO5s8F
>>809
直接の答えは分からないけど、何の工夫もせずにやったらボタンが4つ並ぶ状態で起動すると思う

public class ToolbarTest : Gtk.Window {
  public ToolbarTest () {
    destroy.connect (Gtk.main_quit);
    var tb = new Gtk.Toolbar ();
    foreach (var n in new int[] {1,2,3,4}){
      tb.add (new Gtk.ToolButton (null,@"Button$n"));
    }
    add (tb);
    show_all ();
  }

  public static int main (string[] args) {
    Gtk.init (ref args);
    new ToolbarTest ();
    Gtk.main ();
    return 0;
  }
}
0811login:Penguin
垢版 |
2017/09/24(日) 13:44:57.02ID:AWmycg5C
toolbar に付いている「つまみ」
(アプリでよくある「toolbar を固定する」みたい感じなのをオフにすると現れる、持つ部分?)

あれは GTK+ では、どうやって出すのでしょうか?
0812login:Penguin
垢版 |
2017/09/24(日) 23:45:06.00ID:PwTxDy1k
GtkHandleBoxならdeprecatedだぞ
0813login:Penguin
垢版 |
2017/09/25(月) 09:15:38.26ID:bLbAubVC
VTEのspawnなんとかのAPIはいつになったらファイナライズされるのかね(怒
0814login:Penguin
垢版 |
2017/10/05(木) 21:14:42.06ID:c3KsIY0h
gtk4が気になってgtkの勉強始めようと思うんだけど初心者は何から始めるのがおすすめでしょうか?
0815login:Penguin
垢版 |
2017/10/10(火) 12:36:19.63ID:d/a7Ir8S
python3+gtk3で作るに際し
IDE (統合環境)みたいなのってある?

そう大げさなものでなくてよくて
コード補完(gtkのメソッドの)が
出来ればいいかなぐらいの感じなんだけど

もしくは大抵何が使われているのか
0817login:Penguin
垢版 |
2017/10/10(火) 15:07:12.53ID:6wfTcDmJ
あるいはvscodeにpythonプラグイン入れれば出来るかな
0819login:Penguin
垢版 |
2017/10/15(日) 20:41:28.01ID:IZYKuyT8
補足だけどpycharmでgtkの補完を行うにはちょっとした作業が必要みたい
https://stackoverflow.com/a/33646560

vscodeのほう(というかjediという補完ツール)も何かしら方法はあるっぽい?
0820login:Penguin
垢版 |
2017/11/01(水) 06:36:53.25ID:6RRJjvM+
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <cairo.h>

#define BITMAP_WIDTH (600)
#define BITMAP_HEIGHT (600)

GtkWidget *window;
GtkWidget *darea;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *button01;
GThread* thread;
volatile int execflag01;
int count;
int time_count;

static void do_drawing (cairo_t *, GtkWidget * widget);

struct
{
cairo_surface_t *image;
} glob;

static gboolean on_draw_event (GtkWidget * widget, cairo_t * cr, gpointer user_data)
{
cr = gdk_cairo_create (gtk_widget_get_window (widget));
do_drawing (cr, widget);
cairo_destroy (cr);
return FALSE;
}
0821login:Penguin
垢版 |
2017/11/01(水) 06:37:32.12ID:6RRJjvM+
続き
static void do_drawing (cairo_t * cr, GtkWidget * widget)
{
gfloat screen_width;
gfloat screen_height;
gfloat image_width;
gfloat image_height;
gfloat x_scaling;
gfloat y_scaling;
/* ディスプレイの全画面の大きさを取得 */
screen_width = gdk_screen_get_width (gdk_screen_get_default ());
screen_height = gdk_screen_get_height (gdk_screen_get_default ());
/* イメージの大きさを取得 */
image_width = cairo_image_surface_get_width (glob.image);
image_height = cairo_image_surface_get_height (glob.image);
x_scaling = 1.0;
y_scaling = 1.0;
cairo_scale (cr, x_scaling, y_scaling);
cairo_set_source_surface (cr, glob.image, 0, 0);
cairo_paint (cr);
}
0822login:Penguin
垢版 |
2017/11/01(水) 06:37:57.41ID:6RRJjvM+
続き
static void load_image ()
{
cairo_t *ic;
glob.image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, BITMAP_WIDTH, BITMAP_HEIGHT);
ic = cairo_create (glob.image);
//長方形の描画
{
//色の指定(外枠:Red,Green,Blue)
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
//長方形(x,y,width,height)を描画
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
//長方形の外枠を作る
cairo_stroke_preserve(ic);
//色を指定(塗りつぶし:Red,Green,Blue)
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
//長方形を塗りつぶす
cairo_fill(ic);
cairo_stroke (ic);
}
cairo_destroy (ic);
}
0823login:Penguin
垢版 |
2017/11/01(水) 06:38:38.92ID:6RRJjvM+
続き
static gpointer thread_func( gpointer data){
cairo_t *ic;
int i;
ic = cairo_create (glob.image);
{
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
cairo_stroke_preserve(ic);
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_fill(ic);
}
cairo_stroke (ic);
for (i = 0; i < count; i++) {
gdk_threads_enter();
{
cairo_set_source_rgb(ic, (i % 256) / 256.0, 0.0, (i % 256) / 256.0);
cairo_rectangle(ic, 0.0, (double)i, (double)BITMAP_WIDTH, 1.0);
cairo_stroke (ic);
}
gdk_threads_leave();
gtk_widget_queue_draw(darea);
usleep(time_count);
}
cairo_destroy (ic);
execflag01 = 0;
}
0824login:Penguin
垢版 |
2017/11/01(水) 06:39:29.00ID:6RRJjvM+
続き

static void on_button01_clicked(GtkWidget *button, gpointer user_data){
GError *error;
if (execflag01 == 0) {
execflag01 = 1;
count = BITMAP_HEIGHT;
time_count = 1000;
thread = g_thread_create( thread_func, (gpointer)darea, FALSE, &error);
}
}
0825login:Penguin
垢版 |
2017/11/01(水) 06:39:49.40ID:6RRJjvM+
最後
int main (int argc, char *argv[])
{
load_image ();
execflag01 = 0;
gtk_init (&argc, &argv);
gdk_threads_init();
gdk_threads_enter();
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width(GTK_CONTAINER(window), 5);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
darea = gtk_drawing_area_new ();
gtk_box_pack_start(GTK_BOX(vbox), darea, FALSE, FALSE, 0);
gtk_widget_set_size_request(darea, BITMAP_WIDTH, BITMAP_HEIGHT);
button01 = gtk_button_new_with_label("Button01");
gtk_box_pack_start(GTK_BOX(vbox), button01, FALSE, FALSE, 0);

g_signal_connect(G_OBJECT(button01), "clicked", G_CALLBACK(on_button01_clicked), NULL);
g_signal_connect (G_OBJECT (darea), "draw", G_CALLBACK (on_draw_event), NULL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
gtk_window_set_title (GTK_WINDOW (window), "Cairo Test");
gtk_window_set_decorated (GTK_WINDOW (window), TRUE);
gtk_widget_set_size_request(window, 600, 630);
gtk_widget_show_all (window);
gtk_main ();
gdk_threads_leave();
cairo_surface_destroy (glob.image);
return 0;
}
0826login:Penguin
垢版 |
2017/11/01(水) 12:30:43.16ID:MSa06+/w
gtkmm っていう C++ のバインディングがあるんだけど,2011 年で 3.0 が出たきり更新の音沙汰がない。
C++ 向けの GTK+ バインディングでおすすめある?
レスを投稿する


ニューススポーツなんでも実況