ObjectivelyMVC
Object oriented MVC framework for SDL3 and GNU C
Loading...
Searching...
No Matches
ImageView Struct Reference

ImageViews render an Image in the context of a View hierarchy. More...

#include <ImageView.h>

Inheritance diagram for ImageView:
View

Public Member Functions

Class * _ImageView (void)
 
ImageView * initWithFrame (ImageView *self, const SDL_Rect *frame)
 Initializes this ImageView with the specified frame.
 
ImageView * initWithImage (ImageView *self, const SDL_Rect *frame)
 
ImageView * initWithImage (ImageView *self, Image *image)
 Initializes this ImageView with the specified image.
 
void setImage (ImageView *self, Image *image)
 Sets the Image for this ImageView.
 
void setImageWithResource (ImageView *self, const Resource *resource)
 Sets the Image for this ImageView with the given Resource.
 
void setImageWithResourceName (ImageView *self, const char *name)
 Names the Image for this ImageView, resolved against the window's Theme at its pixel density. The Image resolves immediately when this View is already in a window, and otherwise on ImageView::didMoveToWindow, so a name may be set before the View is installed.
 
void setImageWithSurface (ImageView *self, SDL_Surface *surface)
 A convenience method to set this view's Image with a surface.
 
- Public Member Functions inherited from View
Class * _View (void)
 The View archetype.
 
bool acceptsKeyResponder (const View *self)
 
bool acceptsTouchResponder (const View *self)
 
void addClassName (View *self, const char *className)
 Adds the given class name to this View.
 
void addSubview (View *self, View *subview)
 Adds a subview to this view, to be drawn above its siblings.
 
void addSubviewRelativeTo (View *self, View *subview, View *other, ViewPosition position)
 Adds a subview to this view, positioned relatively to other.
 
 ancestorWithIdentifier (const View *self, const char *identifier)
 
void applyStyle (View *self, const Style *style)
 Applies the given Style to this View.
 
void applyTheme (View *self, const Theme *theme)
 Applies the given Theme to this View.
 
void applyThemeIfNeeded (View *self, const Theme *theme)
 Recursively applies the Theme to this View and its subviews.
 
void attachStylesheet (View *self, SDL_Window *window)
 Attaches this View's Stylesheet to the Theme associated with the given window.
 
void awakeWithCharacters (View *self, const char *chars)
 Wakes this View with the given null-terminated JSON C string.
 
void awakeWithData (View *self, const Data *data)
 Wakes this View with the specified JSON Data.
 
void awakeWithDictionary (View *, const Dictionary *)
 Wakes this View with the specified Dictionary.
 
void awakeWithResource (View *self, const Resource *resource)
 Wakes this View with the specified Resource.
 
void awakeWithResourceName (View *self, const char *name)
 Wakes this View with the Resource by the specified name.
 
void becomeKeyResponder (View *self)
 Become the key responder in the View hierarchy.
 
void becomeTouchResponder (View *self)
 Become the touch responder in the View hierarchy.
 
bool bind (View *self, const Inlet *inlets, const Dictionary *dictionary)
 Performs data binding for the Inlets described in dictionary.
 
SDL_Rect bounds (const View *self)
 
void bringSubviewToFront (View *self, View *subview)
 Brings the specified subview to the front.
 
void clearWarnings (const View *self, WarningType type)
 Clears this View's Warnings matching the given level.
 
SDL_Rect clippingFrame (const View *self)
 
bool containsPoint (const View *self, const SDL_Point *point)
 
int depth (const View *self)
 
 descendantWithIdentifier (const View *self, const char *identifier)
 
void detachStylesheet (View *self, SDL_Window *window)
 Detaches this View's Stylesheet from the Theme associated with the given window.
 
void didMoveToWindow (View *self, SDL_Window *window)
 Informs this View that it has been added to the View hierachy of the given window.
 
bool didReceiveEvent (const View *self, const SDL_Event *event)
 
void draw (View *self, Renderer *renderer)
 Draws this View.
 
