Как добавить цвет фона/заливки в ограничивающий_бот в креветке - программирование
Подтвердить что ты не робот

Как добавить цвет фона/заливки в ограничивающий_бот в креветке

Можно ли добавить цвет фона в 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

4b9b3361

Ответ 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