1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
#include "SVGFrame.h"
#include "x2goclientconfig.h"
#include <QPainter>
#include <QTimer>
#include "x2gologdebug.h"
#include <QResizeEvent>
SVGFrame::SVGFrame ( QString fname,bool st,QWidget* parent,
Qt::WFlags f ) :QFrame ( parent,f )
{
empty=false;
#ifdef Q_OS_WIN
parentWidget=0;
#endif
if ( fname==QString::null )
empty=true;
if ( !empty )
{
repaint=true;
drawImg=st;
renderer=new QSvgRenderer ( this );
renderer->load ( fname );
if ( drawImg )
{
setAutoFillBackground ( true );
QPalette pal=palette();
QImage img ( renderer->defaultSize(),
QImage::Format_ARGB32_Premultiplied );
QPainter p ( &img );
renderer->render ( &p );
pal.setBrush ( QPalette::Window,QBrush ( QPixmap::fromImage ( img ) ) );
setPalette ( pal );
}
else
{
QTimer *timer = new QTimer ( this );
connect ( timer, SIGNAL ( timeout() ), this, SLOT ( update() ) );
if ( renderer->animated() )
{
timer->start ( 1000/renderer->framesPerSecond() );
x2goDebug<<"Animated, fps:"<<renderer->framesPerSecond() <<endl;
}
}
}
}
SVGFrame::SVGFrame ( QWidget* parent,
Qt::WFlags f ) :QFrame ( parent,f )
{
repaint=false;
empty=true;
}
void SVGFrame::paintEvent ( QPaintEvent* event )
{
if ( repaint && !drawImg && !empty )
{
QPainter p ( this );
p.setViewport ( 0, 0, width(), height() );
p.eraseRect ( 0, 0, width(), height() );
renderer->render ( &p );
}
QFrame::paintEvent ( event );
}
void SVGFrame::resizeEvent ( QResizeEvent* event )
{
QFrame::resizeEvent ( event );
emit resized ( event->size() );
if ( drawImg && event->size().width() >0 && event->size().height() >0 &&!empty )
{
QPalette pal=palette();
QImage img ( event->size(),QImage::Format_ARGB32_Premultiplied );
QPainter p ( &img );
if ( p.isActive() )
renderer->render ( &p );
pal.setBrush ( QPalette::Window,QBrush ( QPixmap::fromImage ( img ) ) );
setPalette ( pal );
}
}
QSize SVGFrame::sizeHint() const
{
if ( !empty )
return renderer->defaultSize();
return QFrame::sizeHint();
}
void SVGFrame::loadBg ( QString fl )
{
renderer->load ( fl );
update();
}
#ifdef Q_OS_WIN
#include "wapi.h"
void SVGFrame::mousePressEvent ( QMouseEvent * event )
{
/* if ( isVisible() )
{
int vBorder;
int hBorder;
int barHeight;
if ( parentWidget )
wapiGetBorders ( parentWidget->winId(), vBorder, hBorder, barHeight );
x2goDebug<<"svg frame: "<<event->pos() <<
":"<<mapFromGlobal ( event->pos() ) <<":"<<barHeight<<":"<<vBorder<<":"
<<hBorder<<":"<<pos() <<endl;
QMouseEvent * nevent=new QMouseEvent(event->type(), QPoint(0,0),
event->button(), event-> buttons(), event->modifiers());
QFrame::mousePressEvent ( nevent );
return;
}*/
QFrame::mousePressEvent ( event );
}
#endif
|