Xlib 学习笔记

来源:互联网 发布:网络教育 一年硕士 编辑:程序博客网 时间:2024/06/01 15:38

Xlib 学习笔记

分类: XWindow 2053人阅读 评论(0)收藏 举报
protocolsserver图形deletebuffer网络

<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }-->

Xlib学习笔记

第一章
1.2X Window System
概念
display:
由键盘,鼠标和一个或多个屏幕组成的一个工作站
screen
:一个display可以有多个screen

server-client
模型:
窗口管理器
事件
X
扩展

第二章 X概念
x
协议:
   
请求消息
   
回复消息:需要回复的请求比较浪费资源,需要等待网络传输
   
事件:
   
错误:

缓冲:
  xlib
会保存请求来使客户端持续运行不至于等待网络传输。
  
引起发送缓冲情况有:
  
调用等待事件函数但事件队列中没有匹配的事件,如:XNextEvent
  
客户端调用从服务器获得信息的函数,QueryFetch Get类函数
  
客户端强制刷新缓冲 XFlushXSync

资源
  
为了减少网络传输,x为每个抽象事物使用一个唯一id进行标识(window,gc, etc),也就是atom

properties
atoms
 property
是每个window拥有的一组属性。atom用来标识每个property,可通过XInternAtom()获得atomXA_为前坠的宏代表内置的atom

窗口管理器:
 substructureredirection
substurcture引用大小,位置,子窗口z序。redirection代表对窗口配置改变的请求。请求由窗口管理器决定是否实施。

Window
WindowCharacteristics:
  
父窗体:每个窗体都有父窗体,除了rootwindow
  
窗体坐标系统:以窗体左上角为原点
  window
配置包含: 高和宽,边框宽度,位置xyz序。
  depth
色深,visual
  
窗体类别 inputoutput,inputonly
   
一组window属性:边框和背景的颜色,当窗体大小变化时窗体内布局如何变化,窗体何时自动保存被遮盖的内容,接受什么类型的事件,是否允许窗体移动显示不同过窗口管理器,窗体使用哪个colormap,窗体内显示什么样的指针。
  
Mapping
Visibility

XMapWindow()在当前z-order位置映射窗口,XMapRaised()将窗口放到Z-order顶部映射,当窗体是第一次创建时,两者行为一样,都在顶层显示窗体。
显示窗体的条件:
   1
。使用XMapWindow或相关函数显示窗体
   2
。祖先窗口必须已经显示
   3
