private double DrawTimesString(XGraphics g, MeetingTimedItem item, double curX, XBrush textBrush) { var timesStr1 = $" ({item.Start.Hours:D2}:{item.Start.Minutes:D2}"; var timesStr2 = $":{item.Start.Seconds:D2}"; var hyphenStr = " - "; var sz1 = g.MeasureString(timesStr1, _itemFont); var sz2 = g.MeasureString(timesStr2, _itemFont); g.DrawString(timesStr1, _stdTimeFont, textBrush, new XPoint(curX, _currentY)); g.DrawString(timesStr2, _smallTimeFont, textBrush, new XPoint(curX += sz1.Width, _currentY)); g.DrawString(hyphenStr, _stdTimeFont, textBrush, new XPoint(curX += sz2.Width, _currentY)); var timesStr3 = $"{item.End.Hours:D2}:{item.End.Minutes:D2}"; var timesStr4 = $":{item.End.Seconds:D2}"; var szHyphen = g.MeasureString( hyphenStr, _stdTimeFont, new XStringFormat { FormatFlags = XStringFormatFlags.MeasureTrailingSpaces }); var sz3 = g.MeasureString(timesStr3, _stdTimeFont); var sz4 = g.MeasureString(timesStr4, _smallTimeFont); g.DrawString(timesStr3, _stdTimeFont, textBrush, new XPoint(curX += szHyphen.Width, _currentY)); g.DrawString(timesStr4, _smallTimeFont, textBrush, new XPoint(curX += sz3.Width, _currentY)); g.DrawString(")", _stdTimeFont, textBrush, new XPoint(curX += sz4.Width, _currentY)); return(curX); }
private double DrawTimesString(XGraphics g, MeetingTimedItem item, double curX, XBrush textBrush) { if (_stdTimeFont == null) { throw new InvalidOperationException(nameof(_stdTimeFont)); } var timesStr1 = $" ({item.Start.Hours:D2}:{item.Start.Minutes:D2}"; var timesStr2 = $":{item.Start.Seconds:D2}"; const string hyphenStr = " - "; var sz1 = g.MeasureString(timesStr1, _itemFont); var sz2 = g.MeasureString(timesStr2, _itemFont); g.DrawString(timesStr1, _stdTimeFont, textBrush, new XPoint(curX, _currentY)); curX += sz1.Width; g.DrawString(timesStr2, _smallTimeFont, textBrush, new XPoint(curX, _currentY)); curX += sz2.Width; g.DrawString(hyphenStr, _stdTimeFont, textBrush, new XPoint(curX, _currentY)); var timesStr3 = $"{item.End.Hours:D2}:{item.End.Minutes:D2}"; var timesStr4 = $":{item.End.Seconds:D2}"; // note that MeasureString ignores trailing spaces // so we must explicitly calculate the size of // a space character. var szSpace = g.MeasureString(" ", _stdTimeFont); var szHyphen = g.MeasureString(hyphenStr, _stdTimeFont); var widthHyphenStr = szHyphen.Width + szSpace.Width; var sz3 = g.MeasureString(timesStr3, _stdTimeFont); var sz4 = g.MeasureString(timesStr4, _smallTimeFont); curX += widthHyphenStr; g.DrawString(timesStr3, _stdTimeFont, textBrush, new XPoint(curX, _currentY)); curX += sz3.Width; g.DrawString(timesStr4, _smallTimeFont, textBrush, new XPoint(curX, _currentY)); curX += sz4.Width; g.DrawString(")", _stdTimeFont, textBrush, new XPoint(curX, _currentY)); if (item.AdaptedDuration != item.PlannedDuration) { var adaptedTimeStr = $"{item.AdaptedDuration.Hours:D2}:{item.AdaptedDuration.Minutes:D2}:{item.AdaptedDuration.Seconds:D2}"; // "adapted duration = {0}" var adaptedStr = $" {string.Format(Resources.ADAPTED_DURATION, adaptedTimeStr)}"; var sz = g.MeasureString(adaptedStr, _smallTimeFont); curX += widthHyphenStr; g.DrawString(adaptedStr, _smallTimeFont, _lightGrayBrush, new XPoint(curX, _currentY)); curX += sz.Width; } return(curX); }
private void DrawItem(XGraphics g, MeetingTimedItem item) { var curX = _leftIndent; var desc = item.Description; var textBrush = _blackBrush; if (item.IsSongSegment) { var itemHeight = _itemTitleFont.Height; g.DrawRectangle( _lightGrayBrush, _leftMargin, _currentY - itemHeight, _rightX - _leftMargin, _itemTitleFont.Height * 2.5); } g.DrawString(desc, _itemTitleFont, textBrush, new XPoint(curX, _currentY)); _currentY += _itemTitleFont.Height; var duration = item.End - item.Start; var szDur = DrawDurationString(g, duration, curX, textBrush); curX += szDur.Width; curX = DrawTimesString(g, item, curX, textBrush); var ts = item.AdaptedDuration == default(TimeSpan) ? item.PlannedDuration : item.AdaptedDuration; DrawItemOvertime(g, curX, duration, ts); _currentY += (3 * (double)_itemTitleFont.Height) / 2; }