Пример #1
0
void Gui::mouseReleased( int x, int y, MouseButtons mb )
{
  cout << "Ui::Gui::mouseReleased( " << x << ", " << y << " )"  << endl;

	if ( pChannelPopup != NULL ) {
		pChannelPopup->mouseReleased( x, y, mb );
		if ( pChannelPopup != NULL ) {
			if ( !pChannelPopup->passEvents() )
				return;
		}
	}

	if ( pMouseDragWidget != NULL ) {
		pMouseDragWidget->onDestroy.disconnect( this );
		pMouseDragWidget = NULL;
	}

  if ( pMouseChannelWidget != NULL ) {


    if ( pMousePressedWidget == pMouseChannelWidget ) {
      if ( pLastClick <= pDblClickTicks ) {
        pMouseChannelWidget->mouseDblClick( x - pMouseChannelWidget->absoluteXPos(), y - pMouseChannelWidget->absoluteYPos(), mb );
				pMouseChannelWidget->mouseClick( x - pMouseChannelWidget->absoluteXPos(), y - pMouseChannelWidget->absoluteYPos(), mb );
				pLastClick = pDblClickTicks + 1;
      } else {
        pMouseChannelWidget->mouseClick( x - pMouseChannelWidget->absoluteXPos(), y - pMouseChannelWidget->absoluteYPos(), mb );
        pLastClick = 0;
      }
      pMousePressedWidget->onDestroy.disconnect( this );
      pMousePressedWidget = NULL;
    }
    pMouseChannelWidget->mouseReleased( x - pMouseChannelWidget->absoluteXPos(), y - pMouseChannelWidget->absoluteYPos(), mb );

  } else {

    for( int i = 0; i < pPopups.count(); i++ ) {
      Popup* p = pPopups.get( i );
      Rect r = p->getRect();
      if ( r.pointInside( x, y ) ) {
        p->mouseReleased( x, y, mb );
				if ( !p->passEvents() )
        	return;
      }
    }

    Widget* o = fgFrame().mouseReleased( x, y, mb );
    if ( o != NULL ) {
      if ( pMousePressedWidget == o ) {
        pMousePressedWidget->onDestroy.disconnect( this );
        pMousePressedWidget = NULL;
        o->mouseClick( x, y, mb );
      }
      //o->mouseReleased( x, y, mb );
    }
  }
}