Ticket #4191: 4191-v1.patch

File 4191-v1.patch, 5.4 KB (added by danielk, 13 years ago)

Reviewed patch

  • configure

     
    884884    xvmc_opengl
    885885    xvmc_vld
    886886    dvdv
     887    fribidi
    887888'
    888889
    889890MYTHTV_LIST='
     
    23752376check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
    23762377
    23772378##########################################
     2379# fribidi check
     2380
     2381disable fribidi
     2382FRIBIDI_CONFIG="pkg-config fribidi"
     2383if ( pkg-config fribidi --version ) >/dev/null 2>&1 ; then
     2384    _fribidi_version=`${FRIBIDI_CONFIG} --version | sed 's/[^0-9]//g'`
     2385    if test "$_fribidi_version" -lt 022 ; then
     2386        disable fribidi
     2387    else
     2388        check_cc `${FRIBIDI_CONFIG} --cflags` `${FRIBIDI_CONFIG} --libs` << EOF && enable fribidi
     2389#include <stdio.h>
     2390#include <fribidi/fribidi.h>
     2391int main()
     2392{
     2393    if (fribidi_parse_charset("UTF-8") != FRIBIDI_CHAR_SET_UTF8)
     2394    {
     2395        printf("Fribidi headers are not consistents with the library!\n");
     2396        return 1;
     2397    }
     2398    return 0;
     2399}
     2400EOF
     2401        fi
     2402fi
     2403##########################################
    23782404# SDL check
    23792405
    23802406disable sdl_too_old
     
    29482974  if test x"$mingw32" = x"yes" -o x"$targetos" = x"cygwin" ; then
    29492975    echo "DirectX                   ${directx-no}"
    29502976  fi
     2977  echo "Fribidi formatting        ${fribidi}"
    29512978  echo
    29522979fi
    29532980
     
    30383065  echo "FREETYPE_CFLAGS=`freetype-config --cflags`" >> $MYTH_CONFIG_MAK
    30393066  echo "FREETYPE_LIBS=`freetype-config --libs`" >> $MYTH_CONFIG_MAK
    30403067fi
     3068if enabled fribidi; then
     3069  echo "FRIBIDI_LIBS=`${FRIBIDI_CONFIG} --libs`" >> $MYTH_CONFIG_MAK
     3070  echo "FRIBIDI_CFLAGS=`${FRIBIDI_CONFIG} --cflags`" >> $MYTH_CONFIG_MAK
     3071fi
    30413072if enabled sdl; then
    30423073  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> $MYTH_CONFIG_MAK
    30433074  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> $MYTH_CONFIG_MAK
  • libs/libmythtv/osdtypes.cpp

     
    1616#include "mythcontext.h"
    1717#include "mythdialogs.h"
    1818
     19#ifdef USING_FRIBIDI
     20    #include "fribidi/fribidi.h"
     21    #include <qtextcodec.h>
     22#endif // USING_FRIBIDI
     23
    1924/// Shared OSD image cache
    2025OSDImageCache OSDTypeImage::c_cache;
    2126
     
    750755    m_altfont = font;
    751756}
    752757
    753 QString OSDTypeText::ConvertFromRtoL(const QString &text)
     758QString OSDTypeText::BasicConvertFromRtoL(const QString &text)
    754759{
    755760    QStringList rtl_string_composer;
    756761    bool handle_rtl = false;
     
    790795        }
    791796    }
    792797
    793     return QDeepCopy<QString>(rtl_string_composer.join(""));
     798    QString output = rtl_string_composer.join("");
     799
     800    return QDeepCopy<QString>(output);
    794801}
    795802
     803QString OSDTypeText::ConvertFromRtoL(const QString &text) const
     804{
     805    QString output = BasicConvertFromRtoL(text);
     806
     807#ifdef USING_FRIBIDI
     808    QMutexLocker locker(&fribidi_lock);
     809    if (!codeci)
     810        codeci = QTextCodec::codecForName("utf8");
     811
     812    QCString temp = codeci->fromUnicode(output);
     813
     814    FriBidiCharType base;
     815    size_t len;
     816
     817    bool fribidi_flip_commas = true;
     818    base = (fribidi_flip_commas) ? FRIBIDI_TYPE_ON : FRIBIDI_TYPE_L;
     819
     820    const char *ip = temp;
     821    FriBidiChar logical[strlen(ip) + 1], visual[strlen(ip) + 1];
     822
     823    int char_set_num = fribidi_parse_charset("UTF-8");
     824
     825    len = fribidi_charset_to_unicode(
     826        (FriBidiCharSet) char_set_num, ip, strlen(ip), logical);
     827
     828    bool log2vis = fribidi_log2vis(
     829        logical, len, &base, visual, NULL, NULL, NULL); // output
     830
     831    if (log2vis)
     832        len = fribidi_remove_bidi_marks(visual, len, NULL, NULL, NULL);
     833 
     834    output = "";
     835    for (size_t i = 0; i < len ; i++)
     836        output += QChar(visual[i]);
     837#endif // USING_FRIBIDI
     838
     839    return output;
     840}
     841
    796842void OSDTypeText::SetText(const QString &text)
    797843{
    798844    QMutexLocker locker(&m_lock);
  • libs/libmythtv/libmythtv.pro

     
    248248    using_ivtv:SOURCES += ivtvdecoder.cpp
    249249
    250250    # On screen display (video output overlay)
     251    using_fribidi:DEFINES += USING_FRIBIDI
    251252    HEADERS += osd.h                    osdtypes.h
    252253    HEADERS += osdsurface.h             osdlistbtntype.h
    253254    HEADERS += osdimagecache.h          osdtypeteletext.h
  • libs/libmythtv/osdtypes.h

     
    238238    void SetButton(bool is_button)      { m_button = is_button;     }
    239239    void SetEntryNum(int entrynum)      { m_entrynum = entrynum;    }
    240240
    241     static QString ConvertFromRtoL(const QString &text);
     241    QString ConvertFromRtoL(const QString &text) const;
     242
     243    static QString BasicConvertFromRtoL(const QString &text);
     244
    242245  protected:
    243246    ~OSDTypeText();
    244247
     
    288291    mutable QString m_draw_info_str;
    289292    mutable uint    m_draw_info_len;
    290293    mutable vector<DrawInfo> m_draw_info;
     294
     295    mutable QMutex      fribidi_lock;
     296    mutable QTextCodec *codeci;
    291297};
    292298   
    293299class OSDTypeImage : public OSDType
  • settings.pro

     
    9999EXTRA_LIBS += $$CONFIG_XRANDR_LIBS
    100100EXTRA_LIBS += $$CONFIG_XVMC_LIBS
    101101EXTRA_LIBS += $$CONFIG_OPENGL_LIBS
     102EXTRA_LIBS += $$FRIBIDI_LIBS
    102103
    103104LIRC_LIBS = $$CONFIG_LIRC_LIBS