跳轉到內容

Rebol 程式設計/語言特性/檢視

來自華夏公益教科書,開放書籍,開放世界

檢視是一個強大的二維合成圖形引擎,專為顯示使用者介面而設計。它接受一個物件,其中包含各種圖形元素的層次結構描述,並呼叫作業系統將它們渲染到使用者顯示器。各種視覺物件或面可能具有處理程式,專門處理某些視覺事件,例如滑鼠懸停、點選、視窗調整大小等,這些事件透過呼叫“do-events”連結到 Rebol 的事件處理系統中。

這意味著當在視窗中檢測到滑鼠點選,並且滑鼠點選位於按鈕物件上時,檢視能夠執行該按鈕定義的處理程式碼,該程式碼處理滑鼠點選。

Rebol 使用一個標準面,作為所有圖形物件的藍圖。檢視需要使用它作為基本物件,因為它包含渲染和允許與作業系統互動所需的最小屬性集。它在system/standard/face中定義,也由全域性變數face引用。

讓我們透過從系統face中模板化來定義一個面,如下所示

a-face: make face [
   offset: 100x100
   size: 200x100
   color: red
   effect: [gradient]
]

預設面偏移為 0x0,顏色值為 200.200.200,大小為 100x100。我們在這裡對其進行了修改,添加了一些紅色,漸變色在整個面中變化,並重新定位和調整了大小。


我們如何知道系統面對象具有哪些屬性?很簡單,透過輸入

>> help face
FACE is an object of value:
  type            word!     face
  offset          pair!     0x0
  size            pair!     100x100
  span            none!     none
  pane            none!     none
  text            none!     none
  color           tuple!    200.200.200
  image           none!     none
  effect          none!     none
  data            none!     none
  edge            object!   [color image effect size]
  font            object!   [name style size color offset space align valign s...
  para            object!   [origin margin indent tabs wrap? scroll]
  feel            object!   [redraw detect over engage]
  saved-area      none!     none
  rate            none!     none
  show?           logic!    true
  options         none!     none
  parent-face     none!     none
  old-offset      none!     none
  old-size        none!     none
  line-list       none!     none
  changes         none!     none
  face-flags      integer!  0
  action          none!     none

要直接使用檢視熟練掌握,需要深入瞭解各種圖形元件。對於大多數希望構建使用者介面的使用者來說,不需要這種詳細程度,幸運的是 Rebol 擁有一個視覺介面方言 (VID),它極大地簡化了該過程。

要使用VID構建一個帶有文字標籤和文字輸入欄位的介面,就如同以下程式碼一樣簡單

view layout [ label "Enter Name:" field [ print face/text ]]

它看起來像這樣

layout 解析塊,並由此構建一個包含一組複雜的圖形元素的面,這些元素處理文字編輯和滑鼠懸停。檢視引擎隨後將此渲染到螢幕上。

儘管VID被吹捧為僅僅是構建使用者介面時可以建立的方言的一個示例,但由於它內建且比直接在檢視中程式設計更簡單,因此它已成為構建使用者介面的預設方式。

這種方法存在一些問題。由於VID程式設計極大地簡化了使用者介面的構建,它也隱藏了背後的複雜性,因此如果您想做一些沒有記錄的功能,就需要檢查 VID 的原始碼以瞭解如何完成。此外,VID 在其圖形介面物件範圍方面仍然不完整,第三方小部件通常不能很好地協同工作。由layout引擎生成的程式碼中也存在大量冗餘,因為並非每個物件的每個方面都需要在每個例項中,但仍然會生成。它還缺少自動調整大小機制,元素必須手動重新定位。

華夏公益教科書