mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-04-17 03:15:47 +02:00
62 lines
2.3 KiB
C#
62 lines
2.3 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Windows.Forms;
|
|
using TweetDuck.Core.Bridge;
|
|
using TweetDuck.Core.Utils;
|
|
using TweetDuck.Data;
|
|
using TweetDuck.Plugins;
|
|
using TweetDuck.Resources;
|
|
|
|
namespace TweetDuck.Core.Notification.Screenshot{
|
|
sealed class FormNotificationScreenshotable : FormNotificationBase{
|
|
private readonly PluginManager plugins;
|
|
|
|
public FormNotificationScreenshotable(Action callback, Form owner, PluginManager pluginManager) : base(owner, false){
|
|
this.plugins = pluginManager;
|
|
|
|
browser.RegisterAsyncJsObject("$TD_NotificationScreenshot", new CallbackBridge(this, callback));
|
|
|
|
browser.FrameLoadEnd += (sender, args) => {
|
|
if (args.Frame.IsMain && browser.Address != "about:blank"){
|
|
ScriptLoader.ExecuteScript(args.Frame, "window.setTimeout($TD_NotificationScreenshot.trigger, 67)", "gen:screenshot");
|
|
}
|
|
};
|
|
}
|
|
|
|
protected override string GetTweetHTML(TweetNotification tweet){
|
|
string html = tweet.GenerateHtml("td-screenshot", false);
|
|
|
|
foreach(InjectedHTML injection in plugins.Bridge.NotificationInjections){
|
|
html = injection.Inject(html);
|
|
}
|
|
|
|
return html;
|
|
}
|
|
|
|
public void LoadNotificationForScreenshot(TweetNotification tweet, int width, int height){
|
|
LoadTweet(tweet);
|
|
SetNotificationSize(width, height);
|
|
}
|
|
|
|
public void TakeScreenshot(){
|
|
IntPtr context = NativeMethods.GetDC(this.Handle);
|
|
|
|
if (context == IntPtr.Zero){
|
|
MessageBox.Show("Could not retrieve a graphics context handle for the notification window to take the screenshot.", "Screenshot Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
else{
|
|
using(Bitmap bmp = new Bitmap(ClientSize.Width, ClientSize.Height, PixelFormat.Format32bppRgb)){
|
|
try{
|
|
NativeMethods.RenderSourceIntoBitmap(context, bmp);
|
|
}finally{
|
|
NativeMethods.ReleaseDC(this.Handle, context);
|
|
}
|
|
|
|
Clipboard.SetImage(bmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|