public PlayThread(FrameRenderer renderer) { mStateLock = new Object(); ThreadState = PlayThreadState.Stopped; mRenderer = renderer; PlaySpeed = 1.0f; }
public MainDesignerForm() { InitializeComponent(); // The key press handler is used to track key presses across the whole // application. mKeyPressHandler = new KeyPressHandler(this); Application.AddMessageFilter(mKeyPressHandler); frameCollection.SetParentForm(this); frameCollection.ModelChanged(mPlayModel); // Set up the model history for tracking changes. mModelHistory = new ModelHistory(); // Initialise the frame renderer. This component is responsible for // drawing the frame whilst it is being designed. mFrameRenderer = new FrameRenderer(BackColor, Settings.Default.PitchColor, Settings.Default.LineColor); viewPanel.PlayingThread = new PlayThread(mFrameRenderer); viewPanel.CurrentFrame = AddFrame(); viewPanel.Renderer = mFrameRenderer; viewPanel.IsDesignMode = true; viewPanel.DesignerForm = this; viewPanel.VisualOverlay = new VisualOverlay(); viewPanel.KeyPressHandler = mKeyPressHandler; // Can't set the selected index of the drop down for the play speeds // until the objects are all added to the frame. playSpeedCombo.SelectedIndex = 1; // Need to set the current frame on the frame collection so that the // correct frame is increased in size. frameCollection.CurrentFrameChanged(viewPanel.CurrentFrame); if (Settings.Default.ShowUpgradeDialog) { mVersionChecker = new VersionChecker(this); } }
/// <summary> /// Whenever the model or the current frame changes we need to change the /// background image to one which represents the new model. This is done /// by building up a bitmap one frame at a time. /// </summary> /// <returns>The new background image</returns> private void CreateBackgroundImage() { float currFrameX = FRAME_PADDING_X; int frameWidth; int frameHeight; int frameYPadding; int frameXPadding; // Before rendering the background this function calculates what size // the small frames should be displayed as. RecalculateSizes(); using (FrameRenderer renderer = new FrameRenderer(BackColor, Settings.Default.PitchColor, Settings.Default.LineColor)) { Bitmap background = new Bitmap(calculateBackgroundWidth(), mSelectedFrameHeight + UNSELECTED_FRAME_Y_PADDING * 2); using (Graphics canvas = Graphics.FromImage(background)) { canvas.Clear(Color.FromArgb(40, 40, 40)); foreach (PlayFrame frame in mPlayModel.GetAllFrames()) { if (frame == mCurrentFrame) { frameHeight = mSelectedFrameHeight; frameWidth = mSelectedFrameWidth; frameXPadding = FRAME_PADDING_X; frameYPadding = SELECTED_FRAME_Y_PADDING; } else { frameHeight = mUnselectedFrameHeight; frameWidth = mUnselectedFrameWidth; frameXPadding = FRAME_PADDING_X; frameYPadding = UNSELECTED_FRAME_Y_PADDING; } using (Bitmap frameImage = new Bitmap(frameWidth, frameHeight)) { using (Graphics frameCanvas = Graphics.FromImage(frameImage)) { renderer.DrawSmallFrame(frame, frameCanvas, new PitchScreenCoordConverter(frameCanvas)); canvas.DrawImage(frameImage, currFrameX, frameYPadding); // Add the links for this frame onto the image. DrawLinks(canvas, frame, currFrameX, frameHeight, frameWidth, frameXPadding, frameYPadding); currFrameX += frameWidth + frameXPadding; } } } if (mImage != null) mImage.Dispose(); mImage = background; } } }
public override void Render(Graphics display, FrameRenderer renderer, PitchScreenCoordConverter converter) { // Adjust the item location so that the location is at the centre of // the image. DrawLocation = new PointF(ItemLocation.X - mWidth / 2.0f, ItemLocation.Y - mHeight / 2.0f); renderer.DrawSprite(display, converter, mSprite, DrawLocation, mWidth, mHeight); }
public override void Render(Graphics display, FrameRenderer renderer, PitchScreenCoordConverter converter) { base.Render(display, renderer, converter); using (Font font = FrameRenderer.CreatePlayerIdFont(converter)) { renderer.DrawString(display, converter, ItemProperties["id"], DrawLocation, font, Brushes.White); } }
public abstract void Render(Graphics display, FrameRenderer renderer, PitchScreenCoordConverter converter);
/// <summary> /// Takes a model and outputs it as a set of images to the output directory. /// Note that if the files already exist then they'll be removed /// </summary> /// <param name="outputDir">Location for temporary images.</param> private void ModelToImageFiles(String outputDir) { mCallback.Begin(0, mModel.CycleCount / 4); Color backColor = Color.FromArgb(40, 40, 40); using (FrameRenderer renderer = new FrameRenderer(backColor, Settings.Default.PitchColor, Settings.Default.LineColor)) { using (Bitmap bitmap = new Bitmap((int)(Settings.Default.PitchLength * 10.0f), (int)(Settings.Default.PitchWidth * 10.0f))) { using (Graphics graphics = Graphics.FromImage(bitmap)) { int imageIndex = 0; FramePlayData fpd; foreach (PlayFrame frame in mModel.GetAllFrames()) { fpd = frame.GenerateViewingData(); // I made a cop out decision to allow for slow speed playback by // creating 4 times as many cycles as needed. Here though we want // to keep the output format as small as possible so only 1 in every // 4 frames is displayed. // // Frankly, this is terrible and will definitely bite me later on. int ii = 0; foreach (List<ItemPlayData> cycleData in fpd.PlayData) { ii++; if (ii % 4 != 0 && cycleData != fpd.PlayData.Last()) continue; // Thusly do I cry. PitchScreenCoordConverter converter = new PitchScreenCoordConverter(graphics); graphics.Clear(backColor); renderer.DrawPitch(graphics, converter); foreach (ItemPlayData itemPlayData in cycleData) { itemPlayData.Render(graphics, renderer, converter); } imageIndex++; BitmapExtensions.SaveJpg100(bitmap, outputDir + Path.DirectorySeparatorChar + "image" + imageIndex.ToString("D6", CultureInfo.InvariantCulture) + ".jpg"); mCallback.Increment(1); } } } } } }