Class: Scarpe::Webview::DisplayService
- Inherits:
-
Shoes::DisplayService
- Object
- Shoes::DisplayService
- Scarpe::Webview::DisplayService
- Includes:
- Shoes::Log
- Defined in:
- lib/scarpe/wv/webview_local_display.rb
Overview
This is the simplest type of Webview DisplayService. It creates Webview drawables corresponding to Shoes drawables, manages the Webview and its DOM tree, and generally keeps the Shoes/Webview connection working.
This is an in-process Webview-based display service, with all the limitations that entails. Slow handlers will crash, ending this display service will end the process, too many or too large evals can crash the process, etc. Frequently it's better to use a RelayDisplayService to a second process containing one of these.
Constant Summary
Constants included from Shoes::Log
Shoes::Log::DEFAULT_COMPONENT, Shoes::Log::DEFAULT_DEBUG_LOG_CONFIG, Shoes::Log::DEFAULT_LOG_CONFIG
Class Attribute Summary collapse
-
.instance ⇒ Object
Returns the value of attribute instance.
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
app is the Scarpe::Webview::App.
-
#control_interface ⇒ Object
readonly
The ControlInterface is used to handle internal events in Webview Scarpe.
-
#doc_root ⇒ Object
readonly
The DocumentRoot is the top drawable of the Webview-side drawable tree.
-
#wrangler ⇒ Object
readonly
wrangler is the Scarpe::WebWrangler.
Instance Method Summary collapse
-
#create_display_drawable_for(drawable_class_name, drawable_id, properties, parent_id:, is_widget:) ⇒ Webview::Drawable
Create a Webview display drawable for a specific Shoes drawable, and pair it with the linkable ID for this Shoes drawable.
-
#destroy ⇒ void
Destroy the display service and the app.
-
#initialize ⇒ DisplayService
constructor
This is called before any of the various Webview::Drawables are created, to be able to create them and look them up.
Methods included from Shoes::Log
configure_logger, #log_init, logger
Methods inherited from Shoes::DisplayService
dispatch_event, display_service, full_reset!, #query_display_drawable_for, set_display_service_class, #set_drawable_pairing, subscribe_to_event, unsub_from_events
Constructor Details
#initialize ⇒ DisplayService
This is called before any of the various Webview::Drawables are created, to be able to create them and look them up.
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/scarpe/wv/webview_local_display.rb', line 34 def initialize if Webview::DisplayService.instance raise Shoes::Errors::SingletonError, "ERROR! This is meant to be a singleton!" end Webview::DisplayService.instance = self super() log_init("Webview::DisplayService") @display_drawable_for = {} end |
Class Attribute Details
.instance ⇒ Object
Returns the value of attribute instance.
17 18 19 |
# File 'lib/scarpe/wv/webview_local_display.rb', line 17 def instance @instance end |
Instance Attribute Details
#app ⇒ Object (readonly)
app is the Scarpe::Webview::App
27 28 29 |
# File 'lib/scarpe/wv/webview_local_display.rb', line 27 def app @app end |
#control_interface ⇒ Object (readonly)
The ControlInterface is used to handle internal events in Webview Scarpe
21 22 23 |
# File 'lib/scarpe/wv/webview_local_display.rb', line 21 def control_interface @control_interface end |
#doc_root ⇒ Object (readonly)
The DocumentRoot is the top drawable of the Webview-side drawable tree
24 25 26 |
# File 'lib/scarpe/wv/webview_local_display.rb', line 24 def doc_root @doc_root end |
#wrangler ⇒ Object (readonly)
wrangler is the Scarpe::WebWrangler
30 31 32 |
# File 'lib/scarpe/wv/webview_local_display.rb', line 30 def wrangler @wrangler end |
Instance Method Details
#create_display_drawable_for(drawable_class_name, drawable_id, properties, parent_id:, is_widget:) ⇒ Webview::Drawable
Create a Webview display drawable for a specific Shoes drawable, and pair it with the linkable ID for this Shoes drawable.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/scarpe/wv/webview_local_display.rb', line 55 def create_display_drawable_for(drawable_class_name, drawable_id, properties, parent_id:, is_widget:) existing = query_display_drawable_for(drawable_id, nil_ok: true) if existing @log.warn("There is already a Scarpe drawable for #{drawable_id.inspect}! Returning #{existing.class.name} rather than creating a #{drawable_class_name}.") return existing end if drawable_class_name == "App" unless @doc_root raise Scarpe::MissingDocRootError, "Webview::DocumentRoot is supposed to be created before Webview::App!" end display_app = Scarpe::Webview::App.new(properties) display_app.document_root = @doc_root @control_interface = display_app.control_interface @control_interface.doc_root = @doc_root @app = @control_interface.app @wrangler = @control_interface.wrangler set_drawable_pairing(drawable_id, display_app) return display_app end # Create a corresponding display drawable if display_class = Scarpe::Webview::Flow else display_class = Scarpe::Webview::Drawable.display_class_for(drawable_class_name) unless display_class < Scarpe::Webview::Drawable raise Scarpe::BadDisplayClassType, "Wrong display class type #{display_class.inspect} for class name #{drawable_class_name.inspect}!" end end display_drawable = display_class.new(properties) set_drawable_pairing(drawable_id, display_drawable) if drawable_class_name == "DocumentRoot" # DocumentRoot is created before App. Mostly doc_root is just like any other drawable, # but we'll want a reference to it when we create App. @doc_root = display_drawable end # Nil parent is fine for DocumentRoot and any TextDrawable, so we have to specify it. display_parent = Scarpe::Webview::DisplayService.instance.query_display_drawable_for(parent_id, nil_ok: true) display_drawable.set_parent(display_parent) display_drawable end |
#destroy ⇒ void
This method returns an undefined value.
Destroy the display service and the app. Quit the process (eventually.)
108 109 110 111 |
# File 'lib/scarpe/wv/webview_local_display.rb', line 108 def destroy @app.destroy Webview::DisplayService.instance = nil end |