unixsite.cpp

来自「symbian 下的helix player源代码」· C++ 代码 · 共 2,150 行 · 第 1/5 页

CPP
2,150
字号
               
         theEvent.param2 = (void*) flags;
               
         //Grab the X and Y.
         theEvent.param1 = (void*) &realPt;
         realPt.x = buttonEvent->x;
         realPt.y = buttonEvent->y;
      }
            
      //Copy the new event back into the passed in one for
      //all events that fall through here...
      memcpy( pEvent, &theEvent, sizeof(HXxEvent) ); /* Flawfinder: ignore */

#if defined(_DEBUG)
      //If the users presses control-primary button
      //dump info on all sites. If shift-context, then
      //just this site.
      if( (buttonEvent->state&ControlMask)&&
          (theEvent.event==HX_PRIMARY_BUTTON_DOWN))
      {
         DisplayAllSiteData();
      }
      if( (buttonEvent->state&ShiftMask)&&
          (theEvent.event==HX_PRIMARY_BUTTON_DOWN))
      {
         DisplaySiteData("");
      }
#endif            
   }
   return pEvent->handled;
}


void CHXUnixSite::CheckColorSettings()
{
#if !defined(HELIX_FEATURE_HARDWARE_COLOR_CONTROLS)
    CHXBaseSite::CheckColorSettings();
#else

    CUnixSurf* pSurf = (CUnixSurf*)m_pVideoSurface;
    if( !pSurf->HasHWColorConrols() )
    {
        CHXBaseSite::CheckColorSettings();
    }
    else
    {
        if (m_pParentSite)
        {
            m_pParentSite->CheckColorSettings();
        }
        else
        {
            pSurf->SetHWColorControls();

            //We do all color stuff except sharpmess in hardware.
            float   fCurrentSharpness; 
            INT16   bInterpolate;
            zm_pColorAcc->GetSharpnessAdjustments(&fCurrentSharpness, &bInterpolate);

            if (fCurrentSharpness != m_fSharpness)
            {
                zm_pColorAcc->SetSharpnessAdjustments(m_fSharpness, FALSE);
            }
        }
    }
#endif
}

