LibUI 0.5.10용 Glimmer DSL - 모양 리스너

12145 단어 guidesktoprubylibui
Glimmer DSL for LibUI 0.5.10(Fukuoka Award Winning Ruby 데스크탑 개발 GUI 라이브러리)이 다음 변경 사항과 함께 출시되었습니다.

특정 모양에 대해 마우스 이벤트가 발생했는지 감지하는 데 사용할 수 있는 include?(x, y) 메서드에 대해 새로 추가된 지원이 제공되어 모양 바로 아래에 중첩area mouse listeners을 지원합니다.
예제/shape_coloring.rb
요약하면 이제 모양 내에서 area mouse listeners을 직접 사용할 수 있으며 Glimmer DSL for LibUI은 마우스 x,y 좌표가 모양 영역 내에 도달하지 않는 한 실행되지 않도록 합니다(Perfect Shape 보석을 활용하여 수행).

실제로 새 예제Shape Coloring에서 이를 확인할 수 있습니다.



# From: https://github.com/AndyObtiva/glimmer-dsl-libui#shape-coloring

require 'glimmer-dsl-libui'

class ShapeColoring
  include Glimmer::LibUI::Application

  COLOR_SELECTION = Glimmer::LibUI.interpret_color(:red)

  before_body {
    @shapes = []
  }

  body {
    window('Shape Coloring', 200, 200) {
      margined false

      grid {
        label("Click a shape to select and\nchange color via color button") {
          left 0
          top 0
          hexpand true
          halign :center
          vexpand false
        }

        color_button { |cb|
          left 0
          top 1
          hexpand true
          vexpand false

          on_changed do
            @selected_shape&.fill = cb.color
          end
        }

        area {
          left 0
          top 2
          hexpand true
          vexpand true

          rectangle(0, 0, 600, 400) { # background shape
            fill :white
          }

          @shapes << colorable(:rectangle, 20, 20, 40, 20) { |shape|
            fill :lime
          }

          @shapes << colorable(:square, 80, 20, 20) { |shape|
            fill :blue
          }

          @shapes << colorable(:circle, 75, 70, 20, 20) { |shape|
            fill :green
          }

          @shapes << colorable(:arc, 120, 70, 40, 0, 145) { |shape|
            fill :orange
          }

          @shapes << colorable(:polygon, 120, 10, 120, 50, 150, 10, 150, 50) {
            fill :cyan
          }

          @shapes << colorable(:polybezier, 20, 40,
                     30, 100, 50, 80, 80, 110,
                     40, 120, 20, 120, 30, 91) {
            fill :pink
          }
        }
      }
    }
  }

  def colorable(shape_symbol, *args, &content)
    send(shape_symbol, *args) do |shape|
      on_mouse_up do |area_mouse_event|
        old_stroke = Glimmer::LibUI.interpret_color(shape.stroke).slice(:r, :g, :b)
        @shapes.each {|sh| sh.stroke = nil}
        @selected_shape = nil
        unless old_stroke == COLOR_SELECTION
          shape.stroke = COLOR_SELECTION.merge(thickness: 2)
          @selected_shape = shape
        end
      end

      content.call(shape)
    end
  end
end

ShapeColoring.launch


해피Glimmering !

좋은 웹페이지 즐겨찾기