2017-01-05 64 views
0

我目前使用cairo/pango從動態文本生成原始圖像數據。我的應用程序不是Gtk + GUI應用程序,只是一個本地C++無頭視頻服務器。使用動態文本,我生成了覆蓋圖的原始圖像,然後alpha將它們混合到服務器通過網絡處理和分發的視頻流中。這個文本沒有涉及文本編輯,但是在給定文本的情況下,我生成了一個適合於alpha混合的相應圖像疊加。我可以在不使用gtk_init()/ gtk_main()的情況下使用GtkTextView小部件嗎?

但是,我需要更多的格式靈活性(縮進,中心對齊等)。在cairo/pango中做廣泛的格式化是很痛苦的。

我一直在尋找GtkTextView/GtkTextBuffer API,我認爲它使用GtkTextTag更容易格式化。這些小部件顯然具有廣泛的編輯功能,但我只需要格式化功能。

問:我可以用GtkTextView/GtkTextBuffer/GtkTextTag 沒有運行通過gtk_init()/進入主循環主GTK +循環()?

問題:我如何獲得對原始格式化緩衝區(cairo圖像表面或widget pixbuf)的引用之後所有的標籤都格式化了文本?

我一直在使用gtk_widget_get_pango_context(),pango_layout_new(),gtk_widget_create_pango_layout(),例程,但因爲沒有屏幕而得到各種錯誤。

編輯:附加信息:我想要做的僅僅是使用GtkTextView/GtkTextBuffer/GtkTextTag例程作爲一種獨立的庫來生成渲染和格式化文本的圖像數據。

感謝, -Andres

+1

「在cairo/pango中進行大量格式化很痛苦」?要求GTK +作爲依賴也是痛苦的。哪個更糟?試圖強迫一件軟件去做一些不是我設計的事情似乎比找到一些能夠輕鬆完成工作或者使用專爲工作而設計的更加困難的軟件的東西更難。 – oldtechaa

+1

作爲一個說明,我不想聽到上面的評論,但我真的認爲你的計劃將很難得到工作。出於這個原因,我也不知道是否有可能。 – oldtechaa

+1

簡短的回答是否定的。 GTK需要先用gtk_init()初始化。 gtk_main()啓動循環,沒有它,GTKTextView將不會得到任何圖形更新。可能有一個圖書館可以做你想做的事,但這是一個非常廣泛的答案。 –

回答

3

基本沒有。沒有init()和/或mainloop()就不能使用Gtk。爲什麼?因爲任何繪圖事件都在排隊,並且只在空閒循環中繪製。沒有mainloop()你沒有任何空閒時間。

另一方面,您正在從開羅的低級繪圖跳轉到gtk(使用低級開羅)的Widgets。有許多您可以考慮的中間解決方案。你可以生成Latex並編譯它。 Markdown可以採取簡單的格式。當然還有HTML,甚至可以使用CSS,並將其渲染到任何東西。

+0

我很欣賞你的建議和其他解決方案。這讓我重新思考我的整個方法 - 謝謝 –

+0

不客氣,安德烈斯! – jcoppens

相關問題