Add scrollbar and image objects, cropping, layout properties

This commit is contained in:
Mid
2025-08-28 14:13:08 +03:00
parent 295c882100
commit 6d5ba6037c
7 changed files with 432 additions and 26 deletions

View File

@@ -21,7 +21,8 @@ struct k3MObj;
#define k3M_EVENT_COMPLETE 10
#define k3M_EVENT_MEASURE 11
#define k3M_EVENT_ARRANGE 12
#define k3M_EVENT_ALL 13
#define k3M_EVENT_POST_ARRANGE 13
#define k3M_EVENT_ALL 14
#define k3M_MOUSE_BUTTON_0 0
#define k3M_MOUSE_BUTTON_1 1
@@ -31,11 +32,18 @@ struct k3MObj;
#define k3M_EVENTKIND_CAPTURE 1
#define k3M_EVENTKIND_BUBBLE 2
#define k3M_USERDATA_SIZE 16
#define k3M_USERDATA_SIZE 32
#define k3M_ALIGN_LEFT 0
#define k3M_ALIGN_TOP 3
#define k3M_ALIGN_CENTER 1
#define k3M_ALIGN_RIGHT 2
#define k3M_ALIGN_BOTTOM 4
#define k3M_IDX_TOP 0
#define k3M_IDX_RIGHT 1
#define k3M_IDX_BOTTOM 2
#define k3M_IDX_LEFT 3
#ifdef k3M_FIXED_POINT
typedef uint8_t k3MCC;
@@ -43,6 +51,11 @@ typedef uint8_t k3MCC;
typedef float k3MCC;
#endif
#define k3M_UNIT_ABSOLUTE 0
#define k3M_UNIT_PROPORTION 1
#include"k3menu_internal.h"
struct k3MEvent {
uint16_t code;
@@ -76,16 +89,28 @@ typedef struct k3MEventHandler {
enum k3MPropertyType {
k3M_PROP_BG_COLOR,
k3M_PROP_FG_COLOR,
k3M_PROP_BORDER_RADIUS,
k3M_PROP_MARGIN,
k3M_PROP_PADDING,
k3M_PROP_HORIZONTAL_ALIGNMENT,
k3M_PROP_VERTICAL_ALIGNMENT,
k3M_PROP_LEFT,
k3M_PROP_TOP,
k3M_PROP_WIDTH,
k3M_PROP_HEIGHT,
k3M_PROP_FONT_SIZE,
k3M_PROP_SCROLL_ANYWHERE,
k3M_PROP_SCROLLBAR_SIZE,
};
struct k3MProperty {
enum k3MPropertyType type;
uint8_t units[4];
union {
intmax_t si[4];
void *ptr;
void *ptr[4];
uint8_t buf[32];
float f[4];
};
};
@@ -103,7 +128,7 @@ struct k3MObj {
int16_t wDesired;
int16_t hDesired;
bool invisible, hovered, disabled;
bool invisible, hovered, disabled, crop;
k3MEventHandler *handlers;
size_t handlerCount;
@@ -150,6 +175,8 @@ struct k3MScreen {
struct k3MObj *keyboardFocus;
struct k3MObj *lastHover;
struct k3MObj *mouseCapture;
};
struct k3MScreen *k3MScreen();
@@ -173,3 +200,23 @@ struct k3MTextInput {
char *txt;
};
struct k3MTextInput *k3MTextInput(struct k3Font *font, float sz, const char *placeholder, const char *txt);
struct k3MImage {
struct k3MObj;
k3MImageData data;
};
struct k3MImage *k3MImage(k3MImageData);
struct k3MScrollbox {
struct k3MObj;
int mouseHeld;
int16_t mouseX;
int16_t mouseY;
float scrollbarOffset;
int16_t scrollbarLength;
};
struct k3MScrollbox *k3MScrollbox();
struct k3MObj *k3MScrollboxGetContent(struct k3MScrollbox*);