コード例 #1
0
ファイル: panel.c プロジェクト: Bill-Gray/PDCurses
static void _override(PANEL *pan, int show)
{
    int y;
    PANEL *pan2;
    PANELOBS *tobs = pan->obscure;      /* "this" one */

    if (show == 1)
        Touchpan(pan);
    else if (!show)
    {
        Touchpan(pan);
        Touchpan(&_stdscr_pseudo_panel);
    }
    else if (show == -1)
        while (tobs && (tobs->pan != pan))
            tobs = tobs->above;

    while (tobs)
    {
        if ((pan2 = tobs->pan) != pan)
            for (y = pan->wstarty; y < pan->wendy; y++)
                if ((y >= pan2->wstarty) && (y < pan2->wendy) &&
                   ((is_linetouched(pan->win, y - pan->wstarty)) ||
                    (is_linetouched(stdscr, y))))
                    Touchline(pan2, y - pan2->wstarty, 1);

        tobs = tobs->above;
    }
}
コード例 #2
0
ファイル: panel.c プロジェクト: vocho/openqnx
/*+-------------------------------------------------------------------------
	__override(pan,show)
--------------------------------------------------------------------------*/
void
_nc_override(const PANEL *pan, int show)
{
  int y;
  PANEL *pan2;
  PANELCONS *tobs = pan->obscure;			   /* "this" one */

  dBug(("_nc_override %s,%d", USER_PTR(pan->user),show));

  switch (show)
    {
    case P_TOUCH:
      Touchpan(pan);
      /* The following while loop will now mark all panel window lines
       * obscured by use or obscuring us as touched, so they will be
       * updated.
       */
      break;
    case P_UPDATE:
      while(tobs && (tobs->pan != pan))
	tobs = tobs->above;
      /* The next loop will now only go through the panels obscuring pan;
       * it updates all the lines in the obscuring panels in sync. with
       * the lines touched in pan itself. This is called in update_panels()
       * in a loop from the bottom_panel to the top_panel, resulting in
       * the desired update effect.
       */
      break;
    default:
      return;
    }

  while(tobs)
    {
      if((pan2 = tobs->pan) != pan) {
	dBug(("test obs pan=%s pan2=%s", USER_PTR(pan->user), USER_PTR(pan2->user)));
	for(y = pan->wstarty; y < pan->wendy; y++) {
	  if( (y >= pan2->wstarty) && (y < pan2->wendy) &&
	      ((is_linetouched(pan->win,y - pan->wstarty) == TRUE)) )
	    Touchline(pan2,y - pan2->wstarty,1);
	}
      }
      tobs = tobs->above;
    }
}
コード例 #3
0
ファイル: panel.cpp プロジェクト: chenbk85/QOR
//------------------------------------------------------------------------------
static void _override( PANEL* pan, int show )
{
	__QCS_FCONTEXT( "_override" );

    int y;
    PANEL* pan2;
    PANELOBS* tobs = pan->obscure;      // "this" one

    if( show == 1 )
	{
        Touchpan( pan );
	}
    else if( !show )
    {
        Touchpan( pan );
        Touchpan( &_stdscr_pseudo_panel );
    }
    else if ( show == -1 )
	{
        while( tobs && ( tobs->pan != pan ) )
		{
            tobs = tobs->above;
		}
	}

    while( tobs )
    {
        if( ( pan2 = tobs->pan ) != pan )
		{
            for( y = pan->wstarty; y < pan->wendy; y++ )
			{
                if( ( y >= pan2->wstarty ) && ( y < pan2->wendy ) && ( ( is_linetouched( pan->win, y - pan->wstarty ) ) || ( is_linetouched( stdscr, y ) ) ) )
				{
                    Touchline( pan2, y - pan2->wstarty, 1 );
				}
			}
		}

        tobs = tobs->above;
    }
}