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.mzph.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在智能对话领域的影响和…