diff options
Diffstat (limited to 'src/saffron_layout.c')
| -rw-r--r-- | src/saffron_layout.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/saffron_layout.c b/src/saffron_layout.c index c714bfa..62c7de2 100644 --- a/src/saffron_layout.c +++ b/src/saffron_layout.c @@ -1,5 +1,6 @@ #include "saffron_layout.h" #include "saffron_api.h" +#include "saffron_widget.h" #include <SDL3/SDL_video.h> #include <stdio.h> #include <stdlib.h> @@ -7,12 +8,14 @@ #include <SDL3_ttf/SDL_ttf.h> #include <saffron.h> -SaffronBox* saffron_box_new(SaffronOrientation orientation, SaffronHorizontalAlignment halign, SaffronVerticalAlignment valign, int spacing, int padding, int margin) { +SaffronBox* saffron_box_new(SaffronOrientation orientation, SaffronHorizontalAlignment halign, SaffronVerticalAlignment valign, int spacing, int padding, int margin, int width, int height) { SaffronBox* box = malloc(sizeof(SaffronBox)); if (!box) return NULL; saffron_widget_init((SaffronWidget*)box); + ((SaffronWidget*)box)->type = SAFFRON_WIDGET_BOX; + box->orientation = orientation; box->halign = halign; box->valign = valign; @@ -36,6 +39,28 @@ void saffron_box_layout(SaffronBox* box) { int inner_w = content_w - (box->padding * 2); int inner_h = content_h - (box->padding * 2); - /* TODO actually make it layout */ + int x_offset = inner_x; + int y_offset = inner_y; + + /* TODO make it account for stretch and stuff */ + for (int i = 0; i < ((SaffronWidget*)box)->child_count; i++) { + SaffronWidget* child = ((SaffronWidget*)box)->children[i]; + + if (child->pixel_perfect) continue; + + if (box->orientation == SAFFRON_ORIENTATION_HORIZONTAL) { + child->x = x_offset; + child->y = y_offset; + x_offset += child->w + box->spacing; + } else { + child->x = x_offset; + child->y = y_offset; + y_offset += child->h + box->spacing; + } + + if (child->type == SAFFRON_WIDGET_BOX) { + saffron_box_layout((SaffronBox*)child); + } + } return; } |
