Mint_21.3 drawing-area和goocanvas的FB筆記(二)

一、goocanvas安裝

Linux mint 21.3 庫中帶有 libgoocanvas-2.0-dev,

用sudo apt install libgoocanvas-2.0-dev 安裝,安裝完成后,檢查一個 /usr/lib/x86_64-linux-gnu 下是否有libgoocanvas.so的軟件鏈接。如果沒有,或是 .so.x 等類似后面還有數字的話,則需要創建一個 libgoocanvas.so 的軟鏈接。

二、FreeBASIC安裝

freebasic 是跨平臺的,官方網址是 https://freebasic.net, Windows上用的話IDE比較多,但在linux上用比Windows上用要有趣得多,linux上用的話有很多外來庫可以使用,但不一定能在windows平臺上找到相應的庫。

    Official site:      https://freebasic.net/Forum:              https://freebasic.net/forum/Online manual:      https://freebasic.net/wiki/DocTocfbc project page:   https://sourceforge.net/projects/fbc/GitHub mirror:      https://github.com/freebasic/fbcDiscord:            https://discord.gg/286rSdKIRC channel:        ##freebasic at https://webchat.freenode.netFeatures:           https://freebasic.net/wiki/CompilerFeaturesRequirements:       https://freebasic.net/wiki/CompilerRequirements

到官方網址去下載最新版本,解壓到本地,查看readme.txt

下面是readme.txt中的說明,按說明先安裝需要的運行庫:

sudo apt install gcc libncurses5-dev libffi-dev libgl1-mesa-dev
????????? libx11-dev libxext-dev libxrender-dev libxrandr-dev libxpm-dev
????????? libtinfo5 libgpm-dev

      下載并解壓最新FreeBASIC-x.xx.x-linux.tar.gz。打開一個terminal, 解壓的 FreeBASIC-x.xx.x-linux 并進入目錄,運行“sudo ./install.sh -i” 將 FB 設置復制到 /usr/local 中。要編譯FB程序,請安裝以下軟件包(名稱可以因您的Linux發行版而異)Debian/Ubuntu:gcc libncurses5-dev libffi-dev libgl1-mesa-devlibx11-dev libxext-dev libxrender-dev libxrandr-dev libxpm-devlibtinfo5 libgpm-devRedhead Linux:gcc ncurses-devel ncurses-compat-libs libffi-devel mesa-libGL-devellibX11-devel libXext-devel libXrender-devel libXrandr-devellibXpm-devel如果您想在 32 位系統上使用 64 位版本的 FB,需要具有 GCC 32 位 Multilib 支持和 32 位版本已安裝的庫。

然后在解壓的目錄中執行 sudo ./install.sh -i

安裝完成后,進入解壓目錄下的example子目錄,fbc hello.bas ,編譯后 ./hello 運行,能在終端上看到hello world表明安裝運行正確。

三、freebasic IDE

fbc 是個編譯器,支持它的ide很多,geany, vs code, atom 等都可用,目前我感覺用著比較舒服的是臺灣同胞寫的poseidonFB編輯器,它自智能提示,還可自己添加關鍵字。

下載主場:https://bitbucket.org/KuanHsu/poseidonfb/src/master/

運行界面

在sourceforge上還有一款比較陳年的IDE, 可下載源文件,編譯沒問題,但它用的是 iup 界面庫,是巴西石油某個項目中的一個產物,項目完成后開源了,還一直在維護,但在某些系統上 menu和toolbar混在一起,不是ide問題,是iup問題。在atom和vs code上用也比較好,有代碼美化插件可安裝使用。

四、goocanvas畫線

1. 黃色框、紅色填充、圓解矩形,呈45度角顯示Hello FB愛好者們。

