#include <acess/sys.h>
#include <acess/devices/terminal.h>
#include <image.h>
+#include "resources/cursor.h"
// === PROTOTYPES ===
void Video_Setup(void);
+void Video_SetCursorPos(short X, short Y);
void Video_Update(void);
void Video_FillRect(short X, short Y, short W, short H, uint32_t Color);
void Video_DrawRect(short X, short Y, short W, short H, uint32_t Color);
// === GLOBALS ===
+ int giVideo_CursorX;
+ int giVideo_CursorY;
// === CODE ===
void Video_Setup(void)
tmpInt = TERM_MODE_FB;
ioctl( giTerminalFD, TERM_IOCTL_MODETYPE, &tmpInt );
- // Force VT8 to be shown
+ // Force VT to be shown
ioctl( giTerminalFD, TERM_IOCTL_FORCESHOW, NULL );
// Create local framebuffer (back buffer)
gpScreenBuffer = malloc( giScreenWidth*giScreenHeight*4 );
memset32( gpScreenBuffer, 0x8888FF, giScreenWidth*giScreenHeight );
+
+ // Set cursor position and bitmap
+ ioctl(giTerminalFD, TERM_IOCTL_SETCURSORBITMAP, &cCursorBitmap);
+ Video_SetCursorPos( giScreenWidth/2, giScreenHeight/2 );
+
Video_Update();
}
{
//seek(giTerminalFD, 0, SEEK_SET);
seek(giTerminalFD, 0, 1);
- write(giTerminalFD, giScreenWidth*giScreenHeight*4, gpScreenBuffer);
+ write(giTerminalFD, gpScreenBuffer, giScreenWidth*giScreenHeight*4);
+}
+
+void Video_SetCursorPos(short X, short Y)
+{
+ struct {
+ uint16_t x;
+ uint16_t y;
+ } pos;
+ pos.x = giVideo_CursorX = X;
+ pos.y = giVideo_CursorY = Y;
+ ioctl(giTerminalFD, TERM_IOCTL_GETSETCURSOR, &pos);
}
void Video_FillRect(short X, short Y, short W, short H, uint32_t Color)
{
int r, g, b, a; // New
int or, og, ob; // Original
- for( x = 0; x < W; x ++ ) {
+ for( x = 0; x < W; x ++ )
+ {
b = data[x*4+0]; g = data[x*4+1]; r = data[x*4+2]; a = data[x*4+3];
if( a == 0 ) continue; // 100% transparent
ob = buf[x*4+0]; og = buf[x*4+1]; or = buf[x*4+2];
case IMGFMT_RGB:
for( y = 0; y < H; y ++ )
{
- for( x = 0; x < W; x ++ ) {
+ for( x = 0; x < W; x ++ )
+ {
buf[x*4+0] = data[x*3+2]; // Blue
buf[x*4+1] = data[x*3+1]; // Green
buf[x*4+2] = data[x*3+0]; // Red
buf += giScreenWidth * 4;
}
break;
+ default:
+ _SysDebug("ERROR: Unknown image format %i\n", Image->Format);
+ break;
}
}