Added selection rectangle.
This commit is contained in:
		@@ -14,6 +14,11 @@ void menuListInit(menulist_t *ml, texture_t *texture) {
 | 
			
		||||
  ml->y = 0;
 | 
			
		||||
  ml->count = 0;
 | 
			
		||||
 | 
			
		||||
  menuInit(&ml->menu);
 | 
			
		||||
  
 | 
			
		||||
  rectangleInit(&ml->selection);
 | 
			
		||||
  rectangleSetColor(&ml->selection, MENULIST_SELECTION_COLOR);
 | 
			
		||||
 | 
			
		||||
  frameInit(&ml->frame);
 | 
			
		||||
  ml->frame.texture = texture;
 | 
			
		||||
}
 | 
			
		||||
@@ -57,6 +62,9 @@ void menuListUpdate(menulist_t *ml, engine_t *engine) {
 | 
			
		||||
void menuListRender(menulist_t *ml, shader_t *shader) {
 | 
			
		||||
  uint8_t i;
 | 
			
		||||
  label_t *label;
 | 
			
		||||
  float fontScale;
 | 
			
		||||
 | 
			
		||||
  fontScale = fontGetScale(ml->labels->fontSize);
 | 
			
		||||
 | 
			
		||||
  // Render the frame
 | 
			
		||||
  ml->frame.x = ml->x;
 | 
			
		||||
@@ -64,15 +72,19 @@ void menuListRender(menulist_t *ml, shader_t *shader) {
 | 
			
		||||
  frameRender(&ml->frame, shader);
 | 
			
		||||
 | 
			
		||||
  // 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++) {
 | 
			
		||||
    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)
 | 
			
		||||
    );
 | 
			
		||||
    label->y = FRAME_BORDER_SIZE + i * FONT_LINE_HEIGHT * fontScale;
 | 
			
		||||
    labelRender(label, shader);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@
 | 
			
		||||
#include "label.h"
 | 
			
		||||
#include "menu.h"
 | 
			
		||||
#include "frame.h"
 | 
			
		||||
#include "rectangle.h"
 | 
			
		||||
 | 
			
		||||
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