96 lines
3.1 KiB
C#
96 lines
3.1 KiB
C#
using qtc_net_client_2.Properties;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
|
|
|
|
namespace qtc_net_client_2.Controls
|
|
{
|
|
public class RoomEntryControl : Control
|
|
{
|
|
public Image Image = Resources.RoomsChatIcon;
|
|
public string RoomName = "Room";
|
|
public bool HideUserCount = false;
|
|
public int RoomUserCount = 0;
|
|
|
|
private Font? nameFont;
|
|
private Color nameColor;
|
|
|
|
private Font userCountFont = new("Segoe UI", 9, FontStyle.Bold);
|
|
private Color userCountColor = Color.Gray;
|
|
|
|
private bool IsHoveredOn = false;
|
|
|
|
public event EventHandler? OnRoomDoubleClicked;
|
|
public RoomEntryControl()
|
|
{
|
|
// reduce flicker
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint |
|
|
ControlStyles.ResizeRedraw |
|
|
ControlStyles.UserPaint |
|
|
ControlStyles.OptimizedDoubleBuffer, true);
|
|
|
|
Height = 36;
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
if(IsHoveredOn)
|
|
{
|
|
nameFont = new("Segoe UI", 9, FontStyle.Bold | FontStyle.Underline);
|
|
nameColor = Color.LightGray;
|
|
} else
|
|
{
|
|
nameFont = new("Segoe UI", 9, FontStyle.Bold);
|
|
nameColor = Color.Black;
|
|
}
|
|
|
|
int margin = 6;
|
|
int imageSize = 32;
|
|
|
|
Rectangle imageRect = new(margin, (Height - imageSize) / 2, imageSize, imageSize);
|
|
e.Graphics.DrawImage(Image, imageRect);
|
|
|
|
int nameLeft = imageRect.Right + margin;
|
|
|
|
Rectangle nameRect = new(nameLeft, 6, Width - nameLeft - 8, Height - 16);
|
|
TextRenderer.DrawText(e.Graphics, RoomName, nameFont, nameRect, nameColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
|
|
|
|
string userCountText = RoomUserCount.ToString();
|
|
Size countSize = TextRenderer.MeasureText(e.Graphics, userCountText, userCountFont);
|
|
|
|
if(!HideUserCount)
|
|
{
|
|
int rightPad = 8;
|
|
int countX = Width - countSize.Width - rightPad;
|
|
int countY = (Height - countSize.Height) / 2;
|
|
Point userCountPoint = new(countX, countY);
|
|
|
|
TextRenderer.DrawText(e.Graphics, userCountText, userCountFont, userCountPoint, userCountColor, TextFormatFlags.Left);
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseDoubleClick(MouseEventArgs e)
|
|
{
|
|
base.OnMouseDoubleClick(e);
|
|
OnRoomDoubleClicked?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
protected override void OnMouseHover(EventArgs e)
|
|
{
|
|
base.OnMouseHover(e);
|
|
IsHoveredOn = true;
|
|
Invalidate();
|
|
}
|
|
|
|
protected override void OnMouseLeave(EventArgs e)
|
|
{
|
|
base.OnMouseLeave(e);
|
|
IsHoveredOn = false;
|
|
Invalidate();
|
|
}
|
|
}
|
|
}
|