Skip to content
Snippets Groups Projects
qrootcanvas.cpp 2.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • mingf2's avatar
    mingf2 committed
    #include "qrootcanvas.h"
    #include <QDebug>
    #include "TVirtualX.h"
    QRootCanvas::QRootCanvas(QWidget *parent) : QWidget(parent)
    {
        setAttribute(Qt::WA_PaintOnScreen,false);
        setAttribute(Qt::WA_OpaquePaintEvent,true);
        setAttribute(Qt::WA_NativeWindow,true);
        setUpdatesEnabled(kFALSE);
        setMouseTracking(kTRUE);
        setMinimumSize(300,200);
        timer=new QTimer();
        connect(timer,SIGNAL(timeout()),this,SLOT(handleRootEvents()));
        timer->start(100);
        fCanvas=new TCanvas("canvas",width(),height(),gVirtualX->AddWindow(ULong_t(winId()),UInt_t(width()),UInt_t(height())));
        fCanvas->cd();
    
    
    }
    
    QRootCanvas::~QRootCanvas()
    {
        delete fCanvas;
    }
    
    void QRootCanvas::handleRootEvents()
    {
        gSystem->ProcessEvents();
    }
    
    void QRootCanvas::mouseMoveEvent(QMouseEvent *e)
    {
        if (fCanvas) {
           switch (e->button()) {
              case Qt::LeftButton :
                 fCanvas->HandleInput(kButton1Motion, e->x(), e->y());
                 break;
              case Qt::MidButton :
                 fCanvas->HandleInput(kButton2Motion, e->x(), e->y());
                 break;
              case Qt::RightButton :
                 fCanvas->HandleInput(kButton3Motion, e->x(), e->y());
                 break;
              default:
                 break;
           }
        }
    }
    
    void QRootCanvas::mousePressEvent(QMouseEvent *e)
    {
        if (fCanvas) {
           switch (e->button()) {
              case Qt::LeftButton :
                 fCanvas->HandleInput(kButton1Down, e->x(), e->y());
                 break;
              case Qt::MidButton :
                 fCanvas->HandleInput(kButton2Down, e->x(), e->y());
                 break;
              case Qt::RightButton :
                 // does not work properly on Linux...
                 // ...adding setAttribute(Qt::WA_PaintOnScreen, true)
                 // seems to cure the problem
                 fCanvas->HandleInput(kButton3Down, e->x(), e->y());
                 break;
              default:
                 break;
           }
        }
    }
    
    void QRootCanvas::mouseReleaseEvent(QMouseEvent *e)
    {
        if (fCanvas) {
           switch (e->button()) {
              case Qt::LeftButton :
                 fCanvas->HandleInput(kButton1Up, e->x(), e->y());
                 break;
              case Qt::MidButton :
                 fCanvas->HandleInput(kButton2Up, e->x(), e->y());
                 break;
              case Qt::RightButton :
                 // does not work properly on Linux...
                 // ...adding setAttribute(Qt::WA_PaintOnScreen, true)
                 // seems to cure the problem
                 fCanvas->HandleInput(kButton3Up, e->x(), e->y());
                 break;
              default:
                 break;
           }
        }
    }
    
    void QRootCanvas::paintEvent(QPaintEvent *)
    {
        if(fCanvas){
            fCanvas->Resize();
            fCanvas->Update();
        }
    }
    
    void QRootCanvas::resizeEvent(QResizeEvent *e)
    {
        if(fCanvas){
            fCanvas->SetCanvasSize(UInt_t(e->size().width()),UInt_t(e->size().height()));
            fCanvas->Resize();
            fCanvas->Update();
        }
    }