Class: MotionPrime::ImageDrawElement
- Inherits:
-
DrawElement
- Object
- BaseElement
- DrawElement
- MotionPrime::ImageDrawElement
- Includes:
- DrawBackgroundMixin
- Defined in:
- motion-prime/elements/draw/image.rb
Instance Attribute Summary collapse
-
#image_data ⇒ Object
Returns the value of attribute image_data.
Attributes inherited from BaseElement
#name, #options, #screen, #section, #styles, #view, #view_class, #view_name
Instance Method Summary collapse
- #draw_in(rect) ⇒ Object
- #draw_in_context(context) ⇒ Object
- #draw_options ⇒ Object
- #draw_with_layer ⇒ Object
- #load_image ⇒ Object
- #strong_references ⇒ Object
- #update_with_options(new_options = {}) ⇒ Object
Methods included from DrawBackgroundMixin
Methods inherited from DrawElement
#bind_gesture, #computed_frame, #default_padding_for, factory, #hide, #render!, #rerender!, #show, #view
Methods included from ElementContentPaddingMixin
#cached_content_outer_height, #cached_content_outer_width, #content_outer_height, #content_outer_width, #content_padding_bottom, #content_padding_height, #content_padding_left, #content_padding_right, #content_padding_top, #content_padding_width, #default_padding_for
Methods included from FrameCalculatorMixin
Methods inherited from BaseElement
#add_target, after_render, before_render, #bind_gesture, #cell_element?, #cell_section?, #compute_options!, #computed_options, #dealloc, factory, #hide, #initialize, #reload!, #render, #render!, #rerender!, #show, #update, #update_options
Methods included from HasClassFactory
#camelize_factory, #class_factory, #low_camelize_factory
Methods included from HasStyleChainBuilder
Methods included from HasNormalizer
#debug_info, #element?, #normalize_object, #normalize_options, #normalize_value
Constructor Details
This class inherits a constructor from MotionPrime::BaseElement
Instance Attribute Details
#image_data ⇒ Object
Returns the value of attribute image_data.
5 6 7 |
# File 'motion-prime/elements/draw/image.rb', line 5 def image_data @image_data end |
Instance Method Details
#draw_in(rect) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 |
# File 'motion-prime/elements/draw/image.rb', line 15 def draw_in(rect) return if [:hidden] draw_background_in_context(UIGraphicsGetCurrentContext()) # bug - when it's a CollectionView we get invalid frame when drawing in a layer if [:draw_in_rect] || view.is_a?(MPCollectionCellWithSection) draw_in_context(UIGraphicsGetCurrentContext()) else draw_with_layer end load_image end |
#draw_in_context(context) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'motion-prime/elements/draw/image.rb', line 27 def draw_in_context(context) return if [:hidden] draw_background_in_context(context) = return unless image = [:image] border_width = [:border_width] inset = border_width > 0 ? (border_width - 1 ).abs*0.5 : 0 rect = CGRectInset([:rect], inset, inset) radius = [:corner_radius].to_f if [:corner_radius] && [:masks_to_bounds] UIGraphicsPushContext(context) if radius CGContextBeginPath(context) CGContextAddArc(context, rect.origin.x + rect.size.width/2, rect.origin.y + rect.size.height/2, radius, 0, 2*Math::PI, 0) # FIXME CGContextClosePath(context) CGContextSaveGState(context) CGContextClip(context) image.drawInRect(rect) CGContextRestoreGState(context) else image.drawInRect(rect) end UIGraphicsPopContext() end |
#draw_options ⇒ Object
7 8 9 10 11 12 13 |
# File 'motion-prime/elements/draw/image.rb', line 7 def image = image_data || [:image] image ||= [:default] if [:url] # already initialized image or image from resources or default image super.merge({image: image.try(:uiimage)}) end |
#draw_with_layer ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'motion-prime/elements/draw/image.rb', line 54 def draw_with_layer = @layer.removeFromSuperlayer if @layer return unless image = [:image] rect = [:rect] radius = [:corner_radius].to_f if [:corner_radius] && [:masks_to_bounds] @layer = CALayer.layer @layer.contents = image.CGImage @layer.frame = rect @layer.bounds = rect @layer.masksToBounds = [:masks_to_bounds] @layer.cornerRadius = radius if radius view.layer.addSublayer(@layer) end |
#load_image ⇒ Object
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 104 105 |
# File 'motion-prime/elements/draw/image.rb', line 75 def load_image return if @loading || image_data || ![:url] @loading = true ref_key = allocate_strong_references BW::Reactor.schedule do manager = SDWebImageManager.sharedManager manager.downloadWithURL([:url], options: 0, progress: lambda{ |r_size, e_size| }, completed: lambda{ |image, error, type, finished| if !image || allocated_references_released? @loading = false release_strong_references(ref_key) return end self.image_data = image section.cached_draw_image = nil if section.respond_to?(:cell_section_name) section.pending_display! else self.view.performSelectorOnMainThread :setNeedsDisplay, withObject: nil, waitUntilDone: false end @loading = false release_strong_references(ref_key) } ) end end |
#strong_references ⇒ Object
71 72 73 |
# File 'motion-prime/elements/draw/image.rb', line 71 def strong_references [section, (section.collection_section if section.respond_to?(:cell_section_name))].compact end |
#update_with_options(new_options = {}) ⇒ Object
107 108 109 110 |
# File 'motion-prime/elements/draw/image.rb', line 107 def ( = {}) super self.image_data = nil if .slice(:url, :image).any? end |