。窗体没有被覆盖(使用XCirculateSubwindows()XConfigureWindow()XRestackWindows()改变窗口z-order
   4
。缓冲被发送到server
   5
。顶层窗口被映射时,窗口的显示可能延迟,需要等待windowmanager决定。应用程序应该等到第一个expose事件,表示窗口显示了,并可以进行绘画。
当窗体被unmap了,其配置和属性会被保留

2.3图形
pixel
color
colormap
决定每个像素值对应的颜色。colormap中的每一项称为colorcell

pixel
planes
像素的位数成为planes,指定颜色的数量

pixmaps
drawables
pixmaps
是一部分可绘画的内存。pixmapwindow都是drawable
XCreatePixmap
创建

drawing
gc

tiles
stipples
tiles
,一个pixmap用来重复贴图
stipples
,一个1depthpixmap,用来做mask

2.4
更多窗体特性

2.4.1
窗体属性
background
border
bitgravity
当窗体变化时决定窗体内容如何被保留
windowgravity
当窗体变化时子窗口如何重新定位
backingstore
当重提被覆盖时,窗体内容是否被自动保存,需要xserver支持。DoesBackingStore()用来检查是否支持
SavingUnder
用于popup菜单,当窗体被popup类窗口覆盖时,是否保存被覆盖内容,xserver不一定支持;DoesSaveUnders()来检查
events
指定接收的时间
substructureredirect override 
是否需要wm干扰
colormap
指定窗体的virtualcolormap
cursor
指定指针

2.4.2
窗体配置
指坐标,高宽,边框宽度,z-order。与属性不同,他们有wm进行干扰

2.4.4depth
visual
depth
就是plane数量,inputonly窗口depth总是0

2.5
事件
do_not_propagate_mask
指定事件不再向父窗口传递


2.6x
编程
错误处理
三类错误:
检测创建服务资源的函数返回值
编程引起的协议错误(错误的atom) XErrorHandler
重大系统错误,死机或网络错误   XIOErrorHandler




程序退出

WM_PROTOCOLS协议

指定应用程序参与WM_PROTOCOLS协议

AtomwmProtocols = XInternAtom(display, "WM_DELETE_WINDOW",False);

XSetWMProtocols(display,win, &wmProtocols, 1);


收到ClientMessage后,判断event.xclient.data.l[0] ==XInternAtom(display, "WM_DELETE_WINDOW", False),以确定是否要退出


X资源申请,一般在失败时返回None





5GC

GC:存储着绘画时的参数,包括线宽,线条样式,填充样式,前景色,背景色。调用绘画函数时,会使用GC中指定的方式进行绘画。

XCreateGC:用XGCVaule来设置GC

cap_style:线条末端的样式,如:圆角

Join_Style:线条拐角处的样式

dashes:指定点画线的样式

font:可以使用XLoadFont加载字体。

FillRule:填充规则,再多边交叉的图形当中进行填充

clip_mask:通过bitmap指定可以绘画的区域

clip_x_origin/cliip_y_origin:指定clip_mask起始坐标

Tiles:填充图形

Stipples:Tiles一样,只不过是bitmap,仅使用foregroundbackground进行填充


5.5Graphics Tricks

plane_mask:指定一个像素当中,哪些位可以被设置。

function:指定对像素赋值时所使用的方式,是一些位逻辑操作

5.6Graphics Exposure

graphices_exposures:设置为true将导致使用XCopyArea/XCopyPlane时会发送GrapicsEcposeNoExpose事件,这些事件无法通过XSelectEvent进行设置

5.7subwindow_mode:指定如果有子窗口阻挡的位置是否绘画。



6
绘图

6.1.1请求限制:XDrawLines,XDrawPoints....有绘画数量限制,可通过XMaxRequestSize()获得限制


6.1.6XCopyArea XCopyPlane

   XCopyPlane可以用来将bitmap复制成相应的位深的pixmap


6.2Fonts and Text

   XFontStruct描述整个字体

   XCharStruct描述单个字符


  
字体的原点不位于左上角,位于baseline

   ascentbashline开始最高高度

   descentbashline开始最低高度

   direction字体方向

   default_char不存在的字符默认图形

  min_bounds最小字符尺寸

  max_bounds最大字符尺寸

  XDrawImageString用背景色填充

  XGetFontProperty等到更多字体细节属性


6.2.10XFreeFontPath XGetFontPath XSetFontpath
设置字体搜索路径

6.3Regions

  用来设置gc中的clip_mask

6.4Image

  在clientserver之间传输image

  XGetImage,从server端获得图片,在对图片进行操作之前需要将图片的字节序和位序转换成client

  XPutImage,不需要转换字节序和位序,XPutImage会做这件事


7Color

Colormap颜色表 由ColorCell组成,ColorCell的编号成为Pixel,Pixel的每一个bit成为Plane.


Xcms:X Color manager system
用来定义string对应的颜色,支持多种颜色描述方法

Colormap

colormap中每个colorcell可以被单独的修改。有些硬件当中仅支持同一时刻只有一个colormapX提供virtualcolormap的概念,virtualcolormap通过窗口管理器换进换出

Visual描述可以被创建的colormap的特征


Read/WriteColomap
不可共享

Read-OnlyColormap可在client间共享

XAllocColor当是Read/WriteColormap时,返回指定RGB值对应的Pixel。当是Read-Onlycolormap时,返回最接近指定RGB值对应的Pixel


9keyboard
keycode -> keysym -> string

XLookupString()用来翻译keycode

XComposeStatus用来键盘输入了不存在

XKeyEvent->keycode按键码

XKeyEvent->statemodifier keys状态


9.2The Pointer
三种获取指针轨迹的方法。
1.
抓取所有MotionEvent

2.通过XQueryPointer获得指针当前位置

3.XGetMotionEvents获取轨迹历史,可以获得两个时间段之间的指针轨迹。并不是所有server都支持


XGrabKeyboard()捕捉模式GrabModeAsyncGrabModeSync

GrabModeSync使用XAllowEvents允许时间发送。


12Atom

12.4Selections
应用程序间交换数据的方法,采用传统的IPC只能假设所有应用程序位于本机。而X的客户端可能位于不同的主机。

selections分为两个角色:requestorowner

selection交互步骤如下:

1.一端使用SetSelectionOwner获得指定selection的拥有全,同一时刻仅有一个窗口可以获得selection,失去selection的窗口将获得SelectionClear(XSelectionClearEvent)事件

2.XConvertSelection来请求获得selectiond的数据,可以指定要获得数据的格式(通过atom来标识),请求后owner将获得SelectionRequest事件,获得XSelectionRequestEvent结构体

3.owner将数据放入XSelectionEvent结构,并通过XSendEventrequestor发送SelectionNotify事件。如果property成员为none则表示数据交换失败。

系统默认有XA_PRIMARYXA_SECONDARY

12.5Cut Buffers

就是screen0上的root窗口的属性,XA_CUT_BUFFER0XA_CUT_BUFFER7。可通过PropertyChangeMask监测数据变化。



0 0
原创粉丝点击