mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-11 18:41:14 +00:00
translate and scale touch coordinates to the viewport (#565)
This commit is contained in:
parent
b8e7c8f774
commit
4446aaaf53
@ -428,6 +428,9 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
|
|||||||
case SDL_EVENT_MOUSE_MOTION:
|
case SDL_EVENT_MOUSE_MOTION:
|
||||||
case SDL_EVENT_MOUSE_BUTTON_DOWN:
|
case SDL_EVENT_MOUSE_BUTTON_DOWN:
|
||||||
case SDL_EVENT_MOUSE_BUTTON_UP:
|
case SDL_EVENT_MOUSE_BUTTON_UP:
|
||||||
|
case SDL_EVENT_FINGER_MOTION:
|
||||||
|
case SDL_EVENT_FINGER_DOWN:
|
||||||
|
case SDL_EVENT_FINGER_UP:
|
||||||
IDirect3DRMMiniwinDevice* device = GetD3DRMMiniwinDevice();
|
IDirect3DRMMiniwinDevice* device = GetD3DRMMiniwinDevice();
|
||||||
if (device && !device->ConvertEventToRenderCoordinates(event)) {
|
if (device && !device->ConvertEventToRenderCoordinates(event)) {
|
||||||
SDL_Log("Failed to convert event coordinates: %s", SDL_GetError());
|
SDL_Log("Failed to convert event coordinates: %s", SDL_GetError());
|
||||||
|
|||||||
@ -150,14 +150,13 @@ ViewportTransform CalculateViewportTransform(int virtualW, int virtualH, int win
|
|||||||
|
|
||||||
void Direct3DRMDevice2Impl::Resize()
|
void Direct3DRMDevice2Impl::Resize()
|
||||||
{
|
{
|
||||||
int width, height;
|
SDL_GetWindowSizeInPixels(DDWindow, &m_windowWidth, &m_windowHeight);
|
||||||
SDL_GetWindowSizeInPixels(DDWindow, &width, &height);
|
|
||||||
#ifdef __3DS__
|
#ifdef __3DS__
|
||||||
width = 320; // We are on the lower screen
|
m_windowWidth = 320; // We are on the lower screen
|
||||||
height = 240;
|
m_windowHeight = 240;
|
||||||
#endif
|
#endif
|
||||||
m_viewportTransform = CalculateViewportTransform(m_virtualWidth, m_virtualHeight, width, height);
|
m_viewportTransform = CalculateViewportTransform(m_virtualWidth, m_virtualHeight, m_windowWidth, m_windowHeight);
|
||||||
m_renderer->Resize(width, height, m_viewportTransform);
|
m_renderer->Resize(m_windowWidth, m_windowHeight, m_viewportTransform);
|
||||||
m_renderer->Clear(0, 0, 0);
|
m_renderer->Clear(0, 0, 0);
|
||||||
for (int i = 0; i < m_viewports->GetSize(); i++) {
|
for (int i = 0; i < m_viewports->GetSize(); i++) {
|
||||||
IDirect3DRMViewport* viewport;
|
IDirect3DRMViewport* viewport;
|
||||||
@ -183,7 +182,18 @@ bool Direct3DRMDevice2Impl::ConvertEventToRenderCoordinates(SDL_Event* event)
|
|||||||
event->motion.x = static_cast<Sint32>(x);
|
event->motion.x = static_cast<Sint32>(x);
|
||||||
event->motion.y = static_cast<Sint32>(y);
|
event->motion.y = static_cast<Sint32>(y);
|
||||||
break;
|
break;
|
||||||
} break;
|
}
|
||||||
|
case SDL_EVENT_FINGER_MOTION:
|
||||||
|
case SDL_EVENT_FINGER_DOWN:
|
||||||
|
case SDL_EVENT_FINGER_UP: {
|
||||||
|
int rawX = event->tfinger.x * m_windowWidth;
|
||||||
|
int rawY = event->tfinger.y * m_windowHeight;
|
||||||
|
float x = (rawX - m_viewportTransform.offsetX) / m_viewportTransform.scale;
|
||||||
|
float y = (rawY - m_viewportTransform.offsetY) / m_viewportTransform.scale;
|
||||||
|
event->tfinger.x = x / m_virtualWidth;
|
||||||
|
event->tfinger.y = y / m_virtualHeight;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -40,6 +40,8 @@ struct Direct3DRMDevice2Impl : public Direct3DRMObjectBaseImpl<IDirect3DRMDevice
|
|||||||
private:
|
private:
|
||||||
void Resize();
|
void Resize();
|
||||||
|
|
||||||
|
int m_windowWidth;
|
||||||
|
int m_windowHeight;
|
||||||
uint32_t m_virtualWidth;
|
uint32_t m_virtualWidth;
|
||||||
uint32_t m_virtualHeight;
|
uint32_t m_virtualHeight;
|
||||||
ViewportTransform m_viewportTransform;
|
ViewportTransform m_viewportTransform;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user