- [NEW] Funcions per a apilar i desapilar surfaces target i source:

surf.source.push(surface)
surf.source.pop()
surf.target.push(surface)
surf.target.pop()
This commit is contained in:
2026-05-25 11:34:45 +02:00
parent eea4a67542
commit 4016118375
5 changed files with 101 additions and 9 deletions
+55 -8
View File
@@ -154,12 +154,12 @@ namespace mini
static int target(lua_State *L) {
const int numargs = lua_gettop(L);
switch (numargs) {
case 0: {
case 1: {
lua_pushinteger(L, mini::surf::target::get());
return 1;
}
case 1: {
uint8_t surface = luaL_checkinteger(L, 1);
case 2: {
uint8_t surface = luaL_checkinteger(L, 2);
mini::surf::target::set(surface);
return 0;
}
@@ -168,15 +168,31 @@ namespace mini
};
}
static int target_push(lua_State *L) {
const int numargs = lua_gettop(L);
if (numargs==1) {
uint8_t surface = luaL_checkinteger(L, 1);
mini::surf::target::push(surface);
return 0;
} else {
return luaL_error(L, "Function 'surface.target.push' Unexpected number of parameters.");
};
}
static int target_pop(lua_State *L) {
mini::surf::target::pop();
return 0;
}
static int source(lua_State *L) {
const int numargs = lua_gettop(L);
switch (numargs) {
case 0: {
case 1: {
lua_pushinteger(L, mini::surf::source::get());
return 1;
}
case 1: {
uint8_t surface = luaL_checkinteger(L, 1);
case 2: {
uint8_t surface = luaL_checkinteger(L, 2);
mini::surf::source::set(surface);
return 0;
}
@@ -185,6 +201,22 @@ namespace mini
};
}
static int source_push(lua_State *L) {
const int numargs = lua_gettop(L);
if (numargs==1) {
uint8_t surface = luaL_checkinteger(L, 1);
mini::surf::source::push(surface);
return 0;
} else {
return luaL_error(L, "Function 'surface.source.push' Unexpected number of parameters.");
};
}
static int source_pop(lua_State *L) {
mini::surf::source::pop();
return 0;
}
static int cls(lua_State *L) {
uint8_t color = luaL_optinteger(L, 1, 0);
mini::surf::cls(color);
@@ -1036,8 +1068,23 @@ namespace mini
lua_pushcfunction(L,wrappers::surf::save); lua_setfield(L, -2, "save");
lua_pushcfunction(L,wrappers::surf::free); lua_setfield(L, -2, "free");
lua_pushcfunction(L,wrappers::surf::size); lua_setfield(L, -2, "size");
lua_pushcfunction(L,wrappers::surf::target); lua_setfield(L, -2, "target");
lua_pushcfunction(L,wrappers::surf::source); lua_setfield(L, -2, "source");
lua_newtable(L);
lua_pushcfunction(L, wrappers::surf::target_push);lua_setfield(L, -2, "push");
lua_pushcfunction(L, wrappers::surf::target_pop); lua_setfield(L, -2, "pop");
lua_newtable(L);
lua_pushcfunction(L, wrappers::surf::target); lua_setfield(L, -2, "__call");
lua_setmetatable(L, -2);
lua_setfield(L, -2, "target");
lua_newtable(L);
lua_pushcfunction(L, wrappers::surf::source_push);lua_setfield(L, -2, "push");
lua_pushcfunction(L, wrappers::surf::source_pop); lua_setfield(L, -2, "pop");
lua_newtable(L);
lua_pushcfunction(L, wrappers::surf::source); lua_setfield(L, -2, "__call");
lua_setmetatable(L, -2);
lua_setfield(L, -2, "source");
lua_pushcfunction(L,wrappers::surf::cls); lua_setfield(L, -2, "cls");
lua_pushcfunction(L,wrappers::surf::clip); lua_setfield(L, -2, "clip");
+20
View File
@@ -176,6 +176,16 @@ namespace mini
uint8_t get() {
return state.dest_surface;
}
void push(uint8_t surface) {
state.dest_stack.push(state.dest_surface);
state.dest_surface = surface;
}
void pop() {
state.dest_surface = state.dest_stack.top();
state.dest_stack.pop();
}
}
namespace source {
@@ -186,6 +196,16 @@ namespace mini
uint8_t get() {
return state.source_surface;
}
void push(uint8_t surface) {
state.source_stack.push(state.source_surface);
state.source_surface = surface;
}
void pop() {
state.source_surface = state.source_stack.top();
state.source_stack.pop();
}
}
namespace clip {
+7
View File
@@ -2,6 +2,7 @@
#include <stdint.h>
#include <vector>
#include <stack>
namespace mini
{
@@ -27,6 +28,8 @@ namespace mini
std::vector<surface_t> surfaces;
int dest_surface = -1;
int source_surface = -1;
std::stack<int> dest_stack;
std::stack<int> source_stack;
};
extern state_t state;
@@ -46,11 +49,15 @@ namespace mini
namespace target {
void set(uint8_t surface);
uint8_t get();
void push(uint8_t surface);
void pop();
}
namespace source {
void set(uint8_t surface);
uint8_t get();
void push(uint8_t surface);
void pop();
}
namespace clip {
+1 -1
View File
@@ -1,3 +1,3 @@
#pragma once
#define MINI_VERSION "1.5.10"
#define MINI_VERSION "1.5.11"