Ticket #944: 944.patch

File 944.patch, 38.2 KB (added by danielk, 14 years ago)

fixes most of the OSD's

  • libs/libmythtv/osdlistbtntype.h

     
    6666                    const QRect &levelsize, int levelspacing,
    6767                    float wmult, float hmult);
    6868
    69     void Reinit(float wchange, float hchange, float wmult, float hmult);
     69    void Reinit(float wmult, float hmult);
    7070    void SetGroupCheckState(QString group, int newState = 0);
    7171
    7272    void SetFontActive(TTFFont *font);
     
    116116    uint      m_itemRegAlpha;
    117117    uint      m_itemSelAlpha;
    118118   
    119     int m_spacing;
    120     int m_margin;
     119    int       m_spacing;
     120    int       m_margin;
     121    QRect     m_totalarea;
     122    QRect     m_levelsize;
    121123
    122     QRect m_totalarea;
    123     QRect m_levelsize;
     124    float     m_unbiasedspacing;
     125    float     m_unbiasedmargin;
     126    QRect     m_unbiasedarea;
     127    QRect     m_unbiasedsize;
     128
    124129    int m_levelspacing;
    125130
    126131    float m_wmult;
     
    139144                   bool showScrollArrows = false);
    140145    ~OSDListBtnType();
    141146
    142     void  Reinit(float wchange, float hchange, float wmult, float hmult);
     147    void  Reinit(float wmult, float hmult);
    143148    void  SetGroupCheckState(QString group, int newState = 0);
    144149
    145150    void  SetFontActive(TTFFont *font);
     
    180185    void  RemoveItem(OSDListBtnTypeItem *item);
    181186
    182187    int   m_order;
    183     QRect m_rect;
    184188    QRect m_contentsRect;
    185189    QRect m_arrowsRect;
    186190
    187191    float m_wmult;
    188192    float m_hmult;
    189193
     194    QRect m_rect;
     195    QRect m_unbiasedRect;
     196
    190197    int   m_itemHeight;
    191198    int   m_itemSpacing;
    192199    int   m_itemMargin;
     200    float m_itemUnbiasedHeight;
     201    float m_itemUnbiasedSpacing;
     202    float m_itemUnbiasedMargin;
     203
    193204    uint  m_itemsVisible;
    194205
    195206    bool  m_active;
     
    265276    void  setGroup(QString group) { m_group = group; };
    266277    QString getGroup(void) { return m_group; }
    267278
    268     void  Reinit(float wchange, float hchange, float wmult, float hmult);
     279    void  Reinit(float wmult, float hmult);
    269280   
    270281    void  paint(OSDSurface *surface, TTFFont *font, int fade, int maxfade,
    271282                int x, int y);
     
    285296    QRect          m_textRect;
    286297    QRect          m_arrowRect;
    287298
     299    QRect          m_unbiasedCheckRect;
     300    QRect          m_unbiasedPixmapRect;
     301    QRect          m_unbiasedTextRect;
     302    QRect          m_unbiasedArrowRect;
     303
    288304    bool           m_showArrow;   
    289305
    290306    friend class OSDListBtnType;
  • libs/libmythtv/NuppelVideoPlayer.cpp

     
    49724972                QImage scaledImage = qImage.smoothScale(rect->w, rect->h);
    49734973
    49744974                OSDTypeImage* image = new OSDTypeImage();
    4975                 image->SetPosition(QPoint(rect->x, rect->y));
     4975                image->SetPosition(QPoint(rect->x, rect->y), hmult, vmult);
    49764976                image->LoadFromQImage(scaledImage);
    49774977
    49784978                subtitleOSD->AddType(image);
  • libs/libmythtv/osdlistbtntype.cpp

     
    6666    m_hmult = hmult;
    6767
    6868    m_totalarea = area;
     69    m_unbiasedarea =
     70        QRect((int)round(m_totalarea.x()      / wmult),
     71              (int)round(m_totalarea.y()      / hmult),
     72              (int)ceil( m_totalarea.width()  / wmult),
     73              (int)ceil( m_totalarea.height() / hmult));
     74
    6975    m_levelsize = levelsize;
     76    m_unbiasedsize =
     77        QRect((int)round(m_levelsize.x()      / wmult),
     78              (int)round(m_levelsize.y()      / hmult),
     79              (int)ceil( m_levelsize.width()  / wmult),
     80              (int)ceil( m_levelsize.height() / hmult));
     81
    7082    m_levelspacing = levelspacing;
    7183
    7284    if (gContext->GetNumSetting("UseArrowAccels", 1))
     
    94106    m_margin = 0;
    95107}
    96108
    97 void OSDListTreeType::Reinit(float wchange, float hchange, float wmult,
    98                              float hmult)
     109void OSDListTreeType::Reinit(float wmult, float hmult)
    99110{
    100111    m_wmult = wmult;
    101112    m_hmult = hmult;
    102113
    103     m_spacing = (int)(m_spacing * wchange);
    104     m_margin = (int)(m_margin * wchange);
     114    m_spacing = (int)(m_unbiasedspacing * wmult);
     115    m_margin  = (int)(m_unbiasedmargin  * wmult);
    105116
    106     int width = (int)(m_totalarea.width() * wchange);
    107     int height = (int)(m_totalarea.height() * hchange);
    108     int x = (int)(m_totalarea.x() * wchange);
    109     int y = (int)(m_totalarea.y() * hchange);
     117    m_totalarea =
     118        QRect((int)round(m_unbiasedarea.x()      * wmult),
     119              (int)round(m_unbiasedarea.y()      * hmult),
     120              (int)ceil( m_unbiasedarea.width()  * wmult),
     121              (int)ceil( m_unbiasedarea.height() * hmult));
    110122
    111     m_totalarea = QRect(x, y, width, height);
     123    m_levelsize =
     124        QRect((int)round(m_unbiasedsize.x()      * wmult),
     125              (int)round(m_unbiasedsize.y()      * hmult),
     126              (int)ceil( m_unbiasedsize.width()  * wmult),
     127              (int)ceil( m_unbiasedsize.height() * hmult));
    112128
    113     width = (int)(m_levelsize.width() * wchange);
    114     height = (int)(m_levelsize.height() * hchange);
    115     x = (int)(m_levelsize.x() * wchange);
    116     y = (int)(m_levelsize.y() * hchange);
    117 
    118     m_levelsize = QRect(x, y, width, height);
    119 
    120129    QPtrListIterator<OSDListBtnType> it(listLevels);
    121130    OSDListBtnType *child;
    122131
    123132    while ((child = it.current()) != 0)
    124133    {
    125         child->Reinit(wchange, hchange, wmult, hmult);
     134        child->Reinit(wmult, hmult);
    126135        ++it;
    127136    }
    128137}
     
    166175
    167176void OSDListTreeType::SetSpacing(int spacing)
    168177{
    169     m_spacing = spacing;
     178    m_spacing         = spacing;
     179    m_unbiasedspacing = spacing / m_wmult;
    170180}
    171181
    172182void OSDListTreeType::SetMargin(int margin)
    173183{
    174     m_margin = margin;
     184    m_margin          = margin;
     185    m_unbiasedspacing = margin / m_wmult;
    175186}
    176187
    177188void OSDListTreeType::SetAsTree(OSDGenericTree *toplevel)
     
    423434              : OSDType(name)
    424435{
    425436    m_rect             = area;
     437    m_unbiasedRect     =
     438        QRect((int)round(area.x()      / wmult),
     439              (int)round(area.y()      / hmult),
     440              (int)ceil( area.width()  / wmult),
     441              (int)ceil( area.height() / hmult));
    426442
     443    VERBOSE(VB_IMPORTANT,
     444            "OSDListBtnType("<<name<<") "
     445            " rect: "<<m_rect.x()<<"x"<<m_rect.y()<<" ("
     446            <<m_rect.width()<<", "<<m_rect.height()<<")"
     447            " unbias: "<<m_unbiasedRect.x()<<"x"<<m_unbiasedRect.y()<<" ("
     448            <<m_unbiasedRect.width()<<", "<<m_unbiasedRect.height()<<")");
     449
    427450    m_wmult            = wmult;
    428451    m_hmult            = hmult;
    429452
     
    457480    Reset();
    458481}
    459482
    460 void OSDListBtnType::Reinit(float wchange, float hchange, float wmult,
    461                             float hmult)
     483void OSDListBtnType::Reinit(float wmult, float hmult)
    462484{
    463485    m_wmult = wmult;
    464486    m_hmult = hmult;
    465487
    466     m_itemHeight = (int)(m_itemHeight * hchange);
    467     m_itemSpacing = (int)(m_itemSpacing * wchange);
    468     m_itemMargin = (int)(m_itemMargin * wchange);
     488    m_itemHeight  = (int)(m_itemUnbiasedHeight   * hmult) & ~0x1;
     489    m_itemSpacing = (int)(m_itemUnbiasedSpacing  * wmult);
     490    m_itemMargin  = (int)(m_itemUnbiasedMargin   * wmult);
    469491
    470     int width = (int)(m_rect.width() * wchange);
    471     int height = (int)(m_rect.height() * hchange);
    472     int x = (int)(m_rect.x() * wchange);
    473     int y = (int)(m_rect.y() * hchange);
     492    m_rect =
     493        QRect((int)round(m_unbiasedRect.x()      * wmult),
     494              (int)round(m_unbiasedRect.y()      * hmult),
     495              (int)ceil( m_unbiasedRect.width()  * wmult),
     496              (int)ceil( m_unbiasedRect.height() * hmult));
    474497
    475     m_rect = QRect(x, y, width, height);
    476 
    477498    Init();
    478499
    479500    OSDListBtnTypeItem* item = 0;
    480     for (item = m_itemList.first(); item; item = m_itemList.next()) {
    481         item->Reinit(wchange, hchange, wmult, hmult);
    482     }
    483 
     501    for (item = m_itemList.first(); item; item = m_itemList.next())
     502        item->Reinit(wmult, hmult);
    484503}
    485504
    486505void OSDListBtnType::SetGroupCheckState(QString group, int newState)
     
    520539
    521540void OSDListBtnType::SetSpacing(int spacing)
    522541{
    523     m_itemSpacing = spacing;   
     542    m_itemSpacing         = spacing;
     543    m_itemUnbiasedSpacing = spacing / m_wmult;
    524544}
    525545
    526546void OSDListBtnType::SetMargin(int margin)
    527547{
    528     m_itemMargin = margin;   
     548    m_itemMargin         = margin;   
     549    m_itemUnbiasedMargin = margin / m_wmult;
    529550}
    530551
    531552void OSDListBtnType::SetActive(bool active)
     
    797818    int sz1 = m_fontActive->Size() * 3 / 2;
    798819    int sz2 = m_fontInactive->Size() * 3 / 2;
    799820    m_itemHeight = QMAX(sz1, sz2) + (int)(2 * m_itemMargin);
     821    m_itemUnbiasedHeight = m_itemHeight / m_hmult;
     822    m_itemHeight = m_itemHeight & ~0x1;
    800823
    801     m_itemHeight = (m_itemHeight / 2) * 2;
    802 
    803824    if (m_showScrollArrows)
    804825    {
    805826        LoadPixmap(m_upArrowRegPix, "uparrow-reg");
     
    948969                       (m_pixmap ? m_pixmapRect.width() + margin : 0),
    949970                       height);
    950971
     972    float wmult = m_parent->m_wmult;
     973    float hmult = m_parent->m_hmult;
     974
     975    m_unbiasedCheckRect =
     976        QRect((int)(m_checkRect.x()       / wmult),
     977              (int)(m_checkRect.y()       / hmult),
     978              (int)(m_checkRect.width()   / wmult),
     979              (int)(m_checkRect.height()  / hmult));
     980
     981    m_unbiasedPixmapRect =
     982        QRect((int)(m_pixmapRect.x()      / wmult),
     983              (int)(m_pixmapRect.y()      / hmult),
     984              (int)(m_pixmapRect.width()  / wmult),
     985              (int)(m_pixmapRect.height() / hmult));
     986
     987    m_unbiasedTextRect =
     988        QRect((int)(m_textRect.x()        / wmult),
     989              (int)(m_textRect.y()        / hmult),
     990              (int)(m_textRect.width()    / wmult),
     991              (int)(m_textRect.height()   / hmult));
     992
     993    m_unbiasedArrowRect =
     994        QRect((int)(m_arrowRect.x()       / wmult),
     995              (int)(m_arrowRect.y()       / hmult),
     996              (int)(m_arrowRect.width()   / wmult),
     997              (int)(m_arrowRect.height()  / hmult));
     998
    951999    m_parent->InsertItem(this);
    9521000}
    9531001
     
    10501098    font->DrawString(surface, tr.x(), tr.y(), m_text, tr.right(), tr.bottom());
    10511099}
    10521100
    1053 void OSDListBtnTypeItem::Reinit(float wchange, float hchange,
    1054                                 float wmult, float hmult)
     1101void OSDListBtnTypeItem::Reinit(float wmult, float hmult)
    10551102{
    1056     (void)wmult;
    1057     (void)hmult;
     1103    m_checkRect =
     1104        QRect((int)(m_unbiasedCheckRect.x()       * wmult),
     1105              (int)(m_unbiasedCheckRect.y()       * hmult),
     1106              (int)(m_unbiasedCheckRect.width()   * wmult),
     1107              (int)(m_unbiasedCheckRect.height()  * hmult));
    10581108
    1059     int width = (int)(m_checkRect.width() * wchange);
    1060     int height = (int)(m_checkRect.height() * hchange);
    1061     int x = (int)(m_checkRect.x() * wchange);
    1062     int y = (int)(m_checkRect.y() * hchange);
     1109    m_pixmapRect =
     1110        QRect((int)(m_unbiasedPixmapRect.x()      * wmult),
     1111              (int)(m_unbiasedPixmapRect.y()      * hmult),
     1112              (int)(m_unbiasedPixmapRect.width()  * wmult),
     1113              (int)(m_unbiasedPixmapRect.height() * hmult));
    10631114
    1064     m_checkRect = QRect(x, y, width, height);
     1115    m_textRect =
     1116        QRect((int)(m_unbiasedTextRect.x()        * wmult),
     1117              (int)(m_unbiasedTextRect.y()        * hmult),
     1118              (int)(m_unbiasedTextRect.width()    * wmult),
     1119              (int)(m_unbiasedTextRect.height()   * hmult));
    10651120
    1066     width = (int)(m_pixmapRect.width() * wchange);
    1067     height = (int)(m_pixmapRect.height() * hchange);
    1068     x = (int)(m_pixmapRect.x() * wchange);
    1069     y = (int)(m_pixmapRect.y() * hchange);
    1070 
    1071     m_pixmapRect = QRect(x, y, width, height);
    1072 
    1073     width = (int)(m_textRect.width() * wchange);
    1074     height = (int)(m_textRect.height() * hchange);
    1075     x = (int)(m_textRect.x() * wchange);
    1076     y = (int)(m_textRect.y() * hchange);
    1077 
    1078     m_textRect = QRect(x, y, width, height);
    1079 
    1080     width = (int)(m_arrowRect.width() * wchange);
    1081     height = (int)(m_arrowRect.height() * hchange);
    1082     x = (int)(m_arrowRect.x() * wchange);
    1083     y = (int)(m_arrowRect.y() * hchange);
    1084 
    1085     m_arrowRect = QRect(x, y, width, height);
     1121    m_arrowRect =
     1122        QRect((int)(m_unbiasedArrowRect.x()       * wmult),
     1123              (int)(m_unbiasedArrowRect.y()       * hmult),
     1124              (int)(m_unbiasedArrowRect.width()   * wmult),
     1125              (int)(m_unbiasedArrowRect.height()  * hmult));
    10861126}
    10871127
  • libs/libmythtv/osdtypes.cpp

     
    160160                    int displaywidth, int displayheight,
    161161                    float wmult, float hmult, int frint)
    162162{
    163     float wchange = wmult / m_wmult;
    164     float hchange = hmult / m_hmult;
    165 
    166163    m_frameint = frint;
    167164
    168165    m_screenwidth = screenwidth;
     
    175172    vector<OSDType *>::iterator iter = allTypes->begin();
    176173    for (;iter != allTypes->end(); iter++)
    177174    {
    178         OSDType *type = (*iter);
    179         if (OSDTypeText *item = dynamic_cast<OSDTypeText*>(type))
    180         {
    181             item->Reinit(wchange, hchange);
    182         }
    183         else if (OSDTypePositionImage *item =
    184                  dynamic_cast<OSDTypePositionImage*>(type))
    185         {
    186             item->Reinit(wchange, hchange, wmult, hmult);
    187         }
    188         else if (OSDTypePosSlider *item = dynamic_cast<OSDTypePosSlider*>(type))
    189         {
    190             item->Reinit(wchange, hchange, wmult, hmult);
    191         }
    192         else if (OSDTypeFillSlider *item =
    193                  dynamic_cast<OSDTypeFillSlider*>(type))
    194         {
    195             item->Reinit(wchange, hchange, wmult, hmult);
    196         }
    197         else if (OSDTypeEditSlider *item =
    198                  dynamic_cast<OSDTypeEditSlider*>(type))
    199         {
    200             item->Reinit(wchange, hchange, wmult, hmult);
    201         }
    202         else if (OSDTypeImage *item = dynamic_cast<OSDTypeImage*>(type))
    203         {
    204             item->Reinit(wchange, hchange, wmult, hmult);
    205         }
    206         else if (OSDTypeBox *item = dynamic_cast<OSDTypeBox*>(type))
    207         {
    208             item->Reinit(wchange, hchange);
    209         }
    210         else if (OSDTypePositionRectangle *item =
    211                   dynamic_cast<OSDTypePositionRectangle*>(type))
    212         {
    213             item->Reinit(wchange, hchange);
    214         }
    215         else if (OSDTypeCC *item = dynamic_cast<OSDTypeCC*>(type))
    216         {
    217             item->Reinit(xoff, yoff, displaywidth, displayheight);
    218         }
    219         else if (OSDListTreeType *item = dynamic_cast<OSDListTreeType*>(type))
    220         {
    221             item->Reinit(wchange, hchange, wmult, hmult);
    222         }
     175        if (OSDTypeCC *cc608 = dynamic_cast<OSDTypeCC*>(*iter))
     176            cc608->Reinit(xoff, yoff, displaywidth, displayheight,
     177                          wmult, hmult);
    223178        else
    224         {
    225             cerr << "Unknown conversion\n";
    226         }
     179            (*iter)->Reinit(wmult, hmult);
    227180    }
    228 
    229181}
    230182
    231183OSDType *OSDSet::GetType(const QString &name)
     
    443395//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    444396
    445397OSDTypeText::OSDTypeText(const QString &name, TTFFont *font,
    446                          const QString &text, QRect displayrect)
     398                         const QString &text, QRect displayrect,
     399                         float wmult, float hmult)
    447400           : OSDType(name)
    448401{
    449402    m_message = text;
     
    464417    m_scrollinit = false;
    465418
    466419    m_linespacing = 1.5;
     420
     421    m_unbiasedsize =
     422        QRect((int)round(m_screensize.x()      / wmult),
     423              (int)round(m_screensize.y()      / hmult),
     424              (int)ceil( m_screensize.width()  / wmult),
     425              (int)ceil( m_screensize.height() / hmult));
    467426}
    468427
    469428OSDTypeText::OSDTypeText(const OSDTypeText &other)
     
    507466    m_scrollinit = false;
    508467}
    509468
    510 void OSDTypeText::Reinit(float wchange, float hchange)
     469void OSDTypeText::Reinit(float wmult, float hmult)
    511470{
    512     int width = (int)(m_screensize.width() * wchange);
    513     int height = (int)(m_screensize.height() * hchange);
    514     int x = (int)(m_screensize.x() * wchange);
    515     int y = (int)(m_screensize.y() * hchange);
    516 
    517     m_displaysize = m_screensize = QRect(x, y, width, height);
     471    m_displaysize = m_screensize =
     472        QRect((int)round(m_unbiasedsize.x()      * wmult),
     473              (int)round(m_unbiasedsize.y()      * hmult),
     474              (int)ceil( m_unbiasedsize.width()  * wmult),
     475              (int)ceil( m_unbiasedsize.height() * hmult));
    518476}
    519477
    520478void OSDTypeText::Draw(OSDSurface *surface, int fade, int maxfade, int xoff,
     
    708666    m_onlyusefirst = false;
    709667
    710668    m_filename = filename;
    711     m_displaypos = displaypos;
     669    SetPosition(displaypos, wmult, hmult);
    712670
    713671    m_yuv = m_alpha = NULL;
    714672    m_isvalid = false;
     
    760718    m_onlyusefirst = false;
    761719
    762720    m_displaypos = QPoint(0, 0);
     721    m_unbiasedpos = QPoint(0, 0);
    763722
    764723    m_yuv = NULL;
    765724    m_alpha = NULL;
     
    778737    m_onlyusefirst = false;
    779738
    780739    m_displaypos = QPoint(0, 0);
     740    m_unbiasedpos = QPoint(0, 0);
    781741
    782742    m_yuv = NULL;
    783743    m_alpha = NULL;
     
    801761    m_name = name;
    802762}
    803763
    804 void OSDTypeImage::Reinit(float wchange, float hchange, float wmult, float hmult)
     764void OSDTypeImage::SetPosition(QPoint pos, float wmult, float hmult)
    805765{
    806     int x = (int)(m_displaypos.x() * wchange);
    807     int y = (int)(m_displaypos.y() * hchange);
     766    m_displaypos  = pos;
     767    m_unbiasedpos =
     768        QPoint((int)round(pos.x() / wmult),
     769               (int)round(pos.y() / hmult));
     770}
    808771
    809     m_displaypos.setX(x);
    810     m_displaypos.setY(y);
     772void OSDTypeImage::Reinit(float wmult, float hmult)
     773{
     774    m_displaypos =
     775        QPoint((int)round(m_unbiasedpos.x() * wmult),
     776               (int)round(m_unbiasedpos.y() * hmult));
    811777
    812778    LoadImage(m_filename, wmult, hmult, m_scalew, m_scaleh);
    813779}
     
    10431009    m_maxval = 1000;
    10441010    m_curval = 0;
    10451011    m_displayrect = displayrect;
     1012    m_unbiasedrect =
     1013        QRect((int)round(m_displayrect.x()      / wmult),
     1014              (int)round(m_displayrect.y()      / hmult),
     1015              (int)ceil( m_displayrect.width()  / wmult),
     1016              (int)ceil( m_displayrect.height() / hmult));
    10461017}
    10471018
    10481019OSDTypePosSlider::~OSDTypePosSlider()
    10491020{
    10501021}
    10511022
    1052 void OSDTypePosSlider::Reinit(float wchange, float hchange, float wmult,
    1053                               float hmult)
     1023void OSDTypePosSlider::Reinit(float wmult, float hmult)
    10541024{
    1055     int width = (int)(m_displayrect.width() * wchange);
    1056     int height = (int)(m_displayrect.height() * hchange);
    1057     int x = (int)(m_displayrect.x() * wchange);
    1058     int y = (int)(m_displayrect.y() * hchange);
    1059 
    1060     m_displayrect = QRect(x, y, width, height);
    1061 
    1062     OSDTypeImage::Reinit(wchange, hchange, wmult, hmult);
     1025    m_displayrect =
     1026        QRect((int)round(m_unbiasedrect.x()      * wmult),
     1027              (int)round(m_unbiasedrect.y()      * hmult),
     1028              (int)ceil( m_unbiasedrect.width()  * wmult),
     1029              (int)ceil( m_unbiasedrect.height() * hmult));
     1030    OSDTypeImage::Reinit(wmult, hmult);
    10631031}
    10641032
    10651033void OSDTypePosSlider::SetPosition(int pos)
     
    10921060    m_drawwidth = 0;
    10931061    m_onlyusefirst = true;
    10941062    m_displayrect = displayrect;
     1063    m_unbiasedrect =
     1064        QRect((int)round(m_displayrect.x()      / wmult),
     1065              (int)round(m_displayrect.y()      / hmult),
     1066              (int)ceil( m_displayrect.width()  / wmult),
     1067              (int)ceil( m_displayrect.height() / hmult));
    10951068}
    10961069
    10971070OSDTypeFillSlider::~OSDTypeFillSlider()
    10981071{
    10991072}
    11001073
    1101 void OSDTypeFillSlider::Reinit(float wchange, float hchange, float wmult,
    1102                                float hmult)
     1074void OSDTypeFillSlider::Reinit(float wmult, float hmult)
    11031075{
    1104     int width = (int)(m_displayrect.width() * wchange);
    1105     int height = (int)(m_displayrect.height() * hchange);
    1106     int x = (int)(m_displayrect.x() * wchange);
    1107     int y = (int)(m_displayrect.y() * hchange);
    1108 
    1109     m_displayrect = QRect(x, y, width, height);
    1110 
    1111     OSDTypeImage::Reinit(wchange, hchange, wmult, hmult);
     1076    m_displayrect =
     1077        QRect((int)round(m_unbiasedrect.x()      * wmult),
     1078              (int)round(m_unbiasedrect.y()      * hmult),
     1079              (int)ceil( m_unbiasedrect.width()  * wmult),
     1080              (int)ceil( m_unbiasedrect.height() * hmult));
     1081    OSDTypeImage::Reinit(wmult, hmult);
    11121082}
    11131083
    11141084void OSDTypeFillSlider::SetPosition(int pos)
     
    11431113    m_maxval = 1000;
    11441114    m_curval = 0;
    11451115    m_displayrect = displayrect;
     1116    m_unbiasedrect =
     1117        QRect((int)round(m_displayrect.x()      / wmult),
     1118              (int)round(m_displayrect.y()      / hmult),
     1119              (int)ceil( m_displayrect.width()  / wmult),
     1120              (int)ceil( m_displayrect.height() / hmult));
    11461121    m_drawwidth = displayrect.width();
    11471122
    11481123    m_drawMap = new unsigned char[m_drawwidth + 1];
     
    11911166        delete [] m_ralpha;
    11921167}
    11931168
    1194 void OSDTypeEditSlider::Reinit(float wchange, float hchange, float wmult,
    1195                                float hmult)
     1169void OSDTypeEditSlider::Reinit(float wmult, float hmult)
    11961170{
    1197     int width = (int)(m_displayrect.width() * wchange);
    1198     int height = (int)(m_displayrect.height() * hchange);
    1199     int x = (int)(m_displayrect.x() * wchange);
    1200     int y = (int)(m_displayrect.y() * hchange);
     1171    m_displayrect =
     1172        QRect((int)round(m_unbiasedrect.x()      * wmult),
     1173              (int)round(m_unbiasedrect.y()      * hmult),
     1174              (int)ceil( m_unbiasedrect.width()  * wmult),
     1175              (int)ceil( m_unbiasedrect.height() * hmult));
    12011176
    1202     m_displayrect = QRect(x, y, width, height);
    12031177    m_drawwidth = m_displayrect.width();
    12041178
    12051179    delete [] m_drawMap;
     
    13601334
    13611335//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    13621336
    1363 OSDTypeBox::OSDTypeBox(const QString &name, QRect displayrect)
    1364           : OSDType(name)
     1337OSDTypeBox::OSDTypeBox(const QString &name, QRect displayrect,
     1338                       float wmult, float hmult)
     1339    : OSDType(name)
    13651340{
    13661341    size = displayrect;
     1342    m_unbiasedsize =
     1343        QRect((int)round(size.x()      / wmult),
     1344              (int)round(size.y()      / hmult),
     1345              (int)ceil( size.width()  / wmult),
     1346              (int)ceil( size.height() / hmult));
    13671347}
    13681348
     1349void OSDTypeBox::SetRect(QRect newrect, float wmult, float hmult)
     1350{
     1351    size = newrect;
     1352    m_unbiasedsize =
     1353        QRect((int)round(size.x()      / wmult),
     1354              (int)round(size.y()      / hmult),
     1355              (int)ceil( size.width()  / wmult),
     1356              (int)ceil( size.height() / hmult));
     1357}
     1358
    13691359OSDTypeBox::OSDTypeBox(const OSDTypeBox &other)
    13701360          : OSDType(other.m_name)
    13711361{
    13721362    size = other.size;
     1363    m_unbiasedsize = other.m_unbiasedsize;
    13731364}
    13741365
    13751366OSDTypeBox::~OSDTypeBox()
    13761367{
    13771368}
    13781369
    1379 void OSDTypeBox::Reinit(float wchange, float hchange)
     1370void OSDTypeBox::Reinit(float wmult, float hmult)
    13801371{
    1381     int width = (int)(size.width() * wchange);
    1382     int height = (int)(size.height() * hchange);
    1383     int x = (int)(size.x() * wchange);
    1384     int y = (int)(size.y() * hchange);
    1385 
    1386     size = QRect(x, y, width, height);
     1372    size =
     1373        QRect((int)round(m_unbiasedsize.x()      * wmult),
     1374              (int)round(m_unbiasedsize.y()      * hmult),
     1375              (int)ceil( m_unbiasedsize.width()  * wmult),
     1376              (int)ceil( m_unbiasedsize.height() * hmult));
    13871377}
    13881378
    13891379void OSDTypeBox::Draw(OSDSurface *surface, int fade, int maxfade, int xoff,
     
    14981488}       
    14991489   
    15001490OSDTypePositionRectangle::OSDTypePositionRectangle(
    1501                                         const OSDTypePositionRectangle &other)
    1502                         : OSDType(other.m_name), OSDTypePositionIndicator(other)
     1491    const OSDTypePositionRectangle &other)
     1492    : OSDType(other.m_name), OSDTypePositionIndicator(other)
    15031493{
    15041494    for (int i = 0; i < m_numpositions; i++)
    15051495    {
    15061496        QRect tmp = other.positions[i];
    15071497        positions.push_back(tmp);
    15081498    }
     1499    for (int i = 0; i < m_numpositions; i++)
     1500    {
     1501        QRect tmp = other.unbiasedpos[i];
     1502        unbiasedpos.push_back(tmp);
     1503    }
    15091504}
    15101505
    15111506OSDTypePositionRectangle::~OSDTypePositionRectangle()
    15121507{
    15131508}
    15141509
    1515 void OSDTypePositionRectangle::Reinit(float wchange, float hchange)
     1510void OSDTypePositionRectangle::Reinit(float wmult, float hmult)
    15161511{
    15171512    for (int i = 0; i < m_numpositions; i++)
    15181513    {
    1519         QRect tmp = positions[i];
    1520 
    1521         int width = (int)(tmp.width() * wchange);
    1522         int height = (int)(tmp.height() * hchange);
    1523         int x = (int)(tmp.x() * wchange);
    1524         int y = (int)(tmp.y() * hchange);
    1525 
    1526         tmp = QRect(x, y, width, height);
    1527         positions[i] = tmp;
     1514        QRect tmp = unbiasedpos[i];
     1515        positions[i] =
     1516            QRect((int)round(tmp.x()      * wmult),
     1517                  (int)round(tmp.y()      * hmult),
     1518                  (int)ceil( tmp.width()  * wmult),
     1519                  (int)ceil( tmp.height() * hmult));
    15281520    }
    15291521}
    15301522
    1531 void OSDTypePositionRectangle::AddPosition(QRect rect)
     1523void OSDTypePositionRectangle::AddPosition(
     1524    QRect rect, float wmult, float hmult)
    15321525{
    15331526    positions.push_back(rect);
     1527    unbiasedpos.push_back(
     1528        QRect((int)round(rect.x()      / wmult),
     1529              (int)round(rect.y()      / hmult),
     1530              (int)ceil( rect.width()  / wmult),
     1531              (int)ceil( rect.height() / hmult)));
    15341532    m_numpositions++;
    15351533}
    15361534
    1537 void OSDTypePositionRectangle::Draw(OSDSurface *surface, int fade, int maxfade,
    1538                                     int xoff, int yoff)
     1535void OSDTypePositionRectangle::Draw(
     1536    OSDSurface *surface, int fade, int maxfade, int xoff, int yoff)
    15391537{
    15401538    fade = fade;
    15411539    maxfade = maxfade;
     
    16181616//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    16191617
    16201618OSDTypePositionImage::OSDTypePositionImage(const QString &name)
    1621                     : OSDTypeImage(name), OSDTypePositionIndicator()
     1619    : OSDTypeImage(name), OSDTypePositionIndicator(),
     1620      m_wmult(0.0f), m_hmult(0.0f)
    16221621{
    16231622}
    16241623
    16251624OSDTypePositionImage::OSDTypePositionImage(const OSDTypePositionImage &other)
    16261625                    : OSDTypeImage(other), OSDTypePositionIndicator(other)
    16271626{
     1627    m_wmult = other.m_wmult;
     1628    m_hmult = other.m_hmult;
     1629
    16281630    for (int i = 0; i < m_numpositions; i++)
    16291631    {
    1630         QPoint tmp = other.positions[i];
    1631         positions.push_back(tmp);
     1632        positions.push_back(other.positions[i]);
     1633        unbiasedpos.push_back(other.unbiasedpos[i]);
    16321634    }
    16331635}
    16341636
     
    16361638{
    16371639}
    16381640
    1639 void OSDTypePositionImage::Reinit(float wchange, float hchange, float wmult,
    1640                                   float hmult)
     1641void OSDTypePositionImage::Reinit(float wmult, float hmult)
    16411642{
    1642     OSDTypeImage::Reinit(wchange, hchange, wmult, hmult);
     1643    m_wmult = wmult;
     1644    m_hmult = hmult;
     1645   
     1646    OSDTypeImage::Reinit(wmult, hmult);
    16431647
    16441648    for (int i = 0; i < m_numpositions; i++)
    16451649    {
    1646         QPoint tmp = positions[i];
    1647 
    1648         int x = (int)(tmp.x() * wchange);
    1649         int y = (int)(tmp.y() * hchange);
    1650 
    1651         positions[i].setX(x);
    1652         positions[i].setY(y);
     1650        positions[i] =
     1651            QPoint((int)round(unbiasedpos[i].x() * wmult),
     1652                   (int)round(unbiasedpos[i].y() * hmult));
    16531653    }
    16541654}
    16551655
    1656 void OSDTypePositionImage::AddPosition(QPoint pos)
     1656void OSDTypePositionImage::AddPosition(QPoint pos, float wmult, float hmult)
    16571657{
     1658    if (m_wmult == 0.0f || m_hmult == 0.0f)
     1659    {
     1660        m_wmult = wmult;
     1661        m_hmult = hmult;
     1662    }
    16581663    positions.push_back(pos);
     1664    unbiasedpos.push_back(
     1665        QPoint((int)round(pos.x() / wmult),
     1666               (int)round(pos.y() / hmult)));
     1667
     1668    VERBOSE(VB_IMPORTANT,
     1669            "OSDTypePositionImage::AddPosition["<<m_numpositions<<"]("
     1670            <<pos.x()<<"x"<<pos.y()
     1671            <<"  "<<wmult<<", "<<hmult<<")");
     1672
    16591673    m_numpositions++;
    16601674}
    16611675
    16621676void OSDTypePositionImage::Draw(OSDSurface *surface, int fade, int maxfade,
    16631677                                int xoff, int yoff)
    16641678{
     1679    VERBOSE(VB_IMPORTANT,
     1680            "OSDTypePositionImage::Draw["<<m_curposition<<"]("
     1681            <<m_wmult<<", "<<m_hmult<<")");
     1682
    16651683    if (m_curposition < 0 || m_curposition >= m_numpositions)
    16661684        return;
    16671685
    16681686    QPoint pos = positions[m_curposition];
    16691687
    1670     OSDTypeImage::SetPosition(pos);
     1688    OSDTypeImage::SetPosition(pos, m_wmult, m_hmult);
    16711689    OSDTypeImage::Draw(surface, fade, maxfade, xoff, yoff);
    16721690}
    16731691
    16741692//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    16751693
    16761694OSDTypeCC::OSDTypeCC(const QString &name, TTFFont *font, int xoff, int yoff,
    1677                      int dispw, int disph)
     1695                     int dispw, int disph, float wmult, float hmult)
    16781696         : OSDType(name)
    16791697{
    16801698    m_font = font;
     
    16831701    yoffset = yoff;
    16841702    displaywidth = dispw;
    16851703    displayheight = disph;
     1704    m_wmult = wmult;
     1705    m_hmult = hmult;
    16861706
    16871707    QRect rect = QRect(0, 0, 0, 0);
    1688     m_box = new OSDTypeBox("cc_background", rect);
     1708    m_box = new OSDTypeBox("cc_background", rect, wmult, hmult);
    16891709    m_ccbackground = gContext->GetNumSetting("CCBackground", 0);
    16901710}
    16911711
     
    16951715    delete m_box;
    16961716}
    16971717
    1698 void OSDTypeCC::Reinit(int x, int y, int dispw, int disph)
     1718void OSDTypeCC::Reinit(float wmult, float hmult)
    16991719{
     1720    (void) wmult;
     1721    (void) hmult;
     1722    VERBOSE(VB_IMPORTANT, "Programmer error: "
     1723            "Call to OSDTypeCC::Reinit(float,float)");
     1724}
     1725
     1726void OSDTypeCC::Reinit(int x, int y, int dispw, int disph,
     1727                       float wmult, float hmult)
     1728{
    17001729    xoffset = x;
    17011730    yoffset = y;
    17021731    displaywidth = dispw;
    17031732    displayheight = disph;
     1733    m_wmult = wmult;
     1734    m_hmult = hmult;   
    17041735}
    17051736
    17061737void OSDTypeCC::AddCCText(const QString &text, int x, int y, int color,
     
    18751906            {
    18761907                QRect rect = QRect(0, 0, textlength + 4,
    18771908                                   (m_font->Size() * 3 / 2) + 3);
    1878                 m_box->SetRect(rect);
     1909                m_box->SetRect(rect, m_wmult, m_hmult);
    18791910                m_box->Draw(surface, 0, 0, x - 2, y - 2);
    18801911            }
    18811912
  • libs/libmythtv/osdtypes.h

     
    137137
    138138    QString Name() { return m_name; }
    139139
     140    virtual void Reinit(float wmult, float hmult) = 0;
     141
    140142    virtual void Draw(OSDSurface *surface, int fade, int maxfade, int xoff,
    141143                      int yoff) = 0;
    142144
     
    150152{
    151153  public:
    152154    OSDTypeText(const QString &name, TTFFont *font, const QString &text,
    153                 QRect displayrect);
     155                QRect displayrect, float wmult, float hmult);
    154156    OSDTypeText(const OSDTypeText &text);
    155157   ~OSDTypeText();
    156158
    157     void Reinit(float wchange, float hchange);
     159    void Reinit(float wmult, float hmult);
    158160
    159161    void SetAltFont(TTFFont *font);
    160162    void SetUseAlt(bool usealt) { m_usingalt = usealt; }
     
    190192
    191193    QRect m_displaysize;
    192194    QRect m_screensize;
     195    QRect m_unbiasedsize;
    193196    QString m_message;
    194197    QString m_default_msg;
    195198
     
    231234    virtual ~OSDTypeImage();
    232235
    233236    void SetName(const QString &name);
    234     void Reinit(float wchange, float hchange, float wmult, float hmult);
     237    void Reinit(float wmult, float hmult);
    235238
    236239    void LoadImage(const QString &filename, float wmult, float hmult,
    237240                   int scalew = -1, int scaleh = -1);
     
    239242
    240243    void SetStaticSize(int scalew, int scaleh) { m_scalew = scalew;
    241244                                                 m_scaleh = scaleh; }
     245    void SetPosition(QPoint pos, float wmult, float hmult);
    242246
    243     QPoint DisplayPos() { return m_displaypos; }
    244     void SetPosition(QPoint pos) { m_displaypos = pos; }
     247    QPoint DisplayPos() const { return m_displaypos;         }
     248    QRect  ImageSize()  const { return m_imagesize;          }
     249    int    width()      const { return m_imagesize.width();  }
     250    int    height()     const { return m_imagesize.height(); }
    245251
    246     QRect ImageSize() { return m_imagesize; }
    247 
    248     int width() { return m_imagesize.width(); }
    249     int height() { return m_imagesize.height(); }
    250 
    251252    virtual void Draw(OSDSurface *surface, int fade, int maxfade, int xoff,
    252253                      int yoff);
    253254
    254255  protected:
    255256    QRect m_imagesize;
    256257    QPoint m_displaypos;
     258    QPoint m_unbiasedpos;
    257259
    258260    QString m_filename;
    259261
     
    280282                      int scalew = -1, int scaleh = -1);
    281283   ~OSDTypePosSlider();
    282284
    283     void Reinit(float wchange, float hchange, float wmult, float hmult);
     285    void Reinit(float wmult, float hmult);
    284286
    285287    void SetRectangle(QRect rect) { m_displayrect = rect; }
    286288    QRect ImageSize() { return m_imagesize; }
     
    290292
    291293  private:
    292294    QRect m_displayrect;
     295    QRect m_unbiasedrect;
    293296    int m_maxval;
    294297    int m_curval;
    295298};
     
    302305                      int scalew = -1, int scaleh = -1);
    303306   ~OSDTypeFillSlider();
    304307
    305     void Reinit(float wchange, float hchange, float wmult, float hmult);
     308    void Reinit(float wmult, float hmult);
    306309
    307310    void SetRectangle(QRect rect) { m_displayrect = rect; }
    308311    QRect ImageSize() { return m_imagesize; }
     
    314317
    315318  private:
    316319    QRect m_displayrect;
     320    QRect m_unbiasedrect;
    317321    int m_maxval;
    318322    int m_curval;
    319323};
     
    327331                      int scalew = -1, int scaleh = -1);
    328332   ~OSDTypeEditSlider();
    329333
    330     void Reinit(float wchange, float hchange, float wmult, float hmult);
     334    void Reinit(float wmult, float hmult);
    331335
    332336    void SetRectangle(QRect rect) { m_displayrect = rect; }
    333337    QRect ImageSize() { return m_imagesize; }
     
    339343
    340344  private:
    341345    QRect m_displayrect;
     346    QRect m_unbiasedrect;
    342347    int m_maxval;
    343348    int m_curval;
    344349
     
    360365class OSDTypeBox : public OSDType
    361366{
    362367  public:
    363     OSDTypeBox(const QString &name, QRect displayrect);
     368    OSDTypeBox(const QString &name, QRect displayrect,
     369               float wmult, float hmult);
    364370    OSDTypeBox(const OSDTypeBox &other);
    365371   ~OSDTypeBox();
    366372
    367     void Reinit(float wchange, float hchange);
    368     void SetRect(QRect newrect) { size = newrect; }
     373    void Reinit(float wmult, float hmult);
     374    void SetRect(QRect newrect, float wmult, float hmult);
    369375
    370376    void Draw(OSDSurface *surface, int fade, int maxfade, int xoff, int yoff);
    371377
    372378  private:
    373379    QRect size;
     380    QRect m_unbiasedsize;
    374381};
    375382
    376383class OSDTypePositionIndicator
     
    403410    OSDTypePositionRectangle(const OSDTypePositionRectangle &other);
    404411   ~OSDTypePositionRectangle();
    405412
    406     void AddPosition(QRect rect);
     413    void AddPosition(QRect rect, float wmult, float hmult);
    407414
    408     void Reinit(float wchange, float hchange);
     415    void Reinit(float wmult, float hmult);
    409416
    410417    void Draw(OSDSurface *surface, int fade, int maxfade, int xoff, int yoff);
    411418
    412419  private:
    413     vector<QRect> positions;
     420    vector<QRect> positions;
     421    vector<QRect> unbiasedpos;
    414422};
    415423
    416424class OSDTypePositionImage : public virtual OSDTypeImage,
     
    421429    OSDTypePositionImage(const OSDTypePositionImage &other);
    422430   ~OSDTypePositionImage();
    423431
    424     void Reinit(float wchange, float hchange, float wmult, float hmult);
     432    void Reinit(float wmult, float hmult);
    425433
    426     void AddPosition(QPoint pos);
     434    void AddPosition(QPoint pos, float wmult, float hmult);
    427435
    428436    void Draw(OSDSurface *surface, int fade, int maxfade, int xoff, int yoff);
    429437
    430438  private:
    431439    vector<QPoint> positions;
     440    vector<QPoint> unbiasedpos;
     441    float m_wmult;
     442    float m_hmult;
    432443};
    433444
    434445class ccText
     
    445456{
    446457  public:
    447458    OSDTypeCC(const QString &name, TTFFont *font, int xoff, int yoff,
    448               int dispw, int disph);
     459              int dispw, int disph, float wmult, float hmult);
    449460   ~OSDTypeCC();
    450461
    451     void Reinit(int xoff, int yoff, int dispw, int disph);
     462    void Reinit(float wmult, float hmult);
    452463
     464    void Reinit(int xoff, int yoff,
     465                int dispw, int disph,
     466                float wmult, float hmult);
     467
    453468    void AddCCText(const QString &text, int x, int y, int color,
    454469                   bool teletextmode = false);
    455470    void ClearAllCCText();
     
    464479    vector<ccText *> *m_textlist;
    465480    OSDTypeBox *m_box;
    466481    int m_ccbackground;
    467 
     482    float m_wmult, m_hmult;
    468483    int xoffset, yoffset, displaywidth, displayheight;
    469484};
    470485
  • libs/libmythtv/osd.cpp

     
    154154        }
    155155
    156156        OSDTypeCC *ccpage = new OSDTypeCC(name, ccfont, sub_xoff, sub_yoff,
    157                                           sub_dispw, sub_disph);
     157                                          sub_dispw, sub_disph,
     158                                          wmult, hmult);
    158159        container->AddType(ccpage);
    159160    }
    160161
     
    517518        }
    518519    }
    519520
    520     OSDTypeBox *box = new OSDTypeBox(name, area);
     521    OSDTypeBox *box = new OSDTypeBox(name, area, wmult, hmult);
    521522    container->AddType(box);
    522523}
    523524
     
    658659        return;
    659660    }
    660661
    661     OSDTypeText *text = new OSDTypeText(name, ttffont, "", area);
     662    OSDTypeText *text = new OSDTypeText(name, ttffont, "", area, wmult, hmult);
    662663    container->AddType(text);
    663664
    664665    text->SetMultiLine(multiline);
     
    875876                QRect area = parseRect(getFirstText(info));
    876877                normalizeRect(area);
    877878
    878                 rects->AddPosition(area);
     879                rects->AddPosition(area, wmult, hmult);
    879880            }
    880881            else
    881882            {
     
    919920                pos.setX((int)(pos.x() * wmult + xoffset));
    920921                pos.setY((int)(pos.y() * hmult + yoffset));
    921922
    922                 image->AddPosition(pos);
     923                image->AddPosition(pos, wmult, hmult);
    923924            }
    924925            else if (info.tagName() == "staticsize")
    925926            {
     
    18971898    sprintf(name, "%lld-%d", number, type);
    18981899
    18991900    int xpos = (int)((editarrowRect.width() * 1.0 / totalframes) * number);
    1900     xpos = (editarrowRect.left() + xpos) * wmult;
    1901     int ypos = editarrowRect.top() * hmult;
     1901    xpos = (int)((editarrowRect.left() + xpos) * wmult);
     1902    int ypos = (int) (editarrowRect.top() * hmult);
    19021903
    19031904    osdlock.lock();
    19041905
     
    19251926        image = new OSDTypeImage(*editarrowright);
    19261927    }
    19271928
    1928     image->SetPosition(QPoint(xpos, ypos));
     1929    image->SetPosition(QPoint(xpos, ypos), wmult, hmult);
    19291930
    19301931    set->AddType(image);
    19311932    set->Display();