linux xlib函数手册,Xlib 学习笔记
Xlib學(xué)習(xí)筆記第一章1.2 X Window System概念display:由鍵盤(pán),鼠標(biāo)和一個(gè)或多個(gè)屏幕組成的一個(gè)工作站screen:一個(gè)display可以有多個(gè)screen
server-client模型:窗口管理器事件X擴(kuò)展第二章? X概念x協(xié)議:請(qǐng)求消息回復(fù)消息:需要回復(fù)的請(qǐng)求比較浪費(fèi)資源,需要等待網(wǎng)絡(luò)傳輸事件:錯(cuò)誤:緩沖:xlib會(huì)保存請(qǐng)求來(lái)使客戶端持續(xù)運(yùn)行不至于等待網(wǎng)絡(luò)傳輸。引起發(fā)送緩沖情況有:調(diào)用等待事件函數(shù)但事件隊(duì)列中沒(méi)有匹配的事件,如:XNextEvent客戶端調(diào)用從服務(wù)器獲得信息的函數(shù),Query Fetch Get類(lèi)函數(shù)客戶端強(qiáng)制刷新緩沖 XFlush XSync資源為了減少網(wǎng)絡(luò)傳輸,x為每個(gè)抽象事物使用一個(gè)唯一id進(jìn)行標(biāo)識(shí)(window, gc, etc),也就是atom
properties和atoms
property是每個(gè)window擁有的一組屬性。atom用來(lái)標(biāo)識(shí)每個(gè)property,可通過(guò)XInternAtom()獲得atom。XA_為前墜的宏代表內(nèi)置的atom窗口管理器:substructure redirection。substurcture引用大小,位置,子窗口z序。redirection代表對(duì)窗口配置改變的請(qǐng)求。請(qǐng)求由窗口管理器決定是否實(shí)施。Window
Window Characteristics:父窗體:每個(gè)窗體都有父窗體,除了root window。窗體坐標(biāo)系統(tǒng):以窗體左上角為原點(diǎn)window配置包含: 高和寬,邊框?qū)挾?#xff0c;位置xy,z序。depth色深,visual窗體類(lèi)別 inputoutput, inputonly一組window屬性:邊框和背景的顏色,當(dāng)窗體大小變化時(shí)窗體內(nèi)布局如何變化,窗體何時(shí)自動(dòng)保存被遮蓋的內(nèi)容,接受什么類(lèi)型的事件,是否允許窗體移動(dòng)顯示不同過(guò)窗口管理器,窗體使用哪個(gè)colormap,窗體內(nèi)顯示什么樣的指針。Mapping和 Visibility
XMapWindow()在當(dāng)前z-order位置映射窗口,XMapRaised()將窗口放到Z-order頂部映射,當(dāng)窗體是第一次創(chuàng)建時(shí),兩者行為一樣,都在頂層顯示窗體。顯示窗體的條件:1。使用XMapWindow或相關(guān)函數(shù)顯示窗體2。祖先窗口必須已經(jīng)顯示3。窗體沒(méi)有被覆蓋(使用XCirculateSubwindows(),XConfigureWindow(),XRestackWindows()改變窗口z-order)4。緩沖被發(fā)送到server
5。頂層窗口被映射時(shí),窗口的顯示可能延遲,需要等待window manager決定。應(yīng)用程序應(yīng)該等到第一個(gè)expose事件,表示窗口顯示了,并可以進(jìn)行繪畫(huà)。當(dāng)窗體被unmap了,其配置和屬性會(huì)被保留
2.3圖形pixel和color
colormap決定每個(gè)像素值對(duì)應(yīng)的顏色。colormap中的每一項(xiàng)稱(chēng)為colorcell
pixel和planes像素的位數(shù)成為planes,指定顏色的數(shù)量pixmaps和drawables
pixmaps是一部分可繪畫(huà)的內(nèi)存。pixmap和window都是drawable
XCreatePixmap創(chuàng)建drawing和gc
tiles和stipples
tiles, 一個(gè)pixmap用來(lái)重復(fù)貼圖stipples,一個(gè)1depth的pixmap,用來(lái)做mask
2.4更多窗體特性2.4.1窗體屬性background
border
bit gravity當(dāng)窗體變化時(shí)決定窗體內(nèi)容如何被保留window gravity當(dāng)窗體變化時(shí)子窗口如何重新定位backing store當(dāng)重提被覆蓋時(shí),窗體內(nèi)容是否被自動(dòng)保存,需要xserver支持。DoesBackingStore()用來(lái)檢查是否支持Saving Under用于popup菜單,當(dāng)窗體被popup類(lèi)窗口覆蓋時(shí),是否保存被覆蓋內(nèi)容,xserver不一定支持;DoesSaveUnders()來(lái)檢查events指定接收的時(shí)間substructure redirect override是否需要wm干擾colormap指定窗體的virtual colormap
cursor指定指針2.4.2窗體配置指坐標(biāo),高寬,邊框?qū)挾?#xff0c;z-order。與屬性不同,他們有wm進(jìn)行干擾2.4.4depth和visual
depth就是plane數(shù)量,inputonly窗口depth總是0
2.5事件do_not_propagate_mask指定事件不再向父窗口傳遞2.6 x編程錯(cuò)誤處理三類(lèi)錯(cuò)誤:檢測(cè)創(chuàng)建服務(wù)資源的函數(shù)返回值編程引起的協(xié)議錯(cuò)誤 (錯(cuò)誤的atom)? XErrorHandler重大系統(tǒng)錯(cuò)誤,死機(jī)或網(wǎng)絡(luò)錯(cuò)誤??? XIOErrorHandler
程序退出
WM_PROTOCOLS協(xié)議
指定應(yīng)用程序參與WM_PROTOCOLS協(xié)議
Atom wmProtocols = XInternAtom(display, "WM_DELETE_WINDOW", False);
XSetWMProtocols(display, win, &wmProtocols, 1);
收到ClientMessage后,判斷 event.xclient.data.l[0] == XInternAtom(display, "WM_DELETE_WINDOW", False), 以確定是否要退出
X資源申請(qǐng),一般在失敗時(shí)返回None
5 GC
GC: 存儲(chǔ)著繪畫(huà)時(shí)的參數(shù),包括線寬,線條樣式,填充樣式,前景色,背景色。調(diào)用繪畫(huà)函數(shù)時(shí),會(huì)使用GC中指定的方式進(jìn)行繪畫(huà)。
XCreateGC: 用XGCVaule來(lái)設(shè)置GC
cap_style:線條末端的樣式,如:圓角
Join_Style:線條拐角處的樣式
dashes:指定點(diǎn)畫(huà)線的樣式
font:可以使用XLoadFont加載字體。
FillRule:填充規(guī)則,再多邊交叉的圖形當(dāng)中進(jìn)行填充
clip_mask: 通過(guò)bitmap指定可以繪畫(huà)的區(qū)域
clip_x_origin/cliip_y_origin:指定clip_mask起始坐標(biāo)
Tiles: 填充圖形
Stipples:與Tiles一樣,只不過(guò)是bitmap,僅使用foreground和background進(jìn)行填充
5.5 Graphics Tricks
plane_mask:指定一個(gè)像素當(dāng)中,哪些位可以被設(shè)置。
function:指定對(duì)像素賦值時(shí)所使用的方式,是一些位邏輯操作5.6 Graphics Exposure
graphices_exposures:設(shè)置為true將導(dǎo)致使用XCopyArea/XCopyPlane時(shí)會(huì)發(fā)送 GrapicsEcpose和 NoExpose事件,這些事件無(wú)法通過(guò)XSelectEvent進(jìn)行設(shè)置
5.7 subwindow_mode:指定如果有子窗口阻擋的位置是否繪畫(huà)。
6繪圖
6.1.1請(qǐng)求限制: XDrawLines, XDrawPoints....有繪畫(huà)數(shù)量限制,可通過(guò)XMaxRequestSize()獲得限制6.1.6 XCopyArea XCopyPlane
XCopyPlane可以用來(lái)將bitmap復(fù)制成相應(yīng)的位深的pixmap
6.2 Fonts and Text
XFontStruct描述整個(gè)字體
XCharStruct描述單個(gè)字符
字體的原點(diǎn)不位于左上角,位于baseline
ascent從bashline開(kāi)始最高高度
descent從bashline開(kāi)始最低高度
direction字體方向
default_char不存在的字符默認(rèn)圖形
min_bounds最小字符尺寸
max_bounds最大字符尺寸
XDrawImageString用背景色填充
XGetFontProperty等到更多字體細(xì)節(jié)屬性
6.2.10 XFreeFontPath XGetFontPath XSetFontpath設(shè)置字體搜索路徑
6.3 Regions
用來(lái)設(shè)置gc中的clip_mask
6.4 Image
在client和server之間傳輸image
XGetImage,從server端獲得圖片,在對(duì)圖片進(jìn)行操作之前需要將圖片的字節(jié)序和位序轉(zhuǎn)換成client的
XPutImage,不需要轉(zhuǎn)換字節(jié)序和位序,XPutImage會(huì)做這件事
7 Color
Colormap顏色表 由ColorCell組成,ColorCell的編號(hào)成為Pixel, Pixel的每一個(gè)bit成為Plane.
Xcms: X Color manager system用來(lái)定義string對(duì)應(yīng)的顏色,支持多種顏色描述方法Colormap
colormap中每個(gè)colorcell可以被單獨(dú)的修改。有些硬件當(dāng)中僅支持同一時(shí)刻只有一個(gè)colormap。X提供virtual colormap的概念,virtual colormap通過(guò)窗口管理器換進(jìn)換出
Visual描述可以被創(chuàng)建的colormap的特征
Read/Write Colomap不可共享
Read-Only Colormap可在client間共享
XAllocColor當(dāng)是Read/Write Colormap時(shí),返回指定RGB值對(duì)應(yīng)的Pixel。當(dāng)是Read-Only colormap時(shí),返回最接近指定RGB值對(duì)應(yīng)的Pixel。
9 keyboard
keycode -> keysym -> string
XLookupString()用來(lái)翻譯keycode
XComposeStatus用來(lái)鍵盤(pán)輸入了不存在
XKeyEvent->keycode按鍵碼
XKeyEvent->state modifier keys狀態(tài)
9.2 The Pointer三種獲取指針軌跡的方法。1.抓取所有MotionEvent
2.通過(guò)XQueryPointer獲得指針當(dāng)前位置
3.XGetMotionEvents獲取軌跡歷史,可以獲得兩個(gè)時(shí)間段之間的指針軌跡。并不是所有server都支持
XGrabKeyboard()捕捉模式 GrabModeAsync GrabModeSync
GrabModeSync使用XAllowEvents允許時(shí)間發(fā)送。
12 Atom
12.4 Selections應(yīng)用程序間交換數(shù)據(jù)的方法,采用傳統(tǒng)的IPC只能假設(shè)所有應(yīng)用程序位于本機(jī)。而X的客戶端可能位于不同的主機(jī)。
selections分為兩個(gè)角色:requestor owner
selection交互步驟如下:
1.一端使用SetSelectionOwner獲得指定selection的擁有全,同一時(shí)刻僅有一個(gè)窗口可以獲得selection,失去selection的窗口將獲得SelectionClear(XSelectionClearEvent)事件
2.XConvertSelection來(lái)請(qǐng)求獲得selectiond的數(shù)據(jù),可以指定要獲得數(shù)據(jù)的格式(通過(guò)atom來(lái)標(biāo)識(shí)),請(qǐng)求后owner將獲得SelectionRequest事件,獲得XSelectionRequestEvent結(jié)構(gòu)體
3.owner將數(shù)據(jù)放入XSelectionEvent結(jié)構(gòu),并通過(guò)XSendEvent向requestor發(fā)送SelectionNotify事件。如果property成員為none則表示數(shù)據(jù)交換失敗。
系統(tǒng)默認(rèn)有XA_PRIMARY XA_SECONDARY
12.5 Cut Buffers
就是screen0上的root窗口的屬性,XA_CUT_BUFFER0到XA_CUT_BUFFER7。可通過(guò)PropertyChangeMask監(jiān)測(cè)數(shù)據(jù)變化。
總結(jié)
以上是生活随笔為你收集整理的linux xlib函数手册,Xlib 学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux下的系统监控软件,Linux系
- 下一篇: linux桌面环境丢失,一个pychar