=begin
This file is part of Origami, PDF manipulation framework for Ruby
Copyright (C) 2016 Guillaume Delugré.
Origami is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Origami is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with Origami. If not, see <http://www.gnu.org/licenses/>.
=end
module Origami
module Template
class Button < Annotation::Widget::PushButton
def initialize(caption, id: nil, x:, y:, width:, height:)
super()
set_indirect(true)
self.set_name(id)
self.H = Annotation::Widget::Highlight::INVERT
self.Rect = [ x, y, x + width, y + height ]
self.F = Annotation::Flags::PRINT
appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
appstm.BBox = [ 0, 0, width, height ]
appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
appstm.draw_rectangle(0, 0, width, height,
fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(0xE6, 0xE6, 0xFA))
appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
text_width = 4.75 * caption.length
appstm.write(caption,
x: (width - text_width)/2, y: height/2-5, size: 10)
appstm.Resources = Resources.new
set_normal_appearance(appstm)
end
end
class Edit < Annotation::Widget::Text
def initialize(id, x:, y:, width:, height:)
super()
set_indirect(true)
self.set_name(id)
self.Rect = [ x, y, x+width, y+height ]
self.F = Annotation::Flags::PRINT
self.DA = '/F1 12 Tf 0 g'
appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
appstm.BBox = [ 0, 0, width, height ]
appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
appstm.draw_rectangle(0, 0, width, height,
fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
set_normal_appearance(appstm)
end
end
class MultiLineEdit < Edit
def initialize(id, x:, y:, width:, height:)
super(id, x: x, y: y, width: width, height: height)
self.Ff ||= 0
self.Ff |= Annotation::Widget::Text::Flags::MULTILINE
end
end
class RichTextEdit < MultiLineEdit
def initialize(id, x: , y:, width:, height:)
super(id, x: x, y: y, width: width, height: height)
self.F |= Annotation::Flags::READONLY
self.Ff |= (Annotation::Widget::Text::Flags::RICHTEXT | Field::Flags::READONLY)
end
end
class PasswordEdit < Edit
def initialize(id, x:, y:, width:, height:)
super(id, x: x, y: y, width: width, height: height)
self.Ff ||= 0
self.Ff |= Annotation::Widget::Text::Flags::PASSWORD
end
end
class TextPanel < Annotation::FreeText
def initialize(id, x:, y:, width:, height:)
super()
set_indirect(true)
self.Rect = [ x, y, x + width, y + height ]
self.F = Annotation::Flags::PRINT
self.NM = id
self.DA = '/F1 12 Tf 0 g'
appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
appstm.BBox = [ 0, 0, width, height ]
appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
appstm.draw_rectangle(0, 0, width, height,
fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
set_normal_appearance(appstm)
end
end
end
end