Added selection rectangle.
This commit is contained in:
@ -70,6 +70,7 @@
|
|||||||
#include "ui/label.h"
|
#include "ui/label.h"
|
||||||
#include "ui/menu.h"
|
#include "ui/menu.h"
|
||||||
#include "ui/menulist.h"
|
#include "ui/menulist.h"
|
||||||
|
#include "ui/rectangle.h"
|
||||||
|
|
||||||
// Utility Objects
|
// Utility Objects
|
||||||
#include "util/array.h"
|
#include "util/array.h"
|
||||||
|
@ -10,6 +10,10 @@
|
|||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
#include "label.h"
|
#include "label.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
|
#include "rectangle.h"
|
||||||
|
|
||||||
|
/** Color of the menulist selection rectangle */
|
||||||
|
#define MENULIST_SELECTION_COLOR ((pixel_t){ .r=255, .g=255, .b=255, .a=150 })
|
||||||
|
|
||||||
/** Maximum number of items that the list supports */
|
/** Maximum number of items that the list supports */
|
||||||
#define MENULIST_ITEMS_MAX 32
|
#define MENULIST_ITEMS_MAX 32
|
||||||
@ -21,5 +25,6 @@ typedef struct {
|
|||||||
label_t labels[MENULIST_ITEMS_MAX];
|
label_t labels[MENULIST_ITEMS_MAX];
|
||||||
frame_t frame;
|
frame_t frame;
|
||||||
menu_t menu;
|
menu_t menu;
|
||||||
|
rectangle_t selection;
|
||||||
uint8_t count;
|
uint8_t count;
|
||||||
} menulist_t;
|
} menulist_t;
|
17
include/dawn/ui/rectangle.h
Normal file
17
include/dawn/ui/rectangle.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2021 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "../libs.h"
|
||||||
|
#include "../display/primitive.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
float x, y;
|
||||||
|
float width, height;
|
||||||
|
texture_t texture;
|
||||||
|
primitive_t quad;
|
||||||
|
} rectangle_t;
|
@ -14,6 +14,11 @@ void menuListInit(menulist_t *ml, texture_t *texture) {
|
|||||||
ml->y = 0;
|
ml->y = 0;
|
||||||
ml->count = 0;
|
ml->count = 0;
|
||||||
|
|
||||||
|
menuInit(&ml->menu);
|
||||||
|
|
||||||
|
rectangleInit(&ml->selection);
|
||||||
|
rectangleSetColor(&ml->selection, MENULIST_SELECTION_COLOR);
|
||||||
|
|
||||||
frameInit(&ml->frame);
|
frameInit(&ml->frame);
|
||||||
ml->frame.texture = texture;
|
ml->frame.texture = texture;
|
||||||
}
|
}
|
||||||
@ -57,6 +62,9 @@ void menuListUpdate(menulist_t *ml, engine_t *engine) {
|
|||||||
void menuListRender(menulist_t *ml, shader_t *shader) {
|
void menuListRender(menulist_t *ml, shader_t *shader) {
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
label_t *label;
|
label_t *label;
|
||||||
|
float fontScale;
|
||||||
|
|
||||||
|
fontScale = fontGetScale(ml->labels->fontSize);
|
||||||
|
|
||||||
// Render the frame
|
// Render the frame
|
||||||
ml->frame.x = ml->x;
|
ml->frame.x = ml->x;
|
||||||
@ -64,15 +72,19 @@ void menuListRender(menulist_t *ml, shader_t *shader) {
|
|||||||
frameRender(&ml->frame, shader);
|
frameRender(&ml->frame, shader);
|
||||||
|
|
||||||
// Render selection box.
|
// Render selection box.
|
||||||
|
ml->selection.x = ml->x + FRAME_BORDER_SIZE;
|
||||||
|
ml->selection.y = ml->y + FRAME_BORDER_SIZE +(
|
||||||
|
ml->menu.selected * FONT_LINE_HEIGHT * fontScale
|
||||||
|
);
|
||||||
|
ml->selection.width = 100;
|
||||||
|
ml->selection.height = FONT_LINE_HEIGHT * fontScale;
|
||||||
|
rectangleRender(&ml->selection, shader);
|
||||||
|
|
||||||
// Render each labels
|
// Render each label.
|
||||||
for(i = 0; i < ml->count; i++) {
|
for(i = 0; i < ml->count; i++) {
|
||||||
label = ml->labels + i;
|
label = ml->labels + i;
|
||||||
label->x = FRAME_BORDER_SIZE;
|
label->x = FRAME_BORDER_SIZE;
|
||||||
if(ml->menu.selected == i) label->x += 4;
|
label->y = FRAME_BORDER_SIZE + i * FONT_LINE_HEIGHT * fontScale;
|
||||||
label->y = FRAME_BORDER_SIZE + (
|
|
||||||
i * FONT_LINE_HEIGHT * fontGetScale(label->fontSize)
|
|
||||||
);
|
|
||||||
labelRender(label, shader);
|
labelRender(label, shader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "label.h"
|
#include "label.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
|
#include "rectangle.h"
|
||||||
|
|
||||||
void menuListInit(menulist_t *ml, texture_t *texture);
|
void menuListInit(menulist_t *ml, texture_t *texture);
|
||||||
|
|
||||||
|
38
src/ui/rectangle.c
Normal file
38
src/ui/rectangle.c
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2021 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "rectangle.h"
|
||||||
|
|
||||||
|
void rectangleInit(rectangle_t *rectangle) {
|
||||||
|
rectangle->x = 0;
|
||||||
|
rectangle->y = 0;
|
||||||
|
rectangle->width = 32;
|
||||||
|
rectangle->height = 32;
|
||||||
|
textureInit(&rectangle->texture, 1, 1, NULL);
|
||||||
|
quadInit(&rectangle->quad, 0, 0,0,0,0, 1,1,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rectangleSetColor(rectangle_t *rectangle, pixel_t color) {
|
||||||
|
textureBufferPixels(&rectangle->texture,
|
||||||
|
0, 0, 1, 1, &color
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rectangleRender(rectangle_t *rectangle, shader_t *shader) {
|
||||||
|
shaderUsePositionAndScale(shader,
|
||||||
|
rectangle->x, rectangle->y, 0,
|
||||||
|
0, 0, 0,
|
||||||
|
rectangle->width, rectangle->height, 1
|
||||||
|
);
|
||||||
|
shaderUseTexture(shader, &rectangle->texture);
|
||||||
|
primitiveDraw(&rectangle->quad, 0, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rectangleDispose(rectangle_t *rectangle) {
|
||||||
|
primitiveDispose(&rectangle->quad);
|
||||||
|
textureDispose(&rectangle->texture);
|
||||||
|
}
|
21
src/ui/rectangle.h
Normal file
21
src/ui/rectangle.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* 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/texture.h"
|
||||||
|
#include "../display/shader.h"
|
||||||
|
#include "../display/primitive.h"
|
||||||
|
#include "../display/primitives/quad.h"
|
||||||
|
|
||||||
|
void rectangleInit(rectangle_t *rectangle);
|
||||||
|
|
||||||
|
void rectangleSetColor(rectangle_t *rectangle, pixel_t color);
|
||||||
|
|
||||||
|
void rectangleRender(rectangle_t *rectangle, shader_t *shader);
|
||||||
|
|
||||||
|
void rectangleDispose(rectangle_t *rectangle);
|
Reference in New Issue
Block a user