'Draw a few simple items.
Sub DrawSimpleItems(x0 as integer, y0 as integer, w as integer, h as integer)
rect_item = goo_canvas_rect_new (root, x0, y0, w, h, _"line-width", 10.0, _"radius-x", 20.0, _"radius-y", 10.0, _"stroke-color", "yellow", _"fill-color", "red", _NULL)
text_item = goo_canvas_text_new (root, "Hello FB愛好者們!", x0+w/2, y0+h/2, -1, _GOO_CANVAS_ANCHOR_CENTER, _"font", "Sans 14", _NULL)
goo_canvas_item_rotate (text_item, -45, x0+w/2, y0+h/2)
End Sub

2. 畫斜線:左上角到右下角、左下角到右上角,然后清除。畫線是用polyline ,后面是可變座標點,從簡單直線到各種形裝的多點 item,? 可給不同樣子的item分組,進行組變換等。

'A function called by onButton1
Function GooCanDo(Byval ToH as integer) as gintVAR w = gtk_widget_get_allocated_width(GTK_WIDGET(canvas))VAR h = gtk_widget_get_allocated_height(GTK_WIDGET(canvas))PicItem = _goo_canvas_polyline_new_line (root, 0, 0, w, ToH*h/60, _"start-arrow", FALSE, _"end-arrow", FALSE, _"stroke-color", "red", _"line-width", 0.6, _NULL)PicItem = _goo_canvas_polyline_new_line (root, 0, h-ToH*h/60, w, 0, _"start-arrow", FALSE, _"end-arrow", FALSE, _"stroke-color", "red", _"line-width", 0.6, _NULL)DrawSimpleItems((w-200)/2, (h-200)/2, 200, 200)if ToH>=59 thenClearRootItems'Clear canvas surfacegoo_canvas_rect_new (root, 0, 0, SCREEN_W, SCREEN_H, _"fill_color", "white", _NULL)		end ifReturn 0
End function

3. 清除所有線條

goocanvas會記住所有的線條,它們同屬于root item, 如果不清除的話就會越來越多,所以不用了就要清除它們。

'Clear children items in the Root of Canvans
Function ClearRootItems() as Integervar goocanvasitem = goo_canvas_item_get_child(root, 1)'i was previous defined as integer, 'it is 32-bit or 64-bit signed, viary per target platform'integer type is the same size as SizeOf(Any Ptr)i = 1Dogoocanvasitem = goo_canvas_item_get_child(root, i)If goocanvasitem <> NULL thengoo_canvas_item_remove_child(root, i)ElseExit DoEnd ifi += 1Loopprint "Item no: ", i, @goocanvasitemReturn 0
End function

4.定時畫線

時間事件 alarm(2) 表示2秒后產生 SIGALRM 事件,執行的是 wait_alarm 過程,進入過程后設置 alarm(1) 重新計數(否則停止不再觸發事件了),然后執行 timerevent 過程,timerevent 過程執行的是界面上的button1 鈕的 click

signal事件是在c的signal.h中定義的,與它同定義的還有 raise 事件,它們的由來自 unix 就有,歷史可謂優久。還有其它幾個信號,還有SIGUSR1和SIGUSR2自定義事件。這些信號是系統級的,在另一個shell的程序中可獲取它們,可以跨進程使用。

const SIGALRM=14Declare Function Signal cdecl  alias "signal" (ByVal V_Signal As long, byval V_Function As Any Ptr) as Any Ptr
Declare function alarm cdecl alias "alarm" (byval __seconds as uinteger) as uinteger
......
......
......
......
......
......
Sub timerevent()on_button1_clicked(GTK_WIDGET(button1), GTK_WIDGET(drawarea1))
End Subsub wait_alarm(iSigno As Integer)'?"This is the scheduled event SIG = " & Str$(iSigno) & "--- @: " & Time$alarm(1)		'loads another alarm events: each alarm event is a single time event, so to repeat it it must be set again every timetimerevent
end subsignal(SIGALRM, @wait_alarm)		'when SIGALRM triggered, call subroutine wait_alarm
alarm(2)							'emitt SIGALRM signal after 2 seconds

畫線圖是下面的樣子

