mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-01 14:24:02 +00:00
UI: Keep report image at right aspect ratio.
This commit is contained in:
parent
92b857ceb4
commit
3bba9df133
@ -15,6 +15,7 @@
|
||||
// Official git repository and contact information can be found at
|
||||
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
||||
|
||||
#include <algorithm>
|
||||
#include "i18n/i18n.h"
|
||||
#include "gfx_es2/draw_buffer.h"
|
||||
#include "ui/view.h"
|
||||
@ -48,15 +49,43 @@ AsyncImageFileView::AsyncImageFileView(const std::string &filename, UI::ImageSiz
|
||||
|
||||
AsyncImageFileView::~AsyncImageFileView() {}
|
||||
|
||||
void AsyncImageFileView::GetContentDimensions(const UIContext &dc, float &w, float &h) const {
|
||||
static float DesiredSize(float sz, float contentSize, UI::MeasureSpec spec) {
|
||||
float measured;
|
||||
UI::MeasureBySpec(sz, contentSize, spec, &measured);
|
||||
return measured;
|
||||
}
|
||||
|
||||
void AsyncImageFileView::GetContentDimensionsBySpec(const UIContext &dc, UI::MeasureSpec horiz, UI::MeasureSpec vert, float &w, float &h) const {
|
||||
if (texture_ && texture_->GetTexture()) {
|
||||
float texw = (float)texture_->Width();
|
||||
float texh = (float)texture_->Height();
|
||||
float desiredW = DesiredSize(layoutParams_->width, w, horiz);
|
||||
float desiredH = DesiredSize(layoutParams_->height, h, vert);
|
||||
switch (sizeMode_) {
|
||||
case UI::IS_FIXED:
|
||||
w = fixedSizeW_;
|
||||
h = fixedSizeH_;
|
||||
break;
|
||||
case UI::IS_KEEP_ASPECT:
|
||||
w = texw;
|
||||
h = texh;
|
||||
if (desiredW != w || desiredH != h) {
|
||||
float aspect = w / h;
|
||||
// We need the other dimension based on the desired scale to find the best aspect.
|
||||
float desiredWOther = DesiredSize(layoutParams_->height, h * (desiredW / w), vert);
|
||||
float desiredHOther = DesiredSize(layoutParams_->width, w * (desiredH / h), horiz);
|
||||
|
||||
float diffW = fabsf(aspect - desiredW / desiredWOther);
|
||||
float diffH = fabsf(aspect - desiredH / desiredHOther);
|
||||
if (diffW < diffH) {
|
||||
w = desiredW;
|
||||
h = desiredWOther;
|
||||
} else {
|
||||
w = desiredHOther;
|
||||
h = desiredH;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case UI::IS_DEFAULT:
|
||||
default:
|
||||
w = texw;
|
||||
|
@ -67,7 +67,7 @@ public:
|
||||
AsyncImageFileView(const std::string &filename, UI::ImageSizeMode sizeMode, PrioritizedWorkQueue *wq, UI::LayoutParams *layoutParams = 0);
|
||||
~AsyncImageFileView();
|
||||
|
||||
void GetContentDimensions(const UIContext &dc, float &w, float &h) const override;
|
||||
void GetContentDimensionsBySpec(const UIContext &dc, UI::MeasureSpec horiz, UI::MeasureSpec vert, float &w, float &h) const override;
|
||||
void Draw(UIContext &dc) override;
|
||||
|
||||
void DeviceLost() override;
|
||||
|
@ -261,7 +261,7 @@ void ReportScreen::CreateViews() {
|
||||
if (TakeGameScreenshot(screenshotFilename_.c_str(), ScreenshotFormat::JPG, SCREENSHOT_DISPLAY, &shotWidth, &shotHeight, 4)) {
|
||||
float scale = 340.0f * (1.0f / g_dpi_scale_y) * (1.0f / shotHeight);
|
||||
leftColumnItems->Add(new CheckBox(&includeScreenshot_, rp->T("FeedbackIncludeScreen", "Include a screenshot")))->SetEnabledPtr(&enableReporting_);
|
||||
screenshot_ = leftColumnItems->Add(new AsyncImageFileView(screenshotFilename_, IS_DEFAULT, nullptr, new LinearLayoutParams(shotWidth * scale, shotHeight * scale, Margins(12, 0))));
|
||||
screenshot_ = leftColumnItems->Add(new AsyncImageFileView(screenshotFilename_, IS_KEEP_ASPECT, nullptr, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT, Margins(12, 0))));
|
||||
} else {
|
||||
includeScreenshot_ = false;
|
||||
screenshot_ = nullptr;
|
||||
|
@ -835,6 +835,7 @@ private:
|
||||
enum ImageSizeMode {
|
||||
IS_DEFAULT,
|
||||
IS_FIXED,
|
||||
IS_KEEP_ASPECT,
|
||||
};
|
||||
|
||||
class ImageView : public InertView {
|
||||
|
Loading…
x
Reference in New Issue
Block a user