mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Break out the background into a separate view.
This commit is contained in:
1 parent
d8ff6876cd
commit
d310636eb4
2 files changed
+57
-62
No files matched your search
+57
-51
@@ -55,6 +55,61 @@ static Bounds FRectToBounds(FRect rc) {
|
||||
return b;
|
||||
}
|
||||
|
||||
class DisplayLayoutBackground : public UI::View {
|
||||
public:
|
||||
DisplayLayoutBackground(UI::ChoiceStrip *mode, UI::LayoutParams *layoutParams) : UI::View(layoutParams), mode_(mode) {}
|
||||
|
||||
void Touch(const TouchInput &touch) {
|
||||
int mode = mode_ ? mode_->GetSelection() : 0;
|
||||
|
||||
const Bounds &screenBounds = bounds_;
|
||||
if ((touch.flags & TOUCH_MOVE) != 0 && dragging_) {
|
||||
float relativeTouchX = touch.x - startX_;
|
||||
float relativeTouchY = touch.y - startY_;
|
||||
|
||||
switch (mode) {
|
||||
case MODE_MOVE:
|
||||
{
|
||||
g_Config.fDisplayOffsetX = startDisplayOffsetX_ + relativeTouchX / screenBounds.w;
|
||||
g_Config.fDisplayOffsetY = startDisplayOffsetY_ + relativeTouchY / screenBounds.h;
|
||||
break;
|
||||
}
|
||||
case MODE_RESIZE:
|
||||
{
|
||||
// Resize. Vertical = scaling; Up should be bigger so let's negate in that direction
|
||||
float diffYProp = -relativeTouchY * 0.007f;
|
||||
g_Config.fDisplayScale = startScale_ * powf(2.0f, diffYProp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((touch.flags & TOUCH_DOWN) != 0 && !dragging_) {
|
||||
dragging_ = true;
|
||||
startX_ = touch.x;
|
||||
startY_ = touch.y;
|
||||
startDisplayOffsetX_ = g_Config.fDisplayOffsetX;
|
||||
startDisplayOffsetY_ = g_Config.fDisplayOffsetY;
|
||||
startScale_ = g_Config.fDisplayScale;
|
||||
}
|
||||
|
||||
if ((touch.flags & TOUCH_UP) != 0 && dragging_) {
|
||||
dragging_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
UI::ChoiceStrip *mode_;
|
||||
bool dragging_ = false;
|
||||
|
||||
// Touch down state for drag to resize etc
|
||||
float startX_ = 0.0f;
|
||||
float startY_ = 0.0f;
|
||||
float startScale_ = -1.0f;
|
||||
float startDisplayOffsetX_ = -1.0f;
|
||||
float startDisplayOffsetY_ = -1.0f;
|
||||
};
|
||||
|
||||
DisplayLayoutScreen::DisplayLayoutScreen(const Path &filename) : UIDialogScreenWithGameBackground(filename) {
|
||||
// Ignore insets - just couldn't get the logic to work.
|
||||
ignoreInsets_ = true;
|
||||
@@ -82,51 +137,6 @@ void DisplayLayoutScreen::DrawBackground(UIContext &dc) {
|
||||
}
|
||||
}
|
||||
|
||||
bool DisplayLayoutScreen::touch(const TouchInput &touch) {
|
||||
UIScreen::touch(touch);
|
||||
|
||||
using namespace UI;
|
||||
|
||||
int mode = mode_ ? mode_->GetSelection() : 0;
|
||||
|
||||
const Bounds &screenBounds = screenManager()->getUIContext()->GetBounds();
|
||||
if ((touch.flags & TOUCH_MOVE) != 0 && dragging_) {
|
||||
float relativeTouchX = touch.x - startX_;
|
||||
float relativeTouchY = touch.y - startY_;
|
||||
|
||||
switch (mode) {
|
||||
case MODE_MOVE:
|
||||
{
|
||||
g_Config.fDisplayOffsetX = startDisplayOffsetX_ + relativeTouchX / screenBounds.w;
|
||||
g_Config.fDisplayOffsetY = startDisplayOffsetY_ + relativeTouchY / screenBounds.h;
|
||||
break;
|
||||
}
|
||||
case MODE_RESIZE:
|
||||
{
|
||||
// Resize. Vertical = scaling; Up should be bigger so let's negate in that direction
|
||||
float diffYProp = -relativeTouchY * 0.007f;
|
||||
g_Config.fDisplayScale = startScale_ * powf(2.0f, diffYProp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((touch.flags & TOUCH_DOWN) != 0 && !dragging_) {
|
||||
dragging_ = true;
|
||||
startX_ = touch.x;
|
||||
startY_ = touch.y;
|
||||
startDisplayOffsetX_ = g_Config.fDisplayOffsetX;
|
||||
startDisplayOffsetY_ = g_Config.fDisplayOffsetY;
|
||||
startScale_ = g_Config.fDisplayScale;
|
||||
}
|
||||
|
||||
if ((touch.flags & TOUCH_UP) != 0 && dragging_) {
|
||||
dragging_ = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DisplayLayoutScreen::onFinish(DialogResult reason) {
|
||||
g_Config.Save("DisplayLayoutScreen::onFinish");
|
||||
}
|
||||
@@ -188,12 +198,6 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
rightScrollView->Add(rightColumn);
|
||||
root_->Add(rightScrollView);
|
||||
|
||||
bool displayRotEnable = !g_Config.bSkipBufferEffects || g_Config.bSoftwareRendering;
|
||||
bRotated_ = false;
|
||||
if (displayRotEnable && (g_Config.iInternalScreenRotation == ROTATION_LOCKED_VERTICAL || g_Config.iInternalScreenRotation == ROTATION_LOCKED_VERTICAL180)) {
|
||||
bRotated_ = true;
|
||||
}
|
||||
|
||||
PopupSliderChoiceFloat *aspectRatio = new PopupSliderChoiceFloat(&g_Config.fDisplayAspectRatio, 0.5f, 2.0f, di->T("Aspect Ratio"), screenManager());
|
||||
leftColumn->Add(aspectRatio);
|
||||
|
||||
@@ -290,4 +294,6 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
Choice *back = new Choice(di->T("Back"), "", false);
|
||||
back->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
|
||||
rightColumn->Add(back);
|
||||
|
||||
root_->Add(new DisplayLayoutBackground(mode_, new AnchorLayoutParams(FILL_PARENT, FILL_PARENT, 0.0f, 0.0f, 0.0f, 0.0f)));
|
||||
}
|
||||
@@ -25,7 +25,6 @@ class DisplayLayoutScreen : public UIDialogScreenWithGameBackground {
|
||||
public:
|
||||
DisplayLayoutScreen(const Path &filename);
|
||||
void CreateViews() override;
|
||||
bool touch(const TouchInput &touch) override;
|
||||
void dialogFinished(const Screen *dialog, DialogResult result) override;
|
||||
void onFinish(DialogResult reason) override;
|
||||
|
||||
@@ -46,14 +45,4 @@ private:
|
||||
UI::ChoiceStrip *mode_ = nullptr;
|
||||
UI::Choice *postProcChoice_ = nullptr;
|
||||
std::string shaderNames_[256];
|
||||
|
||||
bool dragging_ = false;
|
||||
bool bRotated_ = false;
|
||||
|
||||
// Touch down state for drag to resize etc
|
||||
float startX_ = 0.0f;
|
||||
float startY_ = 0.0f;
|
||||
float startScale_ = -1.0f;
|
||||
float startDisplayOffsetX_ = -1.0f;
|
||||
float startDisplayOffsetY_ = -1.0f;
|
||||
};
|
||||
Reference in new issue
Block a user