Permalink
Browse files

Improve display layout editor for zooming into corners, also limit th…

…e scale to 10 to match slider.
  • Loading branch information...
LunaMoo committed Dec 11, 2017
1 parent 7c03d69 commit 2597ca90f4b2b4849254e1584ab9d41af2a3082d
Showing with 28 additions and 11 deletions.
  1. +27 −11 UI/DisplayLayoutScreen.cpp
  2. +1 −0 UI/DisplayLayoutScreen.h
@@ -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;
}
@@ -44,6 +44,7 @@ class DisplayLayoutScreen : public UIDialogScreenWithBackground {
UI::PopupMultiChoice *zoom_;
UI::PopupMultiChoice *rotation_;
bool displayRotEnable_;
bool bRotated;
// Touch down state for drag to resize etc
float startX_;
float startY_;

0 comments on commit 2597ca9

Please sign in to comment.