91 lines
3.1 KiB
C#
Executable File
91 lines
3.1 KiB
C#
Executable File
using ZXing.QrCode.Internal;
|
|
using Shadowsocks.Controller;
|
|
using Shadowsocks.Properties;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using Shadowsocks.Model;
|
|
|
|
namespace Shadowsocks.View
|
|
{
|
|
public partial class QRCodeForm : Form
|
|
{
|
|
private string code;
|
|
|
|
public QRCodeForm(string code)
|
|
{
|
|
this.code = code;
|
|
InitializeComponent();
|
|
this.Icon = Icon.FromHandle(Resources.ssw128.GetHicon());
|
|
this.Text = I18N.GetString("QRCode and URL");
|
|
}
|
|
|
|
private void GenQR(string ssconfig)
|
|
{
|
|
string qrText = ssconfig;
|
|
QRCode code = ZXing.QrCode.Internal.Encoder.encode(qrText, ErrorCorrectionLevel.M);
|
|
ByteMatrix m = code.Matrix;
|
|
int blockSize = Math.Max(pictureBox1.Height/m.Height, 1);
|
|
|
|
var qrWidth = m.Width*blockSize;
|
|
var qrHeight = m.Height*blockSize;
|
|
var dWidth = pictureBox1.Width - qrWidth;
|
|
var dHeight = pictureBox1.Height - qrHeight;
|
|
var maxD = Math.Max(dWidth, dHeight);
|
|
pictureBox1.SizeMode = maxD >= 7*blockSize ? PictureBoxSizeMode.Zoom : PictureBoxSizeMode.CenterImage;
|
|
|
|
Bitmap drawArea = new Bitmap((m.Width*blockSize), (m.Height*blockSize));
|
|
using (Graphics g = Graphics.FromImage(drawArea))
|
|
{
|
|
g.Clear(Color.White);
|
|
using (Brush b = new SolidBrush(Color.Black))
|
|
{
|
|
for (int row = 0; row < m.Width; row++)
|
|
{
|
|
for (int col = 0; col < m.Height; col++)
|
|
{
|
|
if (m[row, col] != 0)
|
|
{
|
|
g.FillRectangle(b, blockSize*row, blockSize*col, blockSize, blockSize);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
pictureBox1.Image = drawArea;
|
|
}
|
|
|
|
private void QRCodeForm_Load(object sender, EventArgs e)
|
|
{
|
|
var servers = Configuration.Load();
|
|
var serverDatas = servers.configs.Select(
|
|
server =>
|
|
new KeyValuePair<string, string>(ShadowsocksController.GetServerURL(server), server.FriendlyName())
|
|
).ToList();
|
|
listBox1.DataSource = serverDatas;
|
|
|
|
var selectIndex = serverDatas.FindIndex(serverData => serverData.Key.StartsWith(code));
|
|
if (selectIndex >= 0) listBox1.SetSelected(selectIndex, true);
|
|
}
|
|
|
|
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
var url = (sender as ListBox)?.SelectedValue.ToString();
|
|
GenQR(url);
|
|
textBoxURL.Text = url;
|
|
}
|
|
|
|
private void textBoxURL_Click(object sender, EventArgs e)
|
|
{
|
|
textBoxURL.SelectAll();
|
|
}
|
|
}
|
|
}
|