Как добавить цвет фона/заливки в ограничивающий_бот в креветке
Можно ли добавить цвет фона в bounding_box в Prawn?
bounding_box([100, cursor], width: 80, height: 20) do
pad_top(7) { text "THIS IS TEXT", size: 8, align: :center }
stroke_bounds
end
Я попытался добавить это в блок bounding_box
background_color: "CCCCCC"
Я попытался добавить это внутри блока
fill_color "CCCCCC"
background_color "CCCCCC"
Кажется, что ничего не работает с bounding_box
Ответы
Ответ 1
Здесь код
bounding_box([200,cursor], :width => 350, :height => 80) do
stroke_color 'FFFFFF'
stroke_bounds
stroke do
stroke_color 'FFFF00'
fill_color '36DA5C'
fill_and_stroke_rounded_rectangle [cursor-80,cursor], 350, 80, 10
fill_color '000000'
end
end
Ответ 2
Это обсуждалось в 2008 году [1] (по-видимому, нигде не было), я не вижу в нем упоминания нигде в руководстве [2]. Прочтите руководство?:)
Как это сделать: после помещения всего содержимого в ограничительную рамку вы можете получить полученную ширину и высоту из ограничивающей рамки. С помощью этой информации вы можете использовать рисунок прямоугольника primitve, чтобы заполнить его. После этого вам придется перерисовать содержимое, потому что теперь вы нарисуете его поверх своего прямоугольника.
Надеюсь (возможно?) там тоже лучше, где вам не нужно дважды рисовать ваш фактический контент; Не забудьте поделиться им со всеми, когда вы встретите его!
Все, что я упомянул в приведенной выше инструкции, прекрасно документировано в руководстве [2]; Удачи!
[1] https://groups.google.com/forum/#!msg/prawn-ruby/6XW54cGy0GA/RdXwL0Zo_Z8J
[2] http://prawn.majesticseacreature.com/manual.pdf
Ответ 3
РЕДАКТИРОВАТЬ Полностью
Все еще нуждается в некоторой работе, но попробуйте это
module Prawn
module Graphics
def fill_and_stroke_bounding_box(options={},&block)
current_settings = {fill_color: fill_color,
stroke_color: stroke_color,
line_width: self.line_width }
fill_color options[:fill_color] || fill_color
stroke_color options[:stroke][:color] || stroke_color if options[:stroke]
self.line_width options[:stroke][:width] || self.line_width if options[:stroke]
rectangle options[:position], options[:width], options[:height]
options[:stroke] ? fill_and_stroke : fill
box_options = convert_box_options(options)
options[:revert_before_block] ? revert(current_settings) : check_fill_visiblity(options[:text_color])
fill_color options[:text_color] || fill_color
bounding_box(box_options[:position],box_options[:options]) do
if block_given?
block.call
end
end
revert(current_settings) unless options[:skip_revert]
end
def revert(settings={})
fill_color settings[:fill_color]
stroke_color settings[:stroke_color]
self.line_width settings[:line_width]
end
def convert_box_options(options={})
converted_options = {position: options.delete(:position)}
if options.delete(:stroke)
resize_box(options)
reposition_box(converted_options)
end
converted_options.merge({options: options})
end
def resize_box(options ={})
[:width,:height].each do |param|
options[param] -= (self.line_width * 2)
end
end
def reposition_box(options)
options[:position][0] += self.line_width
options[:position][1] -= self.line_width
end
def check_fill_visiblity(text_color)
text_color ||= fill_color
warn "[WARNING] Text Will Not be visible without text_color set or revert_before_block" if text_color == fill_color
end
end
end
Тогда вы можете называть это следующим образом
fill_and_stroke_bounding_box(position:[0,cursor],
stroke:{color: "7CFC00",width: 2.mm},
text_color: "668B8B"
fill_color:"FFFFFF",
width: 19.cm, height: 100
) do
Единственными требуемыми параметрами являются position
, height
и width
(bounding_box
не требует height
, но поскольку вы размещаете его внутри прямоугольника, вы должны указать height
.
Хотя рекомендуется установить text_color
или revert_before_block
, иначе текст внутри блока будет невидим.
options
включает все опции bounding_box, включая использование блока, а также следующие новые параметры stroke:{:color,:width}
, которые позволяют вам установить внешний ход для прямоугольника. fill_color:
установите цвет прямоугольника. text_color
цвет текста внутри блока. revert_before_block
установит цвета назад до того, как он выполнит блок, потому что fill_color
управляет text_color в Prawn. Вы можете использовать эту опцию вместо text_color
, если правильный цвет уже установлен. skip_revert
это отбросит параметры fill_color
, stroke_color
и self.line_width
, которые были установлены до вызова этого метода. Это расширение также будет warn
, если text_color
совпадает с fill_color
.
Надеюсь, это поможет кому-то.
Ответ 4
Просто добавьте еще один вариант в Willing answer... если кто-нибудь найдет это и захочет использовать его с сеткой.
def widget
grid([2,2], [3,2]).bounding_box do
stroke do
fill_color '36DA5C'
fill_and_stroke_rounded_rectangle [cursor-bounds.height,cursor], bounds.width, bounds.height, 5
fill_color '000000'
end
text "This is text inside the box"
end
end