Merge pull request #16445 from hrydgard/new-screen-size-controls

New screen size controls on Display Layout & Effects screen
This commit is contained in:
Henrik Rydgård 2022-11-27 20:04:32 +01:00 committed by GitHub
commit 11c1b539e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
62 changed files with 409 additions and 330 deletions

View File

@ -226,11 +226,13 @@ void Clickable::FocusChanged(int focusFlags) {
}
}
void Clickable::Touch(const TouchInput &input) {
bool Clickable::Touch(const TouchInput &input) {
bool contains = bounds_.Contains(input.x, input.y);
if (!IsEnabled()) {
dragging_ = false;
down_ = false;
return;
return contains;
}
if (input.flags & TOUCH_DOWN) {
@ -255,6 +257,7 @@ void Clickable::Touch(const TouchInput &input) {
downCountDown_ = 0;
dragging_ = false;
}
return contains;
}
static bool MatchesKeyDef(const std::vector<KeyDef> &defs, const KeyInput &key) {
@ -350,21 +353,24 @@ bool Clickable::Key(const KeyInput &key) {
return ret;
}
void StickyChoice::Touch(const TouchInput &input) {
bool StickyChoice::Touch(const TouchInput &touch) {
bool contains = bounds_.Contains(touch.x, touch.y);
dragging_ = false;
if (!IsEnabled()) {
down_ = false;
return;
return contains;
}
if (input.flags & TOUCH_DOWN) {
if (bounds_.Contains(input.x, input.y)) {
if (touch.flags & TOUCH_DOWN) {
if (contains) {
if (IsFocusMovementEnabled())
SetFocusedView(this);
down_ = true;
Click();
return true;
}
}
return false;
}
bool StickyChoice::Key(const KeyInput &key) {
@ -1069,12 +1075,14 @@ static std::string FirstLine(const std::string &text) {
return text;
}
void TextEdit::Touch(const TouchInput &touch) {
bool TextEdit::Touch(const TouchInput &touch) {
if (touch.flags & TOUCH_DOWN) {
if (bounds_.Contains(touch.x, touch.y)) {
SetFocusedView(this, true);
return true;
}
}
return false;
}
bool TextEdit::Key(const KeyInput &input) {
@ -1259,14 +1267,15 @@ void Spinner::Draw(UIContext &dc) {
}
}
void TriggerButton::Touch(const TouchInput &input) {
bool TriggerButton::Touch(const TouchInput &input) {
bool contains = bounds_.Contains(input.x, input.y);
if (input.flags & TOUCH_DOWN) {
if (bounds_.Contains(input.x, input.y)) {
if (contains) {
down_ |= 1 << input.id;
}
}
if (input.flags & TOUCH_MOVE) {
if (bounds_.Contains(input.x, input.y))
if (contains)
down_ |= 1 << input.id;
else
down_ &= ~(1 << input.id);
@ -1281,6 +1290,8 @@ void TriggerButton::Touch(const TouchInput &input) {
} else {
*bitField_ &= ~bit_;
}
return contains;
}
void TriggerButton::Draw(UIContext &dc) {
@ -1344,9 +1355,10 @@ bool Slider::ApplyKey(int keyCode) {
return true;
}
void Slider::Touch(const TouchInput &input) {
bool Slider::Touch(const TouchInput &input) {
// Calling it afterwards, so dragging_ hasn't been set false yet when checking it above.
Clickable::Touch(input);
bool contains = Clickable::Touch(input);
if (dragging_) {
float relativeX = (input.x - (bounds_.x + paddingLeft_)) / (bounds_.w - paddingLeft_ - paddingRight_);
*value_ = floorf(relativeX * (maxValue_ - minValue_) + minValue_ + 0.5f);
@ -1360,6 +1372,7 @@ void Slider::Touch(const TouchInput &input) {
// Cancel any key repeat.
repeat_ = -1;
return contains;
}
void Slider::Clamp() {
@ -1470,8 +1483,8 @@ bool SliderFloat::ApplyKey(int keyCode) {
return true;
}
void SliderFloat::Touch(const TouchInput &input) {
Clickable::Touch(input);
bool SliderFloat::Touch(const TouchInput &input) {
bool contains = Clickable::Touch(input);
if (dragging_) {
float relativeX = (input.x - (bounds_.x + paddingLeft_)) / (bounds_.w - paddingLeft_ - paddingRight_);
*value_ = (relativeX * (maxValue_ - minValue_) + minValue_);
@ -1485,6 +1498,7 @@ void SliderFloat::Touch(const TouchInput &input) {
// Cancel any key repeat.
repeat_ = -1;
return contains;
}
void SliderFloat::Clamp() {

View File

@ -375,7 +375,7 @@ public:
// Can even be called on a different thread! This is to really minimize latency, and decouple
// touch response from the frame rate. Same with Key and Axis.
virtual bool Key(const KeyInput &input) { return false; }
virtual void Touch(const TouchInput &input) {}
virtual bool Touch(const TouchInput &input) { return true; }
virtual void Axis(const AxisInput &input) {}
virtual void Update();
@ -501,7 +501,7 @@ public:
: View(layoutParams) {}
bool Key(const KeyInput &input) override { return false; }
void Touch(const TouchInput &input) override {}
bool Touch(const TouchInput &input) override { return false; }
bool CanBeFocused() const override { return false; }
};
@ -512,7 +512,7 @@ public:
Clickable(LayoutParams *layoutParams);
bool Key(const KeyInput &input) override;
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void FocusChanged(int focusFlags) override;
@ -602,7 +602,7 @@ public:
void Draw(UIContext &dc) override;
std::string DescribeText() const override;
bool Key(const KeyInput &input) override;
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Update() override;
void GetContentDimensions(const UIContext &dc, float &w, float &h) const override;
void SetShowPercent(bool s) { showPercent_ = s; }
@ -633,7 +633,7 @@ public:
void Draw(UIContext &dc) override;
std::string DescribeText() const override;
bool Key(const KeyInput &input) override;
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Update() override;
void GetContentDimensions(const UIContext &dc, float &w, float &h) const override;
@ -661,7 +661,7 @@ public:
TriggerButton(uint32_t *bitField, uint32_t bit, ImageID imageBackground, ImageID imageForeground, LayoutParams *layoutParams)
: View(layoutParams), down_(0.0), bitField_(bitField), bit_(bit), imageBackground_(imageBackground), imageForeground_(imageForeground) {}
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Draw(UIContext &dc) override;
void GetContentDimensions(const UIContext &dc, float &w, float &h) const override;
@ -755,7 +755,7 @@ public:
: Choice(buttonImage, layoutParams) {}
bool Key(const KeyInput &key) override;
void Touch(const TouchInput &touch) override;
bool Touch(const TouchInput &touch) override;
void FocusChanged(int focusFlags) override;
void Press() { down_ = true; dragging_ = false; }
@ -943,7 +943,7 @@ public:
void Draw(UIContext &dc) override;
std::string DescribeText() const override;
bool Key(const KeyInput &key) override;
void Touch(const TouchInput &touch) override;
bool Touch(const TouchInput &touch) override;
Event OnTextChange;
Event OnEnter;

View File

@ -87,13 +87,20 @@ void ViewGroup::PersistData(PersistStatus status, std::string anonId, PersistMap
}
}
void ViewGroup::Touch(const TouchInput &input) {
bool ViewGroup::Touch(const TouchInput &input) {
std::lock_guard<std::mutex> guard(modifyLock_);
bool any = false;
for (auto iter = views_.begin(); iter != views_.end(); ++iter) {
// TODO: If there is a transformation active, transform input coordinates accordingly.
if ((*iter)->GetVisibility() == V_VISIBLE)
(*iter)->Touch(input);
if ((*iter)->GetVisibility() == V_VISIBLE) {
bool touch = (*iter)->Touch(input);
any = any || touch;
if (exclusiveTouch_ && touch) {
break;
}
}
}
return any;
}
void ViewGroup::Query(float x, float y, std::vector<View *> &list) {
@ -850,7 +857,7 @@ bool ScrollView::Key(const KeyInput &input) {
const float friction = 0.92f;
const float stop_threshold = 0.1f;
void ScrollView::Touch(const TouchInput &input) {
bool ScrollView::Touch(const TouchInput &input) {
if ((input.flags & TOUCH_DOWN) && scrollTouchId_ == -1) {
scrollStart_ = scrollPos_;
inertia_ = 0.0f;
@ -884,7 +891,9 @@ void ScrollView::Touch(const TouchInput &input) {
}
if (!(input.flags & TOUCH_DOWN) || bounds_.Contains(input.x, input.y)) {
ViewGroup::Touch(input2);
return ViewGroup::Touch(input2);
} else {
return false;
}
}

View File

@ -28,7 +28,7 @@ public:
// Pass through external events to children.
virtual bool Key(const KeyInput &input) override;
virtual void Touch(const TouchInput &input) override;
virtual bool Touch(const TouchInput &input) override;
virtual void Axis(const AxisInput &input) override;
// By default, a container will layout to its own bounds.
@ -77,6 +77,7 @@ public:
int GetNumSubviews() const { return (int)views_.size(); }
void SetHasDropShadow(bool has) { hasDropShadow_ = has; }
void SetDropShadowExpand(float s) { dropShadowExpand_ = s; }
void SetExclusiveTouch(bool exclusive) { exclusiveTouch_ = exclusive; }
void Lock() { modifyLock_.lock(); }
void Unlock() { modifyLock_.unlock(); }
@ -96,6 +97,7 @@ protected:
float dropShadowExpand_ = 0.0f;
bool hasDropShadow_ = false;
bool clip_ = false;
bool exclusiveTouch_ = false;
};
// A frame layout contains a single child view (normally).
@ -270,7 +272,7 @@ public:
void Layout() override;
bool Key(const KeyInput &input) override;
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Draw(UIContext &dc) override;
std::string DescribeLog() const override { return "ScrollView: " + View::DescribeLog(); }

View File

@ -911,10 +911,10 @@ static ConfigSetting graphicsSettings[] = {
ConfigSetting("FullScreenMulti", &g_Config.bFullScreenMulti, false),
#endif
ConfigSetting("SmallDisplayZoomType", &g_Config.iSmallDisplayZoomType, &DefaultZoomType, true, true),
ConfigSetting("SmallDisplayOffsetX", &g_Config.fSmallDisplayOffsetX, 0.5f, true, true),
ConfigSetting("SmallDisplayOffsetY", &g_Config.fSmallDisplayOffsetY, 0.5f, true, true),
ConfigSetting("SmallDisplayZoomLevel", &g_Config.fSmallDisplayZoomLevel, 1.0f, true, true),
ConfigSetting("DisplayOffsetX", &g_Config.fDisplayOffsetX, 0.5f, true, true),
ConfigSetting("DisplayOffsetY", &g_Config.fDisplayOffsetY, 0.5f, true, true),
ConfigSetting("DisplayScale", &g_Config.fDisplayScale, 1.0f, true, true),
ConfigSetting("DisplayAspectRatio", &g_Config.fDisplayAspectRatio, 1.0f, true, true),
ConfigSetting("ImmersiveMode", &g_Config.bImmersiveMode, true, true, true),
ConfigSetting("SustainedPerformanceMode", &g_Config.bSustainedPerformanceMode, false, true, true),
ConfigSetting("IgnoreScreenInsets", &g_Config.bIgnoreScreenInsets, true, true, false),

View File

@ -171,11 +171,14 @@ public:
int iTexFiltering; // 1 = auto , 2 = nearest , 3 = linear , 4 = auto max quality
int iBufFilter; // 1 = linear, 2 = nearest
int iSmallDisplayZoomType; // Used to fit display into screen 0 = stretch, 1 = partial stretch, 2 = auto scaling, 3 = manual scaling.
float fSmallDisplayOffsetX; // Along with Y it goes from 0.0 to 1.0, XY (0.5, 0.5) = center of the screen
float fSmallDisplayOffsetY;
float fSmallDisplayZoomLevel; //This is used for zoom values, both in and out.
bool bImmersiveMode; // Mode on Android Kitkat 4.4 that hides the back button etc.
bool bDisplayStretch; // Automatically matches the aspect ratio of the window.
float fDisplayOffsetX;
float fDisplayOffsetY;
float fDisplayScale; // Relative to the most constraining axis (x or y).
float fDisplayAspectRatio; // Stored relative to the PSP's native ratio, so 1.0 is the normal pixel aspect ratio.
bool bImmersiveMode; // Mode on Android Kitkat 4.4 and later that hides the back button etc.
bool bSustainedPerformanceMode; // Android: Slows clocks down to avoid overheating/speed fluctuations.
bool bIgnoreScreenInsets; // Android: Center screen disregarding insets if this is enabled.
bool bVSync;

View File

@ -2045,15 +2045,17 @@ static u32 sceIoDevctl(const char *name, int cmd, u32 argAddr, int argLen, u32 o
PSP_CoreParameter().fastForward = false;
return 0;
case EMULATOR_DEVCTL__GET_ASPECT_RATIO:
if (Memory::IsValidAddress(outPtr))
{
float ar = static_cast<float>(PSP_CoreParameter().pixelWidth) / static_cast<float>(PSP_CoreParameter().pixelHeight);
if (Memory::IsValidAddress(outPtr)) {
float ar = g_Config.fDisplayAspectRatio * (480.0f / 272.0f);
Memory::Write_U32(*(reinterpret_cast<u32*>(&ar)), outPtr);
}
return 0;
case EMULATOR_DEVCTL__GET_SCALE:
if (Memory::IsValidAddress(outPtr))
Memory::Write_U32(static_cast<float>(dp_xres) / 480.0f, outPtr);
if (Memory::IsValidAddress(outPtr)) {
// TODO: Maybe do something more sophisticated taking the longest side and screen rotation
// into account, etc.
Memory::Write_U32(static_cast<float>(dp_xres) * g_Config.fDisplayScale / 480.0f, outPtr);
}
return 0;
case EMULATOR_DEVCTL__GET_LTRIGGER:
//To-do

View File

@ -75,73 +75,66 @@ void CenterDisplayOutputRect(FRect *rc, float origW, float origH, const FRect &f
bool rotated = rotation == ROTATION_LOCKED_VERTICAL || rotation == ROTATION_LOCKED_VERTICAL180;
SmallDisplayZoom zoomType = (SmallDisplayZoom)g_Config.iSmallDisplayZoomType;
bool stretch = g_Config.bDisplayStretch;
float offsetX = g_Config.fDisplayOffsetX;
float offsetY = g_Config.fDisplayOffsetY;
// Have to invert Y for GL
if (GetGPUBackend() == GPUBackend::OPENGL) {
offsetY = offsetY * -1.0f;
}
float scale = g_Config.fDisplayScale;
float aspectRatioAdjust = g_Config.fDisplayAspectRatio;
if (IsVREnabled()) {
zoomType = SmallDisplayZoom::STRETCH;
stretch = 0;
rotated = false;
offsetX = 0.0f;
offsetY = 0.0f;
scale = 1.0f;
aspectRatioAdjust = 1.0f;
}
if (zoomType == SmallDisplayZoom::STRETCH) {
outW = frame.w;
outH = frame.h;
} else {
if (zoomType == SmallDisplayZoom::MANUAL) {
float offsetX = (g_Config.fSmallDisplayOffsetX - 0.5f) * 2.0f * frame.w + frame.x;
float offsetY = (g_Config.fSmallDisplayOffsetY - 0.5f) * 2.0f * frame.h + frame.y;
// Have to invert Y for GL
if (GetGPUBackend() == GPUBackend::OPENGL) {
offsetY = offsetY * -1.0f;
}
float customZoom = g_Config.fSmallDisplayZoomLevel;
float smallDisplayW = origW * customZoom;
float smallDisplayH = origH * customZoom;
if (!rotated) {
rc->x = floorf(((frame.w - smallDisplayW) / 2.0f) + offsetX);
rc->y = floorf(((frame.h - smallDisplayH) / 2.0f) + offsetY);
rc->w = floorf(smallDisplayW);
rc->h = floorf(smallDisplayH);
return;
} else {
rc->x = floorf(((frame.w - smallDisplayH) / 2.0f) + offsetX);
rc->y = floorf(((frame.h - smallDisplayW) / 2.0f) + offsetY);
rc->w = floorf(smallDisplayH);
rc->h = floorf(smallDisplayW);
return;
}
} else if (zoomType == SmallDisplayZoom::AUTO) {
// Stretch to 1080 for 272*4. But don't distort if not widescreen (i.e. ultrawide of halfwide.)
float pixelCrop = frame.h / 270.0f;
float resCommonWidescreen = pixelCrop - floor(pixelCrop);
if (!rotated && resCommonWidescreen == 0.0f && frame.w >= pixelCrop * 480.0f) {
rc->x = floorf((frame.w - pixelCrop * 480.0f) * 0.5f + frame.x);
rc->y = floorf(-pixelCrop + frame.y);
rc->w = floorf(pixelCrop * 480.0f);
rc->h = floorf(pixelCrop * 272.0f);
return;
}
// Ye olde 1080p hack, new version: If everything is setup to exactly cover the screen (defaults), and the screen display aspect ratio is 16:9,
// stretch the PSP's aspect ratio veeery slightly to fill it completely.
if (scale == 1.0f && offsetX == 0.5f && offsetY == 0.5f && aspectRatioAdjust == 1.0f) {
if (fabsf(frame.w / frame.h - 16.0f / 9.0f) < 0.0001f) {
aspectRatioAdjust = (frame.w / frame.h) / (480.0f / 272.0f);
}
}
float origRatio = !rotated ? origW / origH : origH / origW;
float frameRatio = frame.w / frame.h;
float origRatio = !rotated ? origW / origH : origH / origW;
float frameRatio = frame.w / frame.h;
if (origRatio > frameRatio) {
// Image is wider than frame. Center vertically.
outW = frame.w;
outH = frame.w / origRatio;
// Stretch a little bit
if (!rotated && zoomType == SmallDisplayZoom::PARTIAL_STRETCH)
outH = (frame.h + outH) / 2.0f; // (408 + 720) / 2 = 564
if (stretch) {
// Automatically set aspect ratio to match the display, IF the rotation matches the output display ratio! Otherwise, just
// sets standard aspect ratio because actually stretching will just look silly.
bool globalRotated = g_display_rotation == DisplayRotation::ROTATE_90 || g_display_rotation == DisplayRotation::ROTATE_270;
if (rotated == dp_yres > dp_xres) {
origRatio = frameRatio;
} else {
// Image is taller than frame. Center horizontally.
outW = frame.h * origRatio;
outH = frame.h;
if (rotated && zoomType == SmallDisplayZoom::PARTIAL_STRETCH)
outW = (frame.h + outH) / 2.0f; // (408 + 720) / 2 = 564
origRatio *= aspectRatioAdjust;
}
} else {
origRatio *= aspectRatioAdjust;
}
rc->x = floorf((frame.w - outW) / 2.0f + frame.x);
rc->y = floorf((frame.h - outH) / 2.0f + frame.y);
float scaledWidth = frame.w * scale;
float scaledHeight = frame.h * scale;
if (origRatio > frameRatio) {
// Image is wider than frame. Center vertically.
outW = scaledWidth;
outH = scaledWidth / origRatio;
} else {
// Image is taller than frame. Center horizontally.
outW = scaledHeight * origRatio;
outH = scaledHeight;
}
rc->x = floorf(frame.x + frame.w * offsetX - outW * 0.5f);
rc->y = floorf(frame.y + frame.h * offsetY - outH * 0.5f);
rc->w = floorf(outW);
rc->h = floorf(outH);
}

View File

@ -122,6 +122,9 @@ void DrawEngineGLES::InitDeviceObjects() {
}
void DrawEngineGLES::DestroyDeviceObjects() {
if (!draw_) {
return;
}
draw_->SetInvalidationCallback(InvalidationCallback());
// Beware: this could be called twice in a row, sometimes.

View File

@ -589,7 +589,7 @@ void MainWindow::createMenus()
MenuTree* gameSettingsMenu = new MenuTree(this, menuBar(), QT_TR_NOOP("&Game settings"));
gameSettingsMenu->add(new MenuAction(this, SLOT(languageAct()), QT_TR_NOOP("La&nguage...")));
gameSettingsMenu->add(new MenuAction(this, SLOT(controlMappingAct()), QT_TR_NOOP("C&ontrol mapping...")));
gameSettingsMenu->add(new MenuAction(this, SLOT(displayLayoutEditorAct()), QT_TR_NOOP("Display layout editor...")));
gameSettingsMenu->add(new MenuAction(this, SLOT(displayLayoutEditorAct()), QT_TR_NOOP("Display layout & effects...")));
gameSettingsMenu->add(new MenuAction(this, SLOT(moreSettingsAct()), QT_TR_NOOP("&More settings...")));
gameSettingsMenu->addSeparator();
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)

View File

@ -130,10 +130,6 @@ private slots:
}
void windowGroup_triggered(QAction *action) { SetWindowScale(action->data().toInt()); }
void displayLayoutGroup_triggered(QAction *action) {
g_Config.iSmallDisplayZoomType = action->data().toInt();
NativeMessageReceived("gpu_displayResized", "");
}
void autoframeskipAct() {
g_Config.bAutoFrameSkip = !g_Config.bAutoFrameSkip;
if (g_Config.bSkipBufferEffects) {

View File

@ -18,6 +18,10 @@ enum Command {
CopyMissingLines {},
CommentUnknownLines {},
RemoveUnknownLines {},
AddNewKey {
section: String,
key: String,
},
MoveKey {
old: String,
new: String,
@ -89,6 +93,15 @@ fn remove_key(target_ini: &mut IniFile, section: &str, key: &str) -> io::Result<
Ok(())
}
fn add_new_key(target_ini: &mut IniFile, section: &str, key: &str) -> io::Result<()> {
if let Some(section) = target_ini.get_section_mut(section) {
let _ = section.insert_line_if_missing(&format!("{} = {}", key, key));
} else {
println!("No section {}", section);
}
Ok(())
}
fn main() {
let opt = Opt::from_args();
@ -97,15 +110,15 @@ fn main() {
let mut filenames = args;
let root = "../../assets/lang";
let reference_file = "en_US.ini";
let reference_ini_filename = "en_US.ini";
let reference_ini = IniFile::parse(&format!("{}/{}", root, reference_file)).unwrap();
let mut reference_ini = IniFile::parse(&format!("{}/{}", root, reference_ini_filename)).unwrap();
if filenames.is_empty() {
// Grab them all.
for path in std::fs::read_dir(root).unwrap() {
let path = path.unwrap();
if path.file_name() == reference_file {
if path.file_name() == reference_ini_filename {
continue;
}
let filename = path.file_name();
@ -118,6 +131,7 @@ fn main() {
}
for filename in filenames {
let reference_ini = &reference_ini;
if filename == "langtool" {
// Get this from cargo run for some reason.
continue;
@ -137,12 +151,16 @@ fn main() {
Command::RemoveUnknownLines {} => {
deal_with_unknown_lines(&reference_ini, &mut target_ini, true).unwrap();
}
Command::AddNewKey {
ref section,
ref key,
} => add_new_key(&mut target_ini, section, key).unwrap(),
Command::MoveKey {
ref old,
ref new,
ref key,
} => {
move_key(&mut target_ini, &old, &new, &key).unwrap();
move_key(&mut target_ini, old, new, key).unwrap();
}
Command::RemoveKey {
ref section,
@ -155,5 +173,31 @@ fn main() {
target_ini.write().unwrap();
}
println!("Langtool processing {}", reference_ini_filename);
// Some commands also apply to the reference ini.
match opt.cmd {
Command::AddNewKey {
ref section,
ref key,
} => {
add_new_key(&mut reference_ini, section, key).unwrap();
}
Command::MoveKey {
ref old,
ref new,
ref key,
} => {
move_key(&mut reference_ini, old, new, key).unwrap();
}
Command::RemoveKey {
ref section,
ref key,
} => {
remove_key(&mut reference_ini, section, key).unwrap();
}
_ => {}
}
// println!("{:#?}", target_ini);
}

View File

@ -55,6 +55,63 @@ 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) {}
bool 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;
}
return true;
}
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,81 +139,10 @@ void DisplayLayoutScreen::DrawBackground(UIContext &dc) {
}
}
bool DisplayLayoutScreen::touch(const TouchInput &touch) {
UIScreen::touch(touch);
using namespace UI;
int mode = mode_ ? mode_->GetSelection() : 0;
if (g_Config.iSmallDisplayZoomType == (int)SmallDisplayZoom::AUTO) {
mode = -1;
}
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.fSmallDisplayOffsetX = startDisplayOffsetX_ + relativeTouchX * 0.5f / screenBounds.w;
g_Config.fSmallDisplayOffsetY = startDisplayOffsetY_ + relativeTouchY * 0.5f / 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.fSmallDisplayZoomLevel = startScale_ * powf(2.0f, diffYProp);
break;
}
}
}
if ((touch.flags & TOUCH_DOWN) != 0 && !dragging_) {
dragging_ = true;
startX_ = touch.x;
startY_ = touch.y;
startDisplayOffsetX_ = g_Config.fSmallDisplayOffsetX;
startDisplayOffsetY_ = g_Config.fSmallDisplayOffsetY;
startScale_ = g_Config.fSmallDisplayZoomLevel;
}
if ((touch.flags & TOUCH_UP) != 0 && dragging_) {
dragging_ = false;
}
return true;
}
void DisplayLayoutScreen::onFinish(DialogResult reason) {
g_Config.Save("DisplayLayoutScreen::onFinish");
}
UI::EventReturn DisplayLayoutScreen::OnCenter(UI::EventParams &e) {
g_Config.fSmallDisplayOffsetX = 0.5f;
g_Config.fSmallDisplayOffsetY = 0.5f;
RecreateViews();
return UI::EVENT_DONE;
};
UI::EventReturn DisplayLayoutScreen::OnZoomTypeChange(UI::EventParams &e) {
switch (g_Config.iSmallDisplayZoomType) {
case (int)SmallDisplayZoom::AUTO:
case (int)SmallDisplayZoom::PARTIAL_STRETCH:
case (int)SmallDisplayZoom::STRETCH:
g_Config.fSmallDisplayOffsetX = 0.5f;
g_Config.fSmallDisplayOffsetY = 0.5f;
break;
default:
// Not SmallDisplayZoom::MANUAL
break;
}
RecreateViews();
return UI::EVENT_DONE;
};
void DisplayLayoutScreen::dialogFinished(const Screen *dialog, DialogResult result) {
RecreateViews();
}
@ -204,71 +190,50 @@ void DisplayLayoutScreen::CreateViews() {
root_ = new AnchorLayout(new LayoutParams(FILL_PARENT, FILL_PARENT));
// Make it so that a touch can only affect one view. Makes manipulating the background through the buttons
// impossible.
root_->SetExclusiveTouch(true);
ScrollView *leftScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(300.0f, FILL_PARENT, 10.f, 10.f, NONE, 10.f, false));
ViewGroup *leftColumn = new LinearLayout(ORIENT_VERTICAL);
leftScrollView->Add(leftColumn);
root_->Add(leftScrollView);
ScrollView *rightScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(300.0f, FILL_PARENT, NONE, 10.f, 10.f, 10.f, false));
ViewGroup *rightColumn = new LinearLayout(ORIENT_VERTICAL);
rightScrollView->Add(rightColumn);
root_->Add(rightScrollView);
// We manually implement insets here for the buttons. This file defied refactoring :(
float leftInset = System_GetPropertyFloat(SYSPROP_DISPLAY_SAFE_INSET_LEFT);
PopupSliderChoiceFloat *aspectRatio = new PopupSliderChoiceFloat(&g_Config.fDisplayAspectRatio, 0.5f, 2.0f, di->T("Aspect Ratio"), screenManager());
leftColumn->Add(aspectRatio);
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;
}
auto stretch = new CheckBox(&g_Config.bDisplayStretch, gr->T("Stretch"));
leftColumn->Add(stretch);
mode_ = nullptr;
if (g_Config.iSmallDisplayZoomType >= (int)SmallDisplayZoom::AUTO) { // Scaling
if (g_Config.iSmallDisplayZoomType == (int)SmallDisplayZoom::AUTO) {
float autoBound = bounds.h / 270.0f;
// Case of screen rotated ~ only works with buffered rendering
if (bRotated_) {
autoBound = bounds.h / 480.0f;
} else { // Without rotation in common cases like 1080p we cut off 2 pixels of height, this reflects other cases
float resCommonWidescreen = autoBound - floor(autoBound);
if (resCommonWidescreen != 0.0f) {
float ratio = bounds.w / bounds.h;
if (ratio < orgRatio) {
autoBound = bounds.w / 480.0f;
}
else {
autoBound = bounds.h / 272.0f;
}
}
}
g_Config.fSmallDisplayZoomLevel = autoBound;
g_Config.fSmallDisplayOffsetX = 0.5f;
g_Config.fSmallDisplayOffsetY = 0.5f;
} else { // Manual Scaling
Choice *center = new Choice(di->T("Center"), "", false, new AnchorLayoutParams(leftColumnWidth, WRAP_CONTENT, 10 + leftInset, NONE, NONE, 74));
center->OnClick.Handle(this, &DisplayLayoutScreen::OnCenter);
root_->Add(center);
float minZoom = 1.0f;
PopupSliderChoiceFloat *zoomlvl = new PopupSliderChoiceFloat(&g_Config.fSmallDisplayZoomLevel, minZoom, 10.0f, di->T("Zoom"), 1.0f, screenManager(), di->T("* PSP res"), new AnchorLayoutParams(leftColumnWidth, WRAP_CONTENT, 10 + leftInset, NONE, NONE, 10 + 64 + 64));
root_->Add(zoomlvl);
mode_ = new ChoiceStrip(ORIENT_VERTICAL, new AnchorLayoutParams(leftColumnWidth, WRAP_CONTENT, 10 + leftInset, NONE, NONE, 158 + 64 + 10));
mode_->AddChoice(di->T("Move"));
mode_->AddChoice(di->T("Resize"));
mode_->SetSelection(0, false);
}
}
if (mode_) {
root_->Add(mode_);
}
static const char *zoomLevels[] = { "Stretching", "Partial Stretch", "Auto Scaling", "Manual Scaling" };
auto zoom = new PopupMultiChoice(&g_Config.iSmallDisplayZoomType, gr->T("Mode"), zoomLevels, 0, ARRAY_SIZE(zoomLevels), gr->GetName(), screenManager(), new AnchorLayoutParams(400, WRAP_CONTENT, bounds.w / 2.0f - 200.0f, NONE, NONE, 10));
zoom->OnChoice.Handle(this, &DisplayLayoutScreen::OnZoomTypeChange);
rightColumn->Add(zoom);
mode_ = new ChoiceStrip(ORIENT_VERTICAL);
mode_->AddChoice(di->T("Move"));
mode_->AddChoice(di->T("Resize"));
mode_->SetSelection(0, false);
leftColumn->Add(mode_);
static const char *displayRotation[] = { "Landscape", "Portrait", "Landscape Reversed", "Portrait Reversed" };
auto rotation = new PopupMultiChoice(&g_Config.iInternalScreenRotation, gr->T("Rotation"), displayRotation, 1, ARRAY_SIZE(displayRotation), co->GetName(), screenManager());
rotation->SetEnabledFunc([] {
return !g_Config.bSkipBufferEffects || g_Config.bSoftwareRendering;
});
rightColumn->Add(rotation);
leftColumn->Add(rotation);
leftColumn->Add(new Spacer(12.0f));
Choice *center = new Choice(di->T("Reset"));
center->OnClick.Add([&](UI::EventParams &) {
g_Config.fDisplayAspectRatio = 1.0f;
g_Config.fDisplayScale = 1.0f;
g_Config.fDisplayOffsetX = 0.5f;
g_Config.fDisplayOffsetY = 0.5f;
return UI::EVENT_DONE;
});
leftColumn->Add(center);
static const char *bufFilters[] = { "Linear", "Nearest", };
rightColumn->Add(new PopupMultiChoice(&g_Config.iBufFilter, gr->T("Screen Scaling Filter"), bufFilters, 1, ARRAY_SIZE(bufFilters), gr->GetName(), screenManager()));
@ -335,4 +300,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)));
}

View File

@ -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;
@ -38,9 +37,6 @@ public:
const char *tag() const override { return "DisplayLayout"; }
protected:
virtual UI::EventReturn OnCenter(UI::EventParams &e);
virtual UI::EventReturn OnZoomTypeChange(UI::EventParams &e);
UI::EventReturn OnPostProcShaderChange(UI::EventParams &e);
void sendMessage(const char *message, const char *value) override;
@ -49,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;
};

View File

@ -45,8 +45,9 @@ GamepadView::GamepadView(const char *key, UI::LayoutParams *layoutParams) : UI::
lastFrameTime_ = time_now_d();
}
void GamepadView::Touch(const TouchInput &input) {
bool GamepadView::Touch(const TouchInput &input) {
secondsWithoutTouch_ = 0.0f;
return true;
}
void GamepadView::Update() {
@ -96,8 +97,8 @@ void MultiTouchButton::GetContentDimensions(const UIContext &dc, float &w, float
}
}
void MultiTouchButton::Touch(const TouchInput &input) {
GamepadView::Touch(input);
bool MultiTouchButton::Touch(const TouchInput &input) {
bool retval = GamepadView::Touch(input);
if ((input.flags & TOUCH_DOWN) && bounds_.Contains(input.x, input.y)) {
pointerDownMask_ |= 1 << input.id;
usedPointerMask |= 1 << input.id;
@ -116,6 +117,7 @@ void MultiTouchButton::Touch(const TouchInput &input) {
pointerDownMask_ = 0;
usedPointerMask = 0;
}
return retval;
}
void MultiTouchButton::Draw(UIContext &dc) {
@ -152,9 +154,9 @@ void MultiTouchButton::Draw(UIContext &dc) {
dc.Draw()->DrawImageRotated(img_, bounds_.centerX(), y, scale, angle_ * (M_PI * 2 / 360.0f), color);
}
void BoolButton::Touch(const TouchInput &input) {
bool BoolButton::Touch(const TouchInput &input) {
bool lastDown = pointerDownMask_ != 0;
MultiTouchButton::Touch(input);
bool retval = MultiTouchButton::Touch(input);
bool down = pointerDownMask_ != 0;
if (down != lastDown) {
@ -163,11 +165,12 @@ void BoolButton::Touch(const TouchInput &input) {
params.a = down;
OnChange.Trigger(params);
}
return retval;
}
void PSPButton::Touch(const TouchInput &input) {
bool PSPButton::Touch(const TouchInput &input) {
bool lastDown = pointerDownMask_ != 0;
MultiTouchButton::Touch(input);
bool retval = MultiTouchButton::Touch(input);
bool down = pointerDownMask_ != 0;
if (down && !lastDown) {
if (g_Config.bHapticFeedback) {
@ -177,6 +180,7 @@ void PSPButton::Touch(const TouchInput &input) {
} else if (lastDown && !down) {
__CtrlButtonUp(pspButtonBit_);
}
return retval;
}
bool ComboKey::IsDown() {
@ -192,10 +196,10 @@ void ComboKey::GetContentDimensions(const UIContext &dc, float &w, float &h) con
}
}
void ComboKey::Touch(const TouchInput &input) {
bool ComboKey::Touch(const TouchInput &input) {
using namespace CustomKey;
bool lastDown = pointerDownMask_ != 0;
MultiTouchButton::Touch(input);
bool retval = MultiTouchButton::Touch(input);
bool down = pointerDownMask_ != 0;
if (down && !lastDown) {
@ -220,6 +224,7 @@ void ComboKey::Touch(const TouchInput &input) {
}
on_ = false;
}
return retval;
}
void ComboKey::Update() {
@ -272,8 +277,8 @@ void PSPDpad::GetContentDimensions(const UIContext &dc, float &w, float &h) cons
}
}
void PSPDpad::Touch(const TouchInput &input) {
GamepadView::Touch(input);
bool PSPDpad::Touch(const TouchInput &input) {
bool retval = GamepadView::Touch(input);
if (input.flags & TOUCH_DOWN) {
if (dragPointerId_ == -1 && bounds_.Contains(input.x, input.y)) {
@ -297,6 +302,7 @@ void PSPDpad::Touch(const TouchInput &input) {
ProcessTouch(input.x, input.y, false);
}
}
return retval;
}
void PSPDpad::ProcessTouch(float x, float y, bool down) {
@ -438,8 +444,8 @@ void PSPStick::Draw(UIContext &dc) {
dc.Draw()->DrawImage(stickImageIndex_, stickX + dx * stick_size_ * scale_, stickY - dy * stick_size_ * scale_, 1.0f * scale_ * headScale, colorBg, ALIGN_CENTER);
}
void PSPStick::Touch(const TouchInput &input) {
GamepadView::Touch(input);
bool PSPStick::Touch(const TouchInput &input) {
bool retval = GamepadView::Touch(input);
if (input.flags & TOUCH_RELEASE_ALL) {
dragPointerId_ = -1;
centerX_ = bounds_.centerX();
@ -447,7 +453,7 @@ void PSPStick::Touch(const TouchInput &input) {
__CtrlSetAnalogXY(stick_, 0.0f, 0.0f);
usedPointerMask = 0;
analogPointerMask = 0;
return;
return retval;
}
if (input.flags & TOUCH_DOWN) {
float fac = 0.5f*(stick_ ? g_Config.fRightStickHeadScale : g_Config.fLeftStickHeadScale)-0.5f;
@ -463,11 +469,13 @@ void PSPStick::Touch(const TouchInput &input) {
usedPointerMask |= 1 << input.id;
analogPointerMask |= 1 << input.id;
ProcessTouch(input.x, input.y, true);
retval = true;
}
}
if (input.flags & TOUCH_MOVE) {
if (input.id == dragPointerId_) {
ProcessTouch(input.x, input.y, true);
retval = true;
}
}
if (input.flags & TOUCH_UP) {
@ -478,8 +486,10 @@ void PSPStick::Touch(const TouchInput &input) {
usedPointerMask &= ~(1 << input.id);
analogPointerMask &= ~(1 << input.id);
ProcessTouch(input.x, input.y, false);
retval = true;
}
}
return retval;
}
void PSPStick::ProcessTouch(float x, float y, bool down) {
@ -542,8 +552,8 @@ void PSPCustomStick::Draw(UIContext &dc) {
dc.Draw()->DrawImage(stickImageIndex_, stickX + dx * stick_size_ * scale_, stickY - dy * stick_size_ * scale_, 1.0f*scale_*g_Config.fRightStickHeadScale, colorBg, ALIGN_CENTER);
}
void PSPCustomStick::Touch(const TouchInput &input) {
GamepadView::Touch(input);
bool PSPCustomStick::Touch(const TouchInput &input) {
bool retval = GamepadView::Touch(input);
if (input.flags & TOUCH_RELEASE_ALL) {
dragPointerId_ = -1;
centerX_ = bounds_.centerX();
@ -552,7 +562,7 @@ void PSPCustomStick::Touch(const TouchInput &input) {
posY_ = 0.0f;
usedPointerMask = 0;
analogPointerMask = 0;
return;
return false;
}
if (input.flags & TOUCH_DOWN) {
float fac = 0.5f*g_Config.fRightStickHeadScale-0.5f;
@ -568,11 +578,13 @@ void PSPCustomStick::Touch(const TouchInput &input) {
usedPointerMask |= 1 << input.id;
analogPointerMask |= 1 << input.id;
ProcessTouch(input.x, input.y, true);
retval = true;
}
}
if (input.flags & TOUCH_MOVE) {
if (input.id == dragPointerId_) {
ProcessTouch(input.x, input.y, true);
retval = true;
}
}
if (input.flags & TOUCH_UP) {
@ -583,8 +595,10 @@ void PSPCustomStick::Touch(const TouchInput &input) {
usedPointerMask &= ~(1 << input.id);
analogPointerMask &= ~(1 << input.id);
ProcessTouch(input.x, input.y, false);
retval = true;
}
}
return retval;
}
void PSPCustomStick::ProcessTouch(float x, float y, bool down) {
@ -890,17 +904,16 @@ UI::ViewGroup *CreatePadLayout(float xres, float yres, bool *pause, bool showPau
return root;
}
void GestureGamepad::Touch(const TouchInput &input) {
bool GestureGamepad::Touch(const TouchInput &input) {
if (usedPointerMask & (1 << input.id)) {
if (input.id == dragPointerId_)
dragPointerId_ = -1;
return;
return false;
}
if (input.flags & TOUCH_RELEASE_ALL) {
dragPointerId_ = -1;
return;
return false;
}
if (input.flags & TOUCH_DOWN) {
@ -940,6 +953,7 @@ void GestureGamepad::Touch(const TouchInput &input) {
}
}
}
return true;
}
void GestureGamepad::Update() {

View File

@ -29,7 +29,7 @@ class GamepadView : public UI::View {
public:
GamepadView(const char *key, UI::LayoutParams *layoutParams);
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
bool Key(const KeyInput &input) override {
return false;
}
@ -50,7 +50,7 @@ public:
: GamepadView(key, layoutParams), scale_(scale), bgImg_(bgImg), bgDownImg_(bgDownImg), img_(img) {
}
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Draw(UIContext &dc) override;
void GetContentDimensions(const UIContext &dc, float &w, float &h) const override;
virtual bool IsDown() { return pointerDownMask_ != 0; }
@ -78,7 +78,7 @@ public:
: MultiTouchButton(key, bgImg, bgDownImg, img, scale, layoutParams), value_(value) {
}
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
bool IsDown() override { return *value_; }
UI::Event OnChange;
@ -92,7 +92,7 @@ public:
PSPButton(int pspButtonBit, const char *key, ImageID bgImg, ImageID bgDownImg, ImageID img, float scale, UI::LayoutParams *layoutParams)
: MultiTouchButton(key, bgImg, bgDownImg, img, scale, layoutParams), pspButtonBit_(pspButtonBit) {
}
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
bool IsDown() override;
private:
@ -103,7 +103,7 @@ class PSPDpad : public GamepadView {
public:
PSPDpad(ImageID arrowIndex, const char *key, ImageID arrowDownIndex, ImageID overlayIndex, float scale, float spacing, UI::LayoutParams *layoutParams);
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Draw(UIContext &dc) override;
void GetContentDimensions(const UIContext &dc, float &w, float &h) const override;
@ -124,7 +124,7 @@ class PSPStick : public GamepadView {
public:
PSPStick(ImageID bgImg, const char *key, ImageID stickImg, ImageID stickDownImg, int stick, float scale, UI::LayoutParams *layoutParams);
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Draw(UIContext &dc) override;
void GetContentDimensions(const UIContext &dc, float &w, float &h) const override;
@ -149,7 +149,7 @@ class PSPCustomStick : public PSPStick {
public:
PSPCustomStick(ImageID bgImg, const char *key, ImageID stickImg, ImageID stickDownImg, float scale, UI::LayoutParams *layoutParams);
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Draw(UIContext &dc) override;
private:
@ -172,7 +172,7 @@ public:
ComboKey(uint64_t pspButtonBit, const char *key, bool toggle, bool repeat, ControlMapper* controllMapper, ImageID bgImg, ImageID bgDownImg, ImageID img, float scale, bool invertedContextDimension, UI::LayoutParams *layoutParams)
: MultiTouchButton(key, bgImg, bgDownImg, img, scale, layoutParams), pspButtonBit_(pspButtonBit), toggle_(toggle), repeat_(repeat), controlMapper_(controllMapper), on_(false), invertedContextDimension_(invertedContextDimension) {
}
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Update() override;
bool IsDown() override;
@ -191,7 +191,7 @@ class GestureGamepad : public UI::View {
public:
GestureGamepad(ControlMapper* controllMapper) : controlMapper_(controllMapper) {};
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void Update() override;
protected:

View File

@ -136,8 +136,8 @@ public:
void SetHoldEnabled(bool hold) {
holdEnabled_ = hold;
}
void Touch(const TouchInput &input) override {
UI::Clickable::Touch(input);
bool Touch(const TouchInput &input) override {
bool retval = UI::Clickable::Touch(input);
hovering_ = bounds_.Contains(input.x, input.y);
if (hovering_ && (input.flags & TOUCH_DOWN)) {
holdStart_ = time_now_d();
@ -145,6 +145,7 @@ public:
if (input.flags & TOUCH_UP) {
holdStart_ = 0;
}
return retval;
}
bool Key(const KeyInput &key) override {

View File

@ -359,7 +359,7 @@ public:
: UI::AnchorLayout(layoutParams) {
}
void Touch(const TouchInput &input) override;
bool Touch(const TouchInput &input) override;
void CreateViews();
bool HasCreatedViews() const {
return !controls_.empty();
@ -384,7 +384,7 @@ static Point ClampTo(const Point &p, const Bounds &b) {
return Point(clamp_value(p.x, b.x, b.x + b.w), clamp_value(p.y, b.y, b.y + b.h));
}
void ControlLayoutView::Touch(const TouchInput &touch) {
bool ControlLayoutView::Touch(const TouchInput &touch) {
using namespace UI;
if ((touch.flags & TOUCH_MOVE) && pickedControl_ != nullptr) {
@ -452,6 +452,7 @@ void ControlLayoutView::Touch(const TouchInput &touch) {
pickedControl_->SavePosition();
pickedControl_ = 0;
}
return true;
}
void ControlLayoutView::CreateViews() {

View File

@ -464,6 +464,7 @@ Aggressive = ‎عنيف
Alternative Speed = سرعة ثانوية (في %, 0 = ‎غير محدود)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = ‎فلتر الحواف
Aspect Ratio = Aspect Ratio
Auto = ‎تلقائي
Auto (1:1) = ‎تلقائي (1:1)
Auto (same as Rendering) = ‎تلقائي (مثل حجم التصيير)
@ -554,7 +555,7 @@ Software Skinning = ‎طلاء برمجي
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = ‎السرعة
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = ‎المط
Stretch = ‎المط
Texture Filter = ‎منقي الرسوم
Texture Filtering = ‎مفلتر الرسوم
Texture Scaling = ‎تكبير الرسوم

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = Alternative speed (in %, 0 = unlimited)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropic filtering
Aspect Ratio = Aspect Ratio
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Speed
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Texture filtering
Texture Filtering = Texture filtering
Texture Scaling = Texture scaling

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = Алтернативна скорост
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropic филтриране
Aspect Ratio = Aspect Ratio
Auto = Автоматично
Auto (1:1) = Автоматично (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Скорост
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Текстурно филтриране
Texture Filtering = Текстурно филтриране
Texture Scaling = Текстурно мащабиране

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = Alternative speed (in %, 0 = unlimited)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Filtrat anisotròpic
Aspect Ratio = Aspect Ratio
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Speed
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Texture filtering
Texture Filtering = Texture filtering
Texture Scaling = Texture scaling

View File

@ -456,6 +456,7 @@ Aggressive = Agresivní
Alternative Speed = Alternativní rychlost (v %, 0 = neomezeno)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anizotropní filtrování
Aspect Ratio = Aspect Ratio
Auto = Automaticky
Auto (1:1) = Automatické (1:1)
Auto (same as Rendering) = Automaticky (stejné jako rozlišení vykreslování)
@ -546,7 +547,7 @@ Software Skinning = Textury aplikuje software
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Rychlost
Speed Hacks = Speed Hacks (Mohou způsobit problémy)
Stretching = Roztažení
Stretch = Roztažení
Texture Filter = Filtr textur
Texture Filtering = Filtrování textur
Texture Scaling = Změna velikosti textur

View File

@ -456,6 +456,7 @@ Aggressive = Aggressiv
Alternative Speed = Alternativ hastighed (i %, 0 = ubegrænset)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropisk filtrering
Aspect Ratio = Aspect Ratio
Auto = Automatisk
Auto (1:1) = Automatisk (1:1)
Auto (same as Rendering) = Automatisk (Samme som renderingsopløsning)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Kombiner begrænset model tegning af CPU, hurtigere i fleste spil
Speed = Hastighed
Speed Hacks = Speed Hacks (kan give fejl)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Texturfilter
Texture Filtering = Texturfiltrering
Texture Scaling = Texturskalering

View File

@ -456,6 +456,7 @@ Aggressive = Aggressiv
Alternative Speed = Alternative Geschwindigkeit
Alternative Speed 2 = Alternative Geschwindigkeit 2 (in %, 0 = unlimitiert)
Anisotropic Filtering = Anisotropischer Filter
Aspect Ratio = Aspect Ratio
Auto = Automatisch
Auto (1:1) = Automatisch (1:1)
Auto (same as Rendering) = Automatisch (Renderauflösung)
@ -546,7 +547,7 @@ Software Skinning = Software Skinning
SoftwareSkinning Tip = Reduziert Grafikbefehle und schneller in Spielen mit erweiterter Skinning-Technik, in anderen Spielen langsamer
Speed = Geschwindigkeit
Speed Hacks = Speed Hacks (kann zu Fehlern führen)
Stretching = Strecken
Stretch = Strecken
Texture Filter = Texturfilter
Texture Filtering = Texturfilterung
Texture Scaling = Texturskalierung

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = Lassi to leko'napa
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Panyaring Anisotropic
Aspect Ratio = Aspect Ratio
Auto = Ia mesa
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Lassinna
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Panyaring Texture
Texture Filtering = Saring i Texture
Texture Scaling = Petonggoi Texture

View File

@ -173,6 +173,7 @@ File = &File
Frame Skipping = &Frame skipping
Frame Skipping Type = Frame skipping type
Fullscreen = Fu&llscreen
Geometry shader culling = Geometry shader culling
Game Settings = &Game settings
GE Debugger... = GE debugge&r...
GitHub = Git&Hub
@ -256,7 +257,6 @@ DevMenu = DevMenu
Disabled JIT functionality = Disabled JIT functionality
Draw Frametimes Graph = Draw frametimes graph
Dump Decrypted Eboot = Dump decrypted EBOOT.BIN on game boot
Dump Frame GPU Commands = Dump frame GPU commands
Enable driver bug workarounds = Enable driver bug workarounds
Enable Logging = Enable debug logging
Enter address = Enter address
@ -268,8 +268,6 @@ GPU Profile = GPU profile
GPU Log Profiler = GPU Log Profiler
Jit Compare = JIT compare
JIT debug tools = JIT debug tools
Language = Language
Load language ini = Load language ini
Log Dropped Frame Statistics = Log dropped frame statistics
Log Level = Log level
Log View = Log view
@ -285,7 +283,6 @@ RestoreDefaultSettings = Are you sure you want to restore all settings back to t
RestoreGameDefaultSettings = Are you sure you want to restore the game-specific settings\nback to the PPSSPP defaults?
Resume = Resume
Run CPU Tests = Run CPU tests
Save language ini = Save language ini
Save new textures = Save new textures
Shader Viewer = Shader viewer
Show Developer Menu = Show developer menu
@ -514,7 +511,6 @@ Direct3D 11 = Direct3D 11
Disabled = Disabled
Display Layout && Effects = Display layout && effects
Display Resolution (HW scaler) = Display resolution (HW scaler)
Dump next frame to log = Dump next frame to log
Enable Cardboard VR = Enable Cardboard VR
FPS = FPS
Frame Rate Control = Framerate control
@ -564,7 +560,6 @@ Rendering Resolution = Rendering resolution
RenderingMode NonBuffered Tip = Faster, but nothing may draw in some games
Rotation = Rotation
Safe = Safe
Screen layout = Screen layout
Screen Scaling Filter = Screen scaling filter
Show Debug Statistics = Show debug statistics
Show FPS Counter = Show FPS counter
@ -574,7 +569,9 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Speed
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stereo display shader = Stereo display shader
Stereo rendering = Stereo rendering
Stretch = Stretch
Texture Filter = Texture filtering
Texture Filtering = Texture filtering
Texture Scaling = Texture scaling
@ -829,11 +826,13 @@ Bloom = Bloom
Brightness = Brightness
Cartoon = Cartoon
ColorCorrection = Color correction
ColorPreservation = Color preservation
Contrast = Contrast
CRT = CRT scanlines
FXAA = FXAA Antialiasing
Gamma = Gamma
Grayscale = Grayscale
GreenLevel = GreenLevel
Intensity = Intensity
InverseColors = Inverse Colors
Natural = Natural Colors
@ -841,9 +840,11 @@ NaturalA = Natural Colors (no blur)
Off = Off
Power = Power
PSPColor = PSP color
RedBlue = Red/Blue
Saturation = Saturation
Scanlines = Scanlines (CRT)
Sharpen = Sharpen
SideBySide = Side by side (SBS)
SSAA(Gauss) = Supersampling AA (Gauss)
Tex4xBRZ = 4xBRZ
TexMMPX = MMPX
@ -1139,6 +1140,7 @@ Fast Memory = Fast memory (unstable)
Floating symbols = Floating symbols
Force real clock sync (slower, less lag) = Force real clock sync (slower, less lag)
frames, 0:off = frames, 0 = off
Game crashed = Game crashed
Games list settings = Games list settings
General = General
Grid icon size = Grid icon size

View File

@ -456,6 +456,7 @@ Aggressive = Agresivo
Alternative Speed = Velocidad alternativa (%, 0 = ilimitada)
Alternative Speed 2 = Velocidad alternativa 2 (%, 0 = ilimitada)
Anisotropic Filtering = Filtrado anisotrópico
Aspect Ratio = Aspect Ratio
Auto = Automático
Auto (1:1) = Automático (1:1)
Auto (same as Rendering) = Automático (igual a la de renderizado)
@ -546,7 +547,7 @@ Software Skinning = "Skinning" por software
SoftwareSkinning Tip = Reduce la carga de dibujado, rápido en juegos con técnicas de skinning avanzadas, pero lento en otros.
Speed = Velocidad
Speed Hacks = Speed Hacks (causarán errores gráficos)
Stretching = Estirar
Stretch = Estirar
Texture Filter = Filtro de texturas
Texture Filtering = Filtrado de texturas
Texture Scaling = Escalado de texturas

View File

@ -456,6 +456,7 @@ Aggressive = Agresivo
Alternative Speed = Velocidad alternativa (en %, 0 = ilimitada)
Alternative Speed 2 = Velocidad alternativa 2 (en %, 0 = ilimitada)
Anisotropic Filtering = Filtrado Anisotrópico
Aspect Ratio = Aspect Ratio
Auto = Automático
Auto (1:1) = Automático (1:1)
Auto (same as Rendering) = Automático (igual a la de renderizado)
@ -546,7 +547,7 @@ Software Skinning = Skineado por software
SoftwareSkinning Tip = Combina dibujados de modelo de skineado en la CPU. Acelera muchos juegos pero ralentiza otros.
Speed = Velocidad
Speed Hacks = Speed Hacks (puede causar glitches)
Stretching = Estirar
Stretch = Estirar
Texture Filter = Filtro de texturas
Texture Filtering = Filtrado de texturas
Texture Scaling = Escalado de texturas

View File

@ -456,6 +456,7 @@ Aggressive = ‎شدید
Alternative Speed = ‎سرعت ثانویه
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropic فیلتر
Aspect Ratio = Aspect Ratio
Auto = ‎اتوماتیک
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = ‎خودکار (مانند رزولوشن رندرینگ)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = ‎در اکثر بازی ها سریع تر ،CPU دار در skin ترکیب رسم مدل های
Speed = ‎سرعت
Speed Hacks = Speed Hacks (میتواند باعث باگ شود)
Stretching = ‎کشیدن
Stretch = ‎کشیدن
Texture Filter = ‎فیلتر تکسچر
Texture Filtering = ‎فیلتر کردن تکسچر
Texture Scaling = ‎تغییر سایز تکسچر ها

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = Vaihtoehtoinen nopeus
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotrooppisen suodatus
Aspect Ratio = Aspect Ratio
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Nopeus
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Tekstuurisuodatin
Texture Filtering = Tekstuurin suodatus
Texture Scaling = Tekstuurin skaalaus

View File

@ -456,6 +456,7 @@ Aggressive = Agressif
Alternative Speed = Vitesse alternative 1 (en %, 0 = illimitée)
Alternative Speed 2 = Vitesse alternative 2 (en %, 0 = illimitée)
Anisotropic Filtering = Filtrage anisotrope
Aspect Ratio = Aspect Ratio
Auto = Automatique
Auto (1:1) = Automatique (1:1)
Auto (same as Rendering) = Automatique (comme la définition du rendu)
@ -546,7 +547,7 @@ Software Skinning = Enveloppe logicielle
SoftwareSkinning Tip = Combine l'affichage des modèles enveloppés sur le CPU, plus rapide dans la plupart des jeux
Speed = Vitesse
Speed Hacks = Speed Hacks (crée des bugs graphiques)
Stretching = Étirement
Stretch = Étirement
Texture Filter = Filtre de textures
Texture Filtering = Filtrage des textures
Texture Scaling = Mise à l'échelle des textures

View File

@ -456,6 +456,7 @@ Aggressive = Agresivo
Alternative Speed = Velocidade alternativa (%, 0 = ilimitada)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Filtrado anisotrópico
Aspect Ratio = Aspect Ratio
Auto = Automático
Auto (1:1) = Automático (1:1)
Auto (same as Rendering) = Automático (igual á de renderizado)
@ -546,7 +547,7 @@ Software Skinning = «Skinning» por software
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Velocidade
Speed Hacks = Speed Hacks (causarán erros gráficos)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Filtro de texturas
Texture Filtering = Filtrado de texturas
Texture Scaling = Escalado de texturas

View File

@ -456,6 +456,7 @@ Aggressive = Εξαναγκαστική
Alternative Speed = Εναλακτική προβολή ταχύτητας (στα %, 0 = απεριόριστη)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Ανισοτροπικό Φιλτράρισμα
Aspect Ratio = Aspect Ratio
Auto = Αυτόματο
Auto (1:1) = Αυτόματο (1:1)
Auto (same as Rendering) = Αυτόματο (ίσο με την Ανάλυση Απεικόνισης)
@ -546,7 +547,7 @@ Software Skinning = Εκδορά Λογισμικού
SoftwareSkinning Tip = Συνδυασμός μοντέλου στην CPU, γρηγορότερο στα περισσότερα παιχνίδια
Speed = Ταχύτητα
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Επέκταση
Stretch = Επέκταση
Texture Filter = Φίλτρο Υφών
Texture Filtering = Φιλτράρισμα Υφών
Texture Scaling = Κλιμάκωση Υφών

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = הגבלת מהירות
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropic filtering
Aspect Ratio = Aspect Ratio
Auto = אוטומטי
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = מהירות
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stretch = Stretch
Texture Filter = קידוד טקסטורה
Texture Filtering = קידוד טקסטורה
Texture Scaling = מידת טקסטורה

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = תוריהמ תלבגה
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropic filtering
Aspect Ratio = Aspect Ratio
Auto = יטמוטוא
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = תוריהמ
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stretch = Stretch
Texture Filter = הרוטסקט דודיק
Texture Filtering = הרוטסקט דודיק
Texture Scaling = הרוטסקט תדימ

View File

@ -456,6 +456,7 @@ Aggressive = Agresivno
Alternative Speed = Alternativna brzina (u %, 0 = unlimited)
Alternative Speed 2 = Alternativna brzina 2 (u %, 0 = unlimited)
Anisotropic Filtering = Anizotropno filtriranje
Aspect Ratio = Aspect Ratio
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (isto kao Prikazna rezolucija)
@ -546,7 +547,7 @@ Software Skinning = Skiniranje softvera
SoftwareSkinning Tip = Kombiniraj skinirane modele crteža na CPU, brže u većini igara
Speed = Brzina
Speed Hacks = Speed Hacks (može uzrokovati glitcheve)
Stretching = Rastezanje
Stretch = Rastezanje
Texture Filter = Filtar tekstura
Texture Filtering = Filtriranje tekstura
Texture Scaling = Mjerenje tekstura

View File

@ -456,6 +456,7 @@ Aggressive = Agresszív
Alternative Speed = Alternatív sebesség
Alternative Speed 2 = Alternatív sebesség 2 (%-ban, 0 = korlátlan)
Anisotropic Filtering = Anizotropikus szűrés
Aspect Ratio = Aspect Ratio
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (renderelési felbontással megegyező)
@ -546,7 +547,7 @@ Software Skinning = Szoftveres "skinning"
SoftwareSkinning Tip = "Skinning" művelet elvégzése a processzoron. Sok játék esetében gyorsabb.
Speed = Sebesség
Speed Hacks = Speed Hacks (ezek HIBÁKAT OKOZHATNAK)
Stretching = Nyújtás
Stretch = Nyújtás
Texture Filter = Textúra szűrés
Texture Filtering = Textúra szűrés
Texture Scaling = Textúra nagyítás

View File

@ -456,6 +456,7 @@ Aggressive = Agresif
Alternative Speed = Kecepatan alternatif (dalam %, 0 = tak terbatas)
Alternative Speed 2 = Kecepatan alternatif 2 (dalam %, 0 = tak terbatas)
Anisotropic Filtering = Pemfilteran anisotropik
Aspect Ratio = Aspect Ratio
Auto = Otomatis
Auto (1:1) = Otomatis (1:1)
Auto (same as Rendering) = Otomatis (sama dengan resolusi pelukis)
@ -546,7 +547,7 @@ Software Skinning = Pengkulitan perangkat lunak
SoftwareSkinning Tip = Menggabungkan model berkulit pada CPU, lebih cepat di kebanyakan permainan
Speed = Kecepatan
Speed Hacks = Speed Hacks (menyebabkan kecacatan)
Stretching = Peregangan
Stretch = Peregangan
Texture Filter = Filter tekstur
Texture Filtering = Pemfilteran tekstur
Texture Scaling = Penskala tekstur

View File

@ -456,6 +456,7 @@ Aggressive = Aggressivo
Alternative Speed = Velocità Alternativa (in %, 0 = illimitata)
Alternative Speed 2 = Velocità Alternativa 2 (in %, 0 = illimitata)
Anisotropic Filtering = Filtro Anisotropico
Aspect Ratio = Aspect Ratio
Auto = Automatico
Auto (1:1) = Automatico (1:1)
Auto (same as Rendering) = Automatico (stessa risoluzione del rendering)
@ -547,7 +548,7 @@ Software Skinning = Software Skinning
SoftwareSkinning Tip = Combina la visualizzazione di modelli disegnati dalla CPU, più veloce nella maggior parte dei giochi
Speed = Velocità
Speed Hacks = Speed Hacks (causerà dei problemi)
Stretching = Adatta al Display
Stretch = Adatta al Display
Texture Filter = Filtro delle texture
Texture Filtering = Filtraggio delle texture
Texture Scaling = Scalatura delle texture

View File

@ -456,6 +456,7 @@ Aggressive = 最大限
Alternative Speed = カスタム速度1 (%で指定、0 = 無制限)
Alternative Speed 2 = カスタム速度2 (%で指定、0 = 無制限)
Anisotropic Filtering = 異方性フィルタリング
Aspect Ratio = Aspect Ratio
Auto = 自動
Auto (1:1) = 自動 (1:1)
Auto (same as Rendering) = 自動 (レンダリング解像度と同じ)
@ -546,7 +547,7 @@ Software Skinning = ソフトウェアスキニング
SoftwareSkinning Tip = スキンモデルの描画をCPUでまとめて行う。ほとんどのゲームが高速化します
Speed = 速度
Speed Hacks = Speed Hacks (不具合あり)
Stretching = 拡大
Stretch = 拡大
Texture Filter = テクスチャフィルタ
Texture Filtering = テクスチャフィルタリング
Texture Scaling = テクスチャスケーリング

View File

@ -456,6 +456,7 @@ Aggressive = Agresif
Alternative Speed = Kacepetan Alternatif
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Penyaring Anisotropis
Aspect Ratio = Aspect Ratio
Auto = Otomatis
Auto (1:1) = Otomatis (1:1)
Auto (same as Rendering) = Otomatis (padha Rendering)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Kacepetan
Speed Hacks = Speed Hacks (nyebabake glitches)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Penyaring Tekstur
Texture Filtering = Penyaring Tekstur
Texture Scaling = Skala Tekstur

View File

@ -456,6 +456,7 @@ Aggressive = 과격
Alternative Speed = 대체 속도 (%, 0 = 무제한)
Alternative Speed 2 = 대체 속도 2 (%, 0 = 무제한)
Anisotropic Filtering = 비등방성 필터링
Aspect Ratio = Aspect Ratio
Auto = 자동
Auto (1:1) = 자동 (1:1)
Auto (same as Rendering) = 자동 (렌더링 해상도와 동일)
@ -545,7 +546,7 @@ Software Skinning = 소프트웨어 스키닝
SoftwareSkinning Tip = 대부분의 게임에서 더 빠르게 CPU에서 스킨 모델 드로우를 결합합니다.
Speed = 속도
Speed Hacks = Speed Hacks (결함을 일으킬 수 있음)
Stretching = 늘이기
Stretch = 늘이기
Texture Filter = 텍스처 필터링
Texture Filtering = 텍스처 필터링
Texture Scaling = 텍스처 스케일링

View File

@ -456,6 +456,7 @@ Aggressive = ຮຸນແຮງ
Alternative Speed = ຄວາມໄວເສີມ (ໃນ %, 0 = ບໍ່ຈຳກັດ)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = ກຳຈັດຄວາມບໍ່ຄົມຊັດ
Aspect Ratio = Aspect Ratio
Auto = ອັດຕະໂນມັດ
Auto (1:1) = ອັດຕະໂນມັດ (1:1)
Auto (same as Rendering) = ອັດຕະໂນມັດ (ແບບດຽວກັບຄວາມລະອຽດການສະແດງຜົນ)
@ -546,7 +547,7 @@ Software Skinning = ຊ໋ອບແວຣ໌ສກິນນິງ
SoftwareSkinning Tip = ປະສານໂມເດລພື້ນຜິວໃຫ້ຂຽນຜ່ານ CPU, ເກມສ່ວນໃຫຍ່ໃຊ້ແລ້ວໄວຂຶ້ນ
Speed = ຄວາມໄວ
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = ດຶງເຕັມຈໍ
Stretch = ດຶງເຕັມຈໍ
Texture Filter = ໂຕຕອງພື້ນຜິວ
Texture Filtering = ຕອງພື້ນຜິວ
Texture Scaling = ປັບພື້ນຜິວ

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = Alternatyvus greitis (procentais, 0 procentų = neribotas)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = "Anisotropic" filtravimas
Aspect Ratio = Aspect Ratio
Auto = Automatinis
Auto (1:1) = Automatinė (1:1)
Auto (same as Rendering) = Automatinis (kaip Rodymo rezoliucija)
@ -546,7 +547,7 @@ Software Skinning = Programinės įrangos "nulupimas"
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Greitis
Speed Hacks = Speed Hacks (gali sukelti problemų)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Tekstūrų filtravimas
Texture Filtering = Tekstūrų filtravimas
Texture Scaling = Tekstūrų skalė

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = Kelajuan alternatif
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropic filtering
Aspect Ratio = Aspect Ratio
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Pembalutan Perisian
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Laju
Speed Hacks = Speed Hacks (mungkin menyebabkan gangguan)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Penapis Tekstur
Texture Filtering = Penapisan Tekstur
Texture Scaling = Penskalaan Tekstur

View File

@ -456,6 +456,7 @@ Aggressive = Agressief
Alternative Speed = Alternatieve snelheid (in %, 0 = onbeperkt)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropische filter
Aspect Ratio = Aspect Ratio
Auto = Automatisch
Auto (1:1) = Automatisch (1:1)
Auto (same as Rendering) = Auto (renderresolutie)
@ -546,7 +547,7 @@ Software Skinning = Skinning via software
SoftwareSkinning Tip = Vermindert aantal renders en is sneller in games die de geavanceerde skinningtechniek gebruiken, maar voor sommige games trager
Speed = Snelheid
Speed Hacks = Speed Hacks (kan glitches veroorzaken)
Stretching = Uitrekken
Stretch = Uitrekken
Texture Filter = Texturefilter
Texture Filtering = Texturefilter
Texture Scaling = Textures schalen

View File

@ -456,6 +456,7 @@ Aggressive = Aggressive
Alternative Speed = Alternativ hastighet
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropisk filtrering
Aspect Ratio = Aspect Ratio
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (same as rendering resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Hastighet
Speed Hacks = Speed Hacks (can cause rendering errors!)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Tekstur filtrering
Texture Filtering = Tekstur filtrering
Texture Scaling = Teksturskalning

View File

@ -456,6 +456,7 @@ Aggressive = Agresywne
Alternative Speed = Alternatywna prędkość (w %, 0 = bez limitu)
Alternative Speed 2 = Alternatywna prędkość 2 (w %, 0 = bez limitu)
Anisotropic Filtering = Filtrowanie anizotropowe
Aspect Ratio = Aspect Ratio
Auto = Automatyczne
Auto (1:1) = Automatyczna (1:1)
Auto (same as Rendering) = Auto (jak roz. renderowania)
@ -546,7 +547,7 @@ Software Skinning = Programowy skinning
SoftwareSkinning Tip = Łączy na CPU wywołania rysujące modele z animacjami, przyspieszenie w większości gier
Speed = Prędkość (procentowo)
Speed Hacks = Speed Hacks (powodują problemy)
Stretching = Rozciąganie
Stretch = Rozciąganie
Texture Filter = Filtrowanie tekstur
Texture Filtering = Filtrowanie tekstur
Texture Scaling = Skalowanie tekstur

View File

@ -480,6 +480,7 @@ Aggressive = Agressivo
Alternative Speed = Velocidade alternativa (em %, 0 = ilimitada)
Alternative Speed 2 = Velocidade alternativa 2 (em %, 0 = ilimitada)
Anisotropic Filtering = Filtragem anisotrópica
Aspect Ratio = Aspect Ratio
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (a mesma que a da resolução de renderização)
@ -569,7 +570,7 @@ Software Skinning = Skinning via software
SoftwareSkinning Tip = Combina os desenhos dos modelos de skinning na CPU, mais rápido na maioria dos jogos
Speed = Velocidade
Speed Hacks = Speed Hacks (pode causar erros gráficos)
Stretching = Esticamento
Stretch = Esticamento
Texture Filter = Filtragem das texturas
Texture Filtering = Filtragem das texturas
Texture Scaling = Dimensionamento das texturas

View File

@ -480,6 +480,7 @@ Aggressive = Agressivo
Alternative Speed = Velocidade alternativa (em %, 0 = ilimitada)
Alternative Speed 2 = Segunda Velocidade alternativa (em %, 0 = ilimitada)
Anisotropic Filtering = Filtragem anisotrópica
Aspect Ratio = Aspect Ratio
Auto = Automático
Auto (1:1) = Automático (1:1)
Auto (same as Rendering) = Auto (a mesma de que a da resolução de renderização)
@ -569,7 +570,7 @@ Software Skinning = Skinning via software
SoftwareSkinning Tip = Combina os desenhos dos modelos de skinning na CPU, mais rápido na maioria dos jogos
Speed = Velocidade
Speed Hacks = Speed Hacks (pode causar erros gráficos)
Stretching = Esticamento
Stretch = Esticamento
Texture Filter = Filtração das texturas
Texture Filtering = Filtração das texturas
Texture Scaling = Dimensionamento das texturas

View File

@ -456,6 +456,7 @@ Aggressive = Agresiv
Alternative Speed = Viteză alternativă (în %, 0 = nelimitat)
Alternative Speed 2 = Alternative speed 2 (in %, 0 = unlimited)
Anisotropic Filtering = Filtru Anisotropic
Aspect Ratio = Aspect Ratio
Auto = Automat
Auto (1:1) = Automat (1:1)
Auto (same as Rendering) = Automat (la fel ca rezoluția de afișare)
@ -546,7 +547,7 @@ Software Skinning = Skinning cu software
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Viteză
Speed Hacks = Speed Hacks (pot cauza stricăciuni)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Filtru texturi
Texture Filtering = Filtrare texturi
Texture Scaling = Scalare texturi

View File

@ -456,6 +456,7 @@ Aggressive = Принудительно
Alternative Speed = Другая скорость (в %, 0 = без ограничений)
Alternative Speed 2 = Другая скорость 2 (в %, 0 = без ограничений)
Anisotropic Filtering = Анизотропная фильтрация
Aspect Ratio = Aspect Ratio
Auto = Авто
Auto (1:1) = Авто (1:1)
Auto (same as Rendering) = Авто (как разрешение рендеринга)
@ -547,7 +548,7 @@ Software Skinning = Программная заливка
SoftwareSkinning Tip = Объединяет вызовы отрисовки моделей с заливкой на ЦП, быстрее во многих играх
Speed = Скорость
Speed Hacks = Speed Hacks (могут вызывать глюки)
Stretching = Растягивание
Stretch = Растягивание
Texture Filter = Текстурный фильтр
Texture Filtering = Фильтрация текстур
Texture Scaling = Масштабирование текстур

View File

@ -456,6 +456,7 @@ Aggressive = Aggressiv
Alternative Speed = Alternativ hastighet
Alternative Speed 2 = Alternativ hastighet 2 (%, 0 = obegränsad)
Anisotropic Filtering = Anisotropisk filtrering
Aspect Ratio = Sidförhållande
Auto = Auto
Auto (1:1) = Auto (1:1)
Auto (same as Rendering) = Auto (samma som rendering)
@ -546,7 +547,7 @@ Software Skinning = Software Skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Hastighet
Speed Hacks = Speed-hacks (kan orsaka renderingsproblem)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Texturfilter
Texture Filtering = Texturfiltrering
Texture Scaling = Texturskalning

View File

@ -456,6 +456,7 @@ Aggressive = Agresibo
Alternative Speed = Alternatibong bilis
Alternative Speed 2 = Alternatibong bilis 2 (in %, 0 = unlimited)
Anisotropic Filtering = Anisotropikong Pagsala
Aspect Ratio = Aspect Ratio
Auto = Awto
Auto (1:1) = Awto (1:1)
Auto (same as Rendering) = Awto (Kapareho sa Renderig Resolution)
@ -546,7 +547,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Bilis
Speed Hacks = Speed Hacks (maaring magdulot ng pagloloko sa laro)
Stretching = Iunat
Stretch = Iunat
Texture Filter = Panala ng Texture
Texture Filtering = Pagsala sa Texture
Texture Scaling = Pagsukat sa Texture

View File

@ -456,6 +456,7 @@ Aggressive = รุนแรง
Alternative Speed = เพิ่ม-ลดระดับความเร็ว (ใน %, 0 = ไม่จำกัด)
Alternative Speed 2 = เพิ่ม-ลดระดับความเร็ว 2 (ใน %, 0 = ไม่จำกัด)
Anisotropic Filtering = ตัวกรองขจัดความไม่คมชัดของพื้นผิว
Aspect Ratio = Aspect Ratio
Auto = อัตโนมัติ
Auto (1:1) = อัตโนมัติ (1:1)
Auto (same as Rendering) = อัตโนมัติ (ค่าเดียวกับที่ใช้แสดงผลภาพ)
@ -549,7 +550,7 @@ Speed = ความเร็ว
Speed Hacks = แฮ็คความเร็ว (อาจแสดงผลผิดพลาด)
Stereo display shader = เฉดแสงสีของภาพแบบสามมิติ
Stereo rendering = การแสดงผลแบบสามมิติ
Stretching = ดึงเต็มจอ
Stretch = ดึงเต็มจอ
Texture Filter = ตัวกรองพื้นผิว
Texture Filtering = การกรองพื้นผิว
Texture Scaling = การปรับสเกลพื้นผิว
@ -853,7 +854,7 @@ RedBlue = ภาพแว่นแดงฟ้า (สามมิติแบ
Saturation = ความอิ่มตัวของสี
Scanlines = ภาพออกมัวเป็นเส้นแนวนอน
Sharpen = ภาพเน้นขอบคมขึ้น
SideBySize = ภาพแยกสองจอแบบสามมิติ
SideBySide = ภาพแยกสองจอแบบสามมิติ
SSAA(Gauss) = ภาพเน้นความละเอียดให้สูงขึ้น
Tex4xBRZ = 4xBRZ
TexMMPX = MMPX

View File

@ -458,6 +458,7 @@ Aggressive = Agresif
Alternative Speed = Alternatif Hız (% 0 = sınırsız)
Alternative Speed 2 = Alternatif Hız 2 (% 0 = sınırsız)
Anisotropic Filtering = Anizotropik filtreleme
Aspect Ratio = Aspect Ratio
Auto = Otomatik
Auto (1:1) = Otomatik (1:1)
Auto (same as Rendering) = Otomatik (İşleme Çözünürlüğüyle Aynı)
@ -548,7 +549,7 @@ Software Skinning = Software skinning
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
Speed = Hız
Speed Hacks = Hız Hacks (Küçük teknik problemlere neden olabilir.)
Stretching = Serbest tam ekran (sünme)
Stretch = Serbest tam ekran (sünme)
Texture Filter = Doku filtreleme
Texture Filtering = Doku filtreleme
Texture Scaling = Doku ölçekleme

View File

@ -456,6 +456,7 @@ Aggressive = Примусово
Alternative Speed = Альтернативна шв. (к %, 0 = необмежено)
Alternative Speed 2 = Альтернативна шв. 2 (к %, 0 = необмежено)
Anisotropic Filtering = Анізотропна фільтрація
Aspect Ratio = Aspect Ratio
Auto = Авто
Auto (1:1) = Авто (1:1)
Auto (same as Rendering) = Авто (таке ж як розширення рендерингу)
@ -546,7 +547,7 @@ Software Skinning = Програмна заливка
SoftwareSkinning Tip = Комбінована модель розібраної моделі яка притягується до процесора, швидше в більшості ігор
Speed = Швидкість
Speed Hacks = Speed Hacks (можуть викликати глюки)
Stretching = Розтягнення
Stretch = Розтягнення
Texture Filter = Фільтр текстур
Texture Filtering = Фільтрація текстур
Texture Scaling = Масштабування текстур

View File

@ -456,6 +456,7 @@ Aggressive = Xâm lược
Alternative Speed = Tốc độ luân phiên
Alternative Speed 2 = Tốc độ luân phiên 2 (trong %, 0 = không giới hạn)
Anisotropic Filtering = Lọc không cùng hướng
Aspect Ratio = Aspect Ratio
Auto = Tự động
Auto (1:1) = Tự động (1:1)
Auto (same as Rendering) = Tự động (cùng với kết xuất)
@ -546,7 +547,7 @@ Software Skinning = phủ lớp bằng phần mềm
SoftwareSkinning Tip = Mô hình kết hợp vẽ trên CPU, nhanh hơn trong hầu hết các trò chơi
Speed = Tốc độ
Speed Hacks = Tốc độ Hacks (sẽ bị lỗi)
Stretching = Stretching
Stretch = Stretch
Texture Filter = Bộ lọc họa tiết
Texture Filtering = Lọc texture
Texture Scaling = Họa tiết rộng

View File

@ -456,6 +456,7 @@ Aggressive = 激进
Alternative Speed = 自定义速度
Alternative Speed 2 = 自定义速度2
Anisotropic Filtering = 各向异性过滤
Aspect Ratio = Aspect Ratio
Auto = 自动
Auto (1:1) = 自动(1:1)
Auto (same as Rendering) = 自动(同渲染分辨率)
@ -546,7 +547,7 @@ Software Skinning = 软件蒙皮
SoftwareSkinning Tip = 合并CPU中已经蒙皮的模型绘制,在部分游戏中更快
Speed = 运行速度
Speed Hacks = 速度修正 (可能引发故障)
Stretching = 拉伸
Stretch = 拉伸
Texture Filter = 纹理过滤方式
Texture Filtering = 纹理过滤
Texture Scaling = 纹理缩放

View File

@ -456,6 +456,7 @@ Aggressive = 積極
Alternative Speed = 替代速度 (於 %0 = 無限制)
Alternative Speed 2 = 替代速度 2 (於 %0 = 無限制)
Anisotropic Filtering = 非等向性過濾
Aspect Ratio = Aspect Ratio
Auto = 自動
Auto (1:1) = 自動 (1:1)
Auto (same as Rendering) = 自動 (同於轉譯解析度)
@ -545,7 +546,7 @@ Software Skinning = 軟體除皮
SoftwareSkinning Tip = 結合除皮模組在 CPU 上繪製,在多數遊戲上更快
Speed = 速度
Speed Hacks = 速度駭客 (可能會造成轉譯錯誤!)
Stretching = 延伸
Stretch = 延伸
Texture Filter = 紋理濾鏡
Texture Filtering = 紋理濾鏡
Texture Scaling = 紋理縮放

View File

@ -202,7 +202,7 @@ SettingMinValue2=0.0
SettingStep2=0.05
Fragment=stereo_red_blue.fsh
Vertex=fxaa.vsh
[SideBySize]
[SideBySide]
Type=StereoToMono
Name=SideBySide Stereo
Author=Henrik Rydgård