private void openToolStripMenuItem_Click(object sender, EventArgs e) { try { using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.Filter = "xml files (*.xml) | *.xml"; openFileDialog.FilterIndex = 1; openFileDialog.RestoreDirectory = true; if (openFileDialog.ShowDialog(this) == DialogResult.OK) { if (openFileDialog.FileName != "") { var stream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read); var xmlSerializer = new XmlSerializer(BookCover.GetType()); BookCover = (BookCoverGraphics)xmlSerializer.Deserialize(stream); stream.Close(); ContextRectangle = Rectangle.Empty; toModify = (StringGraphics)null; pictureBox.Refresh(); } } } } catch (Exception exception) { MessageBox.Show(exception.Message, "Error", MessageBoxButtons.OK); } }
protected Rectangle GetStringRectangle(StringGraphics item) { using (Graphics g = pictureBox.CreateGraphics()) { Rectangle stringRect = new Rectangle(); switch (item.Alignment) { case StringAlignment.Center: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X - (int)g.MeasureString(item.Text, item.Font).Width / 2, Y = item.Position.Y + BookCover.Position.Y }; break; case StringAlignment.Near: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X, Y = item.Position.Y + BookCover.Position.Y }; break; case StringAlignment.Far: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X - (int)g.MeasureString(item.Text, item.Font).Width, Y = item.Position.Y + BookCover.Position.Y }; break; } return(stringRect); } }
private void newToolStripMenuItem_Click(object sender, EventArgs e) { //pop new dialog here using (NewDialog form = new NewDialog()) { form.ShowDialog(this); Debug.WriteLine(form.DialogResult); if (form.DialogResult == DialogResult.OK) { BookCover.Size = new Size(form.DialogData.Width, form.DialogData.Height); BookCover.SpineWidth = form.DialogData.SpineWidth; BookCover.Position = new Point(pictureBox.Width / 2 - BookCover.Size.Width / 2, pictureBox.Height / 2 - BookCover.Size.Height / 2); BookCover.TextList.Clear(); BookCover.Color = Color.LightPink; BookCover.SpineAuthor.Text = String.Empty; BookCover.SpineTitle.Text = String.Empty; BookCover.FrontCoverAuthor.Text = String.Empty; BookCover.FrontCoverTitle.Text = String.Empty; } } ContextRectangle = Rectangle.Empty; toModify = (StringGraphics)null; pictureBox.Refresh(); }
private void pictureBox_MouseClick(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Right) != 0) { foreach (var item in BookCover.TextList) { using (Graphics g = pictureBox.CreateGraphics()) { Rectangle stringRect = new Rectangle(); switch (item.Alignment) { case StringAlignment.Center: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X - (int)g.MeasureString(item.Text, item.Font).Width / 2, Y = item.Position.Y + BookCover.Position.Y }; break; case StringAlignment.Near: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X, Y = item.Position.Y + BookCover.Position.Y }; break; case StringAlignment.Far: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X - (int)g.MeasureString(item.Text, item.Font).Width, Y = item.Position.Y + BookCover.Position.Y }; break; } if (stringRect.Contains(e.Location)) //check if mouse point is inside the rectangle { ContextRectangle = stringRect; toModify = item; pictureBox.Refresh(); return; } else { ContextRectangle = new Rectangle(); toModify = (StringGraphics)null; pictureBox.Refresh(); } } } } }
private void pictureBox_MouseDoubleClick(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) != 0) { DialogResult result = DialogResult.Cancel; StringGraphics toadd = new StringGraphics(); StringGraphics toremove = new StringGraphics(); foreach (var item in BookCover.TextList) { using (Graphics g = pictureBox.CreateGraphics()) { Rectangle stringRect = new Rectangle(); switch (item.Alignment) { case StringAlignment.Center: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X - (int)g.MeasureString(item.Text, item.Font).Width / 2, Y = item.Position.Y + BookCover.Position.Y }; break; case StringAlignment.Near: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X, Y = item.Position.Y + BookCover.Position.Y }; break; case StringAlignment.Far: stringRect = new Rectangle { Height = (int)g.MeasureString(item.Text, item.Font).Height, Width = (int)g.MeasureString(item.Text, item.Font).Width, X = item.Position.X + BookCover.Position.X - (int)g.MeasureString(item.Text, item.Font).Width, Y = item.Position.Y + BookCover.Position.Y }; break; } if (stringRect.Contains(e.Location)) //check if mouse point is inside the rectangle { //g.DrawRectangle(new Pen(Color.FromArgb(255, 255 - BookCover.Color.R, 255 - BookCover.Color.G, 255 - BookCover.Color.B)), stringRect); toremove = item; using (AddTextDialog textDialog = new AddTextDialog()) { textDialog.DialogData = new AddTextDialogData { FontSize = (int)item.Font.Size, Text = item.Text, TextAlignment = item.Alignment }; textDialog.ShowDialog(this); if (textDialog.DialogResult == DialogResult.OK) { result = textDialog.DialogResult; TextContext = textDialog.DialogData; Font fn = new Font("Arial", TextContext.FontSize, FontStyle.Bold); switch (TextContext.TextAlignment) { //when text is changed it is a little of off center case StringAlignment.Center: var stringMeasuresC = (g.MeasureString(toremove.Text, fn)); //could be better toadd = new StringGraphics { Font = fn, Text = TextContext.Text, Position = new Point(stringRect.X + (int)stringMeasuresC.Width / 2 - BookCover.Position.X, stringRect.Y + stringRect.Height / 2 - (int)(g.MeasureString(TextContext.Text, fn).Height) / 2 - BookCover.Position.Y), Color = currentTextColor, Alignment = TextContext.TextAlignment }; break; case StringAlignment.Near: toadd = new StringGraphics { Font = fn, Text = TextContext.Text, Position = new Point((stringRect.X + stringRect.Width / 2 - (int)(g.MeasureString(TextContext.Text, fn).Width) / 2) - BookCover.Position.X, stringRect.Y + stringRect.Height / 2 - (int)(g.MeasureString(TextContext.Text, fn).Height) / 2 - BookCover.Position.Y), Color = currentTextColor, Alignment = TextContext.TextAlignment }; break; case StringAlignment.Far: toadd = new StringGraphics { Font = fn, Text = TextContext.Text, Position = new Point( stringRect.X + stringRect.Width / 2 + g.MeasureString(TextContext.Text, fn).ToSize().Width / 2 - BookCover.Position.X, stringRect.Y + stringRect.Height / 2 - (int)(g.MeasureString(TextContext.Text, fn).Height) / 2 - BookCover.Position.Y), Color = currentTextColor, Alignment = TextContext.TextAlignment }; break; } //BookCover.TextList.Remove(item); } } } } } if (result == DialogResult.OK) { BookCover.TextList.Remove(toremove); BookCover.TextList.Add(toadd); if (ContextRectangle != Rectangle.Empty) { ContextRectangle = GetStringRectangle(toadd); toModify = toadd; } pictureBox.Refresh(); } } }