⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macsite.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	    ControlHandle theControl = NULL;	    	    HXxWindow* pWindow = GetWindow();	    	    if (pWindow && pWindow->window)	    {		w = (WindowPtr)pWindow->window;	    }	    	    HX_ASSERT(w);	    	    if (!w) return HXR_FAIL;	    GrafPtr savePort;	    ::GetPort(&savePort);	    ::SetPort(::GetWindowPort(w));	    	    Point oldOrigin;	    Rect portRect;	    ::GetPortBounds(::GetWindowPort(w), &portRect);	    oldOrigin.h = portRect.left;	    oldOrigin.v = portRect.top;	    	    SetOriginAndMaintainClipRgn(0,0); // origin must be at 0,0 for scroll bar maintenence	    	    Point localPt = macEvent->where;	    ::GlobalToLocal(&localPt);	    	    short thePart = 0;	    theControl = ::FindControlUnderMouse(localPt, w, &thePart);	    	    if (theControl && ((theControl == m_hHScrollBar) || (theControl == m_hVScrollBar)))	    {		short trackedPart = ::TrackControl(theControl, localPt, m_ScrollBarActionProc);                // xxxbobclark Carbon Porting Notes: TrackControl is deprecated, use HandleControlClick.				long pageSize;				if (theControl == m_hHScrollBar)		{		    pageSize = m_nHorizPageSize;		}		else		{		    pageSize = m_nVertPageSize;		}				switch (trackedPart)		{		    case kControlUpButtonPart:			::SetControl32BitValue(theControl, ::GetControl32BitValue(theControl)-1);			break;		    case kControlDownButtonPart:			::SetControl32BitValue(theControl, ::GetControl32BitValue(theControl)+1);			break;		    case kControlPageUpPart:			::SetControl32BitValue(theControl, ::GetControl32BitValue(theControl)-pageSize);			break;		    case kControlPageDownPart:			::SetControl32BitValue(theControl, ::GetControl32BitValue(theControl)+pageSize);			break;		}				if (theControl == m_hHScrollBar)		{		    m_XSliderPos = ::GetControl32BitValue(theControl);		}		if (theControl == m_hVScrollBar)		{		    m_YSliderPos = ::GetControl32BitValue(theControl);		}				HXxPoint ptSiteOrigin;		GetMacContentAreaOffset(ptSiteOrigin);		Rect invalRect;		invalRect.left = ptSiteOrigin.x;		invalRect.top = ptSiteOrigin.y;				if (m_hHScrollBar)		{		    Rect controlRect;		    ::GetControlBounds(m_hHScrollBar, &controlRect);		    invalRect.right = controlRect.right;		    invalRect.bottom = controlRect.top;		}		if (m_hVScrollBar)		{		    Rect controlRect;		    ::GetControlBounds(m_hVScrollBar, &controlRect);		    invalRect.right = controlRect.left;		    invalRect.bottom = controlRect.bottom;		}				::InvalWindowRect(w, &invalRect);		handled = TRUE;	    }	    	    if (!handled)	    {		HXxWindow* pWindow = GetWindow();		if (pWindow && pWindow->window)		{		    // see if it's in this site		    SetOriginAndMaintainClipRgn(-pWindow->x, -pWindow->y);		    Point p = macEvent->where;		    ::GlobalToLocal(&p);		    HXxPoint loc;		    loc.x = p.h;		    loc.y = p.v;		    		    HX_ASSERT(m_RegionForMouse);		    if (IsPointInClippingRegion(&loc))		    {			HXxPoint offset = {0,0};			GetMacContentAreaOffset(offset);//			UDrawingUtils::SetOriginAndMaintainClipRgn(-offset.x, -offset.y);                        if (m_pUser)                        {//                            m_pUser->HandleEvent(pEvent);//                            handled = pEvent->handled;                        }		    }		    		    SetOriginAndMaintainClipRgn(oldOrigin.h, oldOrigin.v);		    		    ::SetPort(savePort);		}			    }	}    }    return handled;}/************************************************************************ *  Method: *    CHXMacSite::_HandleAllOSEvents *//* static */void CHXMacSite::_HandleAllOSEvents(HXxEvent* pEvent){    EventRecord* macEvent = (EventRecord*) pEvent->param1;        CHXSimpleList::Iterator ndx = zm_ListOfMacSites.Begin();    for ( ; ndx != zm_ListOfMacSites.End(); ++ndx)    {	CHXMacSite* pMacSite = (CHXMacSite*)(*ndx);		HX_ASSERT( pMacSite );		pMacSite->_HandleOSEvents(pEvent);    }    /*    if (gRecentUpdateEvent)    {	EventRecord* macEvent = (EventRecord*)pEvent->param1;	if (macEvent->what == updateEvt)	{	    // XXXbobclark	    // clearly we're handling the recent update event and since we've	    // just done it let's clear that puppy out.	    gRecentUpdateEvent = false;	}    }*/}/************************************************************************ *  Method: *    CHXMacSite::_ConvertRegionToMacRegion *	utility function to convert between the RealNetworks *	regions that the site classes use and Mac-specific *	RgnHandle's. *//* static */RgnHandleCHXMacSite::_ConvertRegionToMacRegion( HXREGION* pRegion ){    HX_ASSERT(IsMacInCooperativeThread());    if ( !IsMacInCooperativeThread() ) return nil; // Hoo-boy would this ever suck    RgnHandle rgn = ::NewRgn();        if ( rgn )    {	::OpenRgn();		for ( long i = 0; i < pRegion->numRects; i++ )	{	    Rect r;	    r.left = pRegion->rects[i].x1;	    r.top = pRegion->rects[i].y1;	    r.right = pRegion->rects[i].x2;	    r.bottom = pRegion->rects[i].y2;	    	    ::FrameRect( &r );	}		::CloseRgn( rgn );    }    return rgn;}/************************************************************************ *  Method: *    CHXMacSite::_ConvertToHXEvent */BOOLCHXMacSite::_ConvertToHXEvent( HXxEvent* pEvent ){    if (pEvent->event == mouseDown || pEvent->event == mouseUp)    {	HXxWindow* pWindow = GetWindow();	if (pWindow && pWindow->window)	{	    GrafPtr savePort;	    GetPort(&savePort);	    WindowPtr w = (WindowPtr)pWindow->window;	    	    Point oldOrigin;#if defined(_CARBON) || defined(_MAC_UNIX)	    SetPort( GetWindowPort(w) );	    Rect portRect;	    GetPortBounds( GetWindowPort(w), &portRect );	    oldOrigin.h = portRect.left;	    oldOrigin.v = portRect.top;#else	    SetPort( w );	    oldOrigin.h = w->portRect.left;	    oldOrigin.v = w->portRect.top;#endif	    static HXxPoint realPt = {0,0};	    	    EventRecord* macEvent = (EventRecord*)pEvent->param1;	    Point localPoint = macEvent->where;	    GlobalToLocal( &localPoint );	    realPt.x = localPoint.h;	    realPt.y = localPoint.v;	    UINT32 flags = 0;	    if (macEvent->modifiers & shiftKey) flags |= HX_SHIFT_KEY;	    if (macEvent->modifiers & controlKey) flags |= HX_CTRL_KEY;	    if (macEvent->modifiers & cmdKey) flags |= HX_ALT_COMMAND_KEY;	    	    if (flags & HX_CTRL_KEY)	    {		pEvent->event = pEvent->event == mouseDown ?			HX_CONTEXT_BUTTON_DOWN : HX_CONTEXT_BUTTON_UP;	    }	    else	    {		pEvent->event = pEvent->event == mouseDown ?			HX_PRIMARY_BUTTON_DOWN : HX_PRIMARY_BUTTON_UP;	    }	    pEvent->param1 = (void*)&realPt;	    pEvent->param2 = (void*)flags;	    SetPort(savePort);	    return FALSE;	}    }    if (pEvent->event == nullEvent && _AtSystemTime())    {	EventRecord* macEvent = (EventRecord*)pEvent->param1;		HXxWindow* pWindow = GetWindow();	if (pWindow && pWindow->window)	{	    WindowPtr w = (WindowPtr)pWindow->window;	    if (w == ::FrontWindow())	    {		GrafPtr savePort;		::GetPort(&savePort);#if defined(_CARBON) || defined(_MAC_UNIX)		::SetPort( GetWindowPort(w) );#else		::SetPort(w);#endif		Point oldOrigin;#if defined(_CARBON) || defined(_MAC_UNIX)		Rect portRect;		GetPortBounds( GetWindowPort( w ), &portRect );		oldOrigin.h = portRect.left;		oldOrigin.v = portRect.top;#else		oldOrigin.h = w->portRect.left;		oldOrigin.v = w->portRect.top;#endif				// see if it's in this site		Point p = macEvent->where;		::GlobalToLocal(&p);		HXxPoint loc;		loc.x = p.h;		loc.y = p.v;				HX_ASSERT(m_RegionForMouse);		if (m_RegionForMouse && IsPointInClippingRegion(&loc))		{		    static Point sLastGlobalLocation = {0,0};		    if (macEvent->where.h != sLastGlobalLocation.h || macEvent->where.v != sLastGlobalLocation.v)		    {			sLastGlobalLocation = macEvent->where;			Point localPt = sLastGlobalLocation;			::GlobalToLocal(&localPt);			m_MostRecentConvertedMouseLoc.x = localPt.h;			m_MostRecentConvertedMouseLoc.y = localPt.v;			UINT32 flags = 0;			if (macEvent->modifiers & shiftKey) flags += HX_SHIFT_KEY;			if (macEvent->modifiers & controlKey) flags += HX_CTRL_KEY;			if (macEvent->modifiers & cmdKey) flags += HX_ALT_COMMAND_KEY;			// don't change the event until we're done looking at it!			// (the pre-converted version that is.)			pEvent->event = HX_MOUSE_MOVE;			pEvent->param1 = (void*)&m_MostRecentConvertedMouseLoc;			pEvent->param2 = (void*)flags;			// This will eventually be handled by the base site.			// It's possible that the base site will need to translate			// this into HX_MOUSE_ENTER and HX_MOUSE_LEAVE first,			// though, which is why we don't simply handle it here.		    }		}		else		{		    if (m_pTopLevelSite->m_pMouseInSite == this)		    {			m_pTopLevelSite->GenerateMouseLeaveMessage();		    }		}						::SetPort(savePort);	    }	}    }    return FALSE; //pEvent->handled;}/************************************************************************ *  Method: *    CHXMacSite::_GenerateOSEvent */voidCHXMacSite::_GenerateOSEvent(HXxEvent* pEvent, HXxEvent* pEvent2){}/************************************************************************ *  Method: *    CHXMacSite::_GenerateSetCursorEvent */voidCHXMacSite::_GenerateSetCursorEvent(){    Point oldOrigin;    HXxWindow* pWindow = GetWindow();    if (!pWindow || !pWindow->window)    {	return;    }    WindowPtr w = (WindowPtr)pWindow->window;    GrafPtr savePort;    ::GetPort(&savePort);#if defined(_CARBON) || defined(_MAC_UNIX)    ::SetPort(::GetWindowPort(w));#else    ::SetPort(w);#endif#if defined(_CARBON) || defined(_MAC_UNIX)    Rect portRect;    GetPortBounds( GetWindowPort( w ), &portRect );    oldOrigin.h = portRect.left;    oldOrigin.v = portRect.top;#else    oldOrigin.h = w->portRect.left;    oldOrigin.v = w->portRect.top;#endif    SetOriginAndMaintainClipRgn(-pWindow->x, -pWindow->y);    HXxPoint offset = {0,0};    GetMacContentAreaOffset(offset);    SetOriginAndMaintainClipRgn(-offset.x, -offset.y);        Point location;    GetMouse(&location);    HXxEvent theEvent;    memset(&theEvent, 0, sizeof(theEvent));    theEvent.event = HX_MOUSE_MOVE;        HXxPoint mouseLoc;    mouseLoc.x = location.h;    mouseLoc.y = location.v;    theEvent.param1 = (void*)&mouseLoc;        SetOriginAndMaintainClipRgn(oldOrigin.h, oldOrigin.v);    if (m_pUser)	m_pUser->HandleEvent(&theEvent);    ::SetPort(savePort);}voidCHXMacSite::_ScaleFullScreen(HXxWindow* pWindow){    if (m_pParentSite != nil)    {	CHXMacSite* pParentSite = (CHXMacSite*)m_pParentSite;	m_fStretchMultiple = pParentSite->m_fStretchMultiple;	m_pHXxFullScreenWindow->window = pParentSite->m_pHXxFullScreenWindow->window;		if (0 /*pParentSite->m_pStatusSite == this*/)	{	}	else	{	    if (m_pWindow) pWindow = m_pWindow;	    	    m_pHXxFullScreenWindow->x = (long)((double)pWindow->x * m_fStretchMultiple);	    m_pHXxFullScreenWindow->y = (long)((double)pWindow->y * m_fStretchMultiple);	    m_pHXxFullScreenWindow->width = (long)((double)pWindow->width * m_fStretchMultiple);	    m_pHXxFullScreenWindow->height = (long)((double)pWindow->height * m_fStretchMultiple);	    	    m_pHXxFullScreenWindow->clipRect.left = (long)((double)pWindow->clipRect.left * m_fStretchMultiple);	    m_pHXxFullScreenWindow->clipRect.top = (long)((double)pWindow->clipRect.top * m_fStretchMultiple);	    m_pHXxFullScreenWindow->clipRect.right = (long)((double)pWindow->clipRect.right * m_fStretchMultiple);	    m_pHXxFullScreenWindow->clipRect.bottom = (long)((double)pWindow->clipRect.bottom * m_fStretchMultiple);	}    }    CHXMapPtrToPtr::Iterator i = m_ChildrenMap.Begin();    for ( ; i != m_ChildrenMap.End(); ++i)    {	CHXBaseSite* pSite = (CHXBaseSite*) *i;		CHXMacSite* pMacSite = (CHXMacSite*)pSite;	pMacSite->_ScaleFullScreen(pWindow);    }}/************************************************************************ *  Method: *    CHXMacSite::_EnterFullScreen */HX_RESULTCHXMacSite::_EnterFullScreen(){    if (zm_bFullScreenActive)    {	return HXR_UNEXPECTED;    }        zm_bFullScreenActive = TRUE;        if (m_pTopLevelSite == this)    {	short desiredWidth, desiredHeight;	

⌨️ 快捷键说明

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