git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@2926 92316355-f0b4-4df1-b90c-862c8a59935fremotes/tiles
@@ -0,0 +1,33 @@ | |||
// | |||
// The Pimp The Pathetic Image Manipulation Program | |||
// Copyright (c) 2004-2008 Sam Hocevar <sam@zoy.org> | |||
// All Rights Reserved | |||
// | |||
// $Id$ | |||
// | |||
// This library is free software. It comes without any warranty, to | |||
// the extent permitted by applicable law. You can redistribute it | |||
// and/or modify it under the terms of the Do What The Fuck You Want | |||
// To Public License, Version 2, as published by Sam Hocevar. See | |||
// http://sam.zoy.org/wtfpl/COPYING for more details. | |||
// | |||
using System; | |||
namespace ThePimp | |||
{ | |||
public partial class ErrorWindow : Gtk.Dialog | |||
{ | |||
public ErrorWindow(string message) | |||
{ | |||
this.Build(); | |||
this.message.Text = message; | |||
this.Run(); | |||
} | |||
protected virtual void OnButtonOkClicked (object sender, System.EventArgs e) | |||
{ | |||
this.Destroy(); | |||
} | |||
} | |||
} |
@@ -14,6 +14,7 @@ | |||
using System; | |||
using Gtk; | |||
using Pipi; | |||
namespace ThePimp | |||
{ | |||
@@ -21,6 +22,8 @@ namespace ThePimp | |||
{ | |||
public static void Main (string[] args) | |||
{ | |||
Libpipi.getVersion(); | |||
Application.Init (); | |||
MainWindow win = new MainWindow (); | |||
win.Show (); | |||
@@ -24,7 +24,6 @@ namespace ThePimp | |||
public MainWindow (): base (Gtk.WindowType.Toplevel) | |||
{ | |||
Build (); | |||
Title += " v" + Libpipi.getVersion(); | |||
vpaned1.Add1(new ToolBox()); | |||
} | |||
@@ -36,32 +35,48 @@ namespace ThePimp | |||
protected virtual void OnOpenActionActivated (object sender, System.EventArgs e) | |||
{ | |||
OpenFile open = new OpenFile(); | |||
Pipi.Picture p = open.Load(); | |||
open.Destroy(); | |||
if(p != null) | |||
OpenFile dialog = new OpenFile(); | |||
string s = dialog.GetChoice(); | |||
dialog.Destroy(); | |||
if(s == null) | |||
return; | |||
Pipi.Picture p = Pipi.Picture.Load(s); | |||
if(p == null) | |||
{ | |||
while(notebook1.NPages > 0) | |||
notebook1.RemovePage(0); | |||
int n = notebook1.AppendPage(new PictureView(p), | |||
new Label(p.FileName)); | |||
notebook1.Page = n; | |||
new ErrorWindow("Could not open \"" + s + "\". Check the file format."); | |||
return; | |||
} | |||
while(notebook1.NPages > 0) | |||
notebook1.RemovePage(0); | |||
int n = notebook1.AppendPage(new PictureView(p), | |||
new Label(p.FileName)); | |||
notebook1.Page = n; | |||
} | |||
protected virtual void OnNewActionActivated (object sender, System.EventArgs e) | |||
{ | |||
NewFile dialog = new NewFile(); | |||
Pipi.Picture p = dialog.New(); | |||
string s = dialog.GetChoice(); | |||
dialog.Destroy(); | |||
if(p != null) | |||
if(s == null) | |||
return; | |||
Pipi.Picture p = Pipi.Picture.Load(s); | |||
if(p == null) | |||
{ | |||
while(notebook1.NPages > 0) | |||
notebook1.RemovePage(0); | |||
int n = notebook1.AppendPage(new PictureView(p), | |||
new Label(p.FileName)); | |||
notebook1.Page = n; | |||
new ErrorWindow("Could not create image."); | |||
return; | |||
} | |||
while(notebook1.NPages > 0) | |||
notebook1.RemovePage(0); | |||
int n = notebook1.AppendPage(new PictureView(p), | |||
new Label(p.FileName)); | |||
notebook1.Page = n; | |||
} | |||
protected virtual void OnQuitActionActivated (object sender, System.EventArgs e) | |||
@@ -4,6 +4,7 @@ pimp_sources = \ | |||
AssemblyInfo.cs \ | |||
Main.cs \ | |||
AboutWindow.cs \ | |||
ErrorWindow.cs \ | |||
MainWindow.cs \ | |||
OpenFile.cs \ | |||
NewFile.cs \ | |||
@@ -12,6 +13,7 @@ pimp_sources = \ | |||
ToolBox.cs \ | |||
gtk-gui/generated.cs \ | |||
gtk-gui/ThePimp.AboutWindow.cs \ | |||
gtk-gui/ThePimp.ErrorWindow.cs \ | |||
gtk-gui/ThePimp.MainWindow.cs \ | |||
gtk-gui/ThePimp.OpenFile.cs \ | |||
gtk-gui/ThePimp.NewFile.cs \ | |||
@@ -24,7 +24,7 @@ namespace ThePimp | |||
this.Build(); | |||
} | |||
public Pipi.Picture New() | |||
public string GetChoice() | |||
{ | |||
ResponseType rsp = (ResponseType)Run(); | |||
Hide(); | |||
@@ -42,8 +42,7 @@ namespace ThePimp | |||
break; | |||
} | |||
Pipi.Picture p = new Pipi.Picture(type + ":" + entry1.Text + "x" + entry2.Text); | |||
return p; | |||
return type + ":" + entry1.Text + "x" + entry2.Text; | |||
} | |||
} | |||
} |
@@ -23,15 +23,15 @@ namespace ThePimp | |||
{ | |||
this.Build(); | |||
} | |||
public Pipi.Picture Load() | |||
public string GetChoice() | |||
{ | |||
ResponseType rsp = (ResponseType)Run(); | |||
Hide(); | |||
if(rsp != ResponseType.Ok) | |||
return null; | |||
Pipi.Picture p = new Pipi.Picture(filechooserwidget1.Filename); | |||
return p; | |||
return filechooserwidget1.Filename; | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>.\bin</OutputPath> | |||
<OutputPath>bin\</OutputPath> | |||
<DefineConstants>DEBUG;TRACE</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
@@ -27,7 +27,7 @@ | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||
<DebugType>pdbonly</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>.\bin</OutputPath> | |||
<OutputPath>bin\</OutputPath> | |||
<DefineConstants>TRACE</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
@@ -92,6 +92,8 @@ | |||
<Compile Include="gtk-gui\ThePimp.PictureView.cs" /> | |||
<Compile Include="gtk-gui\ThePimp.SaveFile.cs" /> | |||
<Compile Include="gtk-gui\ThePimp.ToolBox.cs" /> | |||
<Compile Include="ErrorWindow.cs" /> | |||
<Compile Include="gtk-gui\ThePimp.ErrorWindow.cs" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\pipi-sharp\pipi-sharp.csproj"> | |||
@@ -100,9 +102,9 @@ | |||
</ProjectReference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<EmbeddedResource Include="gtk-gui\gui.stetic" /> | |||
<EmbeddedResource Include="images\about.png" /> | |||
<EmbeddedResource Include="gtk-gui\objects.xml" /> | |||
<EmbeddedResource Include="gtk-gui\gui.stetic" /> | |||
</ItemGroup> | |||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> | |||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||
@@ -116,4 +118,10 @@ | |||
</Target> | |||
<Target Name="AfterBuild"> | |||
</Target> | |||
</Project> | |||
<GtkDesignInfo gtkVersion="2.12.1"> | |||
<ExportedWidgets> | |||
<Widget>ThePimp.PictureView</Widget> | |||
<Widget>ThePimp.ToolBox</Widget> | |||
</ExportedWidgets> | |||
</GtkDesignInfo> | |||
</Project> |
@@ -43,6 +43,7 @@ | |||
<File name="gtk-gui/ThePimp.AboutWindow.cs" subtype="Code" buildaction="Compile" /> | |||
<File name="NewFile.cs" subtype="Code" buildaction="Compile" /> | |||
<File name="gtk-gui/ThePimp.NewFile.cs" subtype="Code" buildaction="Compile" /> | |||
<File name="gtk-gui/ThePimp.ErrorWindow.cs" subtype="Code" buildaction="Compile" /> | |||
</Contents> | |||
<References> | |||
<ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> | |||
@@ -61,4 +62,4 @@ | |||
<Widget>ThePimp.ToolBox</Widget> | |||
</ExportedWidgets> | |||
</GtkDesignInfo> | |||
</Project> | |||
</Project> |
@@ -0,0 +1,89 @@ | |||
// ------------------------------------------------------------------------------ | |||
// <autogenerated> | |||
// This code was generated by a tool. | |||
// Mono Runtime Version: 2.0.50727.42 | |||
// | |||
// Changes to this file may cause incorrect behavior and will be lost if | |||
// the code is regenerated. | |||
// </autogenerated> | |||
// ------------------------------------------------------------------------------ | |||
namespace ThePimp { | |||
public partial class ErrorWindow { | |||
private Gtk.HBox hbox1; | |||
private Gtk.Image image1; | |||
private Gtk.Label message; | |||
private Gtk.Button buttonOk; | |||
protected virtual void Build() { | |||
Stetic.Gui.Initialize(this); | |||
// Widget ThePimp.ErrorWindow | |||
this.Name = "ThePimp.ErrorWindow"; | |||
this.Title = Mono.Unix.Catalog.GetString("Error"); | |||
this.Icon = Stetic.IconLoader.LoadIcon(this, "gtk-dialog-error", Gtk.IconSize.Menu, 16); | |||
this.WindowPosition = ((Gtk.WindowPosition)(4)); | |||
this.HasSeparator = false; | |||
// Internal child ThePimp.ErrorWindow.VBox | |||
Gtk.VBox w1 = this.VBox; | |||
w1.Name = "dialog1_VBox"; | |||
w1.BorderWidth = ((uint)(2)); | |||
// Container child dialog1_VBox.Gtk.Box+BoxChild | |||
this.hbox1 = new Gtk.HBox(); | |||
this.hbox1.Name = "hbox1"; | |||
this.hbox1.Spacing = 20; | |||
this.hbox1.BorderWidth = ((uint)(10)); | |||
// Container child hbox1.Gtk.Box+BoxChild | |||
this.image1 = new Gtk.Image(); | |||
this.image1.Name = "image1"; | |||
this.image1.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-dialog-error", Gtk.IconSize.Dialog, 48); | |||
this.hbox1.Add(this.image1); | |||
Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(this.hbox1[this.image1])); | |||
w2.Position = 0; | |||
w2.Expand = false; | |||
w2.Fill = false; | |||
// Container child hbox1.Gtk.Box+BoxChild | |||
this.message = new Gtk.Label(); | |||
this.message.Name = "message"; | |||
this.message.LabelProp = Mono.Unix.Catalog.GetString("Error!"); | |||
this.message.Wrap = true; | |||
this.hbox1.Add(this.message); | |||
Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.hbox1[this.message])); | |||
w3.Position = 1; | |||
w3.Expand = false; | |||
w1.Add(this.hbox1); | |||
Gtk.Box.BoxChild w4 = ((Gtk.Box.BoxChild)(w1[this.hbox1])); | |||
w4.Position = 0; | |||
w4.Fill = false; | |||
// Internal child ThePimp.ErrorWindow.ActionArea | |||
Gtk.HButtonBox w5 = this.ActionArea; | |||
w5.Name = "dialog1_ActionArea"; | |||
w5.Spacing = 6; | |||
w5.BorderWidth = ((uint)(5)); | |||
w5.LayoutStyle = ((Gtk.ButtonBoxStyle)(4)); | |||
// Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild | |||
this.buttonOk = new Gtk.Button(); | |||
this.buttonOk.CanDefault = true; | |||
this.buttonOk.CanFocus = true; | |||
this.buttonOk.Name = "buttonOk"; | |||
this.buttonOk.UseStock = true; | |||
this.buttonOk.UseUnderline = true; | |||
this.buttonOk.Label = "gtk-ok"; | |||
this.AddActionWidget(this.buttonOk, -5); | |||
Gtk.ButtonBox.ButtonBoxChild w6 = ((Gtk.ButtonBox.ButtonBoxChild)(w5[this.buttonOk])); | |||
w6.Expand = false; | |||
w6.Fill = false; | |||
if ((this.Child != null)) { | |||
this.Child.ShowAll(); | |||
} | |||
this.DefaultWidth = 229; | |||
this.DefaultHeight = 133; | |||
this.Show(); | |||
} | |||
} | |||
} |
@@ -797,6 +797,7 @@ Bayer Dithering Pattern</property> | |||
<property name="Text" translatable="yes">1024</property> | |||
<property name="IsEditable">True</property> | |||
<property name="WidthChars">6</property> | |||
<property name="InvisibleChar">●</property> | |||
<property name="Xalign">1</property> | |||
</widget> | |||
<packing> | |||
@@ -820,6 +821,7 @@ Bayer Dithering Pattern</property> | |||
<property name="Text" translatable="yes">768</property> | |||
<property name="IsEditable">True</property> | |||
<property name="WidthChars">6</property> | |||
<property name="InvisibleChar">●</property> | |||
<property name="Xalign">1</property> | |||
</widget> | |||
<packing> | |||
@@ -977,4 +979,81 @@ Bayer Dithering Pattern</property> | |||
</widget> | |||
</child> | |||
</widget> | |||
<widget class="Gtk.Dialog" id="ThePimp.ErrorWindow" design-size="229 133"> | |||
<property name="MemberName" /> | |||
<property name="Title" translatable="yes">Error</property> | |||
<property name="Icon">stock:gtk-dialog-error Menu</property> | |||
<property name="WindowPosition">CenterOnParent</property> | |||
<property name="Buttons">1</property> | |||
<property name="HelpButton">False</property> | |||
<property name="HasSeparator">False</property> | |||
<child internal-child="VBox"> | |||
<widget class="Gtk.VBox" id="dialog1_VBox"> | |||
<property name="MemberName" /> | |||
<property name="BorderWidth">2</property> | |||
<child> | |||
<widget class="Gtk.HBox" id="hbox1"> | |||
<property name="MemberName" /> | |||
<property name="Spacing">20</property> | |||
<property name="BorderWidth">10</property> | |||
<child> | |||
<widget class="Gtk.Image" id="image1"> | |||
<property name="MemberName" /> | |||
<property name="Pixbuf">stock:gtk-dialog-error Dialog</property> | |||
</widget> | |||
<packing> | |||
<property name="Position">0</property> | |||
<property name="AutoSize">True</property> | |||
<property name="Expand">False</property> | |||
<property name="Fill">False</property> | |||
</packing> | |||
</child> | |||
<child> | |||
<widget class="Gtk.Label" id="message"> | |||
<property name="MemberName" /> | |||
<property name="LabelProp" translatable="yes">Error!</property> | |||
<property name="Wrap">True</property> | |||
</widget> | |||
<packing> | |||
<property name="Position">1</property> | |||
<property name="AutoSize">False</property> | |||
<property name="Expand">False</property> | |||
</packing> | |||
</child> | |||
</widget> | |||
<packing> | |||
<property name="Position">0</property> | |||
<property name="AutoSize">False</property> | |||
<property name="Fill">False</property> | |||
</packing> | |||
</child> | |||
</widget> | |||
</child> | |||
<child internal-child="ActionArea"> | |||
<widget class="Gtk.HButtonBox" id="dialog1_ActionArea"> | |||
<property name="MemberName" /> | |||
<property name="Spacing">6</property> | |||
<property name="BorderWidth">5</property> | |||
<property name="Size">1</property> | |||
<property name="LayoutStyle">End</property> | |||
<child> | |||
<widget class="Gtk.Button" id="buttonOk"> | |||
<property name="MemberName" /> | |||
<property name="CanDefault">True</property> | |||
<property name="CanFocus">True</property> | |||
<property name="UseStock">True</property> | |||
<property name="Type">StockItem</property> | |||
<property name="StockId">gtk-ok</property> | |||
<property name="ResponseId">-5</property> | |||
<property name="label">gtk-ok</property> | |||
<signal name="Clicked" handler="OnButtonCloseClicked" /> | |||
</widget> | |||
<packing> | |||
<property name="Expand">False</property> | |||
<property name="Fill">False</property> | |||
</packing> | |||
</child> | |||
</widget> | |||
</child> | |||
</widget> | |||
</stetic-interface> |
@@ -13,14 +13,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pipi-sharp", "pipi-sharp\pi | |||
EndProject | |||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThePimp", "ThePimp\ThePimp.csproj", "{D681A55E-B8E2-4741-87E6-49500109D6E0}" | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpipi", "pipi\libpipi.vcproj", "{48A34C3A-1E36-49B7-92C4-E982FDCB90C0}" | |||
EndProject | |||
Global | |||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
Debug|Any CPU = Debug|Any CPU | |||
Release|Any CPU = Release|Any CPU | |||
Debug|Mixed Platforms = Debug|Mixed Platforms | |||
Debug|Win32 = Debug|Win32 | |||
Release|Any CPU = Release|Any CPU | |||
Release|Mixed Platforms = Release|Mixed Platforms | |||
Release|Win32 = Release|Win32 | |||
EndGlobalSection | |||
@@ -35,16 +33,6 @@ Global | |||
{2A062F77-ED16-4B74-B7B7-5ED93FAF300A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | |||
{2A062F77-ED16-4B74-B7B7-5ED93FAF300A}.Release|Mixed Platforms.Build.0 = Release|Any CPU | |||
{2A062F77-ED16-4B74-B7B7-5ED93FAF300A}.Release|Win32.ActiveCfg = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Win32.ActiveCfg = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Mixed Platforms.Build.0 = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Win32.ActiveCfg = Release|Any CPU | |||
{D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | |||
@@ -55,6 +43,16 @@ Global | |||
{D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | |||
{D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU | |||
{D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Win32.ActiveCfg = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Win32.ActiveCfg = Debug|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Mixed Platforms.Build.0 = Release|Any CPU | |||
{FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Win32.ActiveCfg = Release|Any CPU | |||
{48A34C3A-1E36-49B7-92C4-E982FDCB90C0}.Debug|Any CPU.ActiveCfg = Debug|Win32 | |||
{48A34C3A-1E36-49B7-92C4-E982FDCB90C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 | |||
{48A34C3A-1E36-49B7-92C4-E982FDCB90C0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 | |||
@@ -66,6 +64,8 @@ Global | |||
{48A34C3A-1E36-49B7-92C4-E982FDCB90C0}.Release|Win32.ActiveCfg = Release|Win32 | |||
{48A34C3A-1E36-49B7-92C4-E982FDCB90C0}.Release|Win32.Build.0 = Release|Win32 | |||
EndGlobalSection | |||
GlobalSection(NestedProjects) = preSolution | |||
EndGlobalSection | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||
EndGlobalSection | |||
@@ -21,16 +21,16 @@ namespace Pipi | |||
public class Picture | |||
{ | |||
private IntPtr _picture; | |||
private string _filename; | |||
public readonly string FileName; | |||
public string FileName | |||
{ | |||
get { return _filename; } | |||
} | |||
[DllImport("libpipi.dll", CallingConvention=CallingConvention.Cdecl), | |||
SuppressUnmanagedCodeSecurity] | |||
private static extern IntPtr pipi_load(string s); | |||
public Picture(string s) | |||
private Picture(IntPtr p) | |||
{ | |||
_picture = pipi_load(s); | |||
FileName = s; | |||
_picture = p; | |||
} | |||
[DllImport("libpipi.dll", CallingConvention=CallingConvention.Cdecl), | |||
@@ -41,6 +41,20 @@ namespace Pipi | |||
pipi_free(_picture); | |||
} | |||
[DllImport("libpipi.dll", CallingConvention=CallingConvention.Cdecl), | |||
SuppressUnmanagedCodeSecurity] | |||
private static extern IntPtr pipi_load(string s); | |||
public static Picture Load(string s) | |||
{ | |||
IntPtr p = pipi_load(s); | |||
if(p == IntPtr.Zero) | |||
return null; | |||
Picture ret = new Picture(p); | |||
ret._filename = s; | |||
return ret; | |||
} | |||
[DllImport("libpipi.dll", CallingConvention=CallingConvention.Cdecl), | |||
SuppressUnmanagedCodeSecurity] | |||
private static extern int pipi_save(IntPtr p, string s); | |||
@@ -55,4 +55,4 @@ | |||
</Target> | |||
<Target Name="AfterBuild"> | |||
</Target> | |||
</Project> | |||
</Project> |
@@ -24,7 +24,7 @@ class Test | |||
Console.WriteLine("libpipi {0} .NET test", Libpipi.getVersion()); | |||
Console.WriteLine("(c) 2008 Sam Hocevar <sam@zoy.org>"); | |||
Pipi.Picture p = new Pipi.Picture("random:640x480"); | |||
Pipi.Picture p = Pipi.Picture.Load("random:640x480"); | |||
Console.WriteLine("Test picture size: {0}x{1}", p.Width, p.Height); | |||
} | |||
} | |||