mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-26 19:58:36 +01:00
Improve display layout editor for zooming into corners, also limit the scale to 10 to match slider.
This commit is contained in:
1 parent
7c03d69f91
commit
2597ca90f4
2 files changed
+28
-11
No files matched your search
+27
-11
@@ -81,20 +81,35 @@ bool DisplayLayoutScreen::touch(const TouchInput &touch) {
|
||||
if (mode == 0) {
|
||||
const Bounds &bounds = picked_->GetBounds();
|
||||
|
||||
int minTouchX = screen_bounds.w / 4;
|
||||
int maxTouchX = screen_bounds.w - minTouchX;
|
||||
int limitX = g_Config.fSmallDisplayZoomLevel * 120;
|
||||
int limitY = g_Config.fSmallDisplayZoomLevel * 68;
|
||||
if (g_Config.fSmallDisplayZoomLevel < 1) {
|
||||
limitX = 120;
|
||||
limitY = 68;
|
||||
}
|
||||
if (bRotated) {
|
||||
//swap X/Y limit for rotated display
|
||||
int limitTemp = limitX;
|
||||
limitX = limitY;
|
||||
limitY = limitTemp;
|
||||
}
|
||||
|
||||
int minTouchY = screen_bounds.h / 4;
|
||||
int maxTouchY = screen_bounds.h - minTouchY;
|
||||
int minX = local_dp_xres / 2;
|
||||
int maxX = local_dp_xres + minX;
|
||||
int minY = local_dp_yres / 2;
|
||||
int maxY = local_dp_yres + minY;
|
||||
// Display visualization disappear outside of those bounds, so we have to limit
|
||||
if (touchX < -minX) touchX = -minX;
|
||||
if (touchX > maxX) touchX = maxX;
|
||||
if (touchY < -minY) touchY = -minY;
|
||||
if (touchY > maxY) touchY = maxY;
|
||||
|
||||
int newX = bounds.centerX(), newY = bounds.centerY();
|
||||
// we have to handle x and y separately since even if x is blocked, y may not be.
|
||||
if (touchX > minTouchX && touchX < maxTouchX) {
|
||||
// if the leftmost point of the control is ahead of the margin,
|
||||
// move it. Otherwise, don't.
|
||||
// Allow moving zoomed in display freely as long as at least noticeable portion of the screen is occupied
|
||||
if (touchX > (local_dp_xres / 2) - limitX - 10 && touchX < (local_dp_xres / 2) + limitX + 10) {
|
||||
newX = touchX;
|
||||
}
|
||||
if (touchY > minTouchY && touchY < maxTouchY) {
|
||||
if (touchY > (local_dp_yres / 2) - limitY - 10 && touchY < (local_dp_yres / 2) + limitY + 10) {
|
||||
newY = touchY;
|
||||
}
|
||||
picked_->ReplaceLayoutParams(new UI::AnchorLayoutParams(newX, newY, NONE, NONE, true));
|
||||
@@ -106,7 +121,8 @@ bool DisplayLayoutScreen::touch(const TouchInput &touch) {
|
||||
|
||||
float movementScale = 0.5f;
|
||||
float newScale = startScale_ + diffY * movementScale;
|
||||
if (newScale > 100.0f) newScale = 100.0f;
|
||||
// Desired scale * 8.0 since the visualization is tiny size and multiplied by 8.
|
||||
if (newScale > 80.0f) newScale = 80.0f;
|
||||
if (newScale < 1.0f) newScale = 1.0f;
|
||||
picked_->SetScale(newScale);
|
||||
scaleUpdate_ = picked_->GetScale();
|
||||
@@ -222,7 +238,7 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
rotation_ = new PopupMultiChoice(&g_Config.iInternalScreenRotation, gr->T("Rotation"), displayRotation, 1, ARRAY_SIZE(displayRotation), co->GetName(), screenManager(), new AnchorLayoutParams(400, WRAP_CONTENT, previewWidth - 200.0f, 10, NONE, local_dp_yres - 64 - 10));
|
||||
rotation_->SetEnabledPtr(&displayRotEnable_);
|
||||
displayRotEnable_ = (g_Config.iRenderingMode != FB_NON_BUFFERED_MODE);
|
||||
bool bRotated = false;
|
||||
bRotated = false;
|
||||
if (displayRotEnable_ && (g_Config.iInternalScreenRotation == ROTATION_LOCKED_VERTICAL || g_Config.iInternalScreenRotation == ROTATION_LOCKED_VERTICAL180)) {
|
||||
bRotated = true;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user