public Step(FlythroughState state, XmlNode node, Text subtitlesText, int subtitleTimeoutS, IMediaPlayer player) { if (node.Attributes["Step"] == null && !int.TryParse(node.Attributes["Step"].Value, out mStep)) throw new ArgumentException("Unable to load slideshow step. A valid 'Step' attribute must be supplied."); #if DEBUG if (sStatistics == null) { sStatistics = new TickStatistics(); StatisticsCollection.AddStatistics(sStatistics, "Flythrough Steps"); } #endif mPlayer = player; mManager = state.Manager; mStep = GetInt(node, -1, "Step"); if (mStep == -1) throw new ArgumentException("Unable to load step ID. A valid Step attribute is expected."); XmlAttribute voiceoverAttribute = node.Attributes["Voiceover"]; if (voiceoverAttribute != null && File.Exists(Path.GetFullPath(voiceoverAttribute.Value))) { if (mPlayer != null) mVoiceoverFile = Path.GetFullPath(voiceoverAttribute.Value); else Logger.Warn("Unable to load voiceover for flythrough step. No MediaPlayer supplied."); } mSubtitlesText = subtitlesText; XmlNode newFontNode = node.SelectSingleNode("child::SubtitlesFont"); if (newFontNode != null) mNewSubtitlesFont = state.Manager.MakeText(newFontNode); if (mSubtitlesText != null) { mTickListener = new Action(mCoordinator_Tick); mSubtitleTimeoutS = subtitleTimeoutS; XmlNode subtitlesNode = node.SelectSingleNode("child::Subtitles"); if (subtitlesNode != null) { foreach (XmlNode child in subtitlesNode.ChildNodes) { if (child is XmlElement) { double time = child.Attributes["Time"] != null ? double.Parse(child.Attributes["Time"].Value) : 0; mSubtitles.Add(time, child.InnerText.Trim('\n', ' ', Environment.NewLine[0]).Replace(" ", "")); } } } } foreach (var featureNode in GetChildrenOfChild(node, "Features")) { IFeature feature = mManager.GetFeature(featureNode, "flythrough step " + (mStep + 1), null); if (feature != null) { mFeatures.Add(feature); state.AddFeature(feature); feature.Active = false; } } }
public FlythroughState(string name, OverlayPlugin manager, string flythrough, params ITrigger[] stepTriggers) : this(name, manager, flythrough) { mAutoStepping = true; Font f = new Font(FONT, FONT_SIZE, FontStyle.Bold); mStepText = new StaticText("1/" + mInput.Count, manager[0], f, FONT_COLOUR, STEP_TEXT_POS); AddFeature(mStepText); //mInput.CurrentEventChange += new Action<FlythroughEvent<Camera>,FlythroughEvent<Camera>>(mInput_CurrentEventChange); mInput.StepStarted += new Action<int>(mInput_StepStarted); foreach (var trigger in stepTriggers) AddStepTrigger(trigger); }
public TextHoverTrigger(OverlayPlugin manager, XmlNode node, Rectangle clip) : base(manager, node, clip) { mText = new StaticText(manager, node, clip); Clip = clip; }
public TextHoverTrigger(OverlayPlugin manager, XmlNode node) : base(manager, node) { mText = new StaticText(manager, node); throw new NotImplementedException("What happens if Clip is not set?"); }
public TextHoverTrigger(FrameOverlayManager manager, ISelectionRenderer renderer, Text text, Rectangle clip) : base(manager, renderer, Text.GetBounds(text, clip)) { mText = text; Clip = clip; }
public FlythroughState(OverlayPlugin manager, XmlNode node, IMediaPlayer player) : base(GetName(node, "flythrough state"), manager, node) { mStepListener = new Action<int>(mInput_StepStarted); mInput = manager.Core.GetPlugin<FlythroughPlugin>(); bool displaySubtitles = GetBool(node, false, "DisplaySubtitles"); mFlythrough = GetString(node, null, "File"); mAutoStepping = GetBool(node, true, "AutoStep"); mLoop = GetBool(node, true, "Loop"); if (mFlythrough == null) throw new ArgumentException("Unable to load flythrough state. No flythrough file specified."); mPlayer = player; if (mPlayer != null) mDefaultWindow = Manager[0]; if (displaySubtitles) { mSubtitlesText = Manager.MakeText(node.SelectSingleNode("child::SubtitleText")); mSubtitlesFont = Manager.MakeText(node.SelectSingleNode("child::SubtitleText")); } XmlNode stepTextNode = node.SelectSingleNode("child::StepText"); if (stepTextNode != null) mStepText = Manager.MakeText(stepTextNode); //mInput.CurrentEventChange += new Action<FlythroughEvent<Camera>,FlythroughEvent<Camera>>(mInput_CurrentEventChange); int subtitleTimeout = GetInt(node, 20, "SubtitleTimeout"); XmlNode stepsRoot = node.SelectSingleNode("child::Steps"); if (stepsRoot != null) { foreach (XmlNode child in stepsRoot.ChildNodes) { if (child is XmlElement) { Step step = new Step(this, child, mSubtitlesText, subtitleTimeout, mPlayer); mSteps.Add(step.StepNum, step); } } } if (displaySubtitles) AddFeature(mSubtitlesText); if (mStepText != null) AddFeature(mStepText); XmlNode triggersRoot = node.SelectSingleNode("child::Triggers"); if (triggersRoot != null) { foreach (XmlNode child in triggersRoot.ChildNodes) AddStepTrigger(manager.GetTrigger(child, "flythrough step", null)); } }
public static RectangleF GetBounds(Text text, Rectangle clip) { using (Bitmap b = new Bitmap(1, 1)) { using (Graphics g = Graphics.FromImage(b)) { SizeF size = g.MeasureString(text.TextString, text.Font); return new RectangleF(text.Position.X, text.Position.Y, size.Width / clip.Width, size.Height / clip.Height); } } }
public TextClickTrigger(FrameOverlayManager manager, Text text, Rectangle clip) : base(manager, Text.GetBounds(text, clip)) { mText = text; Clip = clip; }