void InternalWindow::mouseDragged(MouseEventDetails* const e) { if(getMenuBar() != NULL) { bool isContained; isContained = getMenuBar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getMenuBar(),isContained,e->getViewport()); if(isContained) { getMenuBar()->mouseDragged(e); Component::mouseDragged(e); return; } } if(getTitlebar() != NULL) { bool isContained; isContained = getTitlebar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getTitlebar(),isContained,e->getViewport()); if(isContained) { getTitlebar()->mouseDragged(e); Component::mouseDragged(e); return; } } if(!getLockInput()) { ComponentContainer::mouseDragged(e); } }
bool WindowBorder::isContained(const Pnt2f& p, const Real32& x, const Real32& y , const Real32& Width, const Real32& Height) const { Real32 LeftIn, RightIn, BottomIn, UpperIn; getOuterBorder()->getInsets(LeftIn, RightIn, UpperIn, BottomIn); if(getTitlebar() != NULL) { UpperIn += getTitlebar()->getSize().y(); } return (getInnerBorder()->isContained(p,x+LeftIn, y+UpperIn, Width-LeftIn-RightIn, Height-UpperIn-BottomIn) || getOuterBorder()->isContained(p,x,y,Width,Height)); }
void WindowBorder::activateInternalDrawConstraints(Graphics* const g, const Real32& x, const Real32& y , const Real32& Width, const Real32& Height) const { Real32 LeftIn, RightIn, BottomIn, UpperIn; getOuterBorder()->getInsets(LeftIn, RightIn, UpperIn, BottomIn); if(getTitlebar() != NULL) { UpperIn += getTitlebar()->getSize().y(); } getOuterBorder()->activateInternalDrawConstraints(g, x, y, Width, Height); getInnerBorder()->activateInternalDrawConstraints(g,x+LeftIn, y+UpperIn, Width-LeftIn-RightIn, Height-UpperIn-BottomIn); }
void WindowBorder::draw(Graphics* const g, const Real32 x, const Real32 y , const Real32 Width, const Real32 Height, const Real32 Opacity, bool Clipping) const { Real32 LeftIn, RightIn, BottomIn, UpperIn; getOuterBorder()->getInsets(LeftIn, RightIn, UpperIn, BottomIn); if(getTitlebar() != NULL) { UpperIn += getTitlebar()->getSize().y(); } getInnerBorder()->draw(g, x+LeftIn, y+UpperIn, Width-LeftIn-RightIn, Height-UpperIn-BottomIn, Opacity); getOuterBorder()->draw(g, x, y, Width, Height, Opacity); }
void WindowBorder::getInsets(Real32& Left, Real32& Right,Real32& Top,Real32& Bottom) const { Real32 LeftIn, LeftIn2, RightIn, RightIn2, BottomIn, BottomIn2, UpperIn, UpperIn2; getOuterBorder()->getInsets(LeftIn, RightIn, UpperIn, BottomIn); getInnerBorder()->getInsets(LeftIn2, RightIn2,UpperIn2, BottomIn2) ; Left = LeftIn+LeftIn2; Right = RightIn+RightIn2; Bottom = BottomIn+BottomIn2; Top = UpperIn+UpperIn2; if(getTitlebar() != NULL) { Top += getTitlebar()->getSize().y(); } }
void InternalWindow::drawInternal(Graphics* const TheGraphics, Real32 Opacity) const { Inherited::drawInternal(TheGraphics, Opacity); //If I have an active TitleBar then draw it if(getDrawDecorations() && getDrawTitlebar() && getTitlebar() != NULL) { getTitlebar()->draw(TheGraphics, Opacity*getOpacity()); } //If I have a MenuBar then Draw it if(getMenuBar() != NULL) { getMenuBar()->draw(TheGraphics, Opacity*getOpacity()); } }
void WindowBorder::getTitlebarBounds(const Real32 x, const Real32 y , const Real32 Width, const Real32 Height, Pnt2f& TopLeft, Pnt2f& BottomRight) { Real32 LeftIn(0.0f), RightIn(0.0f), BottomIn(0.0f), UpperIn(0.0f); if(getOuterBorder() != NULL) { getOuterBorder()->getInsets(LeftIn, RightIn, UpperIn, BottomIn); } TopLeft.setValues(x+LeftIn, y+UpperIn); if(getTitlebar() != NULL) { UpperIn += getTitlebar()->getSize().y(); } BottomRight.setValues(x+Width-RightIn, y+UpperIn); }
/************************************************************************* Handler for when text changes *************************************************************************/ void FrameWindow::onTextChanged(WindowEventArgs& e) { Window::onTextChanged(e); // pass this onto titlebar component. getTitlebar()->setText(d_text); // maybe the user is using a fontdim for titlebar dimensions ;) performChildWindowLayout(); }
/************************************************************************* Set whether this FrameWindow can be moved by dragging the title bar. *************************************************************************/ void FrameWindow::setDragMovingEnabled(bool setting) { if (d_dragMovable != setting) { d_dragMovable = setting; getTitlebar()->setDraggingEnabled(setting); } }
void InternalWindow::mouseEntered(const MouseEventUnrecPtr e) { if(getMenuBar() != NULL) { bool isContained; isContained = getMenuBar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getMenuBar(),isContained,e->getViewport()); } if(getTitlebar() != NULL) { bool isContained; isContained = getTitlebar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getTitlebar(),isContained,e->getViewport()); } if(!getLockInput()) { ComponentContainer::mouseEntered(e); } }
void InternalWindow::updateLayout(void) { //If I have a MenuBar Update it's layout if(getMenuBar() != NULL) { Pnt2f MenuTopLeft, MenuBottomRight; getMenuBar()->updateLayout(); getMenuBarBounds(MenuTopLeft, MenuBottomRight); getMenuBar()->setPosition(MenuTopLeft); getMenuBar()->setSize(Vec2f( MenuBottomRight.x() - MenuTopLeft.x(), getMenuBar()->getPreferredSize().y())); } //If I have a Titlebar then update it's layout if(getDrawDecorations() && getDrawTitlebar() && getTitlebar() != NULL) { Pnt2f TitlebarTopLeft, TitlebarBottomRight; getTitlebarBounds(TitlebarTopLeft, TitlebarBottomRight); getTitlebar()->setPosition(TitlebarTopLeft); getTitlebar()->setSize(Vec2f( TitlebarBottomRight.x() - TitlebarTopLeft.x(), getTitlebar()->getPreferredSize().y())); } ComponentContainer::updateLayout(); }
void InternalWindow::mouseExited(MouseEventDetails* const e) { if(getMenuBar() != NULL) { bool isContained; isContained = getMenuBar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getMenuBar(),isContained,e->getViewport()); } if(getTitlebar() != NULL) { bool isContained; isContained = getTitlebar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getTitlebar(),isContained,e->getViewport()); } if(!getLockInput()) { if(getParentDrawingSurface() != NULL && getParentDrawingSurface()->getEventProducer() != NULL) { getParentDrawingSurface()->getEventProducer()->setCursorType(WindowEventProducer::CURSOR_POINTER); } ComponentContainer::mouseExited(e); } }
/************************************************************************* Initialises the Window based object ready for use. *************************************************************************/ void FrameWindow::initialiseComponents(void) { // get component windows Titlebar* titlebar = getTitlebar(); PushButton* closeButton = getCloseButton(); // configure titlebar titlebar->setDraggingEnabled(d_dragMovable); titlebar->setText(d_text); // bind handler to close button 'Click' event closeButton->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUI::FrameWindow::closeClickHandler, this)); performChildWindowLayout(); }
/************************************************************************* Initialises the Window based object ready for use. *************************************************************************/ void FrameWindow::initialiseComponents(void) { // get component windows Titlebar* titlebar = getTitlebar(); PushButton* closeButton = getCloseButton(); // configure titlebar titlebar->setDraggingEnabled(d_dragMovable); titlebar->setText(getText()); // ban some properties on components, since they are linked to settings // defined here. titlebar->banPropertyFromXML("Text"); titlebar->banPropertyFromXML("Visible"); titlebar->banPropertyFromXML("Disabled"); closeButton->banPropertyFromXML("Visible"); closeButton->banPropertyFromXML("Disabled"); // bind handler to close button 'Click' event closeButton->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUI::FrameWindow::closeClickHandler, this)); performChildWindowLayout(); }
void InternalWindow::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { if( ((whichField & FocusedFieldMask) || (whichField & TitlebarFieldMask))&& getTitlebar() != NULL && getDrawTitlebar() && !getTitlebar()->getEnabled()) { getTitlebar()->setEnabled(getFocused()); } if( (whichField & ActiveToolTipFieldMask) && getActiveToolTip() != NULL) { getActiveToolTip()->updateClipBounds(); } if( (whichField & ActivePopupMenusFieldMask) && getMFActivePopupMenus()->size() > 0) { _PopupConnections.clear(); for(UInt32 i(0) ; i<getMFActivePopupMenus()->size() ; ++i) { getActivePopupMenus(i)->setParentWindow(this); _PopupConnections[getActivePopupMenus(i)].push_back(boost::shared_ptr<boost::signals2::scoped_connection>(new boost::signals2::scoped_connection(getParentDrawingSurface()->getEventProducer()->connectMouseClicked(boost::bind(&InternalWindow::popupMenuMousePressed, this, _1))))); _PopupConnections[getActivePopupMenus(i)].push_back(boost::shared_ptr<boost::signals2::scoped_connection>(new boost::signals2::scoped_connection(getParentDrawingSurface()->getEventProducer()->connectMousePressed(boost::bind(&InternalWindow::popupMenuMousePressed, this, _1))))); _PopupConnections[getActivePopupMenus(i)].push_back(boost::shared_ptr<boost::signals2::scoped_connection>(new boost::signals2::scoped_connection(getParentDrawingSurface()->getEventProducer()->connectMouseReleased(boost::bind(&InternalWindow::popupMenuMouseReleased, this, _1))))); _PopupConnections[getActivePopupMenus(i)].push_back(boost::shared_ptr<boost::signals2::scoped_connection>(new boost::signals2::scoped_connection(getParentDrawingSurface()->getEventProducer()->connectKeyPressed(boost::bind(&InternalWindow::popupMenuKeyPressed, this, _1))))); _PopupConnections[getActivePopupMenus(i)].push_back(boost::shared_ptr<boost::signals2::scoped_connection>(new boost::signals2::scoped_connection(getParentDrawingSurface()->getEventProducer()->connectMouseMoved(boost::bind(&InternalWindow::popupMenuMouseMoved, this, _1))))); _PopupConnections[getActivePopupMenus(i)].push_back(boost::shared_ptr<boost::signals2::scoped_connection>(new boost::signals2::scoped_connection(getParentDrawingSurface()->getEventProducer()->connectMouseDragged(boost::bind(&InternalWindow::popupMenuMouseDragged, this, _1))))); } setLockInput(true); } if( (whichField & MenuBarFieldMask) && getMenuBar() != NULL) { getMenuBar()->setParentWindow(this); } if( (whichField & MenuBarFieldMask) || (whichField & TitlebarFieldMask)) { updateLayout(); } if( (whichField & TitleFieldMask) && getTitlebar() != NULL) { getTitlebar()->setTitle(getTitle()); } if( (whichField & TitlebarFieldMask) && getTitlebar() != NULL) { getTitlebar()->setParentWindow(this); } if((whichField & TitlebarFieldMask) || (whichField & BorderFieldMask) || (whichField & DisabledBorderFieldMask) || (whichField & FocusedBorderFieldMask) || (whichField & RolloverBorderFieldMask) || (whichField & DrawTitlebarFieldMask)) { TitlebarRefPtr TheTitlebar; if(getDrawTitlebar()) { TheTitlebar = getTitlebar(); } else { TheTitlebar = NULL; } if(getBorder() != NULL && getBorder()->getType().isDerivedFrom(WindowBorder::getClassType())) { dynamic_cast<WindowBorder*>(getBorder())->setTitlebar(TheTitlebar); } if(getDisabledBorder() != NULL && getDisabledBorder()->getType().isDerivedFrom(WindowBorder::getClassType())) { dynamic_cast<WindowBorder*>(getDisabledBorder())->setTitlebar(TheTitlebar); } if(getFocusedBorder() != NULL && getFocusedBorder()->getType().isDerivedFrom(WindowBorder::getClassType())) { dynamic_cast<WindowBorder*>(getFocusedBorder())->setTitlebar(TheTitlebar); } if(getRolloverBorder() != NULL && getRolloverBorder()->getType().isDerivedFrom(WindowBorder::getClassType())) { dynamic_cast<WindowBorder*>(getRolloverBorder())->setTitlebar(TheTitlebar); } } if( whichField & ClipBoundsFieldMask) { if(getTitlebar() != NULL) { getTitlebar()->updateClipBounds(); } } if( (whichField & TitlebarFieldMask) && getTitlebar() != NULL) { if(getTitlebar()->getTitleLabel() != NULL) { _TitleBarMousePressedConnection = getTitlebar()->getTitleLabel()->connectMousePressed(boost::bind(&InternalWindow::titlebarMousePressed, this, _1)); } if(getTitlebar()->getCloseButton() != NULL) { _CloseButtonActionConnection = getTitlebar()->getCloseButton()->connectActionPerformed(boost::bind(&InternalWindow::closeButtonAction, this, _1)); } if(getTitlebar()->getMaximizeButton() != NULL) { _MaximizeButtonActionConnection = getTitlebar()->getMaximizeButton()->connectActionPerformed(boost::bind(&InternalWindow::maximizeButtonAction, this, _1)); } if(getTitlebar()->getIconifyButton() != NULL) { _IconifyButtonActionConnection = getTitlebar()->getIconifyButton()->connectActionPerformed(boost::bind(&InternalWindow::iconifyButtonAction, this, _1)); } } if( (whichField & IconableFieldMask) && getTitlebar() != NULL) { getTitlebar()->setDrawIconify(getIconable()); } if( (whichField & MaximizableFieldMask) && getTitlebar() != NULL) { getTitlebar()->setDrawMaximize(getMaximizable()); } if( (whichField & ClosableFieldMask) && getTitlebar() != NULL) { getTitlebar()->setDrawClose(getClosable()); } Inherited::changed(whichField, origin, details); }
/************************************************************************* Handler for when this Window is deactivated *************************************************************************/ void FrameWindow::onDeactivated(ActivationEventArgs& e) { Window::onDeactivated(e); getTitlebar()->invalidate(); }
void InternalWindow::mousePressed(MouseEventDetails* const e) { if(!getLockInput()) { //Check if the Mouse is whithin the resize border width if(getResizable()) { WindowArea TheArea(getCursurArea(e->getLocation())); switch(TheArea) { case WINDOW_LEFT_BORDER: case WINDOW_RIGHT_BORDER: case WINDOW_TOP_BORDER: case WINDOW_BOTTOM_BORDER: case WINDOW_TOP_LEFT_BORDER: case WINDOW_BOTTOM_RIGHT_BORDER: case WINDOW_TOP_RIGHT_BORDER: case WINDOW_BOTTOM_LEFT_BORDER: setLockInput(true); _WindowStartPosition = getPosition(); _WindowStartSize = getSize(); _MouseStartPosition = e->getLocation(); _BorderDragged = TheArea; _BorderDragMouseDraggedConnection = getParentDrawingSurface()->getEventProducer()->connectMouseDragged(boost::bind(&InternalWindow::borderDragMouseDragged, this, _1)); _BorderDragMouseReleasedConnection = getParentDrawingSurface()->getEventProducer()->connectMouseReleased(boost::bind(&InternalWindow::borderDragMouseReleased, this, _1)); _BorderDragKeyPressedConnection = getParentDrawingSurface()->getEventProducer()->connectKeyPressed(boost::bind(&InternalWindow::borderDragKeyPressed, this, _1)); break; } } if(getMenuBar() != NULL) { bool isContained; isContained = getMenuBar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getMenuBar(),isContained,e->getViewport()); if(isContained) { getMenuBar()->mousePressed(e); if(e->isConsumed()) return; Component::mousePressed(e); return; } } if(getTitlebar() != NULL) { bool isContained; isContained = getTitlebar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getTitlebar(),isContained,e->getViewport()); if(isContained) { getTitlebar()->mousePressed(e); if(e->isConsumed()) return; Component::mousePressed(e); return; } } //ComponentContainer MousePressed Handling bool isContained(false); for(Int32 i(getMFChildren()->size()-1) ; i>=0 ; --i) { isContained = getChildren(i)->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getChildren(i),isContained,e->getViewport()); if(isContained) { takeFocus(); if(!getChildren(i)->getType().isDerivedFrom(ComponentContainer::getClassType())) { getChildren(i)->takeFocus(); } getChildren(i)->mousePressed(e); if(e->isConsumed()) return; break; } } Component::mousePressed(e); } }
void InternalWindow::mousePressed(const MouseEventUnrecPtr e) { if(!getLockInput()) { //Check if the Mouse is whithin the resize border width if(getResizable()) { WindowArea TheArea(getCursurArea(e->getLocation())); switch(TheArea) { case WINDOW_LEFT_BORDER: case WINDOW_RIGHT_BORDER: case WINDOW_TOP_BORDER: case WINDOW_BOTTOM_BORDER: case WINDOW_TOP_LEFT_BORDER: case WINDOW_BOTTOM_RIGHT_BORDER: case WINDOW_TOP_RIGHT_BORDER: case WINDOW_BOTTOM_LEFT_BORDER: setLockInput(true); _BorderDraggedListener.setWindowStartPosition(getPosition()); _BorderDraggedListener.setWindowStartSize(getSize()); _BorderDraggedListener.setMouseStartPosition(e->getLocation()); _BorderDraggedListener.setBorderDragged(TheArea); getDrawingSurface()->getEventProducer()->addMouseMotionListener(&_BorderDraggedListener); getDrawingSurface()->getEventProducer()->addMouseListener(&_BorderDraggedListener); getDrawingSurface()->getEventProducer()->addKeyListener(&_BorderDraggedListener); break; } } if(getMenuBar() != NULL) { bool isContained; isContained = getMenuBar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getMenuBar(),isContained,e->getViewport()); if(isContained) { getMenuBar()->mousePressed(e); Component::mousePressed(e); return; } } if(getTitlebar() != NULL) { bool isContained; isContained = getTitlebar()->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getTitlebar(),isContained,e->getViewport()); if(isContained) { getTitlebar()->mousePressed(e); Component::mousePressed(e); return; } } //ComponentContainer MousePressed Handling bool isContained(false); for(Int32 i(getMFChildren()->size()-1) ; i>=0 ; --i) { isContained = getChildren(i)->isContained(e->getLocation(), true); checkMouseEnterExit(e,e->getLocation(),getChildren(i),isContained,e->getViewport()); if(isContained) { takeFocus(); if(!getChildren(i)->getType().isDerivedFrom(ComponentContainer::getClassType())) { getChildren(i)->takeFocus(); } getChildren(i)->mousePressed(e); break; } } Component::mousePressed(e); } }
void InternalWindow::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { if( ((whichField & FocusedFieldMask) || (whichField & TitlebarFieldMask))&& getTitlebar() != NULL) { getTitlebar()->setEnabled(getFocused()); } if( (whichField & ActiveToolTipFieldMask) && getActiveToolTip() != NULL) { getActiveToolTip()->updateClipBounds(); } if( (whichField & ActivePopupMenusFieldMask) && getMFActivePopupMenus()->size() > 0) { for(UInt32 i(0) ; i<getMFActivePopupMenus()->size() ; ++i) { getActivePopupMenus(i)->setParentContainer(this); getActivePopupMenus(i)->setParentWindow(this); } getDrawingSurface()->getEventProducer()->addMouseListener(&_PopupMenuInteractionListener); getDrawingSurface()->getEventProducer()->addMouseMotionListener(&_PopupMenuInteractionListener); getDrawingSurface()->getEventProducer()->addKeyListener(&_PopupMenuInteractionListener); setLockInput(true); } if( (whichField & MenuBarFieldMask) && getMenuBar() != NULL) { getMenuBar()->setParentContainer(this); getMenuBar()->setParentWindow(this); } if( (whichField & MenuBarFieldMask) || (whichField & TitlebarFieldMask)) { updateLayout(); } if( (whichField & TitleFieldMask) && getTitlebar() != NULL) { getTitlebar()->setTitle(getTitle()); } if( (whichField & TitlebarFieldMask) && getTitlebar() != NULL) { getTitlebar()->setParentContainer(this); getTitlebar()->setParentWindow(this); } if((whichField & TitlebarFieldMask) || (whichField & BorderFieldMask) || (whichField & DisabledBorderFieldMask) || (whichField & FocusedBorderFieldMask) || (whichField & RolloverBorderFieldMask) || (whichField & DrawTitlebarFieldMask)) { TitlebarRefPtr TheTitlebar; if(getDrawTitlebar()) { TheTitlebar = getTitlebar(); } else { TheTitlebar = NULL; } if(getBorder() != NULL && getBorder()->getType().isDerivedFrom(WindowBorder::getClassType())) { dynamic_cast<WindowBorder*>(getBorder())->setTitlebar(TheTitlebar); } if(getDisabledBorder() != NULL && getDisabledBorder()->getType().isDerivedFrom(WindowBorder::getClassType())) { dynamic_cast<WindowBorder*>(getDisabledBorder())->setTitlebar(TheTitlebar); } if(getFocusedBorder() != NULL && getFocusedBorder()->getType().isDerivedFrom(WindowBorder::getClassType())) { dynamic_cast<WindowBorder*>(getFocusedBorder())->setTitlebar(TheTitlebar); } if(getRolloverBorder() != NULL && getRolloverBorder()->getType().isDerivedFrom(WindowBorder::getClassType())) { dynamic_cast<WindowBorder*>(getRolloverBorder())->setTitlebar(TheTitlebar); } } if( whichField & ClipBoundsFieldMask) { if(getTitlebar() != NULL) { getTitlebar()->updateClipBounds(); } } if( (whichField & TitlebarFieldMask) && getTitlebar() != NULL) { if(getTitlebar()->getTitleLabel() != NULL) { getTitlebar()->getTitleLabel()->addMouseListener(&_TitlebarStartDragListener); } if(getTitlebar()->getCloseButton() != NULL) { getTitlebar()->getCloseButton()->addActionListener(&_CloseButtonListener); } if(getTitlebar()->getMaximizeButton() != NULL) { getTitlebar()->getMaximizeButton()->addActionListener(&_MaximizeButtonListener); } if(getTitlebar()->getIconifyButton() != NULL) { getTitlebar()->getIconifyButton()->addActionListener(&_IconifyButtonListener); } } if( (whichField & IconableFieldMask) && getTitlebar() != NULL) { getTitlebar()->setDrawIconify(getIconable()); } if( (whichField & MaximizableFieldMask) && getTitlebar() != NULL) { getTitlebar()->setDrawMaximize(getMaximizable()); } if( (whichField & ClosableFieldMask) && getTitlebar() != NULL) { getTitlebar()->setDrawClose(getClosable()); } Inherited::changed(whichField, origin, details); }
/************************************************************************* Handler for when this Window is deactivated *************************************************************************/ void FrameWindow::onDeactivated(ActivationEventArgs& e) { Window::onDeactivated(e); getTitlebar()->requestRedraw(); }
/************************************************************************* Return whether the title bar for this window is enabled. *************************************************************************/ bool FrameWindow::isTitleBarEnabled(void) const { return !getTitlebar()->isDisabled(); }
/************************************************************************* Enables or disables the title bar for the frame window. *************************************************************************/ void FrameWindow::setTitleBarEnabled(bool setting) { Window* titlebar = getTitlebar(); titlebar->setEnabled(setting); titlebar->setVisible(setting); }