Trong Unix, màn hình (display) được quản lý bởi một chương trình duy nhất là server, server sẽ nhận những yêu cầu vẽ và xĩa từ những chương trình cần sử dụng màn hình (được gọi là client). Giao tiếp giữa client và server được thực hiện thơng qua giao thức X (X protocol). Giao thức này cĩ những đặc điểm sau:
Server và client cĩ thể cùng nằm trên một máy, hoặc cũng cĩ thể nằm trên nhiều máy, liên lạc nhau thơng qua một mạng máy tắnh.
Chỉ cĩ server là bị phụ thuộc vào phần cứng máy tắnh (màn hình), cịn giao thức X lại khơng phụ thuộc vào phần cứng, vì vậy chương trình client cĩ thể
chạy và sử dụng màn hình của một máy tắnh khác từ xa
Server cĩ thể xử lý nhiều yêu cầu của nhiều client cùng lúc trên cùng một màn hình, các client này cũng cĩ thể giao tiếp với nhau thơng qua server
Một client cĩ thể nối kết với nhiều server
Mỗi client gửi yêu cầu tạo ra hoặc bỏđi một hoặc nhiều cửa sổ trên màn hình. Các cửa sổ được tổ chức theo dạng cây, đầu tiên là cửa sổ gốc của màn hình, mỗi client sẽ tạo ra ắt nhất một cửa sổ top-level của mình, những cửa sổ cịn lại sẽ là con của cửa sổ top- level này. Khi một cửa sổ con vượt ra ngồi giới hạn của cửa sổ cha, phần vượt quá sẽ
bị cắt bỏ.
Đối với server, cửa sổ cũng như tất cả những đối tượng vẽ khác đều là resource, trong
đĩ cĩ một số resource quan trọng:
Pixmap: là một vùng chữ nhật vẽ được, nhưng khơng nằm trên màn hình, pixmap được tạo thành từ những đơn vị nhỏ nhất là pixel. Mỗi pixel cĩ một
độ sâu, được biểu diễn bằng một số bit (cịn gọi là plane). Vì vậy mỗi pixel cĩ một giá trị phụ thuộc vào độ sâu của vùng vẽ. Một pixmap cĩ độ sâu là một bit được gọi là bitmap, từng pixel trong một bitmap cĩ 2 giá trị: 0 và 1
KHOA CNTT Ờ
ĐH KHTN
Colormap là cách xác định màu từ các giá trị của pixel, mỗi màu được tổ
hợp từ 3 giá trị mức độ đỏ (red), xanh dương (green) và xanh lá cây (blue) (RGB). Mỗi cửa sổ cĩ một colormap được xác định màu của từng pixel.
Font
Cursor là một đối tượng chứa thơng tin cần thiết để biểu diễn đồ họa cho con trỏ chuột. Nĩ bao gồm một source bitmap, một shape bitmap, một hotspot (vị trắ hiện thời của con trỏ), và 2 màu.
Graphic context (GC) là một tập hợp các thuộc tắnh để xác định cách các tác vụ trên một vùng vẽ sẽảnh hưởng đến vùng này. Mỗi tác vụ sẽ sử dụng một GC do client cung cấp, vắ dụ một vài thuộc tắnh của GC là foreground pixel, background pixel, bề dày đường, vùng cắt bỏ (clip).
Property là một cấu trúc dữ liệu cĩ tên của một cửa sổ, các client dùng property để giao tiếp với nhau.
Mỗi client nối kết với một hoặc nhiều server, chúng trao đổi các request (yêu cầu), reply (trả lời), error (báo lỗi), event (sự kiện). Client gửi request đến server để yêu cầu vẽ hoặc xĩa, server gửi reply lại nếu client cĩ yêu cầu thơng tin, khi gặp lỗi server sẽ
gửi thơng báo error cho client. Server sẽ gửi event để thơng báo các thay đổi trạng thái, như khi cĩ một phắm được nhấn hoặc con trỏ chuột bị di chuyển.
Các chương trình giao tiếp với X Server như thế nào ?
Các chương trình khơng trực tiếp giao tiếp với X server, chúng sẽ sử dụng các thư viện cĩ sẵn để giao tiếp. Cĩ 3 thư viện như vậy là Xlib, X Toolkit Intrinsics (Xt), và Motif.
i) Thư viện Xlib
X protocol cĩ sẵn một interface được giao tiếp với X server, được gọi là Xlib. Các chức năng chắnh của Xlib cĩ như sau:
KHOA CNTT Ờ
ĐH KHTN
Các lệnh để tạo ra và quản lý các resource của server, bao gồm cửa sổ, pixmap, font, cursor, GC, và property
Lệnh để thêm chữ và hình ảnh vào các vùng vẽ
Cấu trúc dữ liệu được chứa các event, lệnh để chọn và đọc các event
Lệnh để sử dụng các colormap
Lệnh đọc và ghi chữ
X resource manager (Xrm) là một cơ sở dữ liệu các tùy chọn được xác định bởi người sử dụng chương trình.
Xrm là ý tưởng chủđạo của X: người sử dụng và chương trình phải tựđiều khiển hình dáng, cách tương tác và màu sắc của đối tượng đồ họa. Những yếu tố này được biểu diễn bằng các resource, một chương trình sẽ cĩ các giá trị mặc định cho những resource này, và người sử dụng sẽ sửa lại nếu cần thiết
Resource là một bộ ba gồm tên, class, và giá trị. Một class cĩ thể chứa một tập các resource khác tên nhau. Resource cĩ thể được tổ chức phân cấp trong một chương trình. Tên hoặc class đầy đủ của một resource sẽ là tên bắt đầu từ tên hoặc class của chương trình và kết thúc bằng tên hoặc class của resource
Resource manager cho phép một chương trình hoặc người sử dụng xác định các resource: trong một file, trên dịng lệnh, hoặc gọi một lệnh Xrm trong chương trình.
ii) Thư viện Xt
Mặc dù Xlib đã cung cấp các phương tiện cơ bản được giao tiếp với X server, những lệnh này là rất cơ bản và sẽ bắt lập trình viên viết rất nhiều
X cũng kèm theo một thư viện, X Toolkit Intrinsics (Xt), để cung cấp một số hàm mức
độ cao hơn. Các thành phần quan trọng nhất là:
KHOA CNTT Ờ
ĐH KHTN
Các đối tượng, cịn gọi là widget, dùng để chứa dữ liệu và interface đối với người sử dụng
Quản lý hình dáng các widget
Phân phối và xử lý các event
Widget
Widget class là một tập hợp các procedure và cấu trúc dữ liệu dùng chung cho tất cả
widget thuộc cùng class. Một đối tượng widget chứa các procedure và dữ liệu riêng của mình. Xt cĩ sẵn và đặt tên sẵn cho các class widget, người lập trình sẽ tạo ra và đặt tên cho các đối tượng widget.
iii) Thư viện Motif
Motif cung cấp thêm nhiều lệnh để tạo ra các widget phục vụ cho những mục đắch khác nhau khi giao tiếp với người sử dụng. Sau đây là tĩm tắt các chức năng này:
Kiểu dáng trực quan
Các widget của Motif đều cĩ các kiểu dáng trực quan, các đường biên cĩ màu sắc khác nhau tạo cảm giác widget nổi lên hoặc chìm sâu xuống so với nền. Một widget đang là
đối tượng tác động của bàn phắm sẽ cĩ đường biên được tơ sáng. Khi con trỏ chuột trên một button và người sử dụng nhấn nút Btn1, màu của button sẽ thay đổi tạo cảm giác
được nhấn. Tất cả các màu sắc hình dáng của widget đều được chọn mặc định, người sử dụng hoặc chương trình cũng cĩ thể chọn riêng cho mình màu sắc hoặc ảnh pixmap. Motif cĩ một cơ chế kéo và thả rất đầy đủ để truyền dữ liệu, dữ liệu được kéo từ một
điểm bằng nút Btn2 sang điểm đắch, khi người sử dụng thả chuột, dữ liệu sẽ được chuyển, sao chép hoặc liên kết đến đắch.
KHOA CNTT Ờ
ĐH KHTN
Sử dụng Xlib, Xt và Motif
Xt được xây dựng trên Xlib, và Motif lại được xây dựng trên Xt. Tuy nhiên Xt khơng thay thế hết các interface của Xlib, và Motif cũng khơng thay thế hết các interface của Xt. Bất kỳ chương trình Motif nào cũng phải sử dụng các lệnh Xt cơ bản được khởi tạo, quản lý các widget, xử lý các resource, tạo ra các hàm callback, và để vào vịng lặp xử lý event.
Theo quy ước, tên của các hàm và cấu trúc dữ liệu của Xlib bắt đầu bằng ỔXỖ, của Xt bắt đầu bằng ỔXtỖ, của Motif bắt đầu bằng ỔXmỖ.
Để viết chương trình sử dụng Motif, lập trình viên trước hết phải quen với các chương trình Xt đơn giản và hiểu biết về Xlib.