Add scroll support
This commit is contained in:
@@ -172,6 +172,7 @@ struct Display
|
|||||||
{
|
{
|
||||||
SDL_Rect[] rect;
|
SDL_Rect[] rect;
|
||||||
Size windowSize;
|
Size windowSize;
|
||||||
|
int yoffset;
|
||||||
}
|
}
|
||||||
class RingBuffer(T)
|
class RingBuffer(T)
|
||||||
{
|
{
|
||||||
@@ -384,7 +385,7 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
void chScreen2(int x, int y, int w, int h)
|
void chScreen2(int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
glViewport2(x, currentDisplay.windowSize.height - h - y, w, h);
|
glViewport2(x, currentDisplay.yoffset - h - y, w, h);
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glOrtho(0, w, h, 0, 1024, -2048);
|
glOrtho(0, w, h, 0, 1024, -2048);
|
||||||
@@ -395,7 +396,7 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
void chRenderingDisplay(int i, int x, int y, int w, int h)
|
void chRenderingDisplay(int i, int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
glViewport2(x + currentDisplay.rect[i].x, currentDisplay.windowSize.height - h - y - currentDisplay.rect[i].y, w, h);
|
glViewport2(x + currentDisplay.rect[i].x, currentDisplay.yoffset - h - y - currentDisplay.rect[i].y, w, h);
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glOrtho(x, x + w, y + h, y, 1024, -2048);
|
glOrtho(x, x + w, y + h, y, 1024, -2048);
|
||||||
@@ -456,6 +457,7 @@ class PetitComputer
|
|||||||
currentDisplay = Display([display0, display1], Size(std.algorithm.max(resolutionTable[gamepad].width, resolutionTable[tv].width), resolutionTable[gamepad].height + resolutionTable[tv].height));
|
currentDisplay = Display([display0, display1], Size(std.algorithm.max(resolutionTable[gamepad].width, resolutionTable[tv].width), resolutionTable[gamepad].height + resolutionTable[tv].height));
|
||||||
xscreenmode = 4;
|
xscreenmode = 4;
|
||||||
}
|
}
|
||||||
|
currentDisplay.yoffset = currentDisplay.windowSize.height;
|
||||||
int grpw, grph;
|
int grpw, grph;
|
||||||
graphic.getSize(grpw, grph);
|
graphic.getSize(grpw, grph);
|
||||||
//1024*1024?
|
//1024*1024?
|
||||||
@@ -747,8 +749,10 @@ class PetitComputer
|
|||||||
int mousex, mousey;
|
int mousex, mousey;
|
||||||
if (SDL_GetMouseState(&mousex, &mousey) & SDL_BUTTON_LMASK)
|
if (SDL_GetMouseState(&mousex, &mousey) & SDL_BUTTON_LMASK)
|
||||||
{
|
{
|
||||||
|
int ww, wh;
|
||||||
|
SDL_GetWindowSize(window, &ww, &wh);
|
||||||
mousex = cast(int)(mousex / scaleX);
|
mousex = cast(int)(mousex / scaleX);
|
||||||
mousey = cast(int)(mousey / scaleY);
|
mousey = cast(int)(mousey / scaleY) - (wh - currentDisplay.yoffset);
|
||||||
import std.algorithm.comparison : clamp;
|
import std.algorithm.comparison : clamp;
|
||||||
auto old = touchPosition;
|
auto old = touchPosition;
|
||||||
if (x.mode != XMode.WIIU)
|
if (x.mode != XMode.WIIU)
|
||||||
@@ -859,6 +863,12 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
keybuffermutex.unlock();
|
keybuffermutex.unlock();
|
||||||
break;
|
break;
|
||||||
|
case SDL_MOUSEWHEEL:
|
||||||
|
synchronized (renderSync)
|
||||||
|
{
|
||||||
|
currentDisplay.yoffset -= event.wheel.y * 10;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user