//
// OK, here it is. Take care of any OS specific duties, like scrollbar
// stuff and expose events. Then, if the event isn't handled, convert
// to an RMA event and return.
BOOL CHXUnixSite::_HandleOSEvents(HXxEvent* pEvent)
{
   HXxPoint position = {0, 0};
   HXxPoint point;

   if( NULL==pEvent )
   {
      return FALSE;
   }
   
#if defined(_DEBUG) && 0
//   fprintf( stderr, "this: %p m_pUser: %p ", this, m_pUser );
   switch( pEvent->event )
   {
      case HX_MOUSE_LEAVE:
         fprintf( stderr, "HX_MOUSE_LEAVE\n" );
         break;
//        case HX_MOUSE_MOVE:
//           point.x = ((HXxPoint*)pEvent->param1)->x;
//           point.y = ((HXxPoint*)pEvent->param1)->y;
//           fprintf( stderr, "HX_MOUSE_MOVE: %d %d\n", point.x, point.y );
//           break;
      case HX_MOUSE_ENTER:
         fprintf( stderr, "HX_MOUSE_ENTER\n" );
         break;
//        case MotionNotify:
//           point.x = ((XMotionEvent*)pEvent->param2)->x;
//           point.y = ((XMotionEvent*)pEvent->param2)->y;
//           fprintf( stderr, "MotionNotify: %d %d\n", point.x, point.y );
//           break;
      case Expose:
         fprintf( stderr, "Expose\n" );
         break;
      case EnterNotify :
         fprintf( stderr, "EnterNotify\n" );
         break;
      case LeaveNotify:
         fprintf( stderr, "LeaveNotify\n" );
         break;
      case KeyPress:
         fprintf( stderr, "this: %p m_pUser: %p ", this, m_pUser );
         fprintf( stderr, "Keypress\n\n" );
         break;
      case KeyRelease:
         fprintf( stderr, "this: %p m_pUser: %p ", this, m_pUser );
         fprintf( stderr, "KeyRelease\n" );
         break;
      default:
         fprintf( stderr, "Other\n" );         
         break;
   }
#endif

   //Find the ConfigureNotify events so we can drop to RGB from
   //overlay while we move....
//     if( pEvent->event == ConfigureNotify && this==m_pTopLevelSite )
//     {
//        XConfigureEvent* pev = (XConfigureEvent*)pEvent->param2;
//        if( m_pWindow && pev->window == (Window)m_pWindow->window )
//        {
//           HXxPoint p;
//           _GetPositionRelativeToActualWindow( p );
//  //           fprintf( stderr, "wint %p  -- x,y width, height: %d %d %d %d \n",
//  //                    pev->window,
//  //                    pev->x, pev->y, pev->width, pev->height);
//  //           fprintf( stderr, "size of site: %d %d\n", m_size.cx, m_size.cy); 
//  //           fprintf( stderr, "pos of site: %d %d\n", m_topleft.x, m_topleft.y); 
//           m_pTopLevelSite->m_pMutex->Lock();
//           m_pTopLevelSite->SiteMoving(0, 0);	
//           m_pTopLevelSite->m_nLastMoveTime = HX_GET_TICKCOUNT();
//           m_pTopLevelSite->ScheduleCallback(MOUSE, 100);
//           m_pTopLevelSite->m_pMutex->Unlock();
//        }
//     }

   //See if we should drop out of full screen
   if( pEvent->event == FocusOut && IsFullScreen() && !m_bIgnoreFocusOutInFS )
   {
//         fprintf( stderr, "_HandleOSEvents: focus out: " );
//         XEvent* pXEvent = (XEvent*) pEvent->param2;
//         XFocusChangeEvent* event = (XFocusChangeEvent*) pXEvent;
//         switch( event->mode )
//         {
//            case NotifyAncestor:
//                fprintf( stderr, "NotifyAncestor\n" );
//                break;
//            case NotifyVirtual:
//                fprintf( stderr, "NotifyVirtual\n" );
//                break;
//            case NotifyInferior:
//                fprintf( stderr, "NotifyInferior\n" );
//                break;
//            case NotifyNonlinear:
//                fprintf( stderr, "NotifyNonlinear\n" );
//                break;
//            case NotifyNonlinearVirtual:
//                fprintf( stderr, "NotifyNonlinearVirtual\n" );
//                break;
//            case NotifyPointer:
//                fprintf( stderr, "NotifyPointer\n" );
//                break;
//            case NotifyPointerRoot:
//                fprintf( stderr, "NotifyPointerRoot\n" );
//                break;
//            case NotifyDetailNone:
//                fprintf( stderr, "NotifyDetailNone\n" );
//                break;
//            default:
//                fprintf( stderr, "screwed.....\n" ); 
//         }
       ExitFullScreen();
   }


#if defined(_DEBUG) && defined(TEST_FULL_SCREEN)
   if( pEvent->event == KeyPress )
   {
      KeySym sym;
      char   szBuf[10]; /* Flawfinder: ignore */
      int    nNum;
      
      //Lookup the key without any state.
      nNum = XLookupString( (XKeyEvent*)(pEvent->param2), szBuf, 10, &sym, NULL );
      if( nNum > 0 )
      {
         if( 'f' == szBuf[0] && IsFullScreen() )
         {
            //Exit full screen if 'f' is pressed.....
            m_pTopLevelSite->ExitFullScreen();
         }
         else if( 'f' == szBuf[0] && !IsFullScreen() )
         {
            //Enter full screen if 'f' is pressed.....
            m_pTopLevelSite->EnterFullScreen();
         }
         
      }
      
   }
#endif

#if defined(_DEBUG) && defined(_TEST_COLOR_CONTROLS)
   if( pEvent->event == KeyPress )
   {
      KeySym sym;
      char   szBuf[10]; /* Flawfinder: ignore */
      int    nNum;
      
      //Lookup the key without any state.
      nNum = XLookupString( (XKeyEvent*)(pEvent->param2), szBuf, 10, &sym, NULL );
      if( nNum > 0 )
      {
          if( 'b' == szBuf[0] )
          {
              SetBrightness( GetBrightness()-.05);
          }
          if( 'B' == szBuf[0] )
          {
              SetBrightness( GetBrightness()+.05);
          }

          if( 'c' == szBuf[0] )
          {
              SetContrast( GetContrast()-.05);
          }
          if( 'C' == szBuf[0] )
          {
              SetContrast( GetContrast()+.05);
          }

          if( 'h' == szBuf[0] )
          {
              SetHue( GetHue()-.05);
          }
          if( 'H' == szBuf[0] )
          {
              SetHue( GetHue()+.05 ); 
          }
          
          if( 's' == szBuf[0] )
          {
              SetSaturation( GetSaturation()-.05);
          }
          if( 'S' == szBuf[0] ) 
          {
              SetSaturation( GetSaturation()+.05);
          }
          fprintf( stderr, "colors %f %f %f %f\n",
                   GetBrightness(),
                   GetContrast(),
                   GetSaturation(),
                   GetHue()); 
      } 
      
   }
#endif

   //Exit full screen on ESC pressed......
   if( pEvent->event == KeyPress )
   {
      KeySym sym; 
      char   szBuf[10]; /* Flawfinder: ignore */
      int    nNum;
      
      //Lookup the key without any state.
      nNum = XLookupString( (XKeyEvent*)(pEvent->param2), szBuf, 10, &sym, NULL );
      if( nNum > 0 )
      {
         if( 27 == (int)szBuf[0] && IsFullScreen() )
         {
            //Exit full screen if esc is pressed.....
            m_pTopLevelSite->ExitFullScreen();
         }
      }
   }
   
   //Find out if this is an event we are interested in.  Make sure we
   //are visible, it isn't a button, expose or FocusIn event and also
   //make sure it is headed for our window.
   if (!_ShouldProcess(pEvent))
   {
      return FALSE;
   }

   
   if(m_pUser && GetWindow() && GetWindow()->window)
   {
      //Do not send an update event to a hidden site.
      if( pEvent->event == Expose ||
          pEvent->event == FocusIn  ||
          pEvent->event == HX_SURFACE_UPDATE )
      {
         if( (m_ScrollVertButtonT || m_ScrollHorizButtonR) && IsSiteVisible() )
         {
            _DrawArrows();
         }
         _ForwardUpdateEvent(pEvent);
         return TRUE;
      }
      else
      {
         // get original events info from pEvent
         XEvent* pXEvent = (XEvent*) pEvent->param2;
         XButtonEvent* buttonEvent = (XButtonEvent*) pXEvent;
         

         //XXXgfw all this code sucks! It really need to be written
         //for just native events or RMA events. With the change to a
         //common site it is all screwed up. I am leaving it for now
         //so we can get on with transparancy but get back to it!

         //If the user clicks MB1 on a scroll button, handle it here and
         //don't pass it up or let the user handle the event.
         //Hit detection here.

         ////////////////////////////////////////////////////////
         // BEGIN SCROLLING GARBAGE
         ////////////////////////////////////////////////////////
         if(
            ((pEvent->event==ButtonPress || pEvent->event==ButtonRelease) &&
             buttonEvent->button==Button1) &&
            (m_ScrollHorizButtonL || m_ScrollVertButtonB )
             )
         {
            int buttonX=0;
            int buttonY=0;

            if( pEvent->event==ButtonRelease )
            {
               if( m_bScrollingInProgress )
               {
                  m_bScrollingInProgress = FALSE;
                  m_nScrollDir = 0;
                  return TRUE ;
               }
            }
            else
            {
                buttonX = buttonEvent->x;
                buttonY = buttonEvent->y;
               
               BOOL bPointInSite = FALSE;
               if( m_Region )
                   bPointInSite = HXPointInRegion(m_Region, buttonX, buttonY);
                    
               if( bPointInSite )
               {
                  if( m_ScrollHorizButtonL )
                  {
                     if( _InButton( m_ptScrollHorizPosL, buttonX, buttonY ))
                     {
                        m_bScrollingInProgress = TRUE;
                        m_nScrollDir = 1;
                     }
                     if( _InButton( m_ptScrollHorizPosR, buttonX, buttonY ))
                     {
                        m_bScrollingInProgress = TRUE;
                        m_nScrollDir = 2;
                     }
                  }
                  if( m_ScrollVertButtonT )
                  {
                     if( _InButton( m_ptScrollVertPosT, buttonX, buttonY ))
                     {
                        m_bScrollingInProgress = TRUE;
                        m_nScrollDir = 3;
                     }
                     if( _InButton( m_ptScrollVertPosB, buttonX, buttonY ))
                     {
                        m_bScrollingInProgress = TRUE;
                        m_nScrollDir = 4;
                     }                        
                  }
               }
            }

            if( (m_ScrollHorizButtonL||m_ScrollVertButtonT) && m_bScrollingInProgress)
            {
               int xx=0;
               int yy=0;
               HXxWindow* pParentWindow = GetParentSite()->GetWindow();
               //Make it scroll 10% of the parent window each click.
               HXxSize sizeTmp;
               GetParentSite()->GetSize(sizeTmp);

               //Set it to a percentage of the slider range.
               int incX = sizeTmp.cx/10;
               int incY = sizeTmp.cy/10;
                
               HX_ASSERT( pParentWindow );
                
               xx = m_XSliderPos;
               yy = m_YSliderPos;

               if( m_nScrollDir == 1 )
                  xx-=incX;
               if( m_nScrollDir == 2 )
                  xx+=incX;
               if( m_nScrollDir == 3 )
                  yy-=incY;
               if( m_nScrollDir == 4 )
                  yy+=incY;
               
               if( xx > m_size.cx-sizeTmp.cx )
                  xx = m_size.cx-sizeTmp.cx;
               if( yy > m_size.cy-sizeTmp.cy)
                  yy = m_size.cy-sizeTmp.cy;
               
               if( xx < 0 )
                  xx = 0;
               if( yy < 0 )
                  yy = 0;

               m_XSliderPos = xx;
               m_YSliderPos = yy;
               
               HXxRect rect;
               DamageRect(rect);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?