Ticket #5897: gallery_scale.patch

File gallery_scale.patch, 7.9 KB (added by Boleslaw Ciesielski <bolek-mythtv@…>, 12 years ago)

patch against svn r19030

  • mythplugins/mythgallery/mythgallery/glsingleview.cpp

     
    7575      // General
    7676      m_source_x(0.0f),
    7777      m_source_y(0.0f),
    78       m_scaleMax(false),
     78      m_scaleMax(kScaleToFit),
    7979
    8080      // Texture variables (for display and effects)
    8181      m_texMaxDim(512),
     
    9696      m_effect_cube_yrot(0.0f),
    9797      m_effect_cube_zrot(0.0f)
    9898{
    99     m_scaleMax = (gContext->GetNumSetting("GalleryScaleMax", 0) > 0);
     99    m_scaleMax = (ScaleMax) gContext->GetNumSetting("GalleryScaleMax", 0);
    100100
    101101    m_slideshow_timer = new QTimer(this);
    102102    RegisterEffects();
     
    139139GLSingleView::~GLSingleView()
    140140{
    141141    // save the current m_scaleMax setting so we can restore it later
    142     gContext->SaveSetting("GalleryScaleMax", (m_scaleMax ? "1" : "0"));
     142    gContext->SaveSetting("GalleryScaleMax", m_scaleMax);
    143143    CleanUp();
    144144}
    145145
     
    457457        }
    458458        else if (action == "FULLSCREEN")
    459459        {
    460             m_scaleMax = !m_scaleMax;
     460            m_scaleMax = (ScaleMax) ((m_scaleMax + 1) % kScaleMaxCount);
    461461            m_source_x = 0;
    462462            m_source_y = 0;
    463463            SetZoom(1.0f);
  • mythplugins/mythgallery/mythgallery/galleryutil.h

     
    2424
    2525#include "iconview.h"
    2626
     27typedef enum {
     28  kScaleToFit,
     29  kScaleToFill,
     30  kReduceToFit,
     31  kScaleMaxCount        // must be last
     32} ScaleMax;
     33
    2734class GalleryUtil
    2835{
    2936 public:
     
    4148                              int sortorder, bool recurse,
    4249                              ThumbHash *itemHash, ThumbGenerator *thumbGen);
    4350
    44     static QSize ScaleToDest(const QSize &sz, const QSize &dest, bool scaleMax);
     51    static QSize ScaleToDest(const QSize &sz, const QSize &dest, ScaleMax scaleMax);
    4552
    4653    static bool CopyMove(const QFileInfo &src, QFileInfo &dst, bool move)
    4754        { if (move) return Move(src, dst); else return Copy(src, dst); }
  • mythplugins/mythgallery/mythgallery/glsingleview.h

     
    107107    // General
    108108    float         m_source_x;
    109109    float         m_source_y;
    110     bool          m_scaleMax;
     110    ScaleMax      m_scaleMax;
    111111
    112112    // Texture variables (for display and effects)
    113113    int           m_texMaxDim;
  • mythplugins/mythgallery/mythgallery/singleview.cpp

     
    6161      m_pixmap(NULL),
    6262      m_angle(0),
    6363      m_source_loc(0,0),
    64       m_scaleMax(false),
     64      m_scaleMax(kScaleToFit),
    6565
    6666      // Info variables
    6767      m_info_pixmap(NULL),
     
    9393      m_effect_milti_circle_out_points(4),
    9494      m_effect_circle_out_points(4)
    9595{
    96     m_scaleMax = (gContext->GetNumSetting("GalleryScaleMax", 0) > 0);
     96    m_scaleMax = (ScaleMax) gContext->GetNumSetting("GalleryScaleMax", 0);
    9797
    9898    m_slideshow_timer = new QTimer(this);
    9999    RegisterEffects();
     
    175175    }
    176176
    177177    // save the current m_scaleMax setting so we can restore it later
    178     gContext->SaveSetting("GalleryScaleMax", (m_scaleMax ? "1" : "0"));
     178    gContext->SaveSetting("GalleryScaleMax", m_scaleMax);
    179179}
    180180
    181181void SingleView::paintEvent(QPaintEvent *)
     
    516516        }
    517517        else if (action == "FULLSCREEN")
    518518        {
    519             m_scaleMax = !m_scaleMax;
     519            m_scaleMax = (ScaleMax) ((m_scaleMax + 1) % kScaleMaxCount);
    520520            m_source_loc = QPoint(0, 0);
    521521            SetZoom(1.0f);
    522522        }
  • mythplugins/mythgallery/mythgallery/singleview.h

     
    3636// MythTV plugin headers
    3737#include <mythtv/mythdialogs.h>
    3838
     39#include "galleryutil.h"
    3940#include "imageview.h"
    4041#include "iconview.h"
    4142#include "sequence.h"
     
    109110    QImage        m_image;
    110111    int           m_angle;
    111112    QPoint        m_source_loc;
    112     bool          m_scaleMax;
     113    ScaleMax      m_scaleMax;
    113114
    114115    // Info variables
    115116    QPixmap      *m_info_pixmap;
  • mythplugins/mythgallery/mythgallery/gltexture.cpp

     
    8484    glEnd();
    8585}
    8686
    87 void GLTexture::ScaleTo(const QSize &dest, bool scaleMax)
     87void GLTexture::ScaleTo(const QSize &dest, ScaleMax scaleMax)
    8888{
    8989    QSize sz = GalleryUtil::ScaleToDest(GetSize(), dest, scaleMax);
    9090    if ((sz.width()   > 0) && (sz.height()   > 0) &&
  • mythplugins/mythgallery/mythgallery/gltexture.h

     
    2727#include <QtOpenGL>
    2828#include <QSize>
    2929
     30// MythGallery headers
     31#include "galleryutil.h"
     32
    3033class ThumbItem;
    3134
    3235class GLTexture
     
    5053        { width = sz.width(); height = sz.height(); }
    5154    void SetScale(float x, float y)
    5255        { cx = x; cy = y; }
    53     void ScaleTo(const QSize &dest, bool scaleMax);
     56    void ScaleTo(const QSize &dest, ScaleMax scaleMax);
    5457    void SetAngle(int newangle) { angle = newangle; }
    5558
    5659    // Gets
  • mythplugins/mythgallery/mythgallery/galleryutil.cpp

     
    460460    return false;
    461461}
    462462
    463 QSize GalleryUtil::ScaleToDest(const QSize &src, const QSize &dest, bool scaleMax)
     463QSize GalleryUtil::ScaleToDest(const QSize &src, const QSize &dest, ScaleMax scaleMax)
    464464{
    465465    QSize sz = src;
    466466
     
    472472    if ((sz.width() > 0) && (sz.height() > 0))
    473473        imageAspect = (double)sz.width() / (double)sz.height();
    474474
    475     int scaleWidth;
    476     int scaleHeight;
    477     if (scaleMax)
     475    int scaleWidth = sz.width();
     476    int scaleHeight = sz.height();
     477
     478    switch (scaleMax)
    478479    {
     480    case kScaleToFill:
    479481        // scale-max to dest width for most images
    480482        scaleWidth = dest.width();
    481483        scaleHeight = (int)((float)dest.width() * pixelAspect / imageAspect);
     
    485487            scaleWidth = (int)((float)dest.height() * imageAspect / pixelAspect);
    486488            scaleHeight = dest.height();
    487489        }
    488     }
    489     else
    490     {
     490        break;
     491
     492    case kReduceToFit:
     493        // Reduce to fit (but never enlarge)
     494        if (scaleWidth <= dest.width() && scaleHeight <= dest.height())
     495            break;
     496        // Fall through
     497
     498    case kScaleToFit:
    491499        // scale-min to dest height for most images
    492500        scaleWidth = (int)((float)dest.height() * imageAspect / pixelAspect);
    493501        scaleHeight = dest.height();
     
    497505            scaleWidth = dest.width();
    498506            scaleHeight = (int)((float)dest.width() * pixelAspect / imageAspect);
    499507        }
     508        break;
     509
     510    default:
     511        break;
    500512    }
    501513
    502     sz.scale(scaleWidth, scaleHeight, Qt::KeepAspectRatio);
     514    if (scaleWidth != sz.width() || scaleHeight != sz.height())
     515        sz.scale(scaleWidth, scaleHeight, Qt::KeepAspectRatio);
    503516    return sz;
    504517}
    505518