55 ClassImp(TGMdiDecorFrame);
56 ClassImp(TGMdiTitleBar);
57 ClassImp(TGMdiButtons);
58 ClassImp(TGMdiTitleIcon);
59 ClassImp(TGMdiWinResizer);
60 ClassImp(TGMdiVerticalWinResizer);
61 ClassImp(TGMdiHorizontalWinResizer);
62 ClassImp(TGMdiCornerWinResizer);
69 TGMdiDecorFrame::TGMdiDecorFrame(TGMdiMainFrame *main, TGMdiFrame *frame,
70 Int_t w, Int_t h,
const TGGC *boxGC,
71 UInt_t options, Pixel_t back) :
72 TGCompositeFrame(main->GetContainer(), w, h,
73 options | kOwnBackground | kVerticalFrame | kFixedSize, back)
79 fIsMinimized = fIsMaximized = kFALSE;
80 fMinimizedX = fMinimizedY = 0;
81 fMinimizedUserPlacement = kFALSE;
82 fButtonMask = kMdiDefaultHints;
83 SetCleanup(kDeepCleanup);
85 SetDecorBorderWidth(kMdiBorderWidth);
87 fTitlebar =
new TGMdiTitleBar(
this, fMdiMainFrame);
89 fLHint =
new TGLayoutHints(kLHintsExpandX);
90 fExpandHint =
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
92 AddFrame(fTitlebar, fLHint);
93 fTitlebar->LayoutButtons(fButtonMask, kFALSE, kFALSE);
95 fUpperHR =
new TGMdiVerticalWinResizer(
this, main, kMdiResizerTop,
96 boxGC, kMdiBorderWidth);
97 fLowerHR =
new TGMdiVerticalWinResizer(
this, main, kMdiResizerBottom,
98 boxGC, kMdiBorderWidth);
99 fLeftVR =
new TGMdiHorizontalWinResizer(
this, main, kMdiResizerLeft,
100 boxGC, kMdiBorderWidth);
101 fRightVR =
new TGMdiHorizontalWinResizer(
this, main, kMdiResizerRight,
102 boxGC, kMdiBorderWidth);
104 fUpperLeftCR =
new TGMdiCornerWinResizer(
this, main,
105 kMdiResizerTop | kMdiResizerLeft,
106 boxGC, kMdiBorderWidth);
107 fLowerLeftCR =
new TGMdiCornerWinResizer(
this, main,
108 kMdiResizerBottom | kMdiResizerLeft,
109 boxGC, kMdiBorderWidth);
110 fUpperRightCR =
new TGMdiCornerWinResizer(
this, main,
111 kMdiResizerTop | kMdiResizerRight,
112 boxGC, kMdiBorderWidth);
113 fLowerRightCR =
new TGMdiCornerWinResizer(
this, main,
114 kMdiResizerBottom | kMdiResizerRight,
115 boxGC, kMdiBorderWidth);
117 fUpperHR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
118 fLowerHR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
119 fLeftVR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
120 fRightVR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
121 fUpperLeftCR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
122 fLowerLeftCR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
123 fUpperRightCR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
124 fLowerRightCR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
126 AddInput(kStructureNotifyMask | kButtonPressMask);
128 fFrame->ReparentWindow(
this, fBorderWidth, fTitlebar->GetDefaultHeight());
129 fFrame->fParent =
this;
130 AddFrame(fFrame, fExpandHint);
133 Resize(GetDefaultSize());
137 TGFrame::SetWindowName();
139 fFrame->RaiseWindow();
140 fTitlebar->RaiseWindow();
146 TGMdiDecorFrame::~TGMdiDecorFrame()
148 if (!MustCleanup()) {
155 delete fUpperRightCR;
156 delete fLowerRightCR;
164 void TGMdiDecorFrame::SetDecorBorderWidth(Int_t bw)
172 void TGMdiDecorFrame::SetMdiButtons(ULong_t buttons)
174 fButtonMask = buttons;
175 fTitlebar->LayoutButtons(fButtonMask, fIsMinimized, fIsMaximized);
176 if (fButtonMask & kMdiSize) {
177 fUpperHR->Activate(kTRUE);
178 fLowerHR->Activate(kTRUE);
179 fLeftVR->Activate(kTRUE);
180 fRightVR->Activate(kTRUE);
181 fUpperLeftCR->Activate(kTRUE);
182 fLowerLeftCR->Activate(kTRUE);
183 fUpperRightCR->Activate(kTRUE);
184 fLowerRightCR->Activate(kTRUE);
186 fUpperHR->Activate(kFALSE);
187 fLowerHR->Activate(kFALSE);
188 fLeftVR->Activate(kFALSE);
189 fRightVR->Activate(kFALSE);
190 fUpperLeftCR->Activate(kFALSE);
191 fLowerLeftCR->Activate(kFALSE);
192 fUpperRightCR->Activate(kFALSE);
193 fLowerRightCR->Activate(kFALSE);
200 void TGMdiDecorFrame::SetResizeMode(Int_t mode)
202 fUpperHR->SetResizeMode(mode);
203 fLowerHR->SetResizeMode(mode);
204 fLeftVR->SetResizeMode(mode);
205 fRightVR->SetResizeMode(mode);
206 fUpperLeftCR->SetResizeMode(mode);
207 fLowerLeftCR->SetResizeMode(mode);
208 fUpperRightCR->SetResizeMode(mode);
209 fLowerRightCR->SetResizeMode(mode);
215 void TGMdiDecorFrame::Layout()
217 RemoveInput(kStructureNotifyMask);
218 TGCompositeFrame::Layout();
219 AddInput(kStructureNotifyMask);
221 if (fIsMaximized == kFALSE) {
222 fUpperLeftCR->Move(0, 0);
223 fUpperRightCR->Move(fWidth - fUpperRightCR->GetWidth(), 0);
224 fLowerLeftCR->Move(0, fHeight - fLowerLeftCR->GetHeight());
225 fLowerRightCR->Move(fWidth - fLowerRightCR->GetWidth(),
226 fHeight - fLowerRightCR->GetHeight());
228 fLeftVR->MoveResize(0, fUpperLeftCR->GetHeight(), fLeftVR->GetWidth(),
229 fHeight - fUpperLeftCR->GetHeight() -
230 fLowerLeftCR->GetHeight());
231 fUpperHR->MoveResize(fUpperLeftCR->GetWidth(), 0,
232 fWidth - fUpperRightCR->GetWidth() -
233 fUpperLeftCR->GetWidth(), fUpperHR->GetHeight());
234 fRightVR->MoveResize(fWidth - fRightVR->GetWidth(),
235 fUpperRightCR->GetHeight(), fRightVR->GetWidth(),
236 fHeight - fUpperLeftCR->GetHeight() -
237 fLowerLeftCR->GetHeight());
238 fLowerHR->MoveResize(fLowerLeftCR->GetWidth(), fHeight -
239 fLowerHR->GetHeight(),
240 fWidth - fLowerRightCR->GetWidth() -
241 fLowerLeftCR->GetWidth(), fLowerHR->GetHeight());
248 void TGMdiDecorFrame::SetWindowName(
const char *name)
250 fTitlebar->GetWinName()->SetText(
new TGString(name));
257 void TGMdiDecorFrame::SetWindowIcon(
const TGPicture *icon)
259 fTitlebar->GetWinIcon()->SetPicture(icon);
260 fClient->NeedRedraw(fTitlebar->GetWinIcon());
266 void TGMdiDecorFrame::Move(Int_t x, Int_t y)
269 fMdiMainFrame->SetHsbPosition(fMdiMainFrame->GetViewPort()->GetWidth());
272 fMdiMainFrame->SetVsbPosition(fMdiMainFrame->GetViewPort()->GetHeight());
274 TGCompositeFrame::Move(x, y);
275 if (IsMinimized()) fMinimizedUserPlacement = kTRUE;
276 if (IsMapped() && !IsMaximized()) fMdiMainFrame->Layout();
282 void TGMdiDecorFrame::MoveResize(Int_t x, Int_t y, UInt_t w, UInt_t h)
285 fMdiMainFrame->SetHsbPosition(fMdiMainFrame->GetViewPort()->GetWidth());
288 fMdiMainFrame->SetVsbPosition(fMdiMainFrame->GetViewPort()->GetHeight());
290 TGCompositeFrame::MoveResize(x, y, w, h);
291 if (IsMinimized()) fMinimizedUserPlacement = kTRUE;
292 if (IsMapped() && !IsMaximized()) fMdiMainFrame->Layout();
298 Bool_t TGMdiDecorFrame::HandleConfigureNotify(Event_t *event)
300 if ((event->fX < 0) || (event->fY < 0) ||
301 (event->fX + event->fWidth > fMdiMainFrame->GetViewPort()->GetWidth()) ||
302 (event->fY + event->fHeight > fMdiMainFrame->GetViewPort()->GetHeight())) {
303 fMdiMainFrame->Resize();
306 if (event->fWindow == fFrame->GetId()) {
307 UInt_t newW =
event->fWidth + 2 * fBorderWidth;
308 UInt_t newH =
event->fHeight + 2 * fBorderWidth +
309 fTitlebar->GetDefaultHeight();
311 if ((fWidth != newW) || (fHeight != newH)) {
314 fMdiMainFrame->Layout();
317 fMdiMainFrame->Layout();
324 Bool_t TGMdiDecorFrame::HandleButton(Event_t *event)
326 if (event->fType == kButtonPress) {
328 fTitlebar->GetWinIcon()->GetPopup()->EndMenu(ud);
329 SendMessage(fMdiMainFrame, MK_MSG(kC_MDI, kMDI_CURRENT), fId, 0);
341 TGMdiTitleBar::TGMdiTitleBar(
const TGWindow *p,
const TGWindow *mdiwin,
343 TGCompositeFrame(p, 10, 10, kOwnBackground | kHorizontalFrame)
346 fEditDisabled = kTRUE;
348 fMidButPressed = fLeftButPressed = fRightButPressed = kFALSE;
350 AddInput(kButtonPressMask | kButtonReleaseMask | kButtonMotionMask);
352 fLHint =
new TGLayoutHints(kLHintsNormal);
353 fLeftHint =
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 3, 1, 1, 1);
355 fMiddleHint =
new TGLayoutHints(kLHintsLeft | kLHintsCenterY | kLHintsExpandX, 1, 1, 1, 1);
356 fRightHint =
new TGLayoutHints(kLHintsRight | kLHintsCenterY, 1, 2, 1, 1);
358 fLFrame =
new TGCompositeFrame(
this, 10, 10, kHorizontalFrame);
359 fMFrame =
new TGCompositeFrame(
this, 10, 10, kHorizontalFrame);
360 fRFrame =
new TGCompositeFrame(
this, 10, 10, kHorizontalFrame);
361 AddFrame(fLFrame, fLeftHint);
362 AddFrame(fMFrame, fMiddleHint);
363 AddFrame(fRFrame, fRightHint);
365 fWinIcon =
new TGMdiTitleIcon(fLFrame,
this,
366 fClient->GetPicture(
"mdi_default.xpm"),
368 fLFrame->AddFrame(fWinIcon, fLHint);
370 fWinName =
new TGLabel(fMFrame,
new TGString(name));
371 fWinName->SetTextJustify(kTextLeft);
372 fMFrame->AddFrame(fWinName, fLHint);
374 fButtons =
new TGMdiButtons(fRFrame,
this);
375 fRFrame->AddFrame(fButtons, fLHint);
386 TGMdiTitleBar::~TGMdiTitleBar()
388 if (!MustCleanup()) {
399 void TGMdiTitleBar::LayoutButtons(UInt_t buttonmask,Bool_t isMinimized,
402 fWinIcon->GetPopup()->EnableEntry(kMdiMove);
404 if (buttonmask & kMdiSize) {
405 fWinIcon->GetPopup()->EnableEntry(kMdiSize);
407 fWinIcon->GetPopup()->DisableEntry(kMdiSize);
410 if (buttonmask & kMdiMenu) {
411 fLFrame->ShowFrame(fWinIcon);
413 fLFrame->HideFrame(fWinIcon);
416 if (buttonmask & kMdiClose) {
417 fButtons->ShowFrame(fButtons->GetButton(4));
418 fWinIcon->GetPopup()->EnableEntry(kMdiClose);
420 fButtons->HideFrame(fButtons->GetButton(4));
421 fWinIcon->GetPopup()->DisableEntry(kMdiClose);
424 if (buttonmask & kMdiHelp) {
425 fButtons->ShowFrame(fButtons->GetButton(3));
427 fButtons->HideFrame(fButtons->GetButton(3));
430 if ((buttonmask & kMdiMaximize) && (!isMaximized)) {
431 fButtons->ShowFrame(fButtons->GetButton(2));
432 fWinIcon->GetPopup()->EnableEntry(kMdiMaximize);
434 fButtons->HideFrame(fButtons->GetButton(2));
435 fWinIcon->GetPopup()->DisableEntry(kMdiMaximize);
438 if (isMinimized | isMaximized) {
439 fButtons->ShowFrame(fButtons->GetButton(1));
440 fWinIcon->GetPopup()->EnableEntry(kMdiRestore);
441 fWinIcon->GetPopup()->DisableEntry(kMdiSize);
442 if (isMaximized) fWinIcon->GetPopup()->DisableEntry(kMdiMove);
444 fButtons->HideFrame(fButtons->GetButton(1));
445 fWinIcon->GetPopup()->DisableEntry(kMdiRestore);
448 if ((buttonmask & kMdiMinimize) && (!isMinimized)) {
449 fButtons->ShowFrame(fButtons->GetButton(0));
450 fWinIcon->GetPopup()->EnableEntry(kMdiMinimize);
452 fButtons->HideFrame(fButtons->GetButton(0));
453 fWinIcon->GetPopup()->DisableEntry(kMdiMinimize);
462 void TGMdiTitleBar::SetTitleBarColors(UInt_t fore, UInt_t back, TGFont *font)
464 SetBackgroundColor(back);
466 fClient->GetFont(font->GetName());
467 fWinName->SetTextFont(font);
468 fWinName->SetTextColor(fore, kFALSE);
469 fMFrame->SetBackgroundColor(back);
470 fWinName->SetBackgroundColor(back);
471 fWinIcon->SetBackgroundColor(back);
472 fButtons->SetBackgroundColor(back);
474 fClient->NeedRedraw(
this);
475 fClient->NeedRedraw(fWinName);
476 fClient->NeedRedraw(fMFrame);
477 fClient->NeedRedraw(fButtons);
478 fClient->NeedRedraw(fWinIcon);
479 fWinIcon->DoRedraw();
485 Bool_t TGMdiTitleBar::HandleDoubleClick(Event_t *event)
487 if ((event->fType == kButtonPress) && (event->fCode == kButton1)) {
488 SendMessage(fMdiWin, MK_MSG(kC_MDI, kMDI_MAXIMIZE), fParent->GetId(), 0);
496 Bool_t TGMdiTitleBar::HandleButton(Event_t *event)
498 if (event->fType == kButtonPress) {
500 GetWinIcon()->GetPopup()->EndMenu(ud);
501 gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kMove));
502 switch (event->fCode) {
506 fLeftButPressed = kTRUE;
507 SendMessage(fMdiWin, MK_MSG(kC_MDI, kMDI_CURRENT), fParent->GetId(), 0);
511 fMidButPressed = kTRUE;
515 gVirtualX->LowerWindow(fParent->GetId());
516 fRightButPressed = kTRUE;
520 gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
521 gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kPointer));
522 switch (event->fCode) {
526 fLeftButPressed = kFALSE;
530 fMidButPressed = kFALSE;
534 fRightButPressed = kFALSE;
538 TGFrame *f = GetFrameFromPoint(event->fX, event->fY);
539 if (f && (f !=
this)) {
540 TranslateCoordinates(f, event->fX, event->fY, event->fX, event->fY);
541 f->HandleButton(event);
550 Bool_t TGMdiTitleBar::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
552 switch (GET_MSG(msg)) {
554 switch (GET_SUBMSG(msg)) {
557 SendMessage(fMdiWin, MK_MSG(kC_MDI, (EWidgetMessageTypes)parm1),
558 fParent->GetId(), parm2);
569 Bool_t TGMdiTitleBar::HandleMotion(Event_t *event)
571 if (event->fWindow != fId)
return kTRUE;
572 if (!fLeftButPressed)
return kTRUE;
574 Int_t x = ((TGFrame *)fParent)->GetX();
575 Int_t y = ((TGFrame *)fParent)->GetY();
576 ((TGFrame *)fParent)->Move(x + event->fX - fX0, y + event->fY - fY0);
585 void TGMdiTitleBar::AddFrames(TGMdiTitleIcon *icon, TGMdiButtons *buttons)
587 icon->ReparentWindow(fLFrame);
588 buttons->ReparentWindow(fRFrame);
589 fLFrame->AddFrame(icon, fLHint);
590 fLFrame->ShowFrame(icon);
591 fRFrame->AddFrame(buttons, fLHint);
592 fRFrame->ShowFrame(buttons);
599 void TGMdiTitleBar::RemoveFrames(TGMdiTitleIcon *icon, TGMdiButtons *buttons)
601 fLFrame->RemoveFrame(icon);
602 fRFrame->RemoveFrame(buttons);
611 TGMdiButtons::TGMdiButtons(
const TGWindow *p,
const TGWindow *titlebar) :
612 TGCompositeFrame(p, 10, 10, kHorizontalFrame)
614 fDefaultHint =
new TGLayoutHints(kLHintsNormal, 0, 0, 1, 0);
615 fCloseHint =
new TGLayoutHints(kLHintsNormal, 2, 0, 1, 0);
616 fEditDisabled = kTRUE;
621 fButton[0] =
new TGPictureButton(
this,
622 fClient->GetPicture(
"mdi_minimize.xpm"),
624 fButton[0]->SetToolTipText(
"Minimize");
625 AddFrame(fButton[0], fDefaultHint);
626 fButton[0]->SetBackgroundColor(GetDefaultFrameBackground());
627 fButton[0]->Associate(titlebar);
631 fButton[1] =
new TGPictureButton(
this,
632 fClient->GetPicture(
"mdi_restore.xpm"),
634 fButton[1]->SetToolTipText(
"Restore");
635 AddFrame(fButton[1], fDefaultHint);
636 fButton[1]->SetBackgroundColor(GetDefaultFrameBackground());
637 fButton[1]->Associate(titlebar);
641 fButton[2] =
new TGPictureButton(
this,
642 fClient->GetPicture(
"mdi_maximize.xpm"),
644 fButton[2]->SetToolTipText(
"Maximize");
645 AddFrame(fButton[2], fDefaultHint);
646 fButton[2]->SetBackgroundColor(GetDefaultFrameBackground());
647 fButton[2]->Associate(titlebar);
651 fButton[3] =
new TGPictureButton(
this,
652 fClient->GetPicture(
"mdi_help.xpm"),
654 fButton[3]->SetToolTipText(
"Help");
655 AddFrame(fButton[3], fDefaultHint);
656 fButton[3]->SetBackgroundColor(GetDefaultFrameBackground());
657 fButton[3]->Associate(titlebar);
661 fButton[4] =
new TGPictureButton(
this,
662 fClient->GetPicture(
"mdi_close.xpm"),
664 fButton[4]->SetToolTipText(
"Close");
665 AddFrame(fButton[4], fCloseHint);
666 fButton[4]->SetBackgroundColor(GetDefaultFrameBackground());
667 fButton[4]->Associate(titlebar);
674 TGMdiButtons::~TGMdiButtons()
676 if (!MustCleanup()) {
688 TGMdiTitleIcon::TGMdiTitleIcon(
const TGWindow *p,
const TGWindow *titlebar,
689 const TGPicture *pic, Int_t w, Int_t h) :
692 fMsgWindow = titlebar;
693 fEditDisabled = kTRUE;
697 fPopup =
new TGPopupMenu(fClient->GetDefaultRoot());
698 fPopup->AddEntry(
new TGHotString(
"&Restore"), kMdiRestore);
699 fPopup->AddEntry(
new TGHotString(
"&Move"), kMdiMove);
700 fPopup->AddEntry(
new TGHotString(
"&Size"), kMdiSize);
701 fPopup->AddEntry(
new TGHotString(
"Mi&nimize"), kMdiMinimize);
702 fPopup->AddEntry(
new TGHotString(
"Ma&ximize"), kMdiMaximize);
703 fPopup->AddSeparator();
704 fPopup->AddEntry(
new TGHotString(
"&Close Ctrl+F4"), kMdiClose);
705 fPopup->DisableEntry(kMdiRestore);
706 fPopup->Associate(titlebar);
708 AddInput(kButtonPressMask | kButtonReleaseMask);
715 TGMdiTitleIcon::~TGMdiTitleIcon()
723 void TGMdiTitleIcon::DoRedraw()
725 gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
732 Bool_t TGMdiTitleIcon::HandleDoubleClick(Event_t *event)
734 if (event->fCode == kButton1) {
737 gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
738 SendMessage(fMsgWindow, MK_MSG(kC_COMMAND, kCM_MENU), kMDI_CLOSE, 0);
746 Bool_t TGMdiTitleIcon::HandleButton(Event_t *event)
748 SendMessage(fMsgWindow, MK_MSG(kC_COMMAND, kCM_MENU), kMDI_CURRENT, 0);
750 if (event->fType == kButtonPress) {
751 fPopup->PlaceMenu(event->fXRoot - event->fX,
752 event->fYRoot + (fHeight - event->fY),
766 TGMdiWinResizer::TGMdiWinResizer(
const TGWindow *p,
const TGWindow *mdiwin,
767 Int_t pos,
const TGGC *boxgc, Int_t linew,
768 Int_t mdioptions, Int_t w, Int_t h, UInt_t options) :
769 TGFrame(p, w, h, options)
771 fWinX = fWinY = fWinW = fWinH = fOldX = fOldY = fOldW = fOldH = 0;
772 fNewX = fNewY = fNewW = fNewH = fX0 = fY0 = 0;
774 fWidgetFlags = kWidgetIsEnabled;
777 fMdiOptions = mdioptions;
786 fMidButPressed = fLeftButPressed = fRightButPressed = kFALSE;
788 gVirtualX->GrabButton(fId, kButton1, kAnyModifier,
789 kButtonPressMask | kButtonReleaseMask | kButtonMotionMask,
797 Bool_t TGMdiWinResizer::HandleButton(Event_t *event)
799 if (!IsEnabled())
return kTRUE;
801 if (event->fType == kButtonPress) {
803 ((TGMdiDecorFrame *)fParent)->GetTitleBar()->GetWinIcon()->GetPopup()->EndMenu(ud);
804 switch (event->fCode) {
806 SendMessage(fMdiWin, MK_MSG(kC_MDI, kMDI_CURRENT), fParent->GetId(), 0);
807 fNewX = fOldX = fWinX = ((TGFrame *)fParent)->GetX();
808 fNewY = fOldY = fWinY = ((TGFrame *)fParent)->GetY();
809 fWinW = ((TGFrame *)fParent)->GetWidth();
810 fWinH = ((TGFrame *)fParent)->GetHeight();
815 if (fMdiOptions != kMdiOpaque) {
816 DrawBox(fNewX, fNewY, fNewW, fNewH);
818 fLeftButPressed = kTRUE;
819 gVirtualX->GrabPointer(fId, kButtonReleaseMask | kPointerMotionMask,
820 kNone, kNone, kTRUE, kFALSE);
824 fMidButPressed = kTRUE;
828 fRightButPressed = kTRUE;
832 gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
833 switch (event->fCode) {
835 if (fMdiOptions != kMdiOpaque) {
836 DrawBox(fNewX, fNewY, fNewW, fNewH);
837 ((TGFrame *)fParent)->MoveResize(fNewX, fNewY, fNewW, fNewH);
840 fLeftButPressed = kFALSE;
844 fMidButPressed = kFALSE;
848 fRightButPressed = kFALSE;
858 void TGMdiWinResizer::DrawBox(Int_t x, Int_t y, UInt_t width, UInt_t height)
860 TGMdiMainFrame *m = (TGMdiMainFrame *) fMdiWin;
862 gVirtualX->DrawRectangle(m->GetContainer()->GetId(), fBoxGC->GetGC(),
863 x + fLineW / 2, y + fLineW / 2, width - fLineW, height - fLineW);
869 void TGMdiWinResizer::MoveResizeIt()
871 if (fMdiOptions == kMdiOpaque) {
872 ((TGFrame *)fParent)->MoveResize(fNewX, fNewY, fNewW, fNewH);
874 DrawBox(fOldX, fOldY, fOldW, fOldH);
875 DrawBox(fNewX, fNewY, fNewW, fNewH);
883 TGMdiVerticalWinResizer::TGMdiVerticalWinResizer(
const TGWindow *p,
884 const TGWindow *mdiwin, Int_t pos,
const TGGC *boxGC, Int_t linew,
885 Int_t mdioptions, Int_t w, Int_t h) :
886 TGMdiWinResizer(p, mdiwin, pos, boxGC, linew, mdioptions,
887 w, h, kFixedHeight | kOwnBackground)
889 gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kArrowVer));
895 Bool_t TGMdiVerticalWinResizer::HandleMotion(Event_t *event)
897 if (((TGMdiDecorFrame *)fParent)->IsMinimized())
return kTRUE;
904 Int_t dy =
event->fYRoot - fY0;
906 if (!fLeftButPressed)
return kTRUE;
910 if (fWinH - dy < fMinH) dy = fWinH - fMinH;
915 case kMdiResizerBottom:
916 if (fWinH + dy < fMinH) dy = fMinH - fWinH;
930 void TGMdiVerticalWinResizer::DrawBorder()
932 gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
933 if (fPos == kMdiResizerTop) {
934 gVirtualX->DrawLine(fId, GetHilightGC()(), 0, 1, fWidth - 1, 1);
936 gVirtualX->DrawLine(fId, GetShadowGC()(), 0, fHeight - 2, fWidth - 1,
938 gVirtualX->DrawLine(fId, GetBlackGC()(), 0, fHeight - 1, fWidth - 1,
947 TGMdiCornerWinResizer::TGMdiCornerWinResizer(
const TGWindow *p,
948 const TGWindow *mdiwin, Int_t pos,
const TGGC *boxGC, Int_t linew,
949 Int_t mdioptions, Int_t w, Int_t h) :
950 TGMdiWinResizer(p, mdiwin, pos, boxGC, linew, mdioptions,
951 w, h, kFixedSize | kOwnBackground)
953 Cursor_t defaultCursor = kNone;
954 fEditDisabled = kTRUE;
957 case (kMdiResizerTop | kMdiResizerLeft):
958 defaultCursor = gVirtualX->CreateCursor(kTopLeft);
961 case (kMdiResizerBottom | kMdiResizerLeft):
962 defaultCursor = gVirtualX->CreateCursor(kBottomLeft);
965 case (kMdiResizerTop | kMdiResizerRight):
966 defaultCursor = gVirtualX->CreateCursor(kTopRight);
969 case (kMdiResizerBottom | kMdiResizerRight):
970 defaultCursor = gVirtualX->CreateCursor(kBottomRight);
973 gVirtualX->SetCursor(fId, defaultCursor);
979 Bool_t TGMdiCornerWinResizer::HandleMotion(Event_t *event)
981 if (((TGMdiDecorFrame *)fParent)->IsMinimized())
return kTRUE;
988 Int_t dx =
event->fXRoot - fX0;
989 Int_t dy =
event->fYRoot - fY0;
991 if (!fLeftButPressed)
return kTRUE;
994 case (kMdiResizerTop | kMdiResizerLeft):
995 if (fWinW - dx < fMinW) dx = fWinW - fMinW;
996 if (fWinH - dy < fMinH) dy = fWinH - fMinH;
1003 case (kMdiResizerBottom | kMdiResizerLeft):
1004 if (fWinW - dx < fMinW) dx = fWinW - fMinW;
1005 if (fWinH + dy < fMinH) dy = fMinH - fWinH;
1012 case (kMdiResizerTop | kMdiResizerRight):
1013 if (fWinW + dx < fMinW) dx = fMinW - fWinW;
1014 if (fWinH - dy < fMinH) dy = fWinH - fMinH;
1021 case (kMdiResizerBottom | kMdiResizerRight):
1022 if (fWinW + dx < fMinW) dx = fMinW - fWinW;
1023 if (fWinH + dy < fMinH) dy = fMinH - fWinH;
1039 void TGMdiCornerWinResizer::DrawBorder()
1041 gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
1044 case (kMdiResizerTop | kMdiResizerLeft):
1045 gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 1, fWidth - 1, 1);
1046 gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 1, 1, fHeight - 1);
1049 case (kMdiResizerBottom | kMdiResizerLeft):
1050 gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 0, 1, fHeight - 1);
1051 gVirtualX->DrawLine(fId, GetShadowGC()(), 1, fHeight - 2,
1052 fWidth - 1, fHeight - 2);
1053 gVirtualX->DrawLine(fId, GetBlackGC()(), 0, fHeight - 1,
1054 fWidth - 1, fHeight - 1);
1057 case (kMdiResizerTop | kMdiResizerRight):
1058 gVirtualX->DrawLine(fId, GetHilightGC()(), 0, 1, fWidth - 1, 1);
1059 gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth - 2, 1,
1060 fWidth - 2, fHeight - 1);
1061 gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth - 1, 0,
1062 fWidth - 1, fHeight - 1);
1065 case (kMdiResizerBottom | kMdiResizerRight):
1066 gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth - 2, 0,
1067 fWidth - 2, fHeight - 2);
1068 gVirtualX->DrawLine(fId, GetShadowGC()(), 0, fHeight - 2,
1069 fWidth - 1, fHeight - 2);
1070 gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth - 1, 0,
1071 fWidth - 1, fHeight - 1);
1072 gVirtualX->DrawLine(fId, GetBlackGC()(), 0, fHeight - 1,
1073 fWidth - 1, fHeight - 1);
1082 TGMdiHorizontalWinResizer::TGMdiHorizontalWinResizer(
const TGWindow *p,
1083 const TGWindow *mdiwin, Int_t pos,
const TGGC *boxGC, Int_t linew,
1084 Int_t mdioptions, Int_t w, Int_t h) :
1085 TGMdiWinResizer(p, mdiwin, pos, boxGC, linew, mdioptions,
1086 w, h, kFixedWidth | kOwnBackground)
1088 fEditDisabled = kTRUE;
1089 gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kArrowHor));
1096 Bool_t TGMdiHorizontalWinResizer::HandleMotion(Event_t *event)
1098 if (((TGMdiDecorFrame *)fParent)->IsMinimized())
return kTRUE;
1105 Int_t dx =
event->fXRoot - fX0;
1107 if (!fLeftButPressed)
return kTRUE;
1110 case (kMdiResizerLeft):
1111 if (fWinW - dx < fMinW) dx = fWinW - fMinW;
1116 case (kMdiResizerRight):
1117 if (fWinW + dx < fMinW) dx = fMinW - fWinW;
1131 void TGMdiHorizontalWinResizer::DrawBorder()
1133 gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
1134 if (fPos == kMdiResizerLeft) {
1135 gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 0, 1, fHeight - 1);
1137 gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth - 2, 0, fWidth - 2, fHeight - 1);
1138 gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth - 1, 0, fWidth - 1, fHeight - 1);