//*CMZ : 2.00/10 16/07/98 18.50.45 by Fons Rademakers
//*-- Author : Fons Rademakers 15/07/98
//*KEEP,CopyRight,T=C.
/*************************************************************************
* Copyright(c) 1995-1998, The ROOT System, All rights reserved. *
* Authors: Rene Brun, Nenad Buncic, Valery Fine, Fons Rademakers. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation for non-commercial purposes is hereby granted without *
* fee, provided that the above copyright notice appears in all copies *
* and that both the copyright notice and this permission notice appear *
* in the supporting documentation. The authors make no claims about the *
* suitability of this software for any purpose. *
* It is provided "as is" without express or implied warranty. *
*************************************************************************/
//*KEND.
//////////////////////////////////////////////////////////////////////////
// //
// TRootEmbeddedCanvas //
// //
// This class creates a TGCanvas in which a TCanvas is created. Use //
// GetCanvas() to get a pointer to the TCanvas. //
// //
//////////////////////////////////////////////////////////////////////////
//*KEEP,TRootEmbeddedCanvas.
#include "TRootEmbeddedCanvas.h"
//*KEEP,TCanvas.
#include "TCanvas.h"
//*KEND.
//////////////////////////////////////////////////////////////////////////
// //
// TRootEmbeddedContainer //
// //
// Utility class used by TRootEmbeddedCanvas. The TRootEmbeddedContainer//
// is the frame embedded in the TGCanvas widget. The ROOT graphics goes //
// into this frame. This class is used to enable input events on this //
// graphics frame and forward the events to the TRootEmbeddedCanvas //
// handlers. //
// //
//////////////////////////////////////////////////////////////////////////
class TRootEmbeddedContainer : public TGCompositeFrame {
private:
TRootEmbeddedCanvas *fCanvas; // pointer back to embedded canvas
public:
TRootEmbeddedContainer(const TGWindow *p, TRootEmbeddedCanvas *c,
UInt_t w, UInt_t h, UInt_t options = 0,
ULong_t back = fgWhitePixel);
Bool_t HandleButton(Event_t *ev)
{ return fCanvas->HandleContainerButton(ev); }
Bool_t HandleConfigureNotify(Event_t *ev)
{ TGFrame::HandleConfigureNotify(ev);
return fCanvas->HandleContainerConfigure(ev); }
Bool_t HandleKey(Event_t *ev)
{ return fCanvas->HandleContainerKey(ev); }
Bool_t HandleMotion(Event_t *ev)
{ return fCanvas->HandleContainerMotion(ev); }
Bool_t HandleExpose(Event_t *ev)
{ TGWindow::HandleExpose(ev);
return fCanvas->HandleContainerExpose(ev); }
};
//______________________________________________________________________________
TRootEmbeddedContainer::TRootEmbeddedContainer(const TGWindow *p,
TRootEmbeddedCanvas *c, UInt_t w, UInt_t h, UInt_t options,
ULong_t back) : TGCompositeFrame(p, w, h, options, back)
{
// Create a canvas container.
fCanvas = c;
gGXW->GrabButton(fId, kAnyButton, kAnyModifier,
kButtonPressMask | kButtonReleaseMask,
kNone, kNone);
gGXW->SelectInput(fId, kKeyPressMask | kExposureMask | kPointerMotionMask |
kStructureNotifyMask);
}
ClassImp(TRootEmbeddedCanvas)
//______________________________________________________________________________
TRootEmbeddedCanvas::TRootEmbeddedCanvas(const char *name, const TGWindow *p,
UInt_t w, UInt_t h, UInt_t options, ULong_t back)
: TGCanvas(p, w, h, options, back)
{
// Create an TCanvas embedded in a TGFrame. A pointer to the TCanvas can
// be obtained via the GetCanvas() member function.
fButton = 0;
fAutoFit = kTRUE;
fCanvasContainer = new TRootEmbeddedContainer(GetViewPort(), this, 10, 10);
SetContainer(fCanvasContainer);
Int_t wid = gGXW->InitWindow((ULong_t) fCanvasContainer->GetId());
fCanvas = new TCanvas(name, 10, 10, wid);
}
//______________________________________________________________________________
TRootEmbeddedCanvas::~TRootEmbeddedCanvas()
{
// Delete embedded ROOT canvas.
delete fCanvas;
delete fCanvasContainer;
}
//______________________________________________________________________________
Bool_t TRootEmbeddedCanvas::HandleContainerButton(Event_t *event)
{
// Handle mouse button events in the canvas container.
Int_t button = event->fCode;
Int_t x = event->fX;
Int_t y = event->fY;
if (event->fType == kButtonPress) {
fButton = button;
if (button == kButton1)
fCanvas->HandleInput(kButton1Down, x, y);
if (button == kButton2)
fCanvas->HandleInput(kButton2Down, x, y);
if (button == kButton3) {
fCanvas->HandleInput(kButton3Down, x, y);
fButton = 0; // button up is consumed by TContextMenu
}
} else if (event->fType == kButtonRelease) {
if (button == kButton1)
fCanvas->HandleInput(kButton1Up, x, y);
if (button == kButton2)
fCanvas->HandleInput(kButton2Up, x, y);
if (button == kButton3)
fCanvas->HandleInput(kButton3Up, x, y);
fButton = 0;
}
return kTRUE;
}
//______________________________________________________________________________
Bool_t TRootEmbeddedCanvas::HandleContainerConfigure(Event_t *)
{
// Handle configure (i.e. resize) event.
if (fAutoFit) {
fCanvas->Resize();
fCanvas->Update();
}
return kTRUE;
}
//______________________________________________________________________________
Bool_t TRootEmbeddedCanvas::HandleContainerKey(Event_t *event)
{
// Handle keyboard events in the canvas container.
//printf("key event %dn", event->fCode);
if (event->fCode) { }
return kTRUE;
}
//______________________________________________________________________________
Bool_t TRootEmbeddedCanvas::HandleContainerMotion(Event_t *event)
{
// Handle mouse motion event in the canvas container.
Int_t x = event->fX;
Int_t y = event->fY;
if (fButton == 0)
fCanvas->HandleInput(kMouseMotion, x, y);
if (fButton == kButton1)
fCanvas->HandleInput(kButton1Motion, x, y);
return kTRUE;
}
//______________________________________________________________________________
Bool_t TRootEmbeddedCanvas::HandleContainerExpose(Event_t *event)
{
// Handle expose events.
if (event->fCount == 0)
fCanvas->Flush();
return kTRUE;
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.