goocanvas2.0和goocanvas3.0源碼是c寫的,Backend是cairo和surface。如果不喜歡用它的畫線函數,可以自己增加自己的函數,重新編譯成 .so 后可實現自己的特殊功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712206.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

事務Transaction簡寫為tx的原因

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Transaction簡寫的由來 數據庫事務Transaction通常被簡寫為tx。讓人疑惑的是&#xff1a;這個單詞本身沒有字母x為何又將其簡寫成了tx呢&#xff1f; 第一種可能 Transac…

SpringBoot整合ActiveMQ步驟

SpringBoot整合ActiveMQ主要涉及以下幾個步驟&#xff1a; 添加依賴&#xff1a;在SpringBoot項目的pom.xml文件中添加ActiveMQ的依賴。 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-spring</artifactId><ver…

“平民化”非結構數據處理

在全球信息產業高速發展的背景下&#xff0c;IDC預測&#xff0c;2018 到 2025 年之間&#xff0c;全球產生的數據量將會從 33 ZB 增長到 175 ZB&#xff0c; 復合增長率27%&#xff0c;其中超過 80%的數據都會是處理難度較大的非結構化數據&#xff0c;如文檔、文本、圖形、圖…

搜索題解

單詞方陣 - 洛谷 思路&#xff1a;在字符方陣中找到y并將其坐標存入數組&#xff0c;再找其八個方向是否有目標字符&#xff0c;有的話就深搜一個方向&#xff0c;能搜完就將數組標記&#xff0c;最好標記的就輸入字符&#xff0c;沒標記的就輸出*。 代碼如下&#xff1a; #…

linux 拷貝文件到指定目錄 命令

在 Linux 中&#xff0c;使用 cp 命令可以拷貝文件到指定目錄。下面是 cp 命令的基本用法&#xff1a; bash cp [選項] 源文件 目標目錄 - 選項&#xff1a;可以是一些附加的選項&#xff0c;例如 -r 表示遞歸拷貝&#xff08;用于復制目錄&#xff09;。 - 源文件&#xff1a…

javascript中的class基礎入門(1)

javascript中的class start 最近在學習&#xff1a;cocos &#xff0c;準備自己制作小游戲。過程中遇到不少疑問&#xff0c;我計劃將這些疑問寫成一個系列博客&#xff0c;用以記錄。這篇文章來了解 class 1. 前言 1. 前言 本文對應版本 Cocos Creator 3.8。Cocos Creato…

【Sql server】假設有三個字段a,b,c 以a和b分組,如何查詢a和b唯一,但是c不同的記錄

歡迎來到《小5講堂》&#xff0c;大家好&#xff0c;我是全棧小5。 這是《Sql Server》系列文章&#xff0c;每篇文章將以博主理解的角度展開講解&#xff0c; 特別是針對知識點的概念進行敘說&#xff0c;大部分文章將會對這些概念進行實際例子驗證&#xff0c;以此達到加深對…

2_SQL

文章目錄 SQL數據完整性實體完整性域完整性參照完整性default&#xff08;默認值&#xff09;comment&#xff08;注釋&#xff09; 多表設計一對一一對多多對多數據庫三大范式第一范式&#xff1a;原子性第二范式&#xff1a;唯一性第三范式&#xff1a;數據的冗余 多表查詢連…

JQMobile Loader Widget 遮罩層改造

最近在用jqmobile 做一個混合APP項目時候用到 jqmobile1.4.3提供的Loader Widget控件,但是這個控件本身是一個loading彈出層,這個彈出層彈出之后,用戶還是可以去點擊按鈕,重復發送請求,為了防止重復提交,我想了兩種辦法, 1,在loading彈出層彈出之后,讓按鈕不可用.但是form表單…

記錄SSM項目集成Spring Security 4.X版本 之 加密驗證和記住我功能

目錄 前言 一、用戶登錄密碼加密認證 二、記住我功能 前言 本次筆記的記錄是接SSM項目集成Spring Security 4.X版本 之 加入DWZ,J-UI框架實現登錄和主頁菜單顯示-CSDN博客https://blog.csdn.net/u011529483/article/details/136255768?spm1001.2014.3001.5502 文章之后補…

