OSDN Git Service

ズームしたときに文字が欠けないようにゆとりを持たせる
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / ShipLabels.cs
index 1732bde..ceb7371 100644 (file)
@@ -13,6 +13,7 @@
 // limitations under the License.\r
 \r
 using System;\r
+using System.ComponentModel;\r
 using System.Drawing;\r
 using System.Linq;\r
 using System.Text.RegularExpressions;\r
@@ -39,8 +40,6 @@ namespace KancolleSniffer
         private readonly ShipLabel[][] _labels = new ShipLabel[ShipInfo.MemberCount][];\r
         private readonly ShipLabel[][] _combinedLabels = new ShipLabel[ShipInfo.MemberCount * 2][];\r
         private readonly ShipLabel[] _akashiTimers = new ShipLabel[ShipInfo.MemberCount];\r
-        private readonly ShipLabel[][] _repairList = new ShipLabel[16][];\r
-        private Control _panelRepairList;\r
         private readonly ShipLabel[][] _ndockLabels = new ShipLabel[DockInfo.DockCount][];\r
         public static Color[] ColumnColors = {SystemColors.Control, Color.FromArgb(255, 250, 250, 250)};\r
 \r
@@ -70,20 +69,20 @@ namespace KancolleSniffer
                     new ShipLabel {Location = new Point(129, y), AutoSize = true, AnchorRight = true},\r
                     new ShipLabel\r
                     {\r
-                        Location = new Point(132, y),\r
-                        Size = new Size(23, height),\r
+                        Location = new Point(131, y),\r
+                        Size = new Size(24, height),\r
                         TextAlign = ContentAlignment.MiddleRight\r
                     },\r
                     new ShipLabel\r
                     {\r
-                        Location = new Point(157, y),\r
-                        Size = new Size(23, height),\r
+                        Location = new Point(156, y),\r
+                        Size = new Size(24, height),\r
                         TextAlign = ContentAlignment.MiddleRight\r
                     },\r
                     new ShipLabel\r
                     {\r
-                        Location = new Point(177, y),\r
-                        Size = new Size(41, height),\r
+                        Location = new Point(176, y),\r
+                        Size = new Size(42, height),\r
                         TextAlign = ContentAlignment.MiddleRight\r
                     },\r
                     new ShipLabel {Location = new Point(2, y), AutoSize = true}, // 名前のZ-orderを下に\r
@@ -151,8 +150,8 @@ namespace KancolleSniffer
                     new ShipLabel {Location = new Point(x + 88, y), AutoSize = true, AnchorRight = true},\r
                     new ShipLabel\r
                     {\r
-                        Location = new Point(x + 86, y),\r
-                        Size = new Size(23, height),\r
+                        Location = new Point(x + 85, y),\r
+                        Size = new Size(24, height),\r
                         TextAlign = ContentAlignment.MiddleRight\r
                     },\r
                     new ShipLabel {Location = new Point(x + 2, y), AutoSize = true}, // 名前のZ-orderを下に\r
@@ -215,6 +214,20 @@ namespace KancolleSniffer
             parent.ResumeLayout();\r
         }\r
 \r
+        public void AdjustAkashiTimers()\r
+        {\r
+            var scale = ShipLabel.ScaleFactor;\r
+            if (scale.Height < 1.2)\r
+                return;\r
+            for (var i = 0; i < _akashiTimers.Length; i++)\r
+            {\r
+                const int x = 55;\r
+                var y = 3 + 16 * (i + 1);\r
+                _akashiTimers[i].Location = new Point((int)Round(x * scale.Width) - 3, (int)Round(y * scale.Height));\r
+                _akashiTimers[i].Size = new Size((int)Round(31 * scale.Width) + 1, (int)Round(12 * scale.Height));\r
+            }\r
+        }\r
+\r
         public void SetAkashiTimer(ShipStatus[] statuses, AkashiTimer.RepairSpan[] timers)\r
         {\r
             var shortest = -1;\r
@@ -248,65 +261,12 @@ namespace KancolleSniffer
                     continue;\r
                 }\r
                 if (i == shortest)\r
-                    label.ForeColor = Color.Red;\r
+                    label.ForeColor = CUDColor.Red;\r
                 labelHp.ForeColor = Color.DimGray;\r
                 labelHp.SetHp(stat.NowHp + timer.Diff, stat.MaxHp);\r
             }\r
         }\r
 \r
-        public void CreateRepairList(Control parent, EventHandler onClick)\r
-        {\r
-            parent.SuspendLayout();\r
-            for (var i = 0; i < _repairList.Length; i++)\r
-            {\r
-                var y = 3 + i * 16;\r
-                const int height = 12;\r
-                parent.Controls.AddRange(_repairList[i] = new[]\r
-                {\r
-                    new ShipLabel {Location = new Point(0, y), Size = new Size(11, height)},\r
-                    new ShipLabel {Location = new Point(119, y), Size = new Size(5, height - 1)},\r
-                    new ShipLabel {Location = new Point(75, y), AutoSize = true},\r
-                    new ShipLabel {Location = new Point(9, y), AutoSize = true},\r
-                    new ShipLabel {Location = new Point(0, y - 2), Size = new Size(parent.Width, height + 3)}\r
-                });\r
-                foreach (var label in _repairList[i])\r
-                {\r
-                    label.Scale();\r
-                    label.PresetColor = label.BackColor = ColumnColors[(i + 1) % 2];\r
-                    label.Click += onClick;\r
-                }\r
-            }\r
-            _panelRepairList = parent;\r
-            parent.ResumeLayout();\r
-        }\r
-\r
-        public void SetRepairList(ShipStatus[] list)\r
-        {\r
-            const int fleet = 0, name = 3, time = 2, damage = 1;\r
-            var parent = _panelRepairList;\r
-            var num = Min(list.Length, _repairList.Length);\r
-            if (num == 0)\r
-            {\r
-                parent.Size = new Size(parent.Width, (int)Round(ShipLabel.ScaleFactor.Height * 19));\r
-                var labels = _repairList[0];\r
-                labels[fleet].Text = "";\r
-                labels[name].SetName("なし");\r
-                labels[time].Text = "";\r
-                labels[damage].BackColor = labels[damage].PresetColor;\r
-                return;\r
-            }\r
-            parent.Size = new Size(parent.Width, (int)Round(ShipLabel.ScaleFactor.Height * (num * 16 + 3)));\r
-            for (var i = 0; i < num; i++)\r
-            {\r
-                var s = list[i];\r
-                var labels = _repairList[i];\r
-                labels[fleet].SetFleet(s);\r
-                labels[name].SetName(s, ShipNameWidth.RepairList);\r
-                labels[time].SetRepairTime(s);\r
-                labels[damage].BackColor = ShipLabel.DamageColor(s, labels[damage].PresetColor);\r
-            }\r
-        }\r
-\r
         public void CreateNDockLabels(Control parent, EventHandler onClick)\r
         {\r
             for (var i = 0; i < _ndockLabels.Length; i++)\r
@@ -340,12 +300,12 @@ namespace KancolleSniffer
         public void SetNDockTimer(int dock, RingTimer timer, bool finishTime)\r
         {\r
             var label = _ndockLabels[dock][0];\r
-            label.ForeColor = timer.IsFinished ? Color.Red : Color.Black;\r
+            label.ForeColor = timer.IsFinished ? CUDColor.Red : Color.Black;\r
             label.Text = timer.ToString(finishTime);\r
         }\r
     }\r
 \r
-    [System.ComponentModel.DesignerCategory("Code")]\r
+    [DesignerCategory("Code")]\r
     public class ShipLabel : Label\r
     {\r
         public static SizeF ScaleFactor { get; set; }\r
@@ -356,6 +316,12 @@ namespace KancolleSniffer
         private int _left;\r
         private SlotStatus _slotStatus;\r
 \r
+        public override Color BackColor\r
+        {\r
+            get => base.BackColor;\r
+            set => base.BackColor = value == DefaultBackColor ? PresetColor : value;\r
+        }\r
+\r
         [Flags]\r
         private enum SlotStatus\r
         {\r
@@ -449,9 +415,9 @@ namespace KancolleSniffer
                 case ShipStatus.Damage.Sunk:\r
                     return Color.CornflowerBlue;\r
                 case ShipStatus.Damage.Badly:\r
-                    return Color.Red;\r
+                    return CUDColor.Red;\r
                 case ShipStatus.Damage.Half:\r
-                    return Color.Orange;\r
+                    return CUDColor.Orange;\r
                 case ShipStatus.Damage.Small:\r
                     return Color.FromArgb(240, 240, 0);\r
                 default:\r
@@ -464,10 +430,12 @@ namespace KancolleSniffer
             var cond = status.Cond;\r
             Text = cond.ToString("D");\r
             BackColor = cond >= 50\r
-                ? Color.Yellow\r
+                ? CUDColor.Yellow\r
                 : cond >= 30\r
                     ? PresetColor\r
-                    : cond >= 20 ? Color.Orange : Color.Red;\r
+                    : cond >= 20\r
+                        ? CUDColor.Orange\r
+                        : CUDColor.Red;\r
         }\r
 \r
         public void SetLevel(ShipStatus status)\r