aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libui_sdl/main.cpp159
1 files changed, 128 insertions, 31 deletions
diff --git a/src/libui_sdl/main.cpp b/src/libui_sdl/main.cpp
index 9861366..b0656c2 100644
--- a/src/libui_sdl/main.cpp
+++ b/src/libui_sdl/main.cpp
@@ -63,12 +63,15 @@ u32 ScreenBuffer[256*384];
int ScreenGap = 0;
int ScreenLayout = 0;
int ScreenSizing = 0;
+int ScreenRotation = 0;
int MainScreenPos[3];
int AutoScreenSizing;
uiRect TopScreenRect;
uiRect BottomScreenRect;
+uiDrawMatrix TopScreenTrans;
+uiDrawMatrix BottomScreenTrans;
bool Touching = false;
@@ -299,8 +302,22 @@ void OnAreaDraw(uiAreaHandler* handler, uiArea* area, uiAreaDrawParams* params)
uiDrawBitmapUpdate(ScreenBitmap, ScreenBuffer);
+ uiDrawSave(params->Context);
+ uiDrawTransform(params->Context, &TopScreenTrans);
uiDrawBitmapDraw(params->Context, ScreenBitmap, &top, &TopScreenRect);
+ uiDrawRestore(params->Context);
+
+ /*uiDrawMatrix blirg;
+ uiDrawMatrixSetIdentity(&blirg);
+ uiDrawMatrixTranslate(&blirg, -BottomScreenRect.X, -BottomScreenRect.Y);
+ uiDrawMatrixRotate(&blirg, 0, 0, -M_PI/2.0f);//3.14);
+ uiDrawMatrixTranslate(&blirg, BottomScreenRect.X, BottomScreenRect.Y+BottomScreenRect.Height);
+ //uiDrawMatrixScale(&blirg, 128, 192, 2, 2);
+ uiDrawTransform(params->Context, &blirg);*/
+ uiDrawSave(params->Context);
+ uiDrawTransform(params->Context, &BottomScreenTrans);
uiDrawBitmapDraw(params->Context, ScreenBitmap, &bot, &BottomScreenRect);
+ uiDrawRestore(params->Context);
}
void OnAreaMouseEvent(uiAreaHandler* handler, uiArea* area, uiAreaMouseEvent* evt)
@@ -378,10 +395,16 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt)
void SetupScreenRects(int width, int height)
{
bool horizontal = false;
+ bool sideways = false;
+ScreenRotation = 3; // TEST 1=90 CW 2=180 3=270
+ if (ScreenRotation == 1 || ScreenRotation == 3)
+ sideways = true;
+
if (ScreenLayout == 2) horizontal = true;
else if (ScreenLayout == 0)
{
- // TODO: make it horizontal if rotation is used, whenever that is implemented
+ if (sideways)
+ horizontal = true;
}
int sizemode;
@@ -390,12 +413,30 @@ void SetupScreenRects(int width, int height)
else
sizemode = ScreenSizing;
- // blarg.
- // should be changed if rotation is used
- // (also TODO: swap top/bottom screen if needed)
- int screenW = 256;
- int screenH = 192;
-horizontal = true; // TEST
+ int screenW, screenH;
+ if (sideways)
+ {
+ screenW = 192;
+ screenH = 256;
+ }
+ else
+ {
+ screenW = 256;
+ screenH = 192;
+ }
+
+ uiRect *topscreen, *bottomscreen;
+ if (ScreenRotation == 1 || ScreenRotation == 2)
+ {
+ topscreen = &BottomScreenRect;
+ bottomscreen = &TopScreenRect;
+ }
+ else
+ {
+ topscreen = &TopScreenRect;
+ bottomscreen = &BottomScreenRect;
+ }
+//horizontal = true; // TEST
if (horizontal)
{
// side-by-side
@@ -430,30 +471,30 @@ horizontal = true; // TEST
if (sizemode == 2)
{
- TopScreenRect.Width = screenW;
- TopScreenRect.Height = screenH;
+ topscreen->Width = screenW;
+ topscreen->Height = screenH;
}
else
{
- TopScreenRect.Width = (sizemode==0) ? (width / 2) : (width - screenW);
- TopScreenRect.Height = heightreq;
+ topscreen->Width = (sizemode==0) ? (width / 2) : (width - screenW);
+ topscreen->Height = heightreq;
}
- TopScreenRect.X = startX;
- TopScreenRect.Y = ((height - heightreq) / 2) + (heightreq - TopScreenRect.Height);
+ topscreen->X = startX;
+ topscreen->Y = ((height - heightreq) / 2) + (heightreq - topscreen->Height);
- BottomScreenRect.X = TopScreenRect.X + TopScreenRect.Width + ScreenGap;
+ bottomscreen->X = topscreen->X + topscreen->Width + ScreenGap;
if (sizemode == 1)
{
- BottomScreenRect.Width = screenW;
- BottomScreenRect.Height = screenH;
+ bottomscreen->Width = screenW;
+ bottomscreen->Height = screenH;
}
else
{
- BottomScreenRect.Width = width - TopScreenRect.Width;
- BottomScreenRect.Height = heightreq;
+ bottomscreen->Width = width - topscreen->Width;
+ bottomscreen->Height = heightreq;
}
- BottomScreenRect.Y = ((height - heightreq) / 2) + (heightreq - BottomScreenRect.Height);
+ bottomscreen->Y = ((height - heightreq) / 2) + (heightreq - bottomscreen->Height);
}
else
{
@@ -489,30 +530,86 @@ horizontal = true; // TEST
if (sizemode == 2)
{
- TopScreenRect.Width = screenW;
- TopScreenRect.Height = screenH;
+ topscreen->Width = screenW;
+ topscreen->Height = screenH;
}
else
{
- TopScreenRect.Width = widthreq;
- TopScreenRect.Height = (sizemode==0) ? (height / 2) : (height - screenH);
+ topscreen->Width = widthreq;
+ topscreen->Height = (sizemode==0) ? (height / 2) : (height - screenH);
}
- TopScreenRect.Y = startY;
- TopScreenRect.X = (width - TopScreenRect.Width) / 2;
+ topscreen->Y = startY;
+ topscreen->X = (width - topscreen->Width) / 2;
- BottomScreenRect.Y = TopScreenRect.Y + TopScreenRect.Height + ScreenGap;
+ bottomscreen->Y = topscreen->Y + topscreen->Height + ScreenGap;
if (sizemode == 1)
{
- BottomScreenRect.Width = screenW;
- BottomScreenRect.Height = screenH;
+ bottomscreen->Width = screenW;
+ bottomscreen->Height = screenH;
}
else
{
- BottomScreenRect.Width = widthreq;
- BottomScreenRect.Height = height - TopScreenRect.Height;
+ bottomscreen->Width = widthreq;
+ bottomscreen->Height = height - topscreen->Height;
+ }
+ bottomscreen->X = (width - bottomscreen->Width) / 2;
+ }
+
+ // setup matrices for potential rotation
+
+ uiDrawMatrixSetIdentity(&TopScreenTrans);
+ uiDrawMatrixSetIdentity(&BottomScreenTrans);
+
+ switch (ScreenRotation)
+ {
+ case 1: // 90°
+ {
+ uiDrawMatrixTranslate(&TopScreenTrans, -TopScreenRect.X, -TopScreenRect.Y);
+ uiDrawMatrixRotate(&TopScreenTrans, 0, 0, M_PI/2.0f);
+ uiDrawMatrixScale(&TopScreenTrans, 0, 0,
+ TopScreenRect.Width/(double)TopScreenRect.Height,
+ TopScreenRect.Height/(double)TopScreenRect.Width);
+ uiDrawMatrixTranslate(&TopScreenTrans, TopScreenRect.X+TopScreenRect.Width, TopScreenRect.Y);
+
+ uiDrawMatrixTranslate(&BottomScreenTrans, -BottomScreenRect.X, -BottomScreenRect.Y);
+ uiDrawMatrixRotate(&BottomScreenTrans, 0, 0, M_PI/2.0f);
+ uiDrawMatrixScale(&BottomScreenTrans, 0, 0,
+ BottomScreenRect.Width/(double)BottomScreenRect.Height,
+ BottomScreenRect.Height/(double)BottomScreenRect.Width);
+ uiDrawMatrixTranslate(&BottomScreenTrans, BottomScreenRect.X+BottomScreenRect.Width, BottomScreenRect.Y);
+ }
+ break;
+
+ case 2: // 180°
+ {
+ uiDrawMatrixTranslate(&TopScreenTrans, -TopScreenRect.X, -TopScreenRect.Y);
+ uiDrawMatrixRotate(&TopScreenTrans, 0, 0, M_PI);
+ uiDrawMatrixTranslate(&TopScreenTrans, TopScreenRect.X+TopScreenRect.Width, TopScreenRect.Y+TopScreenRect.Height);
+
+ uiDrawMatrixTranslate(&BottomScreenTrans, -BottomScreenRect.X, -BottomScreenRect.Y);
+ uiDrawMatrixRotate(&BottomScreenTrans, 0, 0, M_PI);
+ uiDrawMatrixTranslate(&BottomScreenTrans, BottomScreenRect.X+BottomScreenRect.Width, BottomScreenRect.Y+BottomScreenRect.Height);
+ }
+ break;
+
+ case 3: // 270°
+ {
+ uiDrawMatrixTranslate(&TopScreenTrans, -TopScreenRect.X, -TopScreenRect.Y);
+ uiDrawMatrixRotate(&TopScreenTrans, 0, 0, -M_PI/2.0f);
+ uiDrawMatrixScale(&TopScreenTrans, 0, 0,
+ TopScreenRect.Width/(double)TopScreenRect.Height,
+ TopScreenRect.Height/(double)TopScreenRect.Width);
+ uiDrawMatrixTranslate(&TopScreenTrans, TopScreenRect.X, TopScreenRect.Y+TopScreenRect.Height);
+
+ uiDrawMatrixTranslate(&BottomScreenTrans, -BottomScreenRect.X, -BottomScreenRect.Y);
+ uiDrawMatrixRotate(&BottomScreenTrans, 0, 0, -M_PI/2.0f);
+ uiDrawMatrixScale(&BottomScreenTrans, 0, 0,
+ BottomScreenRect.Width/(double)BottomScreenRect.Height,
+ BottomScreenRect.Height/(double)BottomScreenRect.Width);
+ uiDrawMatrixTranslate(&BottomScreenTrans, BottomScreenRect.X, BottomScreenRect.Y+BottomScreenRect.Height);
}
- BottomScreenRect.X = (width - BottomScreenRect.Width) / 2;
+ break;
}
}