Ignore:
Timestamp:
May 3, 2016, 5:25:45 PM (9 years ago)
Author:
Silvan Scherrer
Message:

smplayer: update trunk to version 16.4

Location:
smplayer/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • smplayer/trunk

  • smplayer/trunk/src/mplayerwindow.cpp

    r165 r176  
    11/*  smplayer, GUI front-end for mplayer.
    2     Copyright (C) 2006-2014 Ricardo Villalba <rvm@users.sourceforge.net>
     2    Copyright (C) 2006-2016 Ricardo Villalba <rvm@users.sourceforge.net>
    33
    44    This program is free software; you can redistribute it and/or modify
     
    130130        #endif
    131131        setAttribute(Qt::WA_PaintUnclipped);
    132         setAttribute(Qt::WA_PaintOnScreen);
     132        //setAttribute(Qt::WA_PaintOnScreen);
    133133        #endif
    134134#endif
     
    161161
    162162#ifndef Q_OS_WIN
    163         #if QT_VERSION >= 0x050000
    164163        setAttribute(Qt::WA_PaintOnScreen);
    165         #endif
    166164#endif
    167165
     
    174172
    175173#ifndef Q_OS_WIN
    176         #if QT_VERSION >= 0x050000
    177174        setAttribute(Qt::WA_PaintOnScreen, false);
    178         #endif
    179175#endif
    180176
     
    210206        , animated_logo(false)
    211207#endif
    212         , mouse_drag_tracking(false)
    213         , isMoving(false)
    214         , startDrag(QPoint(0,0))
     208        , corner_widget(0)
     209    , drag_state(NOT_DRAGGING)
     210    , start_drag(QPoint(0,0))
     211    , mouse_drag_tracking(false)
    215212{
    216213        setAutoFillBackground(true);
     
    254251}
    255252
     253void MplayerWindow::setCornerWidget(QWidget * w) {
     254        corner_widget = w;
     255
     256        QHBoxLayout * blayout = new QHBoxLayout;
     257        blayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
     258        blayout->addWidget(corner_widget);
     259
     260        QVBoxLayout * layout = new QVBoxLayout(this);
     261        layout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding));
     262        layout->addLayout(blayout);
     263}
     264
    256265#if USE_COLORKEY
    257266void MplayerWindow::setColorKey( QColor c ) {
     
    268277
    269278void MplayerWindow::setLogoVisible( bool b) {
     279        if (corner_widget) {
     280                corner_widget->setVisible(b);
     281        }
     282
    270283#if !LOGO_ANIMATION
    271284        logo->setVisible(b);
     
    468481}
    469482
    470 /* the code in eventFilter is based on dragmovecharm.cpp, under license GPL 2 or 3:
    471    https://qt.gitorious.org/qt-labs/graphics-dojo/source/8000ca3b229344ed2ba2ae81ed5ebaee86e9d63a:dragmove/dragmovecharm.cpp
    472 */
    473483bool MplayerWindow::eventFilter( QObject * object, QEvent * event ) {
    474         //qDebug() << "MplayerWindow::eventFilter" << object;
    475 
    476         if (!mouse_drag_tracking) return false;
    477 
    478         QWidget * w = qobject_cast<QWidget*>(object);
    479         if (!w) return false;
    480 
    481         QEvent::Type type = event->type();
    482         if (type != QEvent::MouseButtonPress && type != QEvent::MouseButtonRelease && type != QEvent::MouseMove) {
    483                 return false;
    484         }
    485 
    486         QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
    487         if (!mouseEvent || mouseEvent->modifiers() != Qt::NoModifier) {
    488                 return false;
    489         }
    490         Qt::MouseButton button = mouseEvent->button();
    491 
    492         bool consumed = false;
    493 
    494         if (type == QEvent::MouseButtonPress && button == Qt::LeftButton) {
    495                 startDrag = mouseEvent->globalPos();
    496                 //qDebug() << "MplayerWindow::eventFilter: startDrag:" << startDrag << "obj:" << object->objectName();
    497                 isMoving = true;
    498                 event->accept();
    499                 consumed = true;
    500         }
    501 
    502         if (type == QEvent::MouseButtonRelease) {
    503                 startDrag = QPoint(0, 0);
    504                 isMoving = false;
    505         }
    506 
    507         if (type == QEvent::MouseMove && isMoving) {
    508                 QPoint pos = mouseEvent->globalPos();
    509                 QPoint diff = pos - startDrag;
    510                 //qDebug() << "MplayerWindow:eventFilter: diff" << diff << "obj:" << object->objectName();
    511                 emit mouseMovedDiff(diff);
    512                 startDrag = pos;
    513                 consumed = true;
    514         }
    515 
    516         return consumed;
     484
     485    if (!mouse_drag_tracking)
     486        return false;
     487
     488    QEvent::Type type = event->type();
     489    if (type != QEvent::MouseButtonPress
     490        && type != QEvent::MouseButtonRelease
     491        && type != QEvent::MouseMove)
     492        return false;
     493
     494    QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
     495    if (!mouseEvent)
     496        return false;
     497
     498    if (mouseEvent->modifiers() != Qt::NoModifier) {
     499        drag_state = NOT_DRAGGING;
     500        return false;
     501    }
     502
     503    if (type == QEvent::MouseButtonPress) {
     504        if (mouseEvent->button() != Qt::LeftButton) {
     505            drag_state = NOT_DRAGGING;
     506            return false;
     507        }
     508
     509        drag_state = START_DRAGGING;
     510        start_drag = mouseEvent->globalPos();
     511        // Don't filter, so others can have a look at it too
     512        return false;
     513    }
     514
     515    if (type == QEvent::MouseButtonRelease) {
     516        if (drag_state != DRAGGING || mouseEvent->button() != Qt::LeftButton) {
     517            drag_state = NOT_DRAGGING;
     518            return false;
     519        }
     520
     521        // Stop dragging and eat event
     522        drag_state = NOT_DRAGGING;
     523        event->accept();
     524        return true;
     525    }
     526
     527    // type == QEvent::MouseMove
     528    if (drag_state == NOT_DRAGGING)
     529        return false;
     530
     531    // buttons() note the s
     532    if (mouseEvent->buttons() != Qt::LeftButton) {
     533        drag_state = NOT_DRAGGING;
     534        return false;
     535    }
     536
     537    QPoint pos = mouseEvent->globalPos();
     538    QPoint diff = pos - start_drag;
     539    if (drag_state == START_DRAGGING) {
     540        // Don't start dragging before moving at least DRAG_THRESHOLD pixels
     541        if (abs(diff.x()) < DRAG_THRESHOLD && abs(diff.y()) < DRAG_THRESHOLD)
     542            return false;
     543
     544        drag_state = DRAGGING;
     545    }
     546
     547    emit mouseMovedDiff(diff);
     548    start_drag = pos;
     549    event->accept();
     550    return true;
    517551}
    518552
Note: See TracChangeset for help on using the changeset viewer.