Электронные Приключения (89 Серий)
Я просмотрел все многообещающие электронные альтернативы, но все еще есть дно, которое нужно очистить. Итак, для этого эпизода – Мерцающий DSL .
Glimmer DSL – это рубиновый DSL для создания пользовательских интерфейсов. В качестве предупреждающего знака, он не пытается быть хорошим DSL для одной библиотеки пользовательского интерфейса, он пытается сделать 6. Теперь три из них – это просто Opal HTML, CSS и XML, и мы уже можем делать это в Electron, так что давайте посмотрим на остальные три.
мерцание-dsl-tk
Насколько я могу судить, установить Tk на Mac каким-либо разумным способом невозможно. У меня tcl-tk установлен в заваривать , но gem устанавливает glimmer-dsl-tk не видит этого.
Вот файл Gemfile , который выходит из строя:
source "https://rubygems.org" gem "glimmer-dsl-tk", "~> 0.0.32"
Если вы работаете в Linux, вы, вероятно, могли бы попробовать.
мерцание-dsl-libui
Lib UI – это “портативная библиотека графического интерфейса для C”. Он поставляется с таким количеством отказов от ответственности, что это неполная альфа-версия.
Поэтому мы готовим следующее Файл Gemfile а затем запустите установка пакета :
source "https://rubygems.org" gem "glimmer-dsl-libui", "~> 0.2.16"
Привет, мир не так уж плох:
#!/usr/bin/env ruby
require "glimmer-dsl-libui"
include Glimmer
window("Hello, world!", 800, 600).show
За исключением того, что он отказывается активировать это окно в OSX, поэтому оно находится в фоновом режиме.
Я продолжил пытаться написать простое приложение для счетчиков с +1 и -1 кнопки и показывали общее количество, но libui сегментировался, если я смотрел на это забавно. Между отсутствием документации, отсутствием обратной связи в ОТВЕТ, постоянными сегментами и тем, что сама библиотека открыта из-за того, что она действительно неполная, я просто бросил ее на этом этапе.
мерцание-dsl-swt
Что ж, есть еще одна вещь, которую нужно попробовать. Последней поддерживаемой библиотекой является Java SWT, для которой нам нужно будет использовать JRuby. Это уже проблематично, так как JRuby очень медленно запускается и поддерживает намного меньше библиотек, чем обычный Ruby, но этого может быть достаточно.
Мы можем начать с этого ..версия ruby (если вы используете rbenv для управления несколькими версиями Ruby:)
jruby-9.3.1.0
И это Файл Gemfile :
source "https://rubygems.org" gem "glimmer-dsl-swt", "~> 4.21"
Установка заняла некоторое время, и мне не сказали, что мне нужно передать специальные опции jruby, иначе я получу сбой. Со специальной опцией -J-XstartOnFirstThread , вот Привет, мир:
#!/usr/bin/env ruby -J-XstartOnFirstThread
require "glimmer-dsl-swt"
include Glimmer
shell {
text "Glimmer"
label {
text "Hello, World!"
}
}.open
Как вы, возможно, заметили, это не имеет ничего общего с версией пользовательского интерфейса Glimmer Lib. Мне действительно непонятно, почему Glimmer пытается быть одним проектом с несколькими библиотеками пользовательского интерфейса, которые имеют так мало общего, но я думаю, что концепция DSL может быть в чем-то похожа.
Приложение счетчика в мерцании-dsl-swt
После изучения примеров в документации мне удалось это сделать:
#!/usr/bin/env ruby -J-XstartOnFirstThread
require 'glimmer-dsl-swt'
class CounterApp
include Glimmer::UI::CustomShell
attr_accessor :count
before_body do
@count = 0
end
body {
shell {
text "Hello, Button!"
row_layout :vertical
label {
text <= [self, :count, on_read: lambda{|v| "Count: #{v}" }]
}
group {
row_layout :horizontal
button {
text "+1"
on_widget_selected { self.count += 1 }
}
button {
text "-1"
on_widget_selected { self.count -= 1 }
}
}
}
}
end
CounterApp.launch
Вся реактивность должна быть явной. Мы делаем [сам,: подсчет, on_read: лямбда{|v| "Count: #{v}"}] чтобы сказать ему, чтобы он наблюдал за изменениями в self.count , и пусть они с лямбдой даны.
И нам нужно обновить self.count вместо того, чтобы @количество , поэтому код наблюдателя уведомляется.
Все начинается нормально, к сожалению, затем все идет плохо, когда количество превышает одну цифру:
Вы заметили, что вырезано “18”? Размер этикетки определяется только при создании этикетки. Обновления изменяют содержимое этикетки, но не меняют размер этикетки. Можно обойти это, включив дополнительные пробелы в конце, но, честно говоря, это то, для чего мы оставили мир HTML+CSS? Я так не думаю.
Результаты
В случае, если это еще не очевидно, не используйте ничего из этого. Пока это сильный претендент на мировое первенство.
В следующем эпизоде мы попробуем JavaFX для JRuby и посмотрим, лучше ли это, чем Glimmer и SWT.
Как обычно, весь код для эпизода здесь .
Электронные Приключения (89 Серий)
Оригинал: “https://dev.to/taw/electron-adventures-episode-82-glimmer-dsl-3i1a”