From 32198cdf2d54a50efac51b25f27ebc03fd91a899 Mon Sep 17 00:00:00 2001 From: gintama91 Date: Fri, 7 Jul 2023 16:57:46 +0530 Subject: [PATCH] local fonts --- examples/local_fonts.rb | 4 ++++ fonts/Pacifico.ttf | Bin 0 -> 43632 bytes lib/scarpe/font.rb | 14 ++++++++++++++ lib/scarpe/widgets.rb | 1 + lib/scarpe/wv.rb | 1 + lib/scarpe/wv/font.rb | 35 +++++++++++++++++++++++++++++++++++ lib/scarpe/wv/html.rb | 4 ++-- 7 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 examples/local_fonts.rb create mode 100644 fonts/Pacifico.ttf create mode 100644 lib/scarpe/font.rb create mode 100644 lib/scarpe/wv/font.rb diff --git a/examples/local_fonts.rb b/examples/local_fonts.rb new file mode 100644 index 000000000..255269999 --- /dev/null +++ b/examples/local_fonts.rb @@ -0,0 +1,4 @@ +Scarpe.app do + font "fonts/Pacifico.ttf" + para "Hello yayyy" +end diff --git a/fonts/Pacifico.ttf b/fonts/Pacifico.ttf new file mode 100644 index 0000000000000000000000000000000000000000..122e4511ba121aaad8a396e910e498fdffd68c91 GIT binary patch literal 43632 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 literal 0 HcmV?d00001 diff --git a/lib/scarpe/font.rb b/lib/scarpe/font.rb new file mode 100644 index 000000000..f38c248c9 --- /dev/null +++ b/lib/scarpe/font.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class Scarpe + class Font < Scarpe::Widget + display_properties :font + + def initialize(font) + @font = font + super + + create_display_widget + end + end +end diff --git a/lib/scarpe/widgets.rb b/lib/scarpe/widgets.rb index 012347b29..f8932927e 100644 --- a/lib/scarpe/widgets.rb +++ b/lib/scarpe/widgets.rb @@ -30,3 +30,4 @@ require_relative "text_widget" require_relative "link" require_relative "line" +require_relative "font" diff --git a/lib/scarpe/wv.rb b/lib/scarpe/wv.rb index 2b5495bfc..1bec4d0e0 100644 --- a/lib/scarpe/wv.rb +++ b/lib/scarpe/wv.rb @@ -37,3 +37,4 @@ require_relative "wv/text_widget" require_relative "wv/link" require_relative "wv/line" +require_relative "wv/font" diff --git a/lib/scarpe/wv/font.rb b/lib/scarpe/wv/font.rb new file mode 100644 index 000000000..cce0b9570 --- /dev/null +++ b/lib/scarpe/wv/font.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require_relative "../base64" + +class Scarpe + class WebviewFont < WebviewWidget + include Base64 + attr_accessor :font + + def initialize(properties) + @font = properties[:font] + puts "font: #{@font}" + super + end + + def element + puts @font + HTML.render do |h| + h.link(href: @font, rel: "stylesheet") + h.style do + <<~CSS + @font-face { + font-family: Pacifico; + src: url("data:font/truetype;base64,#{encode_file_to_base64(@font)}") format('truetype'); + } + * { + font-family: Pacifico; + } + CSS + end + # Rest of the HTML code for the element + end + end + end +end diff --git a/lib/scarpe/wv/html.rb b/lib/scarpe/wv/html.rb index d14e7ea04..6ce381e54 100644 --- a/lib/scarpe/wv/html.rb +++ b/lib/scarpe/wv/html.rb @@ -2,8 +2,8 @@ class Scarpe class HTML - CONTENT_TAGS = [:div, :p, :button, :ul, :li, :textarea, :a, :strong, :em, :code, :u, :line, :span, :svg].freeze - VOID_TAGS = [:input, :img, :polygon, :path].freeze + CONTENT_TAGS = [:div, :p, :button, :ul, :li, :textarea, :a, :strong, :style, :em, :code, :u, :line, :span, :svg].freeze + VOID_TAGS = [:input, :img, :polygon, :link, :path].freeze TAGS = (CONTENT_TAGS + VOID_TAGS).freeze class << self