2013-07-20 9 views
14

Czy jest możliwe dodanie koloru tła do bounding_box w Prawn?Jak dodać kolor tła/wypełnienia do pola bounding_box w Krewnej

bounding_box([100, cursor], width: 80, height: 20) do 
    pad_top(7) { text "THIS IS TEXT", size: 8, align: :center } 
    stroke_bounds 
end 

Ive próbował dodając to do bloku bounding_box

 background_color: "CCCCCC" 

Ive próbował dodając ten wewnątrz bloku

fill_color "CCCCCC" 
    background_color "CCCCCC" 

nic nie wydaje się działać z bounding_box

+0

znalazłeś jakieś działające rozwiązanie tego? – inquisitive

Odpowiedz

9

Tutaj kodu

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 
+1

Ta metoda nie pozwala na dynamiczne wzrost wysokości pudełka – b1nary

4

ten został omówiony 2008 [1] (najwyraźniej nigdzie nie prowadził), nie widzę tego w żadnym miejscu podręcznik [2]. Przeczytaj instrukcję? :)

Co zrobić: Po umieszczeniu całej zawartości w ramce ograniczającej można uzyskać wynikową szerokość i wysokość z obwiedni. Za pomocą tej informacji możesz użyć prostego rysunku prostopadłościanu, aby go wypełnić. Potem będziesz musiał przerysować zawartość, ponieważ do tej pory pomalowałeś ją prostokątem.

Mam nadzieję, że (prawdopodobnie?) Jest też lepszy sposób, w którym nie trzeba dwukrotnie rysować rzeczywistej treści; Upewnij się, że udostępnisz go każdemu, gdy go znajdziesz!

Wszystkie rzeczy, o których wspomniałem w szybkich opisach powyżej, są pięknie udokumentowane w podręczniku [2]; Powodzenia!

[1] https://groups.google.com/forum/#!msg/prawn-ruby/6XW54cGy0GA/RdXwL0Zo_Z8J

[2] http://prawn.majesticseacreature.com/manual.pdf

3

editted Całkowicie musi jeszcze trochę pracy, ale to wypróbować

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 

Następnie można nazwać tak

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 

Jedyne opcje, które są wymagane, są position, height i width (bounding_box nie wymagają height ale ponieważ jesteś umieszczenie go wewnątrz prostokąta należy określić height.

Chociaż zaleca się ustawienie text_color lub revert_before_block, w przeciwnym razie tekst wewnątrz bloku będzie niewidoczny.

zawiera wszystkie opcje bounding_box, w tym użycie bloku, a także następujące nowe opcje stroke:{:color,:width}, które umożliwiają ustawienie zewnętrznego obrysu prostokąta. fill_color: Ustaw kolor prostokąta. text_color kolor tekstu wewnątrz bloku. revert_before_block przywróci kolory przed wykonaniem bloku, ponieważ fill_color kontroluje kolor_tekstu w krewetce. Możesz użyć tej opcji zamiast text_color, jeśli właściwy kolor jest już ustawiony. skip_revert to odrzuci opcje fill_color, stroke_color i self.line_width, które zostały ustawione przed wywołaniem tej metody. To rozszerzenie będzie również warn, jeśli text_color jest takie samo jak .

Mam nadzieję, że to pomoże komuś.

2

Wystarczy dodać inną opcję, aby odpowiedzieć Skłonność do ... ktoś powinien znaleźć to i chcesz używać go z siatki.

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 
Powiązane problemy