fix: fix render bugs
This commit is contained in:
@ -36,7 +36,7 @@ namespace HFUTCourseSimulation.Dialog {
|
|||||||
// Initialize UI layout by semester
|
// Initialize UI layout by semester
|
||||||
// Setup grid rows and columns
|
// Setup grid rows and columns
|
||||||
uiCoreGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto) });
|
uiCoreGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto) });
|
||||||
for (int i = 0; i < WeekNames.Length; ++i) {
|
for (int i = 0; i < 7; ++i) {
|
||||||
uiCoreGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
|
uiCoreGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
|
||||||
}
|
}
|
||||||
uiCoreGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) });
|
uiCoreGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) });
|
||||||
@ -50,10 +50,10 @@ namespace HFUTCourseSimulation.Dialog {
|
|||||||
Grid.SetRow(headbar, 0);
|
Grid.SetRow(headbar, 0);
|
||||||
Grid.SetRowSpan(headbar, 2);
|
Grid.SetRowSpan(headbar, 2);
|
||||||
Grid.SetColumn(headbar, 0);
|
Grid.SetColumn(headbar, 0);
|
||||||
Grid.SetColumnSpan(headbar, WeekNames.Length + 1);
|
Grid.SetColumnSpan(headbar, 7 + 1);
|
||||||
uiCoreGrid.Children.Add(headbar);
|
uiCoreGrid.Children.Add(headbar);
|
||||||
// Setup week text block
|
// Setup week text block
|
||||||
for (int week = 1; week <= WeekNames.Length; ++week) {
|
for (int week = 1; week <= 7; ++week) {
|
||||||
var weekLabel = new TextBlock();
|
var weekLabel = new TextBlock();
|
||||||
weekLabel.Text = WeekNames.Names[week - 1];
|
weekLabel.Text = WeekNames.Names[week - 1];
|
||||||
weekLabel.Foreground = new SolidColorBrush(ColorConsistency.HeadbarColor.Foreground);
|
weekLabel.Foreground = new SolidColorBrush(ColorConsistency.HeadbarColor.Foreground);
|
||||||
@ -101,7 +101,7 @@ namespace HFUTCourseSimulation.Dialog {
|
|||||||
Grid.SetRowSpan(cornerLabel, 2);
|
Grid.SetRowSpan(cornerLabel, 2);
|
||||||
uiCoreGrid.Children.Add(cornerLabel);
|
uiCoreGrid.Children.Add(cornerLabel);
|
||||||
// Add chessboard
|
// Add chessboard
|
||||||
for (int week = 1; week <= WeekNames.Length; ++week) {
|
for (int week = 1; week <= 7; ++week) {
|
||||||
for (int index = 1; index <= CurrentSemester.indexCount; ++index) {
|
for (int index = 1; index <= CurrentSemester.indexCount; ++index) {
|
||||||
if ((week + index) % 2 != 0) continue;
|
if ((week + index) % 2 != 0) continue;
|
||||||
|
|
||||||
|
@ -52,19 +52,20 @@ namespace HFUTCourseSimulation.Kernel {
|
|||||||
_verticalCount = weekCount / _horizontalCount;
|
_verticalCount = weekCount / _horizontalCount;
|
||||||
if (weekCount % _horizontalCount != 0) _verticalCount++;
|
if (weekCount % _horizontalCount != 0) _verticalCount++;
|
||||||
|
|
||||||
_weekWidth = SIDEBAR_WIDTH + 7 * CELL_WIDTH + 2 * MARGIN;
|
_weekWidth = SIDEBAR_WIDTH + 7 * CELL_WIDTH;
|
||||||
_weekHeight = TITLE_HEIGHT + HEADBAR_HEIGHT + indexCount * CELL_HEIGHT + 2 * MARGIN;
|
_weekHeight = TITLE_HEIGHT + HEADBAR_HEIGHT + indexCount * CELL_HEIGHT;
|
||||||
|
|
||||||
|
_weekWidthWithMargin = _weekWidth + 2 * MARGIN;
|
||||||
|
_weekHeightWithMargin = _weekHeight + 2 * MARGIN;
|
||||||
|
|
||||||
_width = _weekWidth * _horizontalCount;
|
_width = _weekWidth * _horizontalCount;
|
||||||
_height = _weekHeight * _verticalCount;
|
_height = _weekHeight * _verticalCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _horizontalCount;
|
int _horizontalCount, _verticalCount;
|
||||||
int _verticalCount;
|
int _weekWidth, _weekHeight;
|
||||||
int _weekWidth;
|
int _weekWidthWithMargin, _weekHeightWithMargin;
|
||||||
int _weekHeight;
|
int _width, _height;
|
||||||
int _width;
|
|
||||||
int _height;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 图片宽度
|
/// 图片宽度
|
||||||
@ -82,12 +83,13 @@ namespace HFUTCourseSimulation.Kernel {
|
|||||||
week -= 1;
|
week -= 1;
|
||||||
|
|
||||||
var row = week / _horizontalCount;
|
var row = week / _horizontalCount;
|
||||||
var column = week % _verticalCount;
|
var column = week % _horizontalCount;
|
||||||
return new Point(column * _weekWidth + MARGIN, row * _weekHeight + MARGIN);
|
return new Point(column * _weekWidthWithMargin + MARGIN, row * _weekHeightWithMargin + MARGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Point GetTitleTextPos(int week) {
|
public Rectangle GetTitleTextRect(int week) {
|
||||||
return GetWeekPos(week);
|
var pos = GetWeekPos(week);
|
||||||
|
return new Rectangle(pos, new Size(_weekWidth, TITLE_HEIGHT));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -99,32 +101,29 @@ namespace HFUTCourseSimulation.Kernel {
|
|||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Rectangle GetHeadbarTextRect(int week, int day) {
|
||||||
|
day -= 1;
|
||||||
|
|
||||||
|
var pos = GetTablePos(week);
|
||||||
|
pos.Offset(SIDEBAR_WIDTH + day * CELL_WIDTH, 0);
|
||||||
|
return new Rectangle(pos, new Size(CELL_WIDTH, HEADBAR_HEIGHT));
|
||||||
|
}
|
||||||
|
|
||||||
public Rectangle GetHeadbarBoxRect(int week) {
|
public Rectangle GetHeadbarBoxRect(int week) {
|
||||||
var pos = GetTablePos(week);
|
var pos = GetTablePos(week);
|
||||||
return new Rectangle(pos, new Size(7 * CELL_WIDTH, HEADBAR_HEIGHT));
|
return new Rectangle(pos, new Size(7 * CELL_WIDTH, HEADBAR_HEIGHT));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Point GetHeadbarTextPos(int week, int day) {
|
public Rectangle GetSidebarTextRect(int week, int index) {
|
||||||
day -= 1;
|
return GetSidebarBoxRect(week, index);
|
||||||
|
|
||||||
var pos = GetTablePos(week);
|
|
||||||
pos.Offset(day * CELL_WIDTH, 0);
|
|
||||||
return pos;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rectangle GetSidebarBoxRect(int week, int index) {
|
public Rectangle GetSidebarBoxRect(int week, int index) {
|
||||||
index -= 1;
|
index -= 1;
|
||||||
|
|
||||||
var pos = GetTablePos(week);
|
var pos = GetTablePos(week);
|
||||||
return new Rectangle(pos, new Size(0, index * CELL_HEIGHT));
|
pos.Offset(0, HEADBAR_HEIGHT + index * CELL_HEIGHT);
|
||||||
}
|
return new Rectangle(pos, new Size(SIDEBAR_WIDTH, CELL_HEIGHT));
|
||||||
|
|
||||||
public Point GetSidebarTextPos(int week, int index) {
|
|
||||||
index -= 1;
|
|
||||||
|
|
||||||
var pos = GetTablePos(week);
|
|
||||||
pos.Offset(0, index * CELL_HEIGHT);
|
|
||||||
return pos;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -148,13 +147,13 @@ namespace HFUTCourseSimulation.Kernel {
|
|||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Point GetCellTextPos(int week, int day, int index) {
|
public Rectangle GetCellTextRect(int week, int day, int index, int span = 1) {
|
||||||
return GetCellPos(week, day, index);
|
return GetCellBoxRect(week, day, index, span);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rectangle GetCellBoxRect(int week, int day, int index, int index_span = 1) {
|
public Rectangle GetCellBoxRect(int week, int day, int index, int span = 1) {
|
||||||
var pos = GetCellPos(week, day, index);
|
var pos = GetCellPos(week, day, index);
|
||||||
return new Rectangle(pos, new Size(CELL_WIDTH, index_span * CELL_HEIGHT));
|
return new Rectangle(pos, new Size(CELL_WIDTH, span * CELL_HEIGHT));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -216,7 +215,7 @@ namespace HFUTCourseSimulation.Kernel {
|
|||||||
|
|
||||||
// 创建绘画资源
|
// 创建绘画资源
|
||||||
var brushes = new RenderBrushes();
|
var brushes = new RenderBrushes();
|
||||||
var font = new Font("Source Hans Sans CN", 12);
|
var font = new Font("Sarasa Mono SC", 12);
|
||||||
|
|
||||||
// 填充背景为白色
|
// 填充背景为白色
|
||||||
g.Clear(Color.White);
|
g.Clear(Color.White);
|
||||||
@ -226,26 +225,26 @@ namespace HFUTCourseSimulation.Kernel {
|
|||||||
var week_instance = semester.weeks[week - 1];
|
var week_instance = semester.weeks[week - 1];
|
||||||
|
|
||||||
// 教学周文本
|
// 教学周文本
|
||||||
g.DrawString($"教学周:{week}", font, brushes.GetBrush(Color.Black), geometry.GetTitleTextPos(week));
|
g.DrawString($"教学周:{week}", font, brushes.GetBrush(Color.Black), geometry.GetTitleTextRect(week));
|
||||||
|
|
||||||
// 绘制Headbar底层
|
// 绘制Headbar底层
|
||||||
g.FillRectangle(brushes.GetBrush(ColorConsistency.HeadbarColor.Background), geometry.GetHeadbarBoxRect(week));
|
g.FillRectangle(brushes.GetBrush(ColorConsistency.HeadbarColor.Background), geometry.GetHeadbarBoxRect(week));
|
||||||
// 绘制Header文本
|
// 绘制Header文本
|
||||||
for (int day = 1; day <= WeekNames.Length; ++day) {
|
for (int day = 1; day <= 7; ++day) {
|
||||||
var day_instance = week_instance.days[day - 1];
|
var day_instance = week_instance.days[day - 1];
|
||||||
g.DrawString($@"{WeekNames.Names[day - 1]}
|
g.DrawString($@"{WeekNames.Names[day - 1]}
|
||||||
{day_instance.date}", font, brushes.GetBrush(ColorConsistency.HeadbarColor.Foreground), geometry.GetHeadbarTextPos(week, day));
|
{day_instance.date}", font, brushes.GetBrush(ColorConsistency.HeadbarColor.Foreground), geometry.GetHeadbarTextRect(week, day));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绘制Sidebar底层和文本
|
// 绘制Sidebar底层和文本
|
||||||
for (int index = 1; index <= semester.indexCount; ++index) {
|
for (int index = 1; index <= semester.indexCount; ++index) {
|
||||||
var colorPair = ColorConsistency.GetSidebarColor(semester.GetIndexKind(index));
|
var colorPair = ColorConsistency.GetSidebarColor(semester.GetIndexKind(index));
|
||||||
g.FillRectangle(brushes.GetBrush(colorPair.Background), geometry.GetSidebarBoxRect(week, index));
|
g.FillRectangle(brushes.GetBrush(colorPair.Background), geometry.GetSidebarBoxRect(week, index));
|
||||||
g.DrawString(index.ToString(), font, brushes.GetBrush(colorPair.Foreground), geometry.GetSidebarTextPos(week, index));
|
g.DrawString(index.ToString(), font, brushes.GetBrush(colorPair.Foreground), geometry.GetSidebarTextRect(week, index));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绘制Chessboard
|
// 绘制Chessboard
|
||||||
for (int day = 1; day <= WeekNames.Length; ++day) {
|
for (int day = 1; day <= 7; ++day) {
|
||||||
for (int index = 1; index <= semester.indexCount; ++index) {
|
for (int index = 1; index <= semester.indexCount; ++index) {
|
||||||
if ((day + index) % 2 == 0) continue;
|
if ((day + index) % 2 == 0) continue;
|
||||||
g.FillRectangle(brushes.GetBrush(ColorConsistency.ChessboardColor), geometry.GetCellBoxRect(week, day, index));
|
g.FillRectangle(brushes.GetBrush(ColorConsistency.ChessboardColor), geometry.GetCellBoxRect(week, day, index));
|
||||||
@ -253,12 +252,12 @@ namespace HFUTCourseSimulation.Kernel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 绘制课程
|
// 绘制课程
|
||||||
for (int day = 1; day <= WeekNames.Length; ++day) {
|
for (int day = 1; day <= 7; ++day) {
|
||||||
var day_instance = week_instance.days[day - 1];
|
var day_instance = week_instance.days[day - 1];
|
||||||
foreach (var lesson_instance in day_instance.lessons) {
|
foreach (var lesson_instance in day_instance.lessons) {
|
||||||
g.FillRectangle(brushes.GetBrush(lesson_instance.color.Background), geometry.GetCellBoxRect(week, day, lesson_instance.startIndex, lesson_instance.indexSpan));
|
g.FillRectangle(brushes.GetBrush(lesson_instance.color.Background), geometry.GetCellBoxRect(week, day, lesson_instance.startIndex, lesson_instance.indexSpan));
|
||||||
g.DrawString($@"{lesson_instance.name}
|
g.DrawString($@"{lesson_instance.name}
|
||||||
{lesson_instance.description}", font, brushes.GetBrush(lesson_instance.color.Foreground), geometry.GetCellTextPos(week, day, lesson_instance.startIndex));
|
{lesson_instance.description}", font, brushes.GetBrush(lesson_instance.color.Foreground), geometry.GetCellTextRect(week, day, lesson_instance.startIndex, lesson_instance.indexSpan));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,6 @@ namespace HFUTCourseSimulation.Util {
|
|||||||
"星期日"
|
"星期日"
|
||||||
};
|
};
|
||||||
|
|
||||||
public static int Length => Names.Length;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user