Newer
Older
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
#include "qwt_text.h"
#include "qwt_text_label.h"
#include "qwt_scale_widget.h"
#include "qwt_abstract_legend.h"
#include <qscrollbar.h>
#include <qmath.h>
struct t_footerData
{
QwtText text;
int frameWidth;
} footer;
struct t_scaleData
{
bool isEnabled;
const QwtScaleWidget *scaleWidget;
QFont scaleFont;
int start;
int end;
int baseLineOffset;
struct t_canvasData
{
int contentsMargins[ QwtPlot::axisCnt ];
} canvas;
};
/*
Extract all layout relevant data from the plot components
*/
void QwtPlotLayout::LayoutData::init( const QwtPlot *plot, const QRectF &rect )
legend.hScrollExtent =
plot->legend()->scrollExtent( Qt::Horizontal );
legend.vScrollExtent =
plot->legend()->scrollExtent( Qt::Vertical );
int w = qMin( hint.width(), qFloor( rect.width() ) );
int h = plot->legend()->heightForWidth( w );
if ( h <= 0 )
if ( !( title.text.testPaintAttribute( QwtText::PaintUsingTextFont ) ) )
title.text.setFont( label->font() );
// footer
footer.frameWidth = 0;
footer.text = QwtText();
if ( plot->footerLabel() )
{
const QwtTextLabel *label = plot->footerLabel();
footer.text = label->text();
if ( !( footer.text.testPaintAttribute( QwtText::PaintUsingTextFont ) ) )
footer.text.setFont( label->font() );
footer.frameWidth = plot->footerLabel()->frameWidth();
}
for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
{
if ( plot->axisEnabled( axis ) )
{
const QwtScaleWidget *scaleWidget = plot->axisWidget( axis );
scale[axis].isEnabled = true;
scale[axis].scaleWidget = scaleWidget;
scale[axis].scaleFont = scaleWidget->font();
scale[axis].start = scaleWidget->startBorderDist();
scale[axis].end = scaleWidget->endBorderDist();
scale[axis].baseLineOffset = scaleWidget->margin();
scale[axis].tickOffset = scaleWidget->margin();
if ( scaleWidget->scaleDraw()->hasComponent(
}
scale[axis].dimWithoutTitle = scaleWidget->dimForLength(
scale[axis].isEnabled = false;
scale[axis].start = 0;
scale[axis].end = 0;
scale[axis].baseLineOffset = 0;
plot->canvas()->getContentsMargins(
&canvas.contentsMargins[ QwtPlot::yLeft ],
&canvas.contentsMargins[ QwtPlot::xTop ],
&canvas.contentsMargins[ QwtPlot::yRight ],
&canvas.contentsMargins[ QwtPlot::xBottom ] );
}
class QwtPlotLayout::PrivateData
{
public:
PrivateData():
QRectF titleRect;
QRectF footerRect;
QRectF legendRect;
QRectF scaleRect[QwtPlot::axisCnt];
QRectF canvasRect;
QwtPlotLayout::LayoutData layoutData;
QwtPlot::LegendPosition legendPos;
double legendRatio;
unsigned int spacing;
unsigned int canvasMargin[QwtPlot::axisCnt];
Loading
Loading full blame...