Python列表的合并、重復、判斷與切片操作你學會了嗎

1.合并列表 通過 實現 list1 ["佛跳墻", "腸粉", "刀削面", "烤鴨"]list2 [32, 4, 5, 7.43, True]list3 list1 list2print(list3) # [佛跳墻, 腸粉, 刀削面, 烤鴨, 32, 4, 5, 7.43, True] 2.重復輸出列表中的元素 通過 * 實…

fastadmin 前端日期字段的添加和編輯

引言 fastadmin 項目中如果需要用到datetime字段的維護&#xff0c;可做如下處理&#xff1a; 1. add.html <div class"form-group"><label class"control-label col-xs-12 col-sm-2">{:__(開始)}:</label><div class"col-x…

vue3 中 主題定制

vue3 中 主題定制 背景 做多主題定制&#xff0c;黑/白 &#xff0c;里面還要再分各種顏色&#xff0c;每次進來都要記住上次的主題設置 效果圖 一、目錄結構 ├── generated │ ├── theme │ │ └── dark-yellow.ts │ │ └── dark-orange.ts │ │…

C++考試成績統計(類實現)

題目&#xff1a;有三名同學&#xff0c;在一次考試中三科成績分別如下表&#xff0c;請輸出三名同學的平均成績&#xff1a; 語文數學英語張三100100100李四9050100王五607080 #include <iostream> #include <string> /*考試成績統計*/ using namespace std;cla…

力扣:120. 三角形最小路徑和

動態規劃 1.先定義dp數組在下標i和下標j時的最小路徑和 &#xff0c;之后初始化dp數組值dp【0】【0】triangle.get(0).get(0)。再用for循環來遍歷數組dp【】的i&#xff0c;并賦值每行的下標為0的dp數組。之后再用for循環遍歷dp【i】【】的j&#xff0c;遞推公式來計算dp【i】…

「算法」常見位運算總結

位運算符 異或 按位異或可以實現無進位相加&#xff0c;所謂無進位相加&#xff0c;就是在不考慮進位的情況下將兩個數相加&#xff08;后面有道題需要用到這種操作&#xff09; 異或的運算律 ①a ^ 0 a ②a ^ a 0 ③a ^ b ^ c a ^ ( b ^ c ) 有符號右移>> 將一個…

IDEA切換 Springboot初始化 URL

&#x1f339;作者主頁&#xff1a;青花鎖 &#x1f339;簡介&#xff1a;Java領域優質創作者&#x1f3c6;、Java微服務架構公號作者&#x1f604; &#x1f339;簡歷模板、學習資料、面試題庫、技術互助 &#x1f339;文末獲取聯系方式 &#x1f4dd; 往期熱門專欄回顧 專欄…

Android基礎控件介紹

在Android應用程序開發中&#xff0c;使用基礎控件是非常常見的。這些控件允許您在用戶界面中顯示文本、圖像、按鈕等元素&#xff0c;以及接收用戶輸入。本文將介紹幾種常見的基礎控件&#xff0c;并給出每個控件在示例XML中使用的屬性的詳細說明。 1. TextView TextView 是…

云計算 2月20號 (認識操作系統)

1、認識操作系統 計算機系統的組成 知識點1&#xff1a;沒有軟件系統的計算機稱之為"裸機" 知識點2&#xff1a;裸機提供基本的可計算性資源 知識點3&#xff1a;操作系統是最靠近硬件的軟件層&#xff0c;負責管理和控制計算機硬件。 計算機硬件組成五大部件 運算器…

Chat GPT:智能對話的下一步

Chat GPT&#xff1a;智能對話的下一步 介紹 Chat GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一種基于Transformer架構的強大對話模型&#xff0c;可以產生自然流暢的回答&#xff0c;并實現人機對話的感覺。本文將探討Chat GPT在智能對話領域的影響和…