Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/hakchi2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2017-04-28 04:22:15 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2017-04-28 04:22:15 +0300
commit5b2be402f7142ee7a10efc02b47a13bee1da78b9 (patch)
treeb2772480f60e27dce403c5f2af990861375bda15
parent34c28b005878cfd2e93e3a2aa67dd5920d63869d (diff)
'Take screenshot' feature
-rw-r--r--MainForm.Designer.cs19
-rw-r--r--MainForm.cs36
-rw-r--r--MainForm.resx21
-rw-r--r--WorkerForm.cs37
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config2
5 files changed, 111 insertions, 4 deletions
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
index 430f1902..59220638 100644
--- a/MainForm.Designer.cs
+++ b/MainForm.Designer.cs
@@ -145,6 +145,8 @@
this.checkedListBoxDefaultGames = new System.Windows.Forms.CheckedListBox();
this.timerCalculateGames = new System.Windows.Forms.Timer(this.components);
this.timerConnectionCheck = new System.Windows.Forms.Timer(this.components);
+ this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator();
+ this.takeScreenshotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip.SuspendLayout();
this.groupBoxOptions.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxArt)).BeginInit();
@@ -622,7 +624,9 @@
this.openFTPInExplorerToolStripMenuItem,
this.toolStripMenuItem7,
this.shellToolStripMenuItem,
- this.openTelnetToolStripMenuItem});
+ this.openTelnetToolStripMenuItem,
+ this.toolStripMenuItem8,
+ this.takeScreenshotToolStripMenuItem});
this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
resources.ApplyResources(this.toolsToolStripMenuItem, "toolsToolStripMenuItem");
//
@@ -969,6 +973,17 @@
this.timerConnectionCheck.Interval = 500;
this.timerConnectionCheck.Tick += new System.EventHandler(this.timerConnectionCheck_Tick);
//
+ // toolStripMenuItem8
+ //
+ this.toolStripMenuItem8.Name = "toolStripMenuItem8";
+ resources.ApplyResources(this.toolStripMenuItem8, "toolStripMenuItem8");
+ //
+ // takeScreenshotToolStripMenuItem
+ //
+ this.takeScreenshotToolStripMenuItem.Name = "takeScreenshotToolStripMenuItem";
+ resources.ApplyResources(this.takeScreenshotToolStripMenuItem, "takeScreenshotToolStripMenuItem");
+ this.takeScreenshotToolStripMenuItem.Click += new System.EventHandler(this.takeScreenshotToolStripMenuItem_Click);
+ //
// MainForm
//
this.AllowDrop = true;
@@ -1124,6 +1139,8 @@
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem7;
private System.Windows.Forms.ToolStripMenuItem openTelnetToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem languageToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem8;
+ private System.Windows.Forms.ToolStripMenuItem takeScreenshotToolStripMenuItem;
}
}
diff --git a/MainForm.cs b/MainForm.cs
index 880b29b4..26402b88 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -6,6 +6,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
+using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -1476,5 +1477,40 @@ namespace com.clusterrr.hakchi_gui
MessageBox.Show(this, Resources.NoTelnet, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
+
+ private void takeScreenshotToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (RequirePatchedKernel() == DialogResult.No) return;
+ try
+ {
+ if (WaitingClovershellForm.WaitForDevice(this))
+ {
+ var screenshot = WorkerForm.TakeScreenshot();
+ var screenshotPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()+".png");
+ screenshot.Save(screenshotPath, ImageFormat.Png);
+ var showProcess = new Process()
+ {
+ StartInfo = new ProcessStartInfo()
+ {
+ FileName = screenshotPath
+ }
+ };
+ showProcess.Start();
+ new Thread(delegate() {
+ showProcess.WaitForExit();
+ try
+ {
+ File.Delete(screenshotPath);
+ }
+ catch { }
+ }).Start();
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex.Message + ex.StackTrace);
+ MessageBox.Show(this, ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
}
}
diff --git a/MainForm.resx b/MainForm.resx
index aac5f234..83ac946f 100644
--- a/MainForm.resx
+++ b/MainForm.resx
@@ -560,6 +560,15 @@
<data name="openTelnetToolStripMenuItem.Text" xml:space="preserve">
<value>Open Telnet client</value>
</data>
+ <data name="toolStripMenuItem8.Size" type="System.Drawing.Size, System.Drawing">
+ <value>328, 6</value>
+ </data>
+ <data name="takeScreenshotToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>331, 22</value>
+ </data>
+ <data name="takeScreenshotToolStripMenuItem.Text" xml:space="preserve">
+ <value>Take screenshot</value>
+ </data>
<data name="toolsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 20</value>
</data>
@@ -3078,6 +3087,18 @@
<data name="&gt;&gt;timerConnectionCheck.Type" xml:space="preserve">
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
+ <data name="&gt;&gt;toolStripMenuItem8.Name" xml:space="preserve">
+ <value>toolStripMenuItem8</value>
+ </data>
+ <data name="&gt;&gt;toolStripMenuItem8.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;takeScreenshotToolStripMenuItem.Name" xml:space="preserve">
+ <value>takeScreenshotToolStripMenuItem</value>
+ </data>
+ <data name="&gt;&gt;takeScreenshotToolStripMenuItem.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MainForm</value>
</data>
diff --git a/WorkerForm.cs b/WorkerForm.cs
index 8f022579..a3b6dc15 100644
--- a/WorkerForm.cs
+++ b/WorkerForm.cs
@@ -6,6 +6,8 @@ using SevenZip;
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
@@ -69,7 +71,7 @@ namespace com.clusterrr.hakchi_gui
DialogResult = DialogResult.None;
baseDirectory = MainForm.BaseDirectory;
fes1Path = Path.Combine(Path.Combine(baseDirectory, "data"), "fes1.bin");
- ubootPath = Path.Combine(Path.Combine(baseDirectory, "data"), "uboot.bin");
+ ubootPath = Path.Combine(Path.Combine(baseDirectory, "data"), "uboot.bin");
#if DEBUG
tempDirectory = Path.Combine(baseDirectory, "temp");
#else
@@ -650,6 +652,39 @@ namespace com.clusterrr.hakchi_gui
}
}
+ public static Image TakeScreenshot()
+ {
+ var clovershell = MainForm.Clovershell;
+ var screenshot = new Bitmap(1280, 720, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
+ var rawStream = new MemoryStream();
+ clovershell.Execute("cat /dev/fb0", null, rawStream, null, 1000, true);
+ var raw = rawStream.ToArray();
+ BitmapData data = screenshot.LockBits(
+ new Rectangle(0, 0, screenshot.Width, screenshot.Height),
+ ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
+
+ int rawOffset = 0;
+ unsafe
+ {
+ for (int y = 0; y < screenshot.Height; ++y)
+ {
+ byte* row = (byte*)data.Scan0 + (y * data.Stride);
+ int columnOffset = 0;
+ for (int x = 0; x < screenshot.Width; ++x)
+ {
+ row[columnOffset] = raw[rawOffset];
+ row[columnOffset + 1] = raw[rawOffset + 1];
+ row[columnOffset + 2] = raw[rawOffset + 2];
+
+ columnOffset += 3;
+ rawOffset += 4;
+ }
+ }
+ }
+ screenshot.UnlockBits(data);
+ return screenshot;
+ }
+
public void Memboot(int maxProgress = -1, int progress = 0)
{
SetProgress(progress, maxProgress < 0 ? 1000 : maxProgress);
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
index 68e938f6..39ae5dba 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
@@ -1,4 +1,2 @@
cfg_boot_stock_firmware='n'
cfg_boot_stock='n'
-cfg_disable_armet='y'
-cfg_nes_extra_args='--ppu-palette 2'