Further refactoring

Move System.Drawing usage out of Core to WinForms, as System.Drawing is
not in .NET Core/Standard. Simple methods to return resource name
strings have been added instead.
This commit is contained in:
Kurt 2017-01-11 17:55:42 -08:00
parent 1d1179465a
commit db5e084ef9
24 changed files with 214 additions and 186 deletions

View File

@ -26,7 +26,7 @@ public Main()
L_UpdateAvailable.Click += (sender, e) => Process.Start(ThreadPath);
new Thread(() =>
{
string data = Util.getStringFromURL(VersionPath);
string data = NetUtil.getStringFromURL(VersionPath);
if (data == null)
return;
try
@ -215,7 +215,7 @@ public Main()
private static Image colorizedcolor;
private static int colorizedslot;
public static bool HaX;
private static readonly Image mixedHighlight = Util.ChangeOpacity(Core.Properties.Resources.slotSet, 0.5);
private static readonly Image mixedHighlight = ImageUtil.ChangeOpacity(Core.Properties.Resources.slotSet, 0.5);
private static readonly string[] main_langlist =
{
"日本語", // JPN
@ -1491,7 +1491,7 @@ public void populateFields(PKM pk, bool focus = true)
Label_Friendship.Visible = !CHK_IsEgg.Checked && SAV.Generation > 1;
// Set the Preview Box
dragout.Image = pk.Sprite;
dragout.Image = pk.Sprite();
setMarkings();
updateLegality();
}
@ -1577,27 +1577,27 @@ private void setMarkings()
{
PictureBox[] pba = { PB_Mark1, PB_Mark2, PB_Mark3, PB_Mark4, PB_Mark5, PB_Mark6 };
for (int i = 0; i < pba.Length; i++)
pba[i].Image = Util.ChangeOpacity(pba[i].InitialImage, pkm.Markings[i] != 0 ? 1 : 0.1);
pba[i].Image = ImageUtil.ChangeOpacity(pba[i].InitialImage, pkm.Markings[i] != 0 ? 1 : 0.1);
PB_MarkShiny.Image = Util.ChangeOpacity(PB_MarkShiny.InitialImage, !BTN_Shinytize.Enabled ? 1 : 0.1);
PB_MarkCured.Image = Util.ChangeOpacity(PB_MarkCured.InitialImage, CHK_Cured.Checked ? 1 : 0.1);
PB_MarkShiny.Image = ImageUtil.ChangeOpacity(PB_MarkShiny.InitialImage, !BTN_Shinytize.Enabled ? 1 : 0.1);
PB_MarkCured.Image = ImageUtil.ChangeOpacity(PB_MarkCured.InitialImage, CHK_Cured.Checked ? 1 : 0.1);
PB_MarkPentagon.Image = Util.ChangeOpacity(PB_MarkPentagon.InitialImage, pkm.Gen6 ? 1 : 0.1);
PB_MarkPentagon.Image = ImageUtil.ChangeOpacity(PB_MarkPentagon.InitialImage, pkm.Gen6 ? 1 : 0.1);
// Gen7 Markings
if (pkm.Format != 7)
return;
PB_MarkAlola.Image = Util.ChangeOpacity(PB_MarkAlola.InitialImage, pkm.Gen7 ? 1 : 0.1);
PB_MarkAlola.Image = ImageUtil.ChangeOpacity(PB_MarkAlola.InitialImage, pkm.Gen7 ? 1 : 0.1);
for (int i = 0; i < pba.Length; i++)
{
switch (pkm.Markings[i])
{
case 1:
pba[i].Image = Util.ChangeAllColorTo(pba[i].Image, Color.FromArgb(000, 191, 255));
pba[i].Image = ImageUtil.ChangeAllColorTo(pba[i].Image, Color.FromArgb(000, 191, 255));
break;
case 2:
pba[i].Image = Util.ChangeAllColorTo(pba[i].Image, Color.FromArgb(255, 117, 179));
pba[i].Image = ImageUtil.ChangeAllColorTo(pba[i].Image, Color.FromArgb(255, 117, 179));
break;
}
}
@ -1642,7 +1642,7 @@ private void clickQR(object sender, EventArgs e)
switch (pkx.Format)
{
case 7:
qr = QR7.GenerateQRCode7((PK7) pkx);
qr = QR.GenerateQRCode7((PK7) pkx);
break;
default:
qr = QR.getQRImage(ekx, pkx.Format == 6 ? server : "null/#");
@ -1947,7 +1947,7 @@ private void clickMetLocation(object sender, EventArgs e)
private bool changingFields;
private void updateBall(object sender, EventArgs e)
{
PB_Ball.Image = PKX.getBallSprite(WinFormsUtil.getIndex(CB_Ball));
PB_Ball.Image = PKMUtil.getBallSprite(WinFormsUtil.getIndex(CB_Ball));
}
private void updateEXPLevel(object sender, EventArgs e)
{
@ -3622,7 +3622,7 @@ public void setPKXBoxes()
{
int boxoffset = SAV.getBoxOffset(CB_BoxSelect.SelectedIndex);
int boxbgval = SAV.getBoxWallpaper(CB_BoxSelect.SelectedIndex);
PAN_Box.BackgroundImage = BoxWallpaper.getWallpaper(SAV, boxbgval);
PAN_Box.BackgroundImage = SAV.getWallpaper(boxbgval);
for (int i = 0; i < 30; i++)
{
if (i < SAV.BoxSlotCount)
@ -3671,7 +3671,7 @@ public void setPKXBoxes()
else
{
L_SlotOccupied[i].Text = $"{i + 1}: ✘";
SlotPictureBoxes[i + 42].Image = Util.ChangeOpacity(SlotPictureBoxes[i + 42].Image, 0.6);
SlotPictureBoxes[i + 42].Image = ImageUtil.ChangeOpacity(SlotPictureBoxes[i + 42].Image, 0.6);
}
}
bool? egg = SAV.getDaycareHasEgg(SAV.DaycareIndex);
@ -3736,14 +3736,14 @@ private void getQuickFiller(PictureBox pb, PKM pk = null)
if (pb == dragout) mnuLQR.Enabled = pk.Species != 0; // Species
var sprite = pk.Species != 0 ? pk.Sprite : null;
var sprite = pk.Species != 0 ? pk.Sprite() : null;
int slot = getSlot(pb);
bool locked = slot < 30 && SAV.getIsSlotLocked(CB_BoxSelect.SelectedIndex, slot);
bool team = slot < 30 && SAV.getIsTeamSet(CB_BoxSelect.SelectedIndex, slot);
if (locked)
sprite = Util.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1);
sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1);
else if (team)
sprite = Util.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1);
sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1);
pb.Image = sprite;
if (pb.BackColor == Color.Red)
pb.BackColor = Color.Transparent;
@ -3769,14 +3769,14 @@ private void getSlotFiller(int offset, PictureBox pb)
}
// Something stored in slot. Only display if species is valid.
var sprite = p.Species != 0 ? p.Sprite : null;
var sprite = p.Species != 0 ? p.Sprite() : null;
int slot = getSlot(pb);
bool locked = slot < 30 && SAV.getIsSlotLocked(CB_BoxSelect.SelectedIndex, slot);
bool team = slot < 30 && SAV.getIsTeamSet(CB_BoxSelect.SelectedIndex, slot);
if (locked)
sprite = Util.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1);
sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1);
else if (team)
sprite = Util.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1);
sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1);
pb.Image = sprite;
pb.BackColor = Color.Transparent;
pb.Visible = true;

View File

@ -1,11 +1,17 @@
namespace PKHeX.WinForms
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using PKHeX.Core;
namespace PKHeX.WinForms
{
partial class QR
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
private IContainer components = null;
/// <summary>
/// Clean up any resources being used.
@ -28,47 +34,47 @@ protected override void Dispose(bool disposing)
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(QR));
this.PB_QR = new System.Windows.Forms.PictureBox();
this.FontLabel = new System.Windows.Forms.Label();
this.NUD_Box = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.NUD_Slot = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.NUD_Copies = new System.Windows.Forms.NumericUpDown();
this.B_Refresh = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.PB_QR)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_Box)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_Slot)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_Copies)).BeginInit();
ComponentResourceManager resources = new ComponentResourceManager(typeof(QR));
this.PB_QR = new PictureBox();
this.FontLabel = new Label();
this.NUD_Box = new NumericUpDown();
this.label1 = new Label();
this.label2 = new Label();
this.NUD_Slot = new NumericUpDown();
this.label3 = new Label();
this.NUD_Copies = new NumericUpDown();
this.B_Refresh = new Button();
((ISupportInitialize)(this.PB_QR)).BeginInit();
((ISupportInitialize)(this.NUD_Box)).BeginInit();
((ISupportInitialize)(this.NUD_Slot)).BeginInit();
((ISupportInitialize)(this.NUD_Copies)).BeginInit();
this.SuspendLayout();
//
// PB_QR
//
this.PB_QR.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PB_QR.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.PB_QR.Location = new System.Drawing.Point(2, 1);
this.PB_QR.Anchor = ((AnchorStyles)(((AnchorStyles.Top | AnchorStyles.Left)
| AnchorStyles.Right)));
this.PB_QR.BackgroundImageLayout = ImageLayout.None;
this.PB_QR.Location = new Point(2, 1);
this.PB_QR.Name = "PB_QR";
this.PB_QR.Size = new System.Drawing.Size(405, 455);
this.PB_QR.Size = new Size(405, 455);
this.PB_QR.TabIndex = 0;
this.PB_QR.TabStop = false;
this.PB_QR.Click += new System.EventHandler(this.PB_QR_Click);
this.PB_QR.Click += new EventHandler(this.PB_QR_Click);
//
// FontLabel
//
this.FontLabel.AutoSize = true;
this.FontLabel.Location = new System.Drawing.Point(388, 393);
this.FontLabel.Location = new Point(388, 393);
this.FontLabel.Name = "FontLabel";
this.FontLabel.Size = new System.Drawing.Size(19, 13);
this.FontLabel.Size = new Size(19, 13);
this.FontLabel.TabIndex = 1;
this.FontLabel.Text = "<3";
this.FontLabel.Visible = false;
//
// NUD_Box
//
this.NUD_Box.Location = new System.Drawing.Point(38, 465);
this.NUD_Box.Location = new Point(38, 465);
this.NUD_Box.Maximum = new decimal(new int[] {
32,
0,
@ -80,7 +86,7 @@ private void InitializeComponent()
0,
0});
this.NUD_Box.Name = "NUD_Box";
this.NUD_Box.Size = new System.Drawing.Size(61, 20);
this.NUD_Box.Size = new Size(61, 20);
this.NUD_Box.TabIndex = 2;
this.NUD_Box.Value = new decimal(new int[] {
1,
@ -91,24 +97,24 @@ private void InitializeComponent()
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(4, 467);
this.label1.Location = new Point(4, 467);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(28, 13);
this.label1.Size = new Size(28, 13);
this.label1.TabIndex = 3;
this.label1.Text = "Box:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(105, 467);
this.label2.Location = new Point(105, 467);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(28, 13);
this.label2.Size = new Size(28, 13);
this.label2.TabIndex = 5;
this.label2.Text = "Slot:";
//
// NUD_Slot
//
this.NUD_Slot.Location = new System.Drawing.Point(139, 465);
this.NUD_Slot.Location = new Point(139, 465);
this.NUD_Slot.Maximum = new decimal(new int[] {
30,
0,
@ -120,7 +126,7 @@ private void InitializeComponent()
0,
0});
this.NUD_Slot.Name = "NUD_Slot";
this.NUD_Slot.Size = new System.Drawing.Size(61, 20);
this.NUD_Slot.Size = new Size(61, 20);
this.NUD_Slot.TabIndex = 4;
this.NUD_Slot.Value = new decimal(new int[] {
1,
@ -131,15 +137,15 @@ private void InitializeComponent()
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(211, 467);
this.label3.Location = new Point(211, 467);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(42, 13);
this.label3.Size = new Size(42, 13);
this.label3.TabIndex = 7;
this.label3.Text = "Copies:";
//
// NUD_Copies
//
this.NUD_Copies.Location = new System.Drawing.Point(259, 465);
this.NUD_Copies.Location = new Point(259, 465);
this.NUD_Copies.Maximum = new decimal(new int[] {
960,
0,
@ -151,7 +157,7 @@ private void InitializeComponent()
0,
0});
this.NUD_Copies.Name = "NUD_Copies";
this.NUD_Copies.Size = new System.Drawing.Size(52, 20);
this.NUD_Copies.Size = new Size(52, 20);
this.NUD_Copies.TabIndex = 6;
this.NUD_Copies.Value = new decimal(new int[] {
1,
@ -161,19 +167,19 @@ private void InitializeComponent()
//
// B_Refresh
//
this.B_Refresh.Location = new System.Drawing.Point(317, 464);
this.B_Refresh.Location = new Point(317, 464);
this.B_Refresh.Name = "B_Refresh";
this.B_Refresh.Size = new System.Drawing.Size(80, 23);
this.B_Refresh.Size = new Size(80, 23);
this.B_Refresh.TabIndex = 8;
this.B_Refresh.Text = "Refresh";
this.B_Refresh.UseVisualStyleBackColor = true;
this.B_Refresh.Click += new System.EventHandler(this.updateBoxSlotCopies);
this.B_Refresh.Click += new EventHandler(this.updateBoxSlotCopies);
//
// QR
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(409, 407);
this.AutoScaleDimensions = new SizeF(6F, 13F);
this.AutoScaleMode = AutoScaleMode.Font;
this.ClientSize = new Size(409, 407);
this.Controls.Add(this.B_Refresh);
this.Controls.Add(this.label3);
this.Controls.Add(this.NUD_Copies);
@ -183,17 +189,17 @@ private void InitializeComponent()
this.Controls.Add(this.NUD_Box);
this.Controls.Add(this.FontLabel);
this.Controls.Add(this.PB_QR);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.Icon = ((Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "QR";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.StartPosition = FormStartPosition.CenterParent;
this.Text = "PKHeX QR Code (Click QR to Copy Image)";
((System.ComponentModel.ISupportInitialize)(this.PB_QR)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_Box)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_Slot)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUD_Copies)).EndInit();
((ISupportInitialize)(this.PB_QR)).EndInit();
((ISupportInitialize)(this.NUD_Box)).EndInit();
((ISupportInitialize)(this.NUD_Slot)).EndInit();
((ISupportInitialize)(this.NUD_Copies)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -201,14 +207,14 @@ private void InitializeComponent()
#endregion
private System.Windows.Forms.PictureBox PB_QR;
private System.Windows.Forms.Label FontLabel;
private System.Windows.Forms.NumericUpDown NUD_Box;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown NUD_Slot;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.NumericUpDown NUD_Copies;
private System.Windows.Forms.Button B_Refresh;
private PictureBox PB_QR;
private Label FontLabel;
private NumericUpDown NUD_Box;
private Label label1;
private Label label2;
private NumericUpDown NUD_Slot;
private Label label3;
private NumericUpDown NUD_Copies;
private Button B_Refresh;
}
}

View File

@ -6,6 +6,7 @@
using System.Web;
using System.Windows.Forms;
using PKHeX.Core;
using QRCoder;
namespace PKHeX.WinForms
{
@ -56,7 +57,7 @@ private void RefreshImage()
gfx.DrawImage(icon, preview.Width / 2 - icon.Width / 2, preview.Height / 2 - icon.Height / 2);
}
// Layer on Preview Image
Image pic = Util.LayerImage(qr, preview, qr.Width / 2 - preview.Width / 2, qr.Height / 2 - preview.Height / 2, 1);
Image pic = ImageUtil.LayerImage(qr, preview, qr.Width / 2 - preview.Width / 2, qr.Height / 2 - preview.Height / 2, 1);
Image newpic = new Bitmap(PB_QR.Width, PB_QR.Height);
using (Graphics g = Graphics.FromImage(newpic))
@ -91,7 +92,7 @@ internal static byte[] getQRData()
string webURL = "http://api.qrserver.com/v1/read-qr-code/?fileurl=" + HttpUtility.UrlEncode(address);
try
{
string data = Util.getStringFromURL(webURL);
string data = NetUtil.getStringFromURL(webURL);
if (data.Contains("could not find")) { WinFormsUtil.Alert("Reader could not find QR data in the image."); return null; }
if (data.Contains("filetype not supported")) { WinFormsUtil.Alert("Input URL is not valid. Double check that it is an image (jpg/png).", address); return null; }
// Quickly convert the json response to a data string
@ -131,7 +132,7 @@ internal static Image getQRImage(byte[] data, string server)
try
{
return Util.getImageFromURL(webURL);
return NetUtil.getImageFromURL(webURL);
}
catch
{
@ -150,12 +151,29 @@ private void updateBoxSlotCopies(object sender, EventArgs e)
var box = (int) NUD_Box.Value - 1;
var slot = (int) NUD_Slot.Value - 1;
var copies = (int) NUD_Copies.Value;
var new_qr = QR7.GenerateQRCode7((PK7)pkm, box, slot, copies);
var new_qr = GenerateQRCode7((PK7)pkm, box, slot, copies);
qr = new_qr;
SuspendLayout();
extraText = $" (Box {box+1}, Slot {slot+1}, {copies} cop{(copies > 1 ? "ies" : "y")})";
RefreshImage();
ResumeLayout();
}
// QR7 Utility
public static Image GenerateQRCode7(PK7 pk7, int box = 0, int slot = 0, int num_copies = 1)
{
byte[] data = QR7.GenerateQRData(pk7, box, slot, num_copies);
using (var generator = new QRCodeGenerator())
using (var qr_data = generator.CreateQRCode(data))
using (var qr_code = new QRCode(qr_data))
return qr_code.GetGraphic(4);
}
public static Image GenerateQRCode(byte[] data, int ppm = 4)
{
using (var generator = new QRCodeGenerator())
using (var qr_data = generator.CreateQRCode(data))
using (var qr_code = new QRCode(qr_data))
return qr_code.GetGraphic(ppm);
}
}
}

View File

@ -337,6 +337,13 @@
<Compile Include="Util\ConfigUtil.cs" />
<Compile Include="Util\CyberGadgetUtil.cs" />
<Compile Include="Util\FontUtil.cs" />
<Compile Include="Util\ImageUtil.cs" />
<Compile Include="Util\NetUtil.cs" />
<Compile Include="Util\PKMUtil.cs" />
<Compile Include="Util\QRCoder\AbstractQRCode.cs" />
<Compile Include="Util\QRCoder\QRCode.cs" />
<Compile Include="Util\QRCoder\QRCodeData.cs" />
<Compile Include="Util\QRCoder\QRCodeGenerator.cs" />
<Compile Include="Util\WinFormsUtil.cs" />
<EmbeddedResource Include="MainWindow\Main.resx">
<DependentUpon>Main.cs</DependentUpon>

View File

@ -48,7 +48,7 @@ private void popEntry(int index)
int r = 0;
row.Cells[r++].Value = s.ToString("000") + (f > 0 ? "-"+f.ToString("00") :"");
row.Cells[r++].Value = PKX.getSprite(s, f, 0, 0, false, false, Main.SAV.Generation);
row.Cells[r++].Value = PKMUtil.getSprite(s, f, 0, 0, false, false, Main.SAV.Generation);
row.Cells[r++].Value = species[index];
row.Cells[r++].Value = s > 721 || Legal.PastGenAlolanNatives.Contains(s);
row.Cells[r].Style.BackColor = mapColor((int)((p.BST - 175) / 3f));

View File

@ -551,7 +551,7 @@ private void FillPKXBoxes(int start)
}
PKM[] data = Results.Skip(start * RES_MIN).Take(RES_MAX).ToArray();
for (int i = 0; i < data.Length; i++)
PKXBOXES[i].Image = data[i].Sprite;
PKXBOXES[i].Image = data[i].Sprite();
for (int i = data.Length; i < RES_MAX; i++)
PKXBOXES[i].Image = null;

View File

@ -125,7 +125,7 @@ private void changeBoxBG(object sender, EventArgs e)
if (!editing)
SAV.setBoxWallpaper(LB_BoxSelect.SelectedIndex, CB_BG.SelectedIndex);
PAN_BG.BackgroundImage = BoxWallpaper.getWallpaper(SAV, CB_BG.SelectedIndex);
PAN_BG.BackgroundImage = SAV.getWallpaper(CB_BG.SelectedIndex);
}
private bool MoveItem(int direction)

View File

@ -229,7 +229,7 @@ private void NUP_PartyIndex_ValueChanged(object sender, EventArgs e)
CB_Form.SelectedIndex = (int)form;
setGenderLabel((int)gender);
updateNickname(sender, e);
bpkx.Image = PKX.getSprite(species, (int)form, (int)gender, item, false, shiny == 1);
bpkx.Image = PKMUtil.getSprite(species, (int)form, (int)gender, item, false, shiny == 1);
editing = true;
}
private void Write_Entry(object sender, EventArgs e)
@ -290,7 +290,7 @@ private void Write_Entry(object sender, EventArgs e)
vnd |= rawvnd & 0x80000000;
Array.Copy(BitConverter.GetBytes(vnd), 0, data, offset + 0x1B0, 4);
bpkx.Image = PKX.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked);
bpkx.Image = PKMUtil.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked);
displayEntry(null, null); // refresh text view
}
private void Validate_TextBoxes()
@ -339,7 +339,7 @@ private void updateShiny(object sender, EventArgs e)
{
if (!editing)
return; //Don't do writing until loaded
bpkx.Image = PKX.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked);
bpkx.Image = PKMUtil.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked);
Write_Entry(null, null);
}

View File

@ -361,7 +361,7 @@ private void getBadges()
};
for (int i = 0; i < 8; i++)
pba[i].Image = Util.ChangeOpacity(bma[i], cba[i].Checked ? 1 : 0.1);
pba[i].Image = ImageUtil.ChangeOpacity(bma[i], cba[i].Checked ? 1 : 0.1);
}
private void getTextBoxes()
{

View File

@ -90,7 +90,7 @@ public void setPKXBoxes()
{
int boxoffset = SAV.getBoxOffset(CB_BoxSelect.SelectedIndex);
int boxbgval = SAV.getBoxWallpaper(CB_BoxSelect.SelectedIndex);
PAN_Box.BackgroundImage = BoxWallpaper.getWallpaper(SAV, boxbgval);
PAN_Box.BackgroundImage = SAV.getWallpaper(boxbgval);
for (int i = 0; i < SAV.BoxSlotCount; i++)
getSlotFiller(boxoffset + SAV.SIZE_STORED*i, SlotPictureBoxes[i]);
@ -113,27 +113,27 @@ private void getSlotFiller(int offset, PictureBox pb)
return;
}
// Something stored in slot. Only display if species is valid.
var sprite = p.Species != 0 ? p.Sprite : null;
var sprite = p.Species != 0 ? p.Sprite() : null;
int slot = getSlot(pb);
bool locked = slot < 30 && SAV.getIsSlotLocked(CB_BoxSelect.SelectedIndex, slot);
bool team = slot < 30 && SAV.getIsTeamSet(CB_BoxSelect.SelectedIndex, slot);
if (locked)
sprite = Util.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1);
sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1);
else if (team)
sprite = Util.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1);
sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1);
pb.Image = sprite;
pb.BackColor = Color.Transparent;
}
private void getQuickFiller(PictureBox pb, PKM pk)
{
var sprite = pk.Species != 0 ? pk.Sprite : null;
var sprite = pk.Species != 0 ? pk.Sprite() : null;
int slot = getSlot(pb);
bool locked = slot < 30 && SAV.getIsSlotLocked(CB_BoxSelect.SelectedIndex, slot);
bool team = slot < 30 && SAV.getIsTeamSet(CB_BoxSelect.SelectedIndex, slot);
if (locked)
sprite = Util.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1);
sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1);
else if (team)
sprite = Util.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1);
sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1);
pb.Image = sprite;
if (pb.BackColor == Color.Red)
pb.BackColor = Color.Transparent;

View File

@ -473,14 +473,14 @@ internal static Image getSprite(MysteryGift gift)
{
Image img;
if (gift.IsPokémon)
img = PKX.getSprite(gift.convertToPKM(Main.SAV));
img = PKMUtil.getSprite(gift.convertToPKM(Main.SAV));
else if (gift.IsItem)
img = (Image)(Core.Properties.Resources.ResourceManager.GetObject("item_" + gift.Item) ?? Core.Properties.Resources.unknown);
else
img = Core.Properties.Resources.unknown;
if (gift.GiftUsed)
img = Util.LayerImage(new Bitmap(img.Width, img.Height), img, 0, 0, 0.3);
img = ImageUtil.LayerImage(new Bitmap(img.Width, img.Height), img, 0, 0, 0.3);
return img;
}
private static string getDescription(MysteryGift gift)

View File

@ -18,7 +18,7 @@ public class Preview
{
private readonly PKM pkm;
public string Position => pkm.Identifier;
public Image Sprite => pkm.Sprite;
public Image Sprite => pkm.Sprite();
public string Nickname => pkm.Nickname;
public string Species => GameInfo.Strings.specieslist[pkm.Species];
public string Nature => GameInfo.Strings.natures[pkm.Nature];
@ -183,7 +183,7 @@ public void PopulateData(PKM[] Data)
}
private void dgData_Sorted(object sender, EventArgs e)
{
int height = PKX.getSprite(1, 0, 0, 0, false, false).Height + 1; // dummy sprite, max height of a row
int height = PKMUtil.getSprite(1, 0, 0, 0, false, false).Height + 1; // dummy sprite, max height of a row
for (int i = 0; i < dgData.Rows.Count; i++)
dgData.Rows[i].Height = height;
}

View File

@ -5,7 +5,7 @@
namespace PKHeX.Core
{
public static partial class Util
public static class ImageUtil
{
// Image Layering/Blending Utility
public static Bitmap LayerImage(Image baseLayer, Image overLayer, int x, int y, double trans)

View File

@ -5,7 +5,7 @@
namespace PKHeX.Core
{
public partial class Util
public class NetUtil
{
public static string getStringFromURL(string webURL)
{

View File

@ -0,0 +1,73 @@
using System.Drawing;
using PKHeX.Core;
using PKHeX.Core.Properties;
namespace PKHeX.WinForms
{
public static class PKMUtil
{
public static Image getBallSprite(int ball)
{
string str = PKX.getBallString(ball);
return (Image)Resources.ResourceManager.GetObject(str) ?? Resources._ball4; // Poké Ball (default)
}
public static Image Sprite(this PKM pkm)
{
return getSprite(pkm);
}
public static Image getSprite(int species, int form, int gender, int item, bool isegg, bool shiny, int generation = -1)
{
if (species == 0)
return (Image)Resources.ResourceManager.GetObject("_0");
string file = PKX.getSpriteString(species, form, gender, generation);
// Redrawing logic
Image baseImage = (Image)Resources.ResourceManager.GetObject(file);
if (baseImage == null)
{
if (species < 803)
{
baseImage = ImageUtil.LayerImage(
(Image)Resources.ResourceManager.GetObject("_" + species),
Resources.unknown,
0, 0, .5);
}
else
baseImage = Resources.unknown;
}
if (isegg)
{
// Start with a partially transparent species by layering the species with partial opacity onto a blank image.
baseImage = ImageUtil.LayerImage((Image)Resources.ResourceManager.GetObject("_0"), baseImage, 0, 0, 0.33);
// Add the egg layer over-top with full opacity.
baseImage = ImageUtil.LayerImage(baseImage, (Image)Resources.ResourceManager.GetObject("egg"), 0, 0, 1);
}
if (shiny)
{
// Add shiny star to top left of image.
baseImage = ImageUtil.LayerImage(baseImage, Resources.rare_icon, 0, 0, 0.7);
}
if (item > 0)
{
Image itemimg = (Image)Resources.ResourceManager.GetObject("item_" + item) ?? Resources.helditem;
if (generation >= 2 && generation <= 4 && 328 <= item && item <= 419) // gen2/3/4 TM
itemimg = Resources.item_tm;
// Redraw
baseImage = ImageUtil.LayerImage(baseImage, itemimg, 22 + (15 - itemimg.Width) / 2, 15 + (15 - itemimg.Height), 1);
}
return baseImage;
}
public static Image getSprite(PKM pkm)
{
return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.SpriteItem, pkm.IsEgg, pkm.IsShiny, pkm.Format);
}
public static Image getWallpaper(this SaveFile SAV, int box)
{
string s = BoxWallpaper.getWallpaper(SAV, box);
return (Bitmap)(Resources.ResourceManager.GetObject(s) ?? Resources.box_wp16xy);
}
}
}

View File

@ -193,13 +193,7 @@
<Compile Include="Util\CryptoUtil.cs" />
<Compile Include="Util\DataUtil.cs" />
<Compile Include="Util\DateUtil.cs" />
<Compile Include="Util\ImageUtil.cs" />
<Compile Include="Util\NetUtil.cs" />
<Compile Include="Util\PathUtil.cs" />
<Compile Include="Util\QRCoder\AbstractQRCode.cs" />
<Compile Include="Util\QRCoder\QRCode.cs" />
<Compile Include="Util\QRCoder\QRCodeData.cs" />
<Compile Include="Util\QRCoder\QRCodeGenerator.cs" />
<Compile Include="Util\RandUtil.cs" />
<Compile Include="Util\ReflectUtil.cs" />
<Compile Include="Util\StringUtil.cs" />

View File

@ -294,7 +294,6 @@ public int GenNumber
public int MarkHeart { get { return Markings[3]; } set { var marks = Markings; marks[3] = value; Markings = marks; } }
public int MarkStar { get { return Markings[4]; } set { var marks = Markings; marks[4] = value; Markings = marks; } }
public int MarkDiamond { get { return Markings[5]; } set { var marks = Markings; marks[5] = value; Markings = marks; } }
public Image Sprite => PKX.getSprite(this);
public string ShowdownText => ShowdownSet.getShowdownText(this);
public string[] QRText => PKX.getQRText(this);

View File

@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using PKHeX.Core.Properties;
namespace PKHeX.Core
{
@ -510,14 +508,9 @@ public static uint getRandomPID(int species, int cg, int origin, int nature, int
}
// Data Requests
public static Image getBallSprite(int ball)
public static string getBallString(int ball) => "_ball" + ball;
public static string getSpriteString(int species, int form, int gender, int generation)
{
return (Image)Resources.ResourceManager.GetObject("_ball" + ball) ?? Resources._ball4; // Poké Ball (default)
}
public static Image getSprite(int species, int form, int gender, int item, bool isegg, bool shiny, int generation = -1)
{
if (species == 0)
return (Image)Resources.ResourceManager.GetObject("_0");
if (new[] { 778, 664, 665, 414, 493, 773 }.Contains(species)) // Species who show their default sprite regardless of Form
form = 0;
@ -530,46 +523,7 @@ public static Image getSprite(int species, int form, int gender, int item, bool
if (species == 25 && form > 0 && generation >= 7) // Pikachu
file += "c"; // Cap
// Redrawing logic
Image baseImage = (Image)Resources.ResourceManager.GetObject(file);
if (baseImage == null)
{
if (species < 803)
{
baseImage = Util.LayerImage(
(Image)Resources.ResourceManager.GetObject("_" + species),
Resources.unknown,
0, 0, .5);
}
else
baseImage = Resources.unknown;
}
if (isegg)
{
// Start with a partially transparent species by layering the species with partial opacity onto a blank image.
baseImage = Util.LayerImage((Image)Resources.ResourceManager.GetObject("_0"), baseImage, 0, 0, 0.33);
// Add the egg layer over-top with full opacity.
baseImage = Util.LayerImage(baseImage, (Image)Resources.ResourceManager.GetObject("egg"), 0, 0, 1);
}
if (shiny)
{
// Add shiny star to top left of image.
baseImage = Util.LayerImage(baseImage, Resources.rare_icon, 0, 0, 0.7);
}
if (item > 0)
{
Image itemimg = (Image)Resources.ResourceManager.GetObject("item_" + item) ?? Resources.helditem;
if (generation >= 2 && generation <= 4 && 328 <= item && item <= 419) // gen2/3/4 TM
itemimg = Resources.item_tm;
// Redraw
baseImage = Util.LayerImage(baseImage, itemimg, 22 + (15 - itemimg.Width) / 2, 15 + (15 - itemimg.Height), 1);
}
return baseImage;
}
public static Image getSprite(PKM pkm)
{
return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.SpriteItem, pkm.IsEgg, pkm.IsShiny, pkm.Format);
return file;
}
// Personal.dat

View File

@ -1,10 +1,8 @@
using System.Drawing;
namespace PKHeX.Core
namespace PKHeX.Core
{
public static class BoxWallpaper
{
public static Bitmap getWallpaper(SaveFile SAV, int index)
public static string getWallpaper(SaveFile SAV, int index)
{
index++;
string s = "box_wp" + index.ToString("00");
@ -33,7 +31,7 @@ public static Bitmap getWallpaper(SaveFile SAV, int index)
s += "rs";
break;
}
return (Bitmap)(Properties.Resources.ResourceManager.GetObject(s) ?? Properties.Resources.box_wp16xy);
return s;
}
}
}

View File

@ -1,9 +1,6 @@
using System;
using System.Drawing;
using System.Linq;
using QRCoder;
namespace PKHeX.Core
{
// anatomy of a QR7:
@ -17,8 +14,7 @@ namespace PKHeX.Core
// u8 dex_data[0x60];
// u16 crc16
// sizeof(QR7) == 0x1A2
public static class QR7
{
private static bool hasGenderDifferences(int species)
@ -62,7 +58,7 @@ private static byte[] GetRawQR(int species, int formnum, bool shiny, int gender)
}
return basedata;
}
private static byte[] GenerateQRData(PK7 pk7, int box = 0, int slot = 0, int num_copies = 1)
public static byte[] GenerateQRData(PK7 pk7, int box = 0, int slot = 0, int num_copies = 1)
{
if (box > 31)
box = 31;
@ -87,22 +83,5 @@ private static byte[] GenerateQRData(PK7 pk7, int box = 0, int slot = 0, int num
BitConverter.GetBytes((ushort) SaveUtil.check16(data.Take(0x1A0).ToArray(), 0)).CopyTo(data, 0x1A0);
return data;
}
public static Bitmap GenerateQRCode7(PK7 pk7, int box = 0, int slot = 0, int num_copies = 1)
{
byte[] data = GenerateQRData(pk7, box, slot, num_copies);
using (var generator = new QRCodeGenerator())
using (var qr_data = generator.CreateQRCode(data))
using (var qr_code = new QRCode(qr_data))
return qr_code.GetGraphic(4);
}
public static Bitmap GenerateQRCode(byte[] data, int ppm = 4)
{
using (var generator = new QRCodeGenerator())
using (var qr_data = generator.CreateQRCode(data))
using (var qr_code = new QRCode(qr_data))
return qr_code.GetGraphic(ppm);
}
}
}