Table of Contents
| Note | |
|---|---|
印刷機能は、gtkmmバージョン2.10以降でサポートされています。 |
アプリケーション開発のレベルでは、gtkmmは印刷のためのAPIダイアログを提供しています。このダイアログはアプリケーション間で一貫しており、Cairoの共通描画APIとPangoによるテキストレンダリング技術を使うことができます。共通APIの実装部分では、プラットフォームに特化したバックエンドとプリンタに特化したドライバが使われます。
主要なオブジェクトはGtk::PrintOperationであり、これは各々の印刷オペレーション(実行)に割り当てられています。ページ描画を扱うにはこのシグナルに接続するか、これを継承してvirtual宣言されているシグナルハンドラをオーバーライドしてください。Gtk::PrintOperationはプリントループに影響する全ての設定に、自動的に対応します。
PrintOperation::run()メソッドで、プリントループを開始します。このとき、様々なシグナルが発行されます:
begin_print:
このシグナルは必ずハンドルしなくてはいけません。なぜなら、ここで、与えられたGtk::PrintContextを使ってPango::Layoutの生成、設定をおこない、プリント出力をページに分割するからです。
paginate: 出力のページ化には時間がかかる可能性があります。ですから、モニターする必要がある場合には、PrintOperation::set_show_progress()メソッドを呼び、このシグナルをハンドルしてください。
出力される必要のある各々のページに対して、以下のシグナルがされます:
request_page_setup: PrintContext、ページ数、Gtk::PageSetupを提供します。ページ毎について設定を変更する必要がある場合にはこのシグナルをハンドルしてください。
draw_page: このシグナルは必ずハンドルしなくてはいけません。これはPrintContextとページ数を提供します。PrintContextは、与えられたページを描画するCairo::Contextを生成するために使われます。テキストをレンダリングするには、begin_printハンドラ内で生成したPango::Layoutにおいて繰り返してください。
end_print: これを受け取るハンドラでは、PrintOperationに関連するどのリソースを解放しても安全になります。もしも、PrintOperationを継承したカスタムクラスを作成するのなら、これはデストラクタの中で行うのが自然で、シンプルです。
done: このシグナルが発行されるのは、印刷が終了したとき、つまり、プリンタデータがスプールされたときです。注意してほしいのは、与えられたGtk::PrintOperationResultがエラーが起こったことを示しているかもしれないということです。どのような場合でも、ユーザーには最終的な状態を知らせたいと思うはずです。
status_changed: 印刷が終了するまでの間、印刷ジョブのステータスが変化したときに発行されます。スプールされた後の印刷ジョブのステータスはPrintOperation::set_track_print_status()メソッドを呼ぶことでモニタできます。ステータスを見るには、get_status()かget_status_string()を使ってください。