ライブベータのリリースのための


私は最近、新しいGlimmer DSLを醸造していたそれはGlimmer DSL for LibUIです.
それは今日、完全に機能して、アルファからベータまで動いているGlimmer DSL for LibUIで終わった最後の3週の間の情熱的なプロジェクトでした.
libuiとは
LibUIは、すべてのプラットフォーム(libuiに似ていますが、SWTの重さなしでネイティブの規制を貸す比較的新しいC GUIライブラリ)Java Virtual Machineのまわりの細いルビーラッパーです.
Glimmer DSL for LibUIとは対照的にGlimmer DSL for SWTの最大の利点の一つは、それは必須の無料MRIクラビーデスクトップ開発のGUIライブラリです.任意の前提条件を事前にインストールする必要はありません.ちょうど宝石をインストールし、プラットフォームに依存しないネイティブのGUIが動作します!
Glimmer DSL for LibUIまたはGlimmer DSL for SWTとは対照的にGlimmer DSL for Tkを使用している主なトレードオフは、SWTTkがGUIツールキットとして中央のアルファLibuiより成熟しているという事実です.しかし、小さな単純なアプリケーションを構築する必要がある場合は、Ruby GEMに含まれる依存性を超えてゼロの前提条件を持つことにより、Glimmer DSL for LibUIが良い便利な選択になる可能性があります.また、Glimmer DSL for Tkと同様に、そのアプリは即座に開始し、小さなメモリフットプリントを持っている.Libuiは将来的に非常に価値がある可能性があります有望な新しいGUIツールキットです.
次の表の例では、このプロジェクトが開発した1つの重要な革新は、テーブルデータの暗黙のデータバインドです.
Glimmer DSL for LibUIは、Glimmer DSL for SWTに類似したDSLを提供し、Rubyでより生産的なデスクトップ開発を可能にします.
視覚的にGUIコントロール階層にマップする
  • 宣言DSL構文
    スマートなデフォルトおよび低レベル詳細
  • のオートメーションによる構成の上のコンベンションの上のコンベンションの上のコンベンション
    GUI を構築するのに可能な構文の最小量を必要とする
  • カスタムコントロールサポート

  • こんにちは、世界!

    require 'glimmer-dsl-libui'
    
    include Glimmer
    
    window('hello world').show
    

    プログレスバー

    require 'glimmer-dsl-libui'
    
    include Glimmer
    
    data = [
      ['task 1', 0],
      ['task 2', 15],
      ['task 3', 100],
      ['task 4', 75],
      ['task 5', -1],
    ]
    
    window('Task Progress', 300, 200) {
      vertical_box {
        table {
          text_column('Task')
          progress_bar_column('Progress')
    
          cell_rows data # implicit data-binding
        }
    
        button('Mark All As Done') {
          stretchy false
    
          on_clicked do
            data.each_with_index do |row_data, row|
              data[row][1] = 100 # automatically updates table due to implicit data-binding
            end
          end
        }
      }
    }.show
    

    エリアギャラリー

    require 'glimmer-dsl-libui'
    
    include Glimmer
    
    window('Area Gallery', 400, 400) {
      area {
        path { # declarative stable path
          square(0, 0, 100)
          square(100, 100, 400)
    
          fill r: 102, g: 102, b: 204
        }
        path { # declarative stable path
          rectangle(0, 100, 100, 400)
          rectangle(100, 0, 400, 100)
    
          # linear gradient (has x0, y0, x1, y1, and stops)
          fill x0: 10, y0: 10, x1: 350, y1: 350, stops: [{pos: 0.25, r: 204, g: 102, b: 204}, {pos: 0.75, r: 102, g: 102, b: 204}]
        }
        path { # declarative stable path
          figure(100, 100) {
            line(100, 400)
            line(400, 100)
            line(400, 400)
    
            closed true
          }
    
          fill r: 202, g: 102, b: 104, a: 0.5
          stroke r: 0, g: 0, b: 0
        }
        path { # declarative stable path
          figure(0, 0) {
            bezier(200, 100, 100, 200, 400, 100)
            bezier(300, 100, 100, 300, 100, 400)
            bezier(100, 300, 300, 100, 400, 400)
    
            closed true
          }
    
          fill r: 202, g: 102, b: 204, a: 0.5
          stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
        }
        path { # declarative stable path
          arc(400, 220, 180, 90, 90, false)
    
          # radial gradient (has an outer_radius in addition to x0, y0, x1, y1, and stops)
          fill outer_radius: 90, x0: 0, y0: 0, x1: 500, y1: 500, stops: [{pos: 0.25, r: 102, g: 102, b: 204, a: 0.5}, {pos: 0.75, r: 204, g: 102, b: 204}]
          stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
        }
        path { # declarative stable path
          circle(200, 200, 90)
    
          fill r: 202, g: 102, b: 204, a: 0.5
          stroke r: 0, g: 0, b: 0, thickness: 2
        }
        text(160, 40, 100) { # x, y, width
          string {
            font family: 'Times', size: 14
            color :black
    
            'Area Gallery'
          }
        }
    
        on_mouse_event do |area_mouse_event|
          p area_mouse_event
        end
    
        on_mouse_moved do |area_mouse_event|
          puts 'moved'
        end
    
        on_mouse_down do |area_mouse_event|
          puts 'mouse down'
        end
    
        on_mouse_up do |area_mouse_event|
          puts 'mouse up'
        end
    
        on_mouse_drag_started do |area_mouse_event|
          puts 'drag started'
        end
    
        on_mouse_dragged do |area_mouse_event|
          puts 'dragged'
        end
    
        on_mouse_dropped do |area_mouse_event|
          puts 'dropped'
        end
    
        on_mouse_entered do
          puts 'entered'
        end
    
        on_mouse_exited do
          puts 'exited'
        end
    
        on_key_event do |area_key_event|
          p area_key_event
        end
    
        on_key_up do |area_key_event|
          puts 'key up'
        end
    
        on_key_down do |area_key_event|
          puts 'key down'
        end
      }
    }.show
    
    the project pageで多くのより多くの例をチェックしてください.
    Glimmer DSL for LibUIと同じように、3週間として高速でGlimmerの完全な精巧なDSLを構築することができます(最初のバージョンで何時間も行われる).Glimmerは、それが引数、キーワード引数、ブロック変数、入れ子にされた属性、またはコンテンツブロックを含むかどうかを望む方法で、sculpting a DSLで最終的な柔軟性を提供します.次のDSLプロジェクトにはGlimmerを使用します.
    ハッピーGlimmering!