void emitViewEvent (View *self, ViewEvent code, ident data)
 Emits a ViewEvent originating from this View.
 
void enumerate (const View *self, ViewEnumerator enumerator, ident data)
 
void enumerate (View *self, ViewEnumerator enumerator, ident data)
 Enumerates this View and its descendants, applying enumerator to each.
 
void enumerateAdjacent (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates adjacent siblings of this View, applying enumerator to each.
 
void enumerateAncestors (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates all ancestors of this View, applying enumerator to each.
 
void enumerateDescendants (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates all descendants of this View, applying enumerator to each.
 
void enumerateSelection (View *self, const char *rule, ViewEnumerator enumerator, ident data)
 Enumerates all Views in the selection matched by rule, applying enumerator to each.
 
void enumerateSiblings (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates all siblings of this View, applying enumerator to each.
 
void enumerateSubviews (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates all subviews of this View, applying enumerator to each.
 
void enumerateSuperview (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates the superview of this View, if any, applying enumerator to it.
 
void enumerateVisible (const View *self, ViewEnumerator enumerator, ident data)
 
void enumerateVisible (View *self, ViewEnumerator enumerator, ident data)
 Enumerates this View and its visible descendants, applying enumerator to each.
 
bool hasClassName (const View *self, cosnt char *className)
 
bool hasOverflow (const View *self)
 
View * hitTest (const View *self, const SDL_Point *point)
 Performs a hit test against this View and its descendants for the given point.
 
View * init (View *self)
 Initializes this View.
 
View * initWithFrame (View *self, const SDL_Rect *frame)
 Initializes this View with the specified frame.
 
void invalidateStyle (View *self)
 Invalidates the computed Style for this View and its descendants.
 
bool isContainer (const View *self)
 
bool isDescendantOfView (const View *self, const View *view)
 
bool isKeyResponder (const View *self)
 
bool isTouchResponder (const View *self)
 
bool isVisible (const View *self)
 
void layoutIfNeeded (View *self)
 Recursively updates the layout of this View and its subviews.
 
 layoutSubviews (View *self)
 Arranges this View's immediate subviews within its (already final) frame.
 
void layoutWithConstraint (View *self, ViewConstraint width, ViewConstraint height)
 Resolves this View's size against the given ViewConstraints, then arranges it.
 
void layoutWithSize (View *self, const SDL_Size *size)
 Resizes this View to the given size, then arranges it.
 
bool matchesSelector (const View *self, const SimpleSelector *simpleSelector)
 
void moveToWindow (View *self, SDL_Window *window)
 Moves this View to the View hierarchy of the given window.
 
String * path (const View *self)
 
void removeAllClassNames (View *self)
 Removes all class names from this View.
 
void removeAllSubviews (View *self)
 Removes all subviews from this View.
 
void removeClassName (View *self, const char *className)
 Removes the given class name to this View.
 
void removeFromSuperview (View *self)
 Removes this View from its superview.
 
void removeSubview (View *self, View *subview)
 Removes the given subview from this View.
 
void render (View *self, Renderer *renderer)
 Renders this View using the given renderer.
 
void renderDeviceDidReset (View *self)
 Informs this View that the render device has reset.
 
void renderDeviceWillReset (View *self)
 Informs this View that the render device will reset.
 
SDL_Rect renderFrame (const View *self)
 
void replaceSubview (View *self, View *subview, View *replacement)
 Replaces the specified subview with the given replacement.
 
void resignKeyResponder (View *self)
 Resigns key responder priority.
 
void resignTouchResponder (View *self)
 Resigns touch responder priority.
 
void resize (View *self, const SDL_Size *size)
 Resizes this View to the specified size.
 
void resolve (View *self, Outlet *outlets)
 Resolves the given Outlets from this View's hierarchy.
 
void respondToEvent (View *self, const SDL_Event *event)
 Responds to the specified event.
 
Set * select (View *self, const char *rule)
 Resolves all descendants (including this View) that match the given Selector rule.
 
View * selectFirst (View *self, const char *rule)
 Resolves the first descendant View that matches the given Selector rule.
 
void setNeedsApplyTheme (View *self)
 Marks this View as needing Theme application before it is next drawn.
 
void setNeedsLayout (View *self)
 Marks this View as needing layout before it is next drawn.
 
void setVisibility (View *self, ViewVisibility visibility)
 Sets this View's visibility.
 
SDL_Size size (const View *self)
 
SDL_Size sizeThastFills (const View *self)
 
SDL_Size sizeThatContains (const View *self)
 
SDL_Size sizeThatFills (const View *self)
 
void sizeThatFits (const View *self)
 
SDL_Size sizeThatSatisfies (View *self, ViewConstraint width, ViewConstraint height)
 Resolves the size this View wants to be, within the offered ViewConstraints.
 
void sizeToContain (View *self)
 Resizes this View to contain its subviews.
 
void sizeToFill (View *self)
 Resizes this View to fill its superview.
 
void sizeToFit (View *self)
 Resizes this View to fit its subviews.
 
void sizeToSatisfy (View *self, ViewConstraint width, ViewConstraint height)
 Resizes this View to satisfy the given ViewConstraints.
 
 subviewWithIdentifier (const View *self, const char *identifier)
 
void updateBindings (View *self, ident data)
 Updates data bindings, prompting the appropriate layout changes.
 
SDL_Rect viewport (const View *self)
 
View * viewWithCharacters (const char *chars, Outlet *outlets)
 Instantiates a View initialized with the given null-terminated JSON C string.
 
View * viewWithData (const Data *data, Outlet *outlets)
 Instantiates a View initialized with the contents of data.
 
View * viewWithDictionary (const Dictionary *dictionary, Outlet *outlets)
 Instantiates a View initialized with the attributes described in dictionary.
 
View * viewWithResource (const Resource *resource, Outlet *outlets)
 Instantiates a View initialized with the JSON data in resource.
 
View * viewWithResourceName (const char *name, Outlet *outlets)
 Instantiates a View initialized with the JSON Resource with the specified name.
 
Array * visibleSubviews (const View *self)
 
void warn (View *self, ViewWarningType type, const char *fmt,...)
 
void warn (View *self, WarningType level, const char *fmt,...)
 Appends a warning for this View.
 
void willMoveToWindow (View *self, SDL_Window *window)
 Informs this View that it will be added to the View hierarchy for the given window.
 

Data Fields

struct { 
 
   SDL_GPUBlendFactor   dst 
 
   SDL_GPUBlendFactor   src 
 
} blend 
 The blend factors (currently unused; reserved for future per-pipeline support).
 
SDL_Color color
 The drawing color.
 
Image * image
 The image.
 
Texture * texture
 The GPU texture.
 
View view
 The superclass.
 
- Data Fields inherited from View
ViewAlignment alignment
 The alignment.
 
int autoresizingMask
 The ViewAutoresizing bitmask.
 
SDL_Color backgroundColor
 The background color.
 
int backgroundGradientAngle
 The angle of the background gradient, in degrees, clockwise from south: 0 (the default) fills downwards, 90 to the right, 180 upwards.
 
SDL_Color backgroundGradientColor
 The far color of the background gradient, which runs from View::backgroundColor.
 
SDL_Color borderColor
 The border color.
 
int borderRadius
 The corner radius applied to the background, border and bevel.
 
int borderWidth
 The border width.
 
Set * classNames
 The class names.
 
bool clipsSubviews
 If true, subviews will be clipped to this View's frame.
 
Style * computedStyle
 The computed Style of this View.
 
ViewCornerCut cornerCut
 The horizontal inset of each corner of the background and border.
 
char * identifier
 An optional identifier.
 
SDL_Size maxSize
 The maximum size this View may be resized to during layout.
 
SDL_Size minSize
 The minimum size this View may be resized to during layout.
 
bool needsApplyTheme
 If true, this View will apply the Theme before it is drawn.
 
bool needsLayout
 If true, this View will layout its subviews before it is drawn.
 
View * nextResponder
 The next responder, or event handler, in the chain.
 
Object object
 The superclass.
 
ViewPadding padding
 The padding.
 
ViewPointerEvents pointerEvents
 Whether this View is the result of a hit test; its subviews always are.
 
bool stretch
 Whether this View takes a share of the space its StackView leaves along its axis.
 
Style * style
 The element-level Style of this View.
 
Stylesheet * stylesheet
 An optional Stylesheet.
 
Array * subviews
 The immediate subviews.
 
View * superview
 The super View.
 
ViewController * viewController
 The ViewController.
 
ViewVisibility visibility
 Whether this View is drawn, and contributes to its superview's size.
 
Array * warnings
 The Warnings this View generated.
 
SDL_Window * window
 The window.
 

Protected Attributes

ImageViewInterface * interface [0]
 The interface type.
 
- Protected Attributes inherited from View
ViewInterface * interface [0]
 The interface type.
 

Detailed Description

ImageViews render an Image in the context of a View hierarchy.

Definition at line 45 of file ImageView.h.

Member Function Documentation

◆ _ImageView()

Class * _ImageView ( void  )

Definition at line 337 of file ImageView.c.

337 {
338 static Class *clazz;
339 static Once once;
340
341 do_once(&once, {
342 clazz = _initialize(&(const ClassDef) {
343 .name = "ImageView",
344 .superclass = _View(),
345 .instanceSize = sizeof(ImageView),
346 .interfaceSize = sizeof(ImageViewInterface),
347 .initialize = initialize,
348 });
349 });
350
351 return clazz;
352}
static void initialize(Class *clazz)
Definition AtlasImage.c:74
ImageViews render an Image in the context of a View hierarchy.
Definition ImageView.h:45
Class * _View(void)
The View archetype.
Definition View.c:2336

◆ initWithFrame()

ImageView * initWithFrame ( ImageView *  self,
const SDL_Rect *  frame 
)

Initializes this ImageView with the specified frame.

Parameters
selfThe ImageView.
frameThe frame.
Returns
The initialized ImageView, or NULL on error.

Definition at line 206 of file ImageView.c.

206 {
207
208 self = (ImageView *) super(View, self, initWithFrame, frame);
209 if (self) {
210 self->blend.src = SDL_GPU_BLENDFACTOR_SRC_ALPHA;
211 self->blend.dst = SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA;
212
213 self->color = Colors.White;
214 }
215
216 return self;
217}
W3C Color constants.
Definition Colors.h:37
SDL_Color White
Definition Colors.h:185
ImageView * initWithFrame(ImageView *self, const SDL_Rect *frame)
Initializes this ImageView with the specified frame.
Definition ImageView.c:206
SDL_GPUBlendFactor src
Definition ImageView.h:62
SDL_GPUBlendFactor dst
Definition ImageView.h:62
SDL_Color color
The drawing color.
Definition ImageView.h:68
struct ImageView::@0 blend
The blend factors (currently unused; reserved for future per-pipeline support).
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
Definition View.h:225
SDL_Rect frame
The frame, relative to the superview.
Definition View.h:301

◆ initWithImage() [1/2]

ImageView * initWithImage ( ImageView *  self,
const SDL_Rect *  frame 
)

◆ initWithImage() [2/2]

ImageView * initWithImage ( ImageView *  self,
Image *  image 
)

Initializes this ImageView with the specified image.

Parameters
selfThe ImageView.
imageThe Image.
Returns
The initialized ImageView, or NULL on error.

Definition at line 223 of file ImageView.c.

223 {
224
225 self = (ImageView *) $(self, initWithFrame, NULL);
226 if (self) {
227 $(self, setImage, image);
228 }
229
230 return self;
231}
Image * image
The image.
Definition ImageView.h:73
void setImage(ImageView *self, Image *image)
Sets the Image for this ImageView.
Definition ImageView.c:237

◆ setImage()

void setImage ( ImageView *  self,
Image *  image 
)

Sets the Image for this ImageView.

Parameters
selfThe ImageView.
imageAn Image.

Definition at line 237 of file ImageView.c.

237 {
238
239 free(self->imageName);
240 self->imageName = NULL;
241
242 release(self->image);
243
244 if (image) {
245 self->image = retain(image);
246
247 const SDL_Size size = $((View *) self, size);
248 const SDL_Size imageSize = $(image, size);
249
250 if (size.w == 0 && size.h == 0) {
251 $((View *) self, resize, &imageSize);
252 }
253 } else {
254 self->image = NULL;
255 }
256
257 self->texture = release(self->texture);
258}
Texture * texture
The GPU texture.
Definition ImageView.h:89
void resize(View *self, const SDL_Size *size)
Resizes this View to the specified size.
Definition View.c:1708
SDL_Size size(const View *self)
Definition View.c:1878

◆ setImageWithResource()

void setImageWithResource ( ImageView *  self,
const Resource *  resource 
)

Sets the Image for this ImageView with the given Resource.

Parameters
selfThe ImageView.
resourceAn Image Resource.

Definition at line 264 of file ImageView.c.

264 {
265
266 Image *image = $$(Image, imageWithResource, resource, 1.f);
267
268 $(self, setImage, image);
269
270 release(image);
271}
static Image * imageWithResource(const Resource *resource, float pixelDensity)
Definition Image.c:66
Image loading.
Definition Image.h:41

◆ setImageWithResourceName()

void setImageWithResourceName ( ImageView *  self,
const char *  name 
)

Names the Image for this ImageView, resolved against the window's Theme at its pixel density. The Image resolves immediately when this View is already in a window, and otherwise on ImageView::didMoveToWindow, so a name may be set before the View is installed.

Parameters
selfThe ImageView.
nameThe Resource name, which may carry an @ decoration (see Image).

Definition at line 277 of file ImageView.c.

277 {
278
279 $(self, setImage, NULL);
280
281 // an empty name is no image, not a request to ask the resource system for ""
282 if (name && *name) {
283 self->imageName = strdup(name);
284
285 View *this = (View *) self;
286 if (this->window) {
287 $(this, didMoveToWindow, this->window);
288 }
289 }
290}
static String * name(const Font *self)
Definition Font.c:303
SDL_Window * window
The window.
Definition View.h:480
void didMoveToWindow(View *self, SDL_Window *window)
Informs this View that it has been added to the View hierachy of the given window.
Definition ImageView.c:90

◆ setImageWithSurface()

void setImageWithSurface ( ImageView *  self,
SDL_Surface *  surface 
)

A convenience method to set this view's Image with a surface.

Parameters
selfThe ImageView.
surfaceThe surface.

Definition at line 296 of file ImageView.c.

296 {
297
298 $(self, setImage, NULL);
299
300 if (surface) {
301 Image *image = $(alloc(Image), initWithSurface, surface);
302 assert(image);
303
304 $(self, setImage, image);
305
306 release(image);
307 }
308}
static Image * initWithSurface(Image *self, SDL_Surface *surface)
Definition Image.c:391

Field Documentation

◆ [struct]

struct { ... } ImageView::blend

The blend factors (currently unused; reserved for future per-pipeline support).

◆ color

SDL_Color ImageView::color

The drawing color.

Definition at line 68 of file ImageView.h.

◆ dst

SDL_GPUBlendFactor ImageView::dst

Definition at line 62 of file ImageView.h.

◆ image

Image* ImageView::image

The image.

Definition at line 73 of file ImageView.h.

◆ interface

ImageViewInterface* ImageView::interface[0]
protected

The interface type.

Definition at line 56 of file ImageView.h.

◆ src

SDL_GPUBlendFactor ImageView::src

Definition at line 62 of file ImageView.h.

◆ texture

Texture* ImageView::texture

The GPU texture.

This is the cached upload of image, but it MAY also be assigned directly, with no image set, to present a Texture the caller owns and updates, such as a Framebuffer's.

Definition at line 89 of file ImageView.h.

◆ view

View ImageView::view

The superclass.

Definition at line 50 of file ImageView.h.


The documentation for this struct was generated from the following files: