Ignore:
Timestamp:
May 10, 2017, 3:20:54 PM (7 years ago)
Author:
stoecker
Message:

update qwt and qwtpolar, many QT5 fixes (unfinished)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/qwt/qwt_plot_scaleitem.cpp

    r4271 r8127  
    1010#include "qwt_plot_scaleitem.h"
    1111#include "qwt_plot.h"
    12 #include "qwt_plot_canvas.h"
    1312#include "qwt_scale_map.h"
    1413#include "qwt_interval.h"
     
    3231    }
    3332
    34     void updateBorders( const QRectF &,
    35         const QwtScaleMap &, const QwtScaleMap & );
     33    QwtInterval scaleInterval( const QRectF &,
     34        const QwtScaleMap &, const QwtScaleMap & ) const;
    3635
    3736    QPalette palette;
     
    4140    bool scaleDivFromAxis;
    4241    QwtScaleDraw *scaleDraw;
    43     QRectF canvasRectCache;
    4442};
    4543
    46 void QwtPlotScaleItem::PrivateData::updateBorders( const QRectF &canvasRect,
    47     const QwtScaleMap &xMap, const QwtScaleMap &yMap )
    48 {
    49     canvasRectCache = canvasRect;
    50 
     44QwtInterval QwtPlotScaleItem::PrivateData::scaleInterval( const QRectF &canvasRect,
     45    const QwtScaleMap &xMap, const QwtScaleMap &yMap ) const
     46{
    5147    QwtInterval interval;
    5248    if ( scaleDraw->orientation() == Qt::Horizontal )
     
    6157    }
    6258
    63     QwtScaleDiv scaleDiv = scaleDraw->scaleDiv();
    64     scaleDiv.setInterval( interval );
    65     scaleDraw->setScaleDiv( scaleDiv );
    66 }
     59    return interval;
     60}
     61
    6762/*!
    6863   \brief Constructor for scale item at the position pos.
     
    8479    d_data->scaleDraw->setAlignment( alignment );
    8580
     81    setItemInterest( QwtPlotItem::ScaleInterest, true );
    8682    setZ( 11.0 );
    8783}
     
    137133            if ( plt )
    138134            {
    139                 updateScaleDiv( *plt->axisScaleDiv( xAxis() ),
    140                     *plt->axisScaleDiv( yAxis() ) );
     135                updateScaleDiv( plt->axisScaleDiv( xAxis() ),
     136                    plt->axisScaleDiv( yAxis() ) );
    141137                itemChanged();
    142138            }
     
    164160    {
    165161        d_data->palette = palette;
     162
     163        legendChanged();
    166164        itemChanged();
    167165    }
     
    223221    if ( plt )
    224222    {
    225         updateScaleDiv( *plt->axisScaleDiv( xAxis() ),
    226             *plt->axisScaleDiv( yAxis() ) );
     223        updateScaleDiv( plt->axisScaleDiv( xAxis() ),
     224            plt->axisScaleDiv( yAxis() ) );
    227225    }
    228226
     
    282280
    283281   If distance is >= 0 the scale will be aligned to a
    284    border of the contents rect of the canvas. If
     282   border of the contents rectangle of the canvas. If
    285283   alignment() is QwtScaleDraw::LeftScale, the scale will
    286284   be aligned to the right border, if it is QwtScaleDraw::TopScale
     
    348346    const QRectF &canvasRect ) const
    349347{
     348    QwtScaleDraw *sd = d_data->scaleDraw;
     349
    350350    if ( d_data->scaleDivFromAxis )
    351351    {
    352         if ( canvasRect != d_data->canvasRectCache )
    353             d_data->updateBorders( canvasRect, xMap, yMap );
     352        const QwtInterval interval =
     353            d_data->scaleInterval( canvasRect, xMap, yMap );
     354
     355        if ( interval != sd->scaleDiv().interval() )
     356        {
     357            QwtScaleDiv scaleDiv = sd->scaleDiv();
     358            scaleDiv.setInterval( interval );
     359            sd->setScaleDiv( scaleDiv );
     360        }
    354361    }
    355362
     
    358365    painter->setPen( pen );
    359366
    360     QwtScaleDraw *sd = d_data->scaleDraw;
    361367    if ( sd->orientation() == Qt::Horizontal )
    362368    {
     
    382388        sd->move( canvasRect.left(), y );
    383389        sd->setLength( canvasRect.width() - 1 );
    384         sd->setTransformation( xMap.transformation()->copy() );
     390
     391        QwtTransform *transform = NULL;
     392        if ( xMap.transformation() )
     393            transform = xMap.transformation()->copy();
     394
     395        sd->setTransformation( transform );
    385396    }
    386397    else // == Qt::Vertical
     
    405416        sd->move( x, canvasRect.top() );
    406417        sd->setLength( canvasRect.height() - 1 );
    407         sd->setTransformation( yMap.transformation()->copy() );
     418
     419        QwtTransform *transform = NULL;
     420        if ( yMap.transformation() )
     421            transform = yMap.transformation()->copy();
     422
     423        sd->setTransformation( transform );
    408424    }
    409425
     
    428444    const QwtScaleDiv& yScaleDiv )
    429445{
    430     QwtScaleDraw *sd = d_data->scaleDraw;
    431     if ( d_data->scaleDivFromAxis && sd )
    432     {
    433         sd->setScaleDiv(
    434             sd->orientation() == Qt::Horizontal ? xScaleDiv : yScaleDiv );
     446    QwtScaleDraw *scaleDraw = d_data->scaleDraw;
     447
     448    if ( d_data->scaleDivFromAxis && scaleDraw )
     449    {
     450        const QwtScaleDiv &scaleDiv =
     451            scaleDraw->orientation() == Qt::Horizontal ? xScaleDiv : yScaleDiv;
    435452
    436453        const QwtPlot *plt = plot();
    437454        if ( plt != NULL )
    438455        {
    439             d_data->updateBorders( plt->canvas()->contentsRect(),
    440                 plt->canvasMap( xAxis() ), plt->canvasMap( yAxis() ) );
    441         }
    442     }
    443 }
     456            const QRectF canvasRect = plt->canvas()->contentsRect();
     457
     458            const QwtInterval interval = d_data->scaleInterval(
     459                canvasRect, plt->canvasMap( xAxis() ), plt->canvasMap( yAxis() ) );
     460
     461            QwtScaleDiv sd = scaleDiv;
     462            sd.setInterval( interval );
     463
     464            if ( sd != scaleDraw->scaleDiv() )
     465            {
     466                // the internal label cache of QwtScaleDraw
     467                // is cleared here, so better avoid pointless
     468                // assignments.
     469
     470                scaleDraw->setScaleDiv( sd );
     471            }
     472        }
     473        else
     474        {
     475            scaleDraw->setScaleDiv( scaleDiv );
     476        }
     477    }
     478}
Note: See TracChangeset for help on using the changeset viewer.