Added image UI element.

This commit is contained in:
2021-09-02 10:10:00 -07:00
parent ed3113a767
commit 21af7906c4
17 changed files with 215 additions and 45 deletions

34
src/ui/image.c Normal file
View File

@ -0,0 +1,34 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "image.h"
void imageInit(image_t *image, texture_t *texture) {
image->x = 0;
image->y = 0;
image->quad.verticeCount = -1;
imageSetTexture(image, texture);
}
void imageSetTexture(image_t *image, texture_t *texture) {
if(image->quad.verticeCount != -1) {
primitiveDispose(&image->quad);
image->quad.verticeCount = -1;
}
image->texture = texture;
quadInit(&image->quad, 0, 0,0,0,0, texture->width,texture->height,1,1);
}
void imageRender(image_t *image, shader_t *shader) {
shaderUsePosition(shader, image->x, image->y, 0, 0, 0, 0);
primitiveDraw(&image->quad, 0, -1);
}
void imageDispose(image_t *image) {
if(image->quad.verticeCount != -1) primitiveDispose(&image->quad);
}

43
src/ui/image.h Normal file
View File

@ -0,0 +1,43 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include <dawn/dawn.h>
#include "../display/primitive.h"
#include "../display/primitives/quad.h"
#include "../display/shader.h"
/**
* Initialize an image.
*
* @param image Image to initialize.
* @param texture Texture to use for initialization.
*/
void imageInit(image_t *image, texture_t *texture);
/**
* Set the texture for an image. This will also initialize the underlying quad.
*
* @param image Image to set the texture for.
* @param texture Texture to use.
*/
void imageSetTexture(image_t *image, texture_t *texture);
/**
* Render an image
*
* @param image Image to render.
* @param shader Shader to use while rendering.
*/
void imageRender(image_t *image, shader_t *shader);
/**
* Cleanup a previously initialized image.
*
* @param image Image to dispose.
*/
void imageDispose(image_t *image);

View File

@ -5,4 +5,83 @@
* https://opensource.org/licenses/MIT
*/
#include "menulist.h"
#include "menulist.h"
void menuListInit(menulist_t *ml, texture_t *texture) {
uint8_t i;
ml->x = 0;
ml->y = 0;
ml->count = 0;
frameInit(&ml->frame);
ml->frame.texture = texture;
}
uint8_t menuListAdd(menulist_t *ml, font_t *font, char *text) {
uint8_t i;
label_t *label;
menuitem_t *item;
// Get the variables.
i = ml->count;
label = ml->labels + i;
ml->items[i] = text;
// Initialize the label.
labelInit(label);
labelSetText(label, font, text);
// Reize the frame
frameSetInnerSize(
&ml->frame,
100,
FONT_LINE_HEIGHT * fontGetScale(label->fontSize) * (i+1)
);
// Add Menu Item
item = menuAdd(&ml->menu);
item->width = 1;
item->height = 1;
item->x = 0;
item->y = i;
ml->count++;
return i;
}
void menuListUpdate(menulist_t *ml, engine_t *engine) {
menuUpdate(&ml->menu, engine);
}
void menuListRender(menulist_t *ml, shader_t *shader) {
uint8_t i;
label_t *label;
// Render the frame
ml->frame.x = ml->x;
ml->frame.y = ml->y;
frameRender(&ml->frame, shader);
// Render selection box.
// Render each labels
for(i = 0; i < ml->count; i++) {
label = ml->labels + i;
label->x = FRAME_BORDER_SIZE;
if(ml->menu.selected == i) label->x += 4;
label->y = FRAME_BORDER_SIZE + (
i * FONT_LINE_HEIGHT * fontGetScale(label->fontSize)
);
labelRender(label, shader);
}
}
void menuListDispose(menulist_t *ml) {
uint8_t i;
for(i = 0; i < ml->count; i++) {
labelDispose(ml->labels + i);
}
frameDispose(&ml->frame);
}

View File

@ -7,3 +7,16 @@
#pragma once
#include <dawn/dawn.h>
#include "label.h"
#include "menu.h"
#include "frame.h"
void menuListInit(menulist_t *ml, texture_t *texture);
uint8_t menuListAdd(menulist_t *ml, font_t *font, char *text);
void menuListUpdate(menulist_t *ml, engine_t *engine);
void menuListRender(menulist_t *ml, shader_t *shader);
void menuListDispose(menulist_t *ml);