/////////////////////////////////////////////////////////////////////// // Name: Invoke // Description: Callback for asynchronous BeginGetEvent method. // // pAsyncResult: Pointer to the result. ///////////////////////////////////////////////////////////////////////// int IMFAsyncCallback.Invoke(IMFAsyncResult pAsyncResult) { // Make sure we *never* leave this entry point with an exception try { int hr; IMFMediaEvent pEvent; MediaEventType meType = MediaEventType.MEUnknown; // Event type PropVariant varEventData = new PropVariant(); // Event data // Get the event from the event queue. hr = m_pMEG.EndGetEvent(pAsyncResult, out pEvent); MFError.ThrowExceptionForHR(hr); // Get the event type. hr = pEvent.GetType(out meType); MFError.ThrowExceptionForHR(hr); // Get the event status. If the operation that triggered the event did // not succeed, the status is a failure code. hr = pEvent.GetStatus(out m_hrStatus); MFError.ThrowExceptionForHR(hr); if (m_hrStatus == 862022) // NS_S_DRM_MONITOR_CANCELLED { m_hrStatus = MFError.MF_E_OPERATION_CANCELLED; m_state = Enabler.Complete; } // Get the event data. hr = pEvent.GetValue(varEventData); MFError.ThrowExceptionForHR(hr); // For the MEEnablerCompleted action, notify the application. // Otherwise, request another event. Debug.WriteLine(string.Format("Content enabler event: {0}", meType.ToString())); if (meType == MediaEventType.MEEnablerCompleted) { PostMessage(m_hwnd, WM_APP_CONTENT_ENABLER, IntPtr.Zero, IntPtr.Zero); } else { if (meType == MediaEventType.MEEnablerProgress) { if (varEventData.GetVariantType() == PropVariant.VariantType.String) { Debug.WriteLine(string.Format("Progress: {0}", varEventData.GetString())); } } hr = m_pMEG.BeginGetEvent(this, null); MFError.ThrowExceptionForHR(hr); } // Clean up. varEventData.Clear(); SafeRelease(pEvent); return S_Ok; } catch (Exception e) { return Marshal.GetHRForException(e); } }
/////////////////////////////////////////////////////////////////////// // Name: CompleteEnable // Description: Completes the current action. // // This method invokes the PMP session's callback. ///////////////////////////////////////////////////////////////////////// public void CompleteEnable() { int hr; m_state = Enabler.Complete; // m_pCallback can be NULL if the BeginEnableContent was not called. // This is the case when the application initiates the enable action, eg // when MFCreatePMPMediaSession fails and returns an IMFActivate pointer. if (m_pCallback != null) { Debug.WriteLine(string.Format("ContentProtectionManager: Invoking the pipeline's callback. (status = 0x{0})", m_hrStatus)); IMFAsyncResult pResult; hr = MFExtern.MFCreateAsyncResult(null, m_pCallback, m_punkState, out pResult); MFError.ThrowExceptionForHR(hr); hr = pResult.SetStatus(m_hrStatus); MFError.ThrowExceptionForHR(hr); hr = MFExtern.MFInvokeCallback(pResult); MFError.ThrowExceptionForHR(hr); } }
/////////////////////////////////////////////////////////////////////// // Name: DoEnable // Description: Does the enabler action. // // flags: If ForceNonSilent, then always use non-silent enable. // Otherwise, use silent enable if possible. //////////////////////////////////////////////////////////////////////// public void DoEnable(EnablerFlags flags) { Debug.WriteLine(string.Format("ContentProtectionManager::DoEnable (flags ={0})", flags.ToString())); int hr; bool bAutomatic = false; Guid guidEnableType; try { // Get the enable type. (Just for logging. We don't use it.) hr = m_pEnabler.GetEnableType(out guidEnableType); MFError.ThrowExceptionForHR(hr); LogEnableType(guidEnableType); // Query for the IMFMediaEventGenerator interface so that we can get the // enabler events. m_pMEG = (IMFMediaEventGenerator)m_pEnabler; // Ask for the first event. hr = m_pMEG.BeginGetEvent(this, null); MFError.ThrowExceptionForHR(hr); // Decide whether to use silent or non-silent enabling. If flags is ForceNonSilent, // then we use non-silent. Otherwise, we query whether the enabler object supports // silent enabling (also called "automatic" enabling). if (flags == EnablerFlags.ForceNonSilent) { Debug.WriteLine(("Forcing non-silent enable.")); bAutomatic = false; } else { hr = m_pEnabler.IsAutomaticSupported(out bAutomatic); MFError.ThrowExceptionForHR(hr); Debug.WriteLine(string.Format("IsAutomatic: auto = {0}", bAutomatic)); } // Start automatic or non-silent, depending. if (bAutomatic) { m_state = Enabler.SilentInProgress; Debug.WriteLine("Content enabler: Automatic is supported"); hr = m_pEnabler.AutomaticEnable(); MFError.ThrowExceptionForHR(hr); } else { m_state = Enabler.NonSilentInProgress; Debug.WriteLine("Content enabler: Using non-silent enabling"); DoNonSilentEnable(); } } catch (Exception e) { m_hrStatus = Marshal.GetHRForException(e); throw; } }
public ConditionalDrawerInternal(Enabler enabler = null, params ActionDrawer[] actionDrawers) { this.actionDrawers = actionDrawers; m_Enabler = enabler; }
/// <summary> /// Conditioned drawer that will draw something depending of the return of the switch /// </summary> /// <param name="switch">Chose witch drawing to use</param> /// <param name="drawIfTrue">This will be draw if the <see cref="switch"/> is true</param> /// <param name="drawIfFalse">This will be draw if the <see cref="switch"/> is false</param> /// <returns>A IDrawer object</returns> public static IDrawer TernaryConditional(Enabler @switch, ActionDrawer drawIfTrue, ActionDrawer drawIfFalse) => new TernaryConditionalDrawerInternal(@switch, drawIfTrue, drawIfFalse);
internal static IDrawer ConditionalWithAdditionalProperties(Enabler enabler, AnimFloat animation, params ActionDrawer[] contentDrawers) { return(new ConditionalDrawerWithAdditionalPropertiesInternal(enabler, animation, contentDrawers)); }
public ContentProtectionManager(IntPtr hNotify) { m_hwnd = hNotify; m_state = Enabler.Ready; }
/// <summary> /// Conditioned drawer that will only be drawn if its enabler function is null or return true /// </summary> /// <param name="enabler">Enable the drawing if null or return true</param> /// <param name="contentDrawers">The content of the group</param> /// <returns>A IDrawer object</returns> public static IDrawer Conditional(Enabler enabler, params ActionDrawer[] contentDrawers) { return(new ConditionalDrawerInternal(enabler, contentDrawers)); }
public DelegateParamterisedCommand(Executable execute, Enabler canExecute) { _execute = execute; _canExecute = canExecute; }
public static IDrawer AdvancedFoldoutGroup <TEnum, TState>(GUIContent foldoutTitle, TEnum foldoutMask, ExpandedState <TEnum, TState> foldoutState, Enabler isAdvanced, SwitchEnabler switchAdvanced, IDrawer normalContent, ActionDrawer advancedContent, FoldoutOption options = FoldoutOption.Indent) where TEnum : struct, IConvertible { return(AdvancedFoldoutGroup(foldoutTitle, foldoutMask, foldoutState, isAdvanced, switchAdvanced, normalContent.Draw, advancedContent, options)); }
public static IDrawer AdvancedFoldoutGroup <TEnum, TState>(GUIContent foldoutTitle, TEnum foldoutMask, ExpandedState <TEnum, TState> foldoutState, Enabler isAdvanced, SwitchEnabler switchAdvanced, ActionDrawer normalContent, ActionDrawer advancedContent, FoldoutOption options = FoldoutOption.Indent) where TEnum : struct, IConvertible { return(FoldoutGroup(foldoutTitle, foldoutMask, foldoutState, options, isAdvanced, switchAdvanced, normalContent, Conditional((serialized, owner) => isAdvanced(serialized, owner) && foldoutState[foldoutMask], advancedContent).Draw)); }
// This one is private as we do not want to have unhandled advanced switch. Change it if necessary. static IDrawer FoldoutGroup <TEnum, TState>(GUIContent title, TEnum mask, ExpandedState <TEnum, TState> state, FoldoutOption options, Enabler showAdditionalProperties, SwitchEnabler switchAdditionalProperties, params ActionDrawer[] contentDrawers) where TEnum : struct, IConvertible { return(Group((data, owner) => { bool isBoxed = (options & FoldoutOption.Boxed) != 0; bool isIndented = (options & FoldoutOption.Indent) != 0; bool isSubFoldout = (options & FoldoutOption.SubFoldout) != 0; bool noSpaceAtEnd = (options & FoldoutOption.NoSpaceAtEnd) != 0; bool expended = state[mask]; bool newExpended = expended; if (isSubFoldout) { newExpended = CoreEditorUtils.DrawSubHeaderFoldout(title, expended, isBoxed); } else { CoreEditorUtils.DrawSplitter(isBoxed); newExpended = CoreEditorUtils.DrawHeaderFoldout(title, expended, isBoxed, showAdditionalProperties == null ? (Func <bool>)null : () => showAdditionalProperties(data, owner), switchAdditionalProperties == null ? (Action)null : () => switchAdditionalProperties(data, owner)); } if (newExpended ^ expended) { state[mask] = newExpended; } if (newExpended) { if (isIndented) { ++EditorGUI.indentLevel; } for (var i = 0; i < contentDrawers.Length; i++) { contentDrawers[i](data, owner); } if (isIndented) { --EditorGUI.indentLevel; } if (!noSpaceAtEnd) { EditorGUILayout.Space(); } } })); }
public TernaryConditionalDrawerInternal(Enabler @switch, ActionDrawer drawIfTrue, ActionDrawer drawIfFalse) { this.drawIfTrue = drawIfTrue; this.drawIfFalse = drawIfFalse; m_Switch = @switch; }
public ConditionalDrawerWithAdditionalPropertiesInternal(Enabler enabler = null, AnimFloat anim = null, params ActionDrawer[] actionDrawers) { m_ActionDrawers = actionDrawers; m_Enabler = enabler; m_Anim = anim; }
/////////////////////////////////////////////////////////////////////// // Name: Invoke // Description: Callback for asynchronous BeginGetEvent method. // // pAsyncResult: Pointer to the result. ///////////////////////////////////////////////////////////////////////// HResult IMFAsyncCallback.Invoke(IMFAsyncResult pAsyncResult) { // Make sure we *never* leave this entry point with an exception try { HResult hr; IMFMediaEvent pEvent; MediaEventType meType = MediaEventType.MEUnknown; // Event type PropVariant varEventData = new PropVariant(); // Event data // Get the event from the event queue. hr = m_pMEG.EndGetEvent(pAsyncResult, out pEvent); MFError.ThrowExceptionForHR(hr); // Get the event type. hr = pEvent.GetType(out meType); MFError.ThrowExceptionForHR(hr); // Get the event status. If the operation that triggered the event did // not succeed, the status is a failure code. hr = pEvent.GetStatus(out m_hrStatus); MFError.ThrowExceptionForHR(hr); if ((int)m_hrStatus == 862022) // NS_S_DRM_MONITOR_CANCELLED { m_hrStatus = HResult.MF_E_OPERATION_CANCELLED; m_state = Enabler.Complete; } // Get the event data. hr = pEvent.GetValue(varEventData); MFError.ThrowExceptionForHR(hr); // For the MEEnablerCompleted action, notify the application. // Otherwise, request another event. Debug.WriteLine(string.Format("Content enabler event: {0}", meType.ToString())); if (meType == MediaEventType.MEEnablerCompleted) { PostMessage(m_hwnd, WM_APP_CONTENT_ENABLER, IntPtr.Zero, IntPtr.Zero); } else { if (meType == MediaEventType.MEEnablerProgress) { if (varEventData.GetVariantType() == PropVariant.VariantType.String) { Debug.WriteLine(string.Format("Progress: {0}", varEventData.GetString())); } } hr = m_pMEG.BeginGetEvent(this, null); MFError.ThrowExceptionForHR(hr); } // Clean up. varEventData.Clear(); SafeRelease(pEvent); return(HResult.S_OK); } catch (Exception e) { return((HResult)Marshal.GetHRForException(e)); } }
/////////////////////////////////////////////////////////////////////// // Name: BeginEnableContent // Description: Called by the PMP session to start the enable action. ///////////////////////////////////////////////////////////////////////// public int BeginEnableContent( IMFActivate pEnablerActivate, IMFTopology pTopo, IMFAsyncCallback pCallback, object punkState ) { // Make sure we *never* leave this entry point with an exception try { Debug.WriteLine("ContentProtectionManager::BeginEnableContent"); if (m_pEnabler != null) { throw new COMException("A previous call is still pending", E_Fail); } int hr; // Save so we can create an async result later m_pCallback = pCallback; m_punkState = punkState; // Create the enabler from the IMFActivate pointer. object o; hr = pEnablerActivate.ActivateObject(typeof(IMFContentEnabler).GUID, out o); MFError.ThrowExceptionForHR(hr); m_pEnabler = o as IMFContentEnabler; // Notify the application. The application will call DoEnable from the app thread. m_state = Enabler.Ready; // Reset the state. PostMessage(m_hwnd, WM_APP_CONTENT_ENABLER, IntPtr.Zero, IntPtr.Zero); return S_Ok; } catch (Exception e) { return Marshal.GetHRForException(e); } }
private void DrawSelectFunction(NodeOutput outPut, NodeInput inPut) { var functions = selects[outPut].functions; var target = functions[inPut]; if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } inPut.DisplayLayout(); if (isExpanded) { if (target is SpriteChanger) { GUILayout.BeginHorizontal(); GUILayout.Label(selectOptions[0]); if (GUILayout.Button("기능 삭제")) { if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } DestroyImmediate((MonoBehaviour)functions[inPut]); DestroyImmediate(target, true); functions.Remove(inPut); try { inPut.connection.connections.Remove(inPut); } catch (NullReferenceException e) { } Inputs.Remove(inPut); Vector2 topLeft = rect.position; rect = new Rect(topLeft.x, topLeft.y, 200, 100); DrawConnectors(); return; } GUILayout.EndHorizontal(); target.delay = EditorGUILayout.FloatField("발동 딜레이(초)", target.delay); SpriteChanger changer = (SpriteChanger)target; GUILayout.BeginHorizontal(); GUILayout.Label("기본 스프라이트"); changer.baseSprite = EditorGUILayout.ObjectField(changer.baseSprite, typeof(Sprite), true) as Sprite; GUILayout.Label("선택 스프라이트"); changer.selectedSprite = EditorGUILayout.ObjectField(changer.selectedSprite, typeof(Sprite), true) as Sprite; GUILayout.EndHorizontal(); } else if (target is Enabler) { GUILayout.BeginHorizontal(); GUILayout.Label(selectOptions[1]); if (GUILayout.Button("기능 삭제")) { if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } DestroyImmediate((MonoBehaviour)functions[inPut]); DestroyImmediate(target, true); functions.Remove(inPut); try { inPut.connection.connections.Remove(inPut); } catch (NullReferenceException e) { } Inputs.Remove(inPut); Vector2 topLeft = rect.position; rect = new Rect(topLeft.x, topLeft.y, 200, 100); DrawConnectors(); return; } GUILayout.EndHorizontal(); target.delay = EditorGUILayout.FloatField("발동 딜레이(초)", target.delay); Enabler enabler = (Enabler)target; enabler.option = (EnableOption)EditorGUILayout.EnumPopup("옵션", enabler.option); } else if (target is SoundPlayer) { GUILayout.BeginHorizontal(); GUILayout.Label(selectOptions[2]); if (GUILayout.Button("기능 삭제")) { if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } DestroyImmediate((MonoBehaviour)functions[inPut]); DestroyImmediate(target, true); functions.Remove(inPut); try { inPut.connection.connections.Remove(inPut); } catch (NullReferenceException e) { } Inputs.Remove(inPut); Vector2 topLeft = rect.position; rect = new Rect(topLeft.x, topLeft.y, 200, 100); DrawConnectors(); return; } GUILayout.EndHorizontal(); target.delay = EditorGUILayout.FloatField("발동 딜레이(초)", target.delay); SoundPlayer player = (SoundPlayer)target; player.sound = EditorGUILayout.ObjectField("효과음", player.sound, typeof(AudioClip), true) as AudioClip; } else if (target is MessageDisplayer) { GUILayout.BeginHorizontal(); GUILayout.Label(selectOptions[3]); if (GUILayout.Button("기능 삭제")) { if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } DestroyImmediate((MonoBehaviour)functions[inPut]); DestroyImmediate(target, true); functions.Remove(inPut); try { inPut.connection.connections.Remove(inPut); } catch (NullReferenceException e) { } Inputs.Remove(inPut); Vector2 topLeft = rect.position; rect = new Rect(topLeft.x, topLeft.y, 200, 100); DrawConnectors(); return; } GUILayout.EndHorizontal(); target.delay = EditorGUILayout.FloatField("발동 딜레이(초)", target.delay); GUILayout.BeginHorizontal(); MessageDisplayer displayer = (MessageDisplayer)target; displayer.inputMessage = EditorGUILayout.TextArea(displayer.inputMessage); GUILayout.EndHorizontal(); } else if (target is ItemGainer) { GUILayout.BeginHorizontal(); GUILayout.Label(selectOptions[4]); if (GUILayout.Button("기능 삭제")) { if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } DestroyImmediate((MonoBehaviour)functions[inPut]); DestroyImmediate(target, true); functions.Remove(inPut); try { inPut.connection.connections.Remove(inPut); } catch (NullReferenceException e) { } Inputs.Remove(inPut); Vector2 topLeft = rect.position; rect = new Rect(topLeft.x, topLeft.y, 200, 100); DrawConnectors(); return; } GUILayout.EndHorizontal(); target.delay = EditorGUILayout.FloatField("발동 딜레이(초)", target.delay); } else if (target is DangerChanger) { GUILayout.BeginHorizontal(); GUILayout.Label(selectOptions[5]); if (GUILayout.Button("기능 삭제")) { if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } DestroyImmediate((MonoBehaviour)functions[inPut]); DestroyImmediate(target, true); functions.Remove(inPut); try { inPut.connection.connections.Remove(inPut); } catch (NullReferenceException e) { } Inputs.Remove(inPut); Vector2 topLeft = rect.position; rect = new Rect(topLeft.x, topLeft.y, 200, 100); DrawConnectors(); return; } GUILayout.EndHorizontal(); target.delay = EditorGUILayout.FloatField("발동 딜레이(초)", target.delay); DangerChanger dChanger = (DangerChanger)target; dChanger.newDanger = EditorGUILayout.IntField("새 위험도", dChanger.newDanger); } else if (target is SpriteShower) { GUILayout.BeginHorizontal(); GUILayout.Label(selectOptions[6]); if (GUILayout.Button("기능 삭제")) { if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } DestroyImmediate((MonoBehaviour)functions[inPut]); DestroyImmediate(target, true); functions.Remove(inPut); try { inPut.connection.connections.Remove(inPut); } catch (NullReferenceException e) { } Inputs.Remove(inPut); Vector2 topLeft = rect.position; rect = new Rect(topLeft.x, topLeft.y, 200, 100); DrawConnectors(); return; } GUILayout.EndHorizontal(); target.delay = EditorGUILayout.FloatField("발동 딜레이(초)", target.delay); SpriteShower shower = (SpriteShower)target; for (int i = 0; i < shower.sprites.Count; i++) { shower.sprites[i] = EditorGUILayout.ObjectField(shower.sprites[i], typeof(Sprite), true) as Sprite; } Sprite newSprite = null; newSprite = EditorGUILayout.ObjectField(newSprite, typeof(Sprite), true) as Sprite; if (newSprite != null) { shower.sprites.Add(newSprite); } } else if (target is EventMaker) { GUILayout.BeginHorizontal(); GUILayout.Label(selectOptions[7]); if (GUILayout.Button("기능 삭제")) { if (!selects.ContainsKey(outPut) || !functions.ContainsKey(inPut)) { return; } DestroyImmediate((MonoBehaviour)functions[inPut]); functions.Remove(inPut); try { inPut.connection.connections.Remove(inPut); } catch (NullReferenceException e) { } Inputs.Remove(inPut); Vector2 topLeft = rect.position; rect = new Rect(topLeft.x, topLeft.y, 200, 100); DrawConnectors(); return; } GUILayout.EndHorizontal(); target.delay = EditorGUILayout.FloatField("발동 딜레이(초)", target.delay); GUILayout.BeginHorizontal(); EventMaker eventMaker = (EventMaker)target; eventMaker.eventFlag = EditorGUILayout.TextField("이벤트명", eventMaker.eventFlag); GUILayout.EndHorizontal(); } GUILayout.Space(10); } }