二号机
Blogroll
Links
Search
Recent Comments
- csslayer on 对“fcitx5 依赖 boost 和 KDE, 探讨继续使用 fcitx4 的可行性“的回应
- plum on 对“fcitx5 依赖 boost 和 KDE, 探讨继续使用 fcitx4 的可行性“的回应
- Randy's cat on 对“fcitx5 依赖 boost 和 KDE, 探讨继续使用 fcitx4 的可行性“的回应
- 对“fcitx5 依赖 boost 和 KDE, 探讨继续使用 fcitx4 的可行性“的回应 | CS Slayer on Fcitx 5 的拼音有哪些新功能
- 对“fcitx5 依赖 boost 和 KDE, 探讨继续使用 fcitx4 的可行性“的回应 | CS Slayer on A new pinyin input method that might be slightly better than sunpinyin
Tags
acfun amarok android archlinux ati blogbus cmake dbus fcitx fcitx4 fcitx5 fedora feeling git gnome gtk ibus icecast input method KDE kde4 kde4.5 keyboard layout kimpanel kwin Linux mpd nginx opensource opensuse planetkde plasma qt sunpinyin systemd ubuntu vim wayland Wordpress x11 yoga 个人Linux唠叨 做饭 歌词 追漫笔记Categories
Archives
Category Archives: Gtk
My Gtk Tutorial 4
其实说到这里,我才发现,你可能压根还不知道如何开始一个项目。 当然最简单的办法之一,就是让半残的anjuta替你建立一个gtk项目的skeleton,然后把他扔一边,继续用你的vim,emacs去。 不过在这么多年之后,其实我已经不会写autotools的代码了,那么下面我就无聊来介绍下怎么用CMake和Gtk。 关于我曾经的CMake介绍,可以参考这里。 https://www.csslayer.info/wordpress/category/cmake/ 有些人喜欢录视频写代码?这次录个视频好了。 代码下载: gtk_test.tar.gz P. S. 也许这篇文章会勾引出一些严重的autotools粉,例如啊glib/gtk的项目都是用autotools啊,glib/gtk项目用autotools集成好啊。我用了这么多年现在早忘了autotools 怎么写了,我写不出来,就这样。 构建脚本用什么写都没本质差别。照样有人用cmake生成GObjectIntrospection(附注:第一个这么干的当然不是我)。
Posted in Gtk
8 Comments
My Gtk Tutorial 3
所谓的具体类的实现,其实这个Widget功能不得不说是Gtk里面缺少的功能,虽然其实Qt里面也没,不过我在写代码的时候可以没什么顾虑的用 KDE 提供的 UI 库,于是我又爽了。 这次的Widget就是一个捕获快捷键用的Widget,具体里面代码的实现我是当初从ccsm(compiz那个配置工具)里面的python代码翻译过来的,啊一想起那个青涩的年代…… 相信这是个人民群众喜闻乐见的Widget。 原理很简单,本身是一个button,button按下时显示一个window,window负责捕捉按键,捕捉到的按键再存起来。 当然我的实现里面使用了一些Fcitx自己的parse和toString的函数,你当然建议使用GtkAccelerator的方式 来进行parse(如果你需要字符串的话)。 https://github.com/fcitx/fcitx-configtool/blob/master/gtk3/keygrab.h https://github.com/fcitx/fcitx-configtool/blob/master/gtk3/keygrab.c 具体的实现就是上面的代码(于是我还看到当初有些蛋疼的注释……) 首先就是我继承了一个GtkButton,定义了一个Signal,触发按键在变化时的事件。 gtk_widget_set_size_request(GTK_WIDGET(keygrabbutton), 150, -1); g_signal_connect(G_OBJECT(keygrabbutton), “clicked”, (GCallback) begin_key_grab, NULL); 按键创建时,绑了一个signal给clicked事件,用来显示一个popup。 在clicked里面的回调函数中。 KeyGrabButton* b = KEYGRAB_BUTTON(self); b->popup = popup_new(GTK_WIDGET(self), _(“Please press the new key combination”), FALSE); … Continue reading
My Gtk Tutorial 2
我写这些其实我真的自己都不看的,有用还是没用只有我唯一的那个目标读者来评价。 那么我们来无聊的介绍下Gtk的一些Widget。 1、GtkBox 和 Qt 不同的是,Gtk一般实现一个自己的Widget,都是从一个具体的Widget而不是general的GtkWidget 开始的,其中很多则又是选择了 GtkBox。 当然这里所说的实现一个具体的Widget不是指连draw事件都override的那种widget,而是一组widget的组合,例如文件对话框这种。那么具体实现的时候只要找好你要的那个顶层的Widget作为基类就行了。 曾经的 GtkHBox 和 GtkVBox 已经成为了历史,取而代之的是以一个横纵作为属性的 GtkBox。 一般而言,任何你想要的复杂的布局都可以用GtkBox来实现,一个技巧就是占位符,看起来Gtk里面并没有Qt的Spacer这种专门的占位符,一般用来占位的就是GtkLabel。 例如你希望实现一个上下顶头有Widget的东西,中间是空的,那么你可以new一个Vertical的GtkBox出来,然后使用 gtk_box_pack_start 往里面扔东西。中间用一个GtkLabel来撑开位置。 2、大小 写UI控件最头疼的事情是什么?是大小。说他们的定位难度堪比HTML也不为过。尤其是在你没注意到的时候你把你的窗口设置成为可拖拽,或者进行i18n后出现了一些惨烈的情况(单从语言来说,同一个词,一般汉语最短,英语次之,某些西语会长的要命)。 不过在Gtk3中,GtkWidget终于增加了expand,align,这些用来标明Widget本身的大小和位置属性。 这下终于要谢天谢地了?哦,其实没有,如果你的界面够复杂你可能还是想要掀桌(不过如此的话你是不是应该先考虑下你的设计?),不过也比Gtk2时代好的多就是了。 在处理大小时要考虑到你在进行i18n之后界面可能产生的变化…… 处理大小时,GtkBox的默认是参考内部的Widget的属性来确定的,而Gtk2的兼容类GtkHBox,GtkVBox还默认并非如此。 总之这两个属性也不难理解,就是给你一个较大的空间。你的Widget是保持较小状态,还是填满整个区域?是如何在这个区域内进行对齐的? 3、来实现个Widget吧 如果你了解GObject的继承,那么这一步对你来说基本是没有难度的。 如果你不了解GObject的继承,还是去看别的文章吧…… http://garfileo.is-programmer.com/categories/6934/posts C语言模拟继承是采用了一个非常简单的方式,就是struct的嵌套,在所有模拟继承关系的代码中都采用了这样的方式,这样做的好处就是你可以强制转换子类的指针为基类的指针。 struct Derived { Parent parent; }; 这样你就可以简单的去访问parent的值了。至于如何实现private,这里也简单说下。 struct Derived … Continue reading
Posted in Gtk
13 Comments
My Gtk Tutorial 1
大概我这样的人还是超少见的,或者你可以称之为傲娇。 于是这个是我自己写Gtk程序的心得。我个人的主力发行版是一个几乎无Gtk的发行版,平时唯一用于测试gtk的程序其实是gtk-demo。不过即使如此我也照样开发着Gtk程序,不过由于发行版没有Glade,虽然用下也不会少块肉,不过界面大部分还是靠手写。反正就是省点事情。 本文基于 Gtk3 和 up to date 的 Glib。 另外我对于所有动态语言抱有一种不信任的态度,另外就是写C比较熟悉,所以还是写C。 那么开始第一个程序吧。 在最新的GLib中,GLib终于也诞生了一个称为Application的概念,对于Gtk2时代的人来说这大概是个没听过的概念。用了有什么好处呢? 1、支持单实例 2、支持Application Menu 说道Application Menu,这究竟又是个什么东西呢?可以理解为“属于这个程序的”菜单,例如Firefox,Opera的大按钮等等。 当然不幸的是,我最近唯一写的Gtk程序是不需要Menu的,而且反正这个功能在非GNOME3环境下惨不忍睹(显示为只有一项的菜单栏,要多难看有多难看),所以这里带过不提。 那么第一个GtkApplication就从这里开始: https://github.com/fcitx/fcitx-configtool/blob/b68086d4b6773845065e44956875d90bca195eba/gtk3/main.c (该死的WP贴代码不方便) 如果你用过 Qt 的话,大概就看出了 QApplication app(argc, argv); app.exec(); 的影子,总之就是差不多的东西。 这里还实现了一个函数,activate,这个函数会在执行程序的时候被调用,而且是交给主进程的程序,于是里面的内容很简单,如果有窗口,那就显示出来,如果没有,那就创建一个。 关于 GObject 的 Signal,在下不才其实并不十分了解,你可以参考: http://nanjingabcdefg.is-programmer.com/posts/24116.html activate 本身其实也是一个 signal,具体你要实现activate被调用的效果其实有很多方式,在这个小地方怎么实现其实都并无所谓,你可以自己g_signal_connect 一个上去,或者采用别的方式。 … Continue reading
Posted in Gtk
17 Comments