Improve display layout editor for zooming into corners, also limit the scale to 10 to match slider.

This commit is contained in:
LunaMoo committed 2017-12-11 16:13:51 +01:00
1 parent 7c03d69f91
commit 2597ca90f4
2 files changed
+28 -11

No files matched your search

+27 -11
View File
@@ -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;
}