Browse Source

Merge pull request #69 from JimBobSquarePants/tocsoft/split-projects

Split ImageSharp into multipe projects
pull/73/head
Scott Williams 9 years ago
committed by GitHub
parent
commit
3781be6bef
  1. 3
      .travis.yml
  2. 64
      ImageSharp.sln
  3. 21
      README.md
  4. 25
      appveyor.yml
  5. 2
      build.cmd
  6. 445
      build/Program.cs
  7. 7
      build/Properties/launchSettings.json
  8. 13
      build/appveyor-project-version-patch.js
  9. 17
      build/appveyor-semver.ps1
  10. 18
      build/build.cmd
  11. 25
      build/build.xproj
  12. 6
      build/package.json
  13. 22
      build/project.json
  14. 8
      build/reset-versions.cmd
  15. 0
      src/ImageSharp.Drawing/Brushes/Brushes.cs
  16. 0
      src/ImageSharp.Drawing/Brushes/Brushes{TColor}.cs
  17. 0
      src/ImageSharp.Drawing/Brushes/IBrush.cs
  18. 0
      src/ImageSharp.Drawing/Brushes/ImageBrush.cs
  19. 0
      src/ImageSharp.Drawing/Brushes/ImageBrush{TColor}.cs
  20. 0
      src/ImageSharp.Drawing/Brushes/PatternBrush.cs
  21. 0
      src/ImageSharp.Drawing/Brushes/PatternBrush{TColor}.cs
  22. 0
      src/ImageSharp.Drawing/Brushes/Processors/IBrushApplicator.cs
  23. 0
      src/ImageSharp.Drawing/Brushes/RecolorBrush.cs
  24. 0
      src/ImageSharp.Drawing/Brushes/RecolorBrush{TColor}.cs
  25. 0
      src/ImageSharp.Drawing/Brushes/SolidBrush.cs
  26. 0
      src/ImageSharp.Drawing/Brushes/SolidBrush{TColor}.cs
  27. 6
      src/ImageSharp.Drawing/Draw.cs
  28. 4
      src/ImageSharp.Drawing/DrawImage.cs
  29. 2
      src/ImageSharp.Drawing/DrawRectangle.cs
  30. 6
      src/ImageSharp.Drawing/Fill.cs
  31. 4
      src/ImageSharp.Drawing/FillRectangle.cs
  32. 0
      src/ImageSharp.Drawing/GraphicsOptions.cs
  33. 25
      src/ImageSharp.Drawing/ImageSharp.Drawing.xproj
  34. 0
      src/ImageSharp.Drawing/Paths/BezierLineSegment.cs
  35. 0
      src/ImageSharp.Drawing/Paths/ILineSegment.cs
  36. 0
      src/ImageSharp.Drawing/Paths/IPath.cs
  37. 0
      src/ImageSharp.Drawing/Paths/InternalPath.cs
  38. 0
      src/ImageSharp.Drawing/Paths/LinearLineSegment.cs
  39. 0
      src/ImageSharp.Drawing/Paths/Path.cs
  40. 0
      src/ImageSharp.Drawing/Paths/PointInfo.cs
  41. 0
      src/ImageSharp.Drawing/Pens/IPen.cs
  42. 0
      src/ImageSharp.Drawing/Pens/Pen.cs
  43. 0
      src/ImageSharp.Drawing/Pens/Pens.cs
  44. 0
      src/ImageSharp.Drawing/Pens/Pens{TColor}.cs
  45. 3
      src/ImageSharp.Drawing/Pens/Pen{TColor}.cs
  46. 2
      src/ImageSharp.Drawing/Pens/Processors/ColoredPointInfo.cs
  47. 2
      src/ImageSharp.Drawing/Pens/Processors/IPenApplicator.cs
  48. 5
      src/ImageSharp.Drawing/Processors/DrawImageProcessor.cs
  49. 5
      src/ImageSharp.Drawing/Processors/DrawPathProcessor.cs
  50. 2
      src/ImageSharp.Drawing/Processors/FillProcessor.cs
  51. 4
      src/ImageSharp.Drawing/Processors/FillShapeProcessor.cs
  52. 6
      src/ImageSharp.Drawing/Properties/AssemblyInfo.cs
  53. 0
      src/ImageSharp.Drawing/Shapes/BezierPolygon.cs
  54. 0
      src/ImageSharp.Drawing/Shapes/ComplexPolygon.cs
  55. 0
      src/ImageSharp.Drawing/Shapes/IShape.cs
  56. 0
      src/ImageSharp.Drawing/Shapes/LinearPolygon.cs
  57. 0
      src/ImageSharp.Drawing/Shapes/Polygon.cs
  58. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/Clipper.cs
  59. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/ClipperException.cs
  60. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/Direction.cs
  61. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/EdgeSide.cs
  62. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/IntersectNode.cs
  63. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/IntersectNodeSort.cs
  64. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/Join.cs
  65. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/LocalMinima.cs
  66. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/Maxima.cs
  67. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/OutPt.cs
  68. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/OutRec.cs
  69. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/PolyNode.cs
  70. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/PolyTree.cs
  71. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/PolyType.cs
  72. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/README.md
  73. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/Scanbeam.cs
  74. 0
      src/ImageSharp.Drawing/Shapes/PolygonClipper/TEdge.cs
  75. 0
      src/ImageSharp.Drawing/Shapes/RectangularPolygon.cs
  76. 83
      src/ImageSharp.Drawing/project.json
  77. 0
      src/ImageSharp.Formats.Bmp/BmpBitsPerPixel.cs
  78. 0
      src/ImageSharp.Formats.Bmp/BmpCompression.cs
  79. 0
      src/ImageSharp.Formats.Bmp/BmpDecoder.cs
  80. 0
      src/ImageSharp.Formats.Bmp/BmpDecoderCore.cs
  81. 0
      src/ImageSharp.Formats.Bmp/BmpEncoder.cs
  82. 2
      src/ImageSharp.Formats.Bmp/BmpEncoderCore.cs
  83. 0
      src/ImageSharp.Formats.Bmp/BmpFileHeader.cs
  84. 0
      src/ImageSharp.Formats.Bmp/BmpFormat.cs
  85. 0
      src/ImageSharp.Formats.Bmp/BmpInfoHeader.cs
  86. 32
      src/ImageSharp.Formats.Bmp/ImageExtensions.cs
  87. 25
      src/ImageSharp.Formats.Bmp/ImageSharp.Formats.Bmp.xproj
  88. 6
      src/ImageSharp.Formats.Bmp/Properties/AssemblyInfo.cs
  89. 0
      src/ImageSharp.Formats.Bmp/README.md
  90. 81
      src/ImageSharp.Formats.Bmp/project.json
  91. 0
      src/ImageSharp.Formats.Gif/DisposalMethod.cs
  92. 0
      src/ImageSharp.Formats.Gif/GifConstants.cs
  93. 0
      src/ImageSharp.Formats.Gif/GifDecoder.cs
  94. 0
      src/ImageSharp.Formats.Gif/GifDecoderCore.cs
  95. 0
      src/ImageSharp.Formats.Gif/GifEncoder.cs
  96. 2
      src/ImageSharp.Formats.Gif/GifEncoderCore.cs
  97. 0
      src/ImageSharp.Formats.Gif/GifFormat.cs
  98. 33
      src/ImageSharp.Formats.Gif/ImageExtensions.cs
  99. 25
      src/ImageSharp.Formats.Gif/ImageSharp.Formats.Gif.xproj
  100. 0
      src/ImageSharp.Formats.Gif/LzwDecoder.cs

3
.travis.yml

@ -19,9 +19,8 @@ branches:
- coverity_scan
script:
- cd src/ImageSharp/
- dotnet restore
- dotnet build -c Release
- dotnet build -c Release src/*/project.json
env:
global:

64
ImageSharp.sln

@ -11,19 +11,17 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "ImageSharp.Benchmarks", "te
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{C317F1B1-D75E-4C6D-83EB-80367343E0D7}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
.travis.yml = .travis.yml
build\appveyor-project-version-patch.js = build\appveyor-project-version-patch.js
build\appveyor-semver.ps1 = build\appveyor-semver.ps1
appveyor.yml = appveyor.yml
CodeCoverage.runsettings = CodeCoverage.runsettings
contributing.md = contributing.md
build\dotnet-latest.ps1 = build\dotnet-latest.ps1
dotnet-latest.ps1 = dotnet-latest.ps1
features.md = features.md
global.json = global.json
ImageSharp.ruleset = ImageSharp.ruleset
ImageSharp.sln.DotSettings = ImageSharp.sln.DotSettings
NuGet.config = NuGet.config
build\package.json = build\package.json
README.md = README.md
Rebracer.xml = Rebracer.xml
Settings.StyleCop = Settings.StyleCop
@ -33,6 +31,28 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source", "Source", "{815C06
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{56801022-D71A-4FBE-BC5B-CBA08E2284EC}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "ImageSharp.Drawing", "src\ImageSharp.Drawing\ImageSharp.Drawing.xproj", "{2E33181E-6E28-4662-A801-E2E7DC206029}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{E919DF0B-2607-4462-8FC0-5C98FE50F8C9}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "build", "build\build.xproj", "{575A5002-DD9F-4335-AA47-1DD87FA13645}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "ImageSharp.Formats.Bmp", "src\ImageSharp.Formats.Bmp\ImageSharp.Formats.Bmp.xproj", "{C77661B9-F793-422E-8E27-AC60ECC5F215}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "ImageSharp.Formats.Gif", "src\ImageSharp.Formats.Gif\ImageSharp.Formats.Gif.xproj", "{27AD4B5F-ECC4-4C63-9ECB-04EC772FDB6F}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "ImageSharp.Formats.Jpeg", "src\ImageSharp.Formats.Jpeg\ImageSharp.Formats.Jpeg.xproj", "{7213767C-0003-41CA-AB18-0223CFA7CE4B}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "ImageSharp.Formats.Png", "src\ImageSharp.Formats.Png\ImageSharp.Formats.Png.xproj", "{556ABDCF-ED93-4327-BE98-F6815F78B9B8}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "ImageSharp.Processing", "src\ImageSharp.Processing\ImageSharp.Processing.xproj", "{A623CFE9-9D2B-4528-AD1F-2E834B061134}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{9E574A07-F879-4811-9C41-5CBDC6BAFDB7}"
ProjectSection(SolutionItems) = preProject
src\Shared\AssemblyInfo.Common.cs = src\Shared\AssemblyInfo.Common.cs
src\Shared\stylecop.json = src\Shared\stylecop.json
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -51,6 +71,34 @@ Global
{299D8E18-102C-42DE-ADBF-79098EE706A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{299D8E18-102C-42DE-ADBF-79098EE706A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{299D8E18-102C-42DE-ADBF-79098EE706A8}.Release|Any CPU.Build.0 = Release|Any CPU
{2E33181E-6E28-4662-A801-E2E7DC206029}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E33181E-6E28-4662-A801-E2E7DC206029}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E33181E-6E28-4662-A801-E2E7DC206029}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E33181E-6E28-4662-A801-E2E7DC206029}.Release|Any CPU.Build.0 = Release|Any CPU
{575A5002-DD9F-4335-AA47-1DD87FA13645}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{575A5002-DD9F-4335-AA47-1DD87FA13645}.Debug|Any CPU.Build.0 = Debug|Any CPU
{575A5002-DD9F-4335-AA47-1DD87FA13645}.Release|Any CPU.ActiveCfg = Release|Any CPU
{575A5002-DD9F-4335-AA47-1DD87FA13645}.Release|Any CPU.Build.0 = Release|Any CPU
{C77661B9-F793-422E-8E27-AC60ECC5F215}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C77661B9-F793-422E-8E27-AC60ECC5F215}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C77661B9-F793-422E-8E27-AC60ECC5F215}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C77661B9-F793-422E-8E27-AC60ECC5F215}.Release|Any CPU.Build.0 = Release|Any CPU
{27AD4B5F-ECC4-4C63-9ECB-04EC772FDB6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{27AD4B5F-ECC4-4C63-9ECB-04EC772FDB6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{27AD4B5F-ECC4-4C63-9ECB-04EC772FDB6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{27AD4B5F-ECC4-4C63-9ECB-04EC772FDB6F}.Release|Any CPU.Build.0 = Release|Any CPU
{7213767C-0003-41CA-AB18-0223CFA7CE4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7213767C-0003-41CA-AB18-0223CFA7CE4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7213767C-0003-41CA-AB18-0223CFA7CE4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7213767C-0003-41CA-AB18-0223CFA7CE4B}.Release|Any CPU.Build.0 = Release|Any CPU
{556ABDCF-ED93-4327-BE98-F6815F78B9B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{556ABDCF-ED93-4327-BE98-F6815F78B9B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{556ABDCF-ED93-4327-BE98-F6815F78B9B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{556ABDCF-ED93-4327-BE98-F6815F78B9B8}.Release|Any CPU.Build.0 = Release|Any CPU
{A623CFE9-9D2B-4528-AD1F-2E834B061134}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A623CFE9-9D2B-4528-AD1F-2E834B061134}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A623CFE9-9D2B-4528-AD1F-2E834B061134}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A623CFE9-9D2B-4528-AD1F-2E834B061134}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -59,5 +107,13 @@ Global
{2AA31A1F-142C-43F4-8687-09ABCA4B3A26} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{F836E8E6-B4D9-4208-8346-140C74678B91} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
{299D8E18-102C-42DE-ADBF-79098EE706A8} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
{2E33181E-6E28-4662-A801-E2E7DC206029} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{575A5002-DD9F-4335-AA47-1DD87FA13645} = {E919DF0B-2607-4462-8FC0-5C98FE50F8C9}
{C77661B9-F793-422E-8E27-AC60ECC5F215} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{27AD4B5F-ECC4-4C63-9ECB-04EC772FDB6F} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{7213767C-0003-41CA-AB18-0223CFA7CE4B} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{556ABDCF-ED93-4327-BE98-F6815F78B9B8} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{A623CFE9-9D2B-4528-AD1F-2E834B061134} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{9E574A07-F879-4811-9C41-5CBDC6BAFDB7} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
EndGlobalSection
EndGlobal

21
README.md

@ -26,6 +26,27 @@ At present the code is pre-release but when ready it will be available on [Nuget
We already have a [MyGet package repository](https://www.myget.org/gallery/imagesharp) - for bleeding-edge / development NuGet releases.
### Packages
The **ImageSharp** library is made up of multiple packages, to make **ImageSharp** do anything useful you will want to make sure you include at least one format as a dependency otherwise you will not be able to save/load any images.
Packages include;
- **ImageSharp**
Contains the Image classes, Colors, Primitives, Bootstrapper, IImageFormat interface, and other core functionality.
- **ImageSharp.Formats.Jpeg**
The jpeg decoder/encoder (Auto registered)
- **ImageSharp.Formats.Png**
The png decoder/encoder (Auto registered)
- **ImageSharp.Formats.Gif**
The gif decoder/encoder (Auto registered)
- **ImageSharp.Formats.Bmp**
The bmp decoder/encoder (Auto registered)
- **ImageSharp.Processing**
Contains methods like Resize, Crop, Skew, Rotate - Anything that alters the dimensions of the image.
Contains methods like Gaussian Blur, Pixelate, Edge Detection - Anything that maintains the original image dimensions.
- **ImageSharp.Drawing**
Brushes and various drawing algorithms.
### Manual build
If you prefer, you can compile ImageSharp yourself (please do and help!), you'll need:

25
appveyor.yml

@ -17,31 +17,8 @@ install:
# the parent CMD process).
- "SET PATH=C:\\Program Files\\dotnet\\bin;%PATH%"
- ps: .\build\appveyor-semver.ps1
- ps: Update-AppveyorBuild -Version "v$Env:appveyor_version"
assembly_info:
patch: true
file: '**\AssemblyInfo.*'
assembly_version: '$(ms_file_version)'
assembly_file_version: '$(ms_file_version)'
assembly_informational_version: '$(mssemver)'
before_build:
- cmd: >-
dotnet restore src\ImageSharp
cd build
npm install
node appveyor-project-version-patch.js
cd..
build_script:
- cmd: >-
dotnet pack src\ImageSharp --configuration Release --output "artifacts\bin\ImageSharp"
- cmd: build.cmd
test_script:
- tests\CodeCoverage\CodeCoverage.cmd

2
build.cmd

@ -0,0 +1,2 @@
@echo Off
call build\build.cmd

445
build/Program.cs

@ -0,0 +1,445 @@
// <copyright file="Program.cs" company="James Jackson-South">
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ConsoleApplication
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using LibGit2Sharp;
using Microsoft.DotNet.ProjectModel;
using Newtonsoft.Json;
using NuGet.Versioning;
/// <summary>
/// This updates the version numbers for all the projects in the src folder.
/// The version number it will geneate is dependent on if this is a build from master or a branch/PR
///
/// If its a build on master
/// We take the version number specified in project.json,
/// count how meny commits the repo has had that will affect this project or its dependencies since the version number of manually changed
/// If this is the first commit that effected this project since number change then leave the version number as defined i.e. will build 1.0.0 if thats in project.json
/// unless it is a preview build number in which case we always add the counter
///
/// If the build is from a PR/branch
/// We take the version number specified in project.json, append a tag for the branch/PR (so we can determin how each package was built)
/// append number of commits effecting the project.
///
/// </summary>
/// <example>
/// for PR#123 and project.json version 2.0.1 and we have had 30 commits affecting the project
/// we would end up with version number 2.0.1-PR124-00030
///
/// for branch `fix-stuff` project.json version 2.0.1-alpha1 and we have had 832 commits affecting the project
/// we would end up with version number 2.0.1-alpha1-fix-stuff-00832
///
/// for `master` project.json version 2.0.1-alpha1 and we have had 832 commits affecting the project
/// we would end up with version number 2.0.1-alpha1-00832
///
/// for `master` project.json version 2.0.1 and we have had 132 commits affecting the project
/// we would end up with version number 2.0.1-CI-00132
///
/// for `master` project.json version 2.0.1 and we have had 1 commits affecting the project
/// we would end up with version number 2.0.1
///
/// for `master` project.json version 2.0.1-alpha1 and we have had 1 commits affecting the project
/// we would end up with version number 2.0.1-alpha1
/// </example>
/// <remarks>
/// TODO Add the option for using this to update the version numbers in a project and its dependent references.
/// </remarks>
public class Program
{
private const string FallbackTag = "CI";
/// <summary>
/// Main entry point.
/// </summary>
/// <param name="args">The arguments.</param>
public static void Main(string[] args)
{
var resetmode = args.Contains("reset");
// Find the project root where glbal.json lives
var root = ProjectRootResolver.ResolveRootDirectory(".");
// Lets find the repo
var repo = new LibGit2Sharp.Repository(root);
// Lets find all the project.json files in the src folder (don't care about versioning `tests`)
var projectFiles = Directory.EnumerateFiles(Path.Combine(root, "src"), Project.FileName, SearchOption.AllDirectories);
// Open them and convert them to source projects
var projects = projectFiles.Select(x => ProjectReader.GetProject(x))
.Select(x => new SourceProject(x, repo.Info.WorkingDirectory))
.ToList();
if (resetmode)
{
ResetProject(projects);
}
else
{
CaclulateProjectVersionNumber(projects, repo);
UpdateVersionNumbers(projects);
CreateBuildScript(projects);
foreach (var p in projects)
{
Console.WriteLine($"{p.Name} {p.FinalVersionNumber}");
}
}
}
private static void CreateBuildScript(IEnumerable<SourceProject> projects)
{
var sb = new StringBuilder();
foreach (var p in projects)
{
sb.AppendLine($@"dotnet pack --configuration Release --output ""artifacts\bin\ImageSharp"" ""{p.ProjectFilePath}""");
}
File.WriteAllText("build-inner.cmd", sb.ToString());
}
private static void UpdateVersionNumbers(IEnumerable<SourceProject> projects)
{
foreach (var p in projects)
{
// TODO force update of all dependent projects to point to the newest build.
// we skip the build number and standard CI prefix on first commits
var newVersion = p.FinalVersionNumber;
// create a backup file so we can rollback later without breaking formatting
File.Copy(p.FullProjectFilePath, $"{p.FullProjectFilePath}.bak", true);
dynamic projectFile = JsonConvert.DeserializeObject(File.ReadAllText(p.FullProjectFilePath));
projectFile.version = $"{newVersion}-*";
File.WriteAllText(p.FullProjectFilePath, JsonConvert.SerializeObject(projectFile, Formatting.Indented));
}
}
private static string CurrentBranch(Repository repo)
{
// lets build version friendly commit
string branch = repo.Head.FriendlyName;
// lets see if we are running in appveyor and if we are use the environment variables instead of the head
var appveryorBranch = Environment.GetEnvironmentVariable("APPVEYOR_REPO_BRANCH");
if (!string.IsNullOrWhiteSpace(appveryorBranch))
{
branch = appveryorBranch;
}
var prNumber = Environment.GetEnvironmentVariable("APPVEYOR_PULL_REQUEST_NUMBER");
if (!string.IsNullOrWhiteSpace(prNumber))
{
branch = $"PR{int.Parse(prNumber):000}";
}
// this will happen when checking out a comit directly and not a branch (like appveryor does when it builds)
if (branch == "(no branch)")
{
throw new Exception("unable to find branch");
}
// clean branch names (might need to be improved)
branch = branch.Replace("/", "-").Replace("--", "-");
return branch;
}
private static void CaclulateProjectVersionNumber(List<SourceProject> projects, Repository repo)
{
var branch = CurrentBranch(repo);
// populate the dependency chains
projects.ForEach(x => x.PopulateDependencies(projects));
// update the final version based on the repo history and the currentr branch name
projects.ForEach(x => x.CalculateVersion(repo, branch));
}
private static void ResetProject(List<SourceProject> projects)
{
if (File.Exists("build-inner.cmd"))
{
File.Delete("build-inner.cmd");
}
// revert the project.json change be reverting it but skipp all the git stuff as its not needed
foreach (var p in projects)
{
if (File.Exists($"{p.FullProjectFilePath}.bak"))
{
File.Copy($"{p.FullProjectFilePath}.bak", p.FullProjectFilePath, true);
File.Delete($"{p.FullProjectFilePath}.bak");
}
}
}
/// <summary>
/// Project level logic
/// </summary>
public class SourceProject
{
private readonly IEnumerable<string> dependencies;
/// <summary>
/// Initializes a new instance of the <see cref="SourceProject"/> class.
/// </summary>
/// <param name="project">The project.</param>
/// <param name="root">The root.</param>
public SourceProject(Project project, string root)
{
this.Name = project.Name;
this.ProjectDirectory = project.ProjectDirectory.Substring(root.Length);
this.ProjectFilePath = project.ProjectFilePath.Substring(root.Length);
this.FullProjectFilePath = project.ProjectFilePath;
this.Version = project.Version;
this.dependencies = project.Dependencies.Select(x => x.Name);
this.FinalVersionNumber = this.Version.ToFullString();
}
/// <summary>
/// Gets the project directory.
/// </summary>
/// <value>
/// The project directory.
/// </value>
public string ProjectDirectory { get; }
/// <summary>
/// Gets the version.
/// </summary>
/// <value>
/// The version.
/// </value>
public NuGetVersion Version { get; }
/// <summary>
/// Gets the dependent projects.
/// </summary>
/// <value>
/// The dependent projects.
/// </value>
public List<SourceProject> DependentProjects { get; private set; }
/// <summary>
/// Gets the name.
/// </summary>
/// <value>
/// The name.
/// </value>
public string Name { get; private set; }
/// <summary>
/// Gets the project file path.
/// </summary>
/// <value>
/// The project file path.
/// </value>
public string ProjectFilePath { get; private set; }
/// <summary>
/// Gets the commit count since version change.
/// </summary>
/// <value>
/// The commit count since version change.
/// </value>
public int CommitCountSinceVersionChange { get; private set; } = 0;
/// <summary>
/// Gets the full project file path.
/// </summary>
/// <value>
/// The full project file path.
/// </value>
public string FullProjectFilePath { get; private set; }
/// <summary>
/// Gets the final version number.
/// </summary>
/// <value>
/// The final version number.
/// </value>
public string FinalVersionNumber { get; private set; }
/// <summary>
/// Populates the dependencies.
/// </summary>
/// <param name="projects">The projects.</param>
public void PopulateDependencies(IEnumerable<SourceProject> projects)
{
this.DependentProjects = projects.Where(x => this.dependencies.Contains(x.Name)).ToList();
}
/// <summary>
/// Calculates the version.
/// </summary>
/// <param name="repo">The repo.</param>
/// <param name="branch">The branch.</param>
internal void CalculateVersion(Repository repo, string branch)
{
foreach (var c in repo.Commits)
{
if (!this.ApplyCommit(c, repo))
{
// we have finished lets populate the final version number
this.FinalVersionNumber = this.CalculateVersionNumber(branch);
return;
}
}
}
private bool MatchPath(string path)
{
if (path.StartsWith(this.ProjectDirectory, StringComparison.OrdinalIgnoreCase))
{
return true;
}
if (this.DependentProjects.Any())
{
return this.DependentProjects.Any(x => x.MatchPath(path));
}
return false;
}
private bool ApplyCommitInternal(Commit commit, TreeChanges changes, Repository repo)
{
this.CommitCountSinceVersionChange++;
// return false if this is a version number root
var projectFileChange = changes.Where(x => x.Path?.Equals(this.ProjectFilePath, StringComparison.OrdinalIgnoreCase) == true).FirstOrDefault();
if (projectFileChange != null)
{
if (projectFileChange.Status == ChangeKind.Added)
{
// the version must have been set here
return false;
}
else
{
var blob = repo.Lookup<Blob>(projectFileChange.Oid);
using (var s = blob.GetContentStream())
{
var project = new ProjectReader().ReadProject(s, this.Name, this.FullProjectFilePath, null);
if (project.Version != this.Version)
{
// version changed
return false;
}
}
}
// version must have been the same lets carry on
return true;
}
return true;
}
private bool ApplyCommit(Commit commit, Repository repo)
{
foreach (var parent in commit.Parents)
{
var changes = repo.Diff.Compare<TreeChanges>(parent.Tree, commit.Tree);
foreach (TreeEntryChanges change in changes)
{
if (!string.IsNullOrWhiteSpace(change.OldPath))
{
if (this.MatchPath(change.OldPath))
{
return this.ApplyCommitInternal(commit, changes, repo);
}
}
if (!string.IsNullOrWhiteSpace(change.Path))
{
if (this.MatchPath(change.Path))
{
return this.ApplyCommitInternal(commit, changes, repo);
}
}
}
}
return true;
}
private string CalculateVersionNumber(string branch)
{
var version = this.Version.ToFullString();
// master only
if (this.CommitCountSinceVersionChange == 1 && branch == "master")
{
if (this.Version.IsPrerelease)
{
// prerelease always needs the build counter just not on a branch name
return $"{version}-{this.CommitCountSinceVersionChange:00000}";
}
// this is the full release happy path, first commit after changing the version number
return version;
}
var rootSpecialVersion = string.Empty;
if (this.Version.IsPrerelease)
{
// probably a much easy way for doing this but it work sell enough for a build script
var parts = version.Split(new[] { '-' }, 2);
version = parts[0];
rootSpecialVersion = parts[1];
}
// if master and the version doesn't manually specify a prerelease tag force one on for CI builds
if (branch == "master")
{
if (!this.Version.IsPrerelease)
{
branch = FallbackTag;
}
else
{
branch = string.Empty;
}
}
if (rootSpecialVersion.Length > 0)
{
rootSpecialVersion = "-" + rootSpecialVersion;
}
if (branch.Length > 0)
{
branch = "-" + branch;
}
var maxLength = 20; // dotnet will fail to populate the package if the tag is > 20
maxLength -= rootSpecialVersion.Length; // this is a required tag
maxLength -= 7; // for the counter and dashes
if (branch.Length > maxLength)
{
branch = branch.Substring(0, maxLength);
}
return $"{version}{rootSpecialVersion}{branch}-{this.CommitCountSinceVersionChange:00000}";
}
}
}
}

7
build/Properties/launchSettings.json

@ -0,0 +1,7 @@
{
"profiles": {
"build": {
"commandName": "Project"
}
}
}

13
build/appveyor-project-version-patch.js

@ -1,13 +0,0 @@
var jsonfile = require("jsonfile");
var semver = require("semver");
var file = "../src/imagesharp/project.json";
var semversion = semver.valid(process.env.mssemver);
jsonfile.readFile(file, function (err, project) {
project.version = semversion;
jsonfile.writeFile(file, project, {spaces: 2}, function(err) {
console.error(err);
});
})

17
build/appveyor-semver.ps1

@ -1,17 +0,0 @@
$version=[Version]$Env:APPVEYOR_BUILD_VERSION
$version_suffix=$Env:version_suffix
$basever=$version.Major.ToString() + "." + $version.Minor.ToString() + "." + $version.Build.ToString()
$semver = $basever + "-" + $version_suffix + "." + $version.Revision.ToString().PadLeft(6,"0")
$mssemver = $basever + "-" + $version_suffix + "-" + $version.Revision.ToString().PadLeft(6,"0")
$appveyor_version = $mssemver
$Env:semver = $semver
$Env:mssemver = $mssemver
$Env:appveyor_version = $appveyor_version
$Env:ms_file_version = $version.ToString()
"Envrionment variable 'semver' set:" + $Env:semver
"Envrionment variable 'mssemver' set:" + $Env:mssemver
"Envrionment variable 'appveyor_version' set:" + $Env:appveyor_version

18
build/build.cmd

@ -0,0 +1,18 @@
@echo Off
set buildRoot="%cd%"
ECHO Restoring packages
dotnet restore
ECHO Updating version numbers and generating build script
cd %~dp0
dotnet run -- update
cd %buildRoot%
ECHO Building package
call %~dp0build-inner.cmd
ECHO Reset version numbers
cd %~dp0
dotnet run -- reset
cd %buildRoot%

25
build/build.xproj

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>575a5002-dd9f-4335-aa47-1dd87fa13645</ProjectGuid>
<RootNamespace>build</RootNamespace>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<ProduceOutputsOnBuild>True</ProduceOutputsOnBuild>
</PropertyGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

6
build/package.json

@ -1,6 +0,0 @@
{
"dependencies": {
"jsonfile": "^2.2.3",
"semver": "^5.0.3"
}
}

22
build/project.json

@ -0,0 +1,22 @@
{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true,
"xmlDoc": true,
"additionalArguments": [ "/additionalfile:../src/Shared/stylecop.json", "/ruleset:../ImageSharp.ruleset" ]
},
"dependencies": {
"Microsoft.DotNet.ProjectModel": "1.0.0-rc3-003121",
"LibGit2Sharp": "0.23.0",
"StyleCop.Analyzers": {
"version": "1.1.0-beta001",
"type": "build"
}
},
"frameworks": {
"net46": {
// this is only a net46 app because of LibGit2Sharp once they have a version that works on coreclr we can shift over.
}
}
}

8
build/reset-versions.cmd

@ -0,0 +1,8 @@
@echo Off
set buildRoot="%cd%"
cd %~dp0
dotnet run -- reset
cd %buildRoot%

0
src/ImageSharp/Drawing/Brushes/Brushes.cs → src/ImageSharp.Drawing/Brushes/Brushes.cs

0
src/ImageSharp/Drawing/Brushes/Brushes{TColor}.cs → src/ImageSharp.Drawing/Brushes/Brushes{TColor}.cs

0
src/ImageSharp/Drawing/Brushes/IBrush.cs → src/ImageSharp.Drawing/Brushes/IBrush.cs

0
src/ImageSharp/Drawing/Brushes/ImageBrush.cs → src/ImageSharp.Drawing/Brushes/ImageBrush.cs

0
src/ImageSharp/Drawing/Brushes/ImageBrush{TColor}.cs → src/ImageSharp.Drawing/Brushes/ImageBrush{TColor}.cs

0
src/ImageSharp/Drawing/Brushes/PatternBrush.cs → src/ImageSharp.Drawing/Brushes/PatternBrush.cs

0
src/ImageSharp/Drawing/Brushes/PatternBrush{TColor}.cs → src/ImageSharp.Drawing/Brushes/PatternBrush{TColor}.cs

0
src/ImageSharp/Drawing/Brushes/Processors/IBrushApplicator.cs → src/ImageSharp.Drawing/Brushes/Processors/IBrushApplicator.cs

0
src/ImageSharp/Drawing/Brushes/RecolorBrush.cs → src/ImageSharp.Drawing/Brushes/RecolorBrush.cs

0
src/ImageSharp/Drawing/Brushes/RecolorBrush{TColor}.cs → src/ImageSharp.Drawing/Brushes/RecolorBrush{TColor}.cs

0
src/ImageSharp/Drawing/Brushes/SolidBrush.cs → src/ImageSharp.Drawing/Brushes/SolidBrush.cs

0
src/ImageSharp/Drawing/Brushes/SolidBrush{TColor}.cs → src/ImageSharp.Drawing/Brushes/SolidBrush{TColor}.cs

6
src/ImageSharp/Drawing/Draw.cs → src/ImageSharp.Drawing/Draw.cs

@ -33,7 +33,7 @@ namespace ImageSharp
public static Image<TColor> DrawPolygon<TColor>(this Image<TColor> source, IPen<TColor> pen, IShape shape, GraphicsOptions options)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new DrawPathProcessor<TColor>(pen, shape, options));
return source.Apply(new DrawPathProcessor<TColor>(pen, shape, options));
}
/// <summary>
@ -227,7 +227,7 @@ namespace ImageSharp
public static Image<TColor> DrawPath<TColor>(this Image<TColor> source, IPen<TColor> pen, IPath path, GraphicsOptions options)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new DrawPathProcessor<TColor>(pen, path, options));
return source.Apply(new DrawPathProcessor<TColor>(pen, path, options));
}
/// <summary>
@ -241,7 +241,7 @@ namespace ImageSharp
public static Image<TColor> DrawPath<TColor>(this Image<TColor> source, IPen<TColor> pen, IPath path)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new DrawPathProcessor<TColor>(pen, path, GraphicsOptions.Default));
return source.Apply(new DrawPathProcessor<TColor>(pen, path, GraphicsOptions.Default));
}
/// <summary>

4
src/ImageSharp/Drawing/DrawImage.cs → src/ImageSharp.Drawing/DrawImage.cs

@ -7,7 +7,7 @@ namespace ImageSharp
{
using System;
using Processors;
using Drawing.Processors;
/// <summary>
/// Extension methods for the <see cref="Image"/> type.
@ -51,7 +51,7 @@ namespace ImageSharp
location = Point.Empty;
}
return source.Process(source.Bounds, new DrawImageProcessor<TColor>(image, size, location, percent));
return source.Apply(source.Bounds, new DrawImageProcessor<TColor>(image, size, location, percent));
}
}
}

2
src/ImageSharp/Drawing/DrawRectangle.cs → src/ImageSharp.Drawing/DrawRectangle.cs

@ -33,7 +33,7 @@ namespace ImageSharp
public static Image<TColor> DrawPolygon<TColor>(this Image<TColor> source, IPen<TColor> pen, RectangleF shape, GraphicsOptions options)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new DrawPathProcessor<TColor>(pen, (IPath)new RectangularPolygon(shape), options));
return source.Apply(new DrawPathProcessor<TColor>(pen, (IPath)new RectangularPolygon(shape), options));
}
/// <summary>

6
src/ImageSharp/Drawing/Fill.cs → src/ImageSharp.Drawing/Fill.cs

@ -28,7 +28,7 @@ namespace ImageSharp
public static Image<TColor> Fill<TColor>(this Image<TColor> source, IBrush<TColor> brush)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new FillProcessor<TColor>(brush));
return source.Apply(new FillProcessor<TColor>(brush));
}
/// <summary>
@ -56,7 +56,7 @@ namespace ImageSharp
public static Image<TColor> Fill<TColor>(this Image<TColor> source, IBrush<TColor> brush, IShape shape, GraphicsOptions options)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new FillShapeProcessor<TColor>(brush, shape, options));
return source.Apply(new FillShapeProcessor<TColor>(brush, shape, options));
}
/// <summary>
@ -70,7 +70,7 @@ namespace ImageSharp
public static Image<TColor> Fill<TColor>(this Image<TColor> source, IBrush<TColor> brush, IShape shape)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new FillShapeProcessor<TColor>(brush, shape, GraphicsOptions.Default));
return source.Apply(new FillShapeProcessor<TColor>(brush, shape, GraphicsOptions.Default));
}
/// <summary>

4
src/ImageSharp/Drawing/FillRectangle.cs → src/ImageSharp.Drawing/FillRectangle.cs

@ -31,7 +31,7 @@ namespace ImageSharp
public static Image<TColor> Fill<TColor>(this Image<TColor> source, IBrush<TColor> brush, RectangleF shape, GraphicsOptions options)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new FillShapeProcessor<TColor>(brush, new RectangularPolygon(shape), options));
return source.Apply(new FillShapeProcessor<TColor>(brush, new RectangularPolygon(shape), options));
}
/// <summary>
@ -45,7 +45,7 @@ namespace ImageSharp
public static Image<TColor> Fill<TColor>(this Image<TColor> source, IBrush<TColor> brush, RectangleF shape)
where TColor : struct, IPackedPixel, IEquatable<TColor>
{
return source.Process(new FillShapeProcessor<TColor>(brush, new RectangularPolygon(shape), GraphicsOptions.Default));
return source.Apply(new FillShapeProcessor<TColor>(brush, new RectangularPolygon(shape), GraphicsOptions.Default));
}
/// <summary>

0
src/ImageSharp/Drawing/GraphicsOptions.cs → src/ImageSharp.Drawing/GraphicsOptions.cs

25
src/ImageSharp.Drawing/ImageSharp.Drawing.xproj

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>2e33181e-6e28-4662-a801-e2e7dc206029</ProjectGuid>
<RootNamespace>ImageSharp.Drawing</RootNamespace>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<ProduceOutputsOnBuild>True</ProduceOutputsOnBuild>
</PropertyGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

0
src/ImageSharp/Drawing/Paths/BezierLineSegment.cs → src/ImageSharp.Drawing/Paths/BezierLineSegment.cs

0
src/ImageSharp/Drawing/Paths/ILineSegment.cs → src/ImageSharp.Drawing/Paths/ILineSegment.cs

0
src/ImageSharp/Drawing/Paths/IPath.cs → src/ImageSharp.Drawing/Paths/IPath.cs

0
src/ImageSharp/Drawing/Paths/InternalPath.cs → src/ImageSharp.Drawing/Paths/InternalPath.cs

0
src/ImageSharp/Drawing/Paths/LinearLineSegment.cs → src/ImageSharp.Drawing/Paths/LinearLineSegment.cs

0
src/ImageSharp/Drawing/Paths/Path.cs → src/ImageSharp.Drawing/Paths/Path.cs

0
src/ImageSharp/Drawing/Paths/PointInfo.cs → src/ImageSharp.Drawing/Paths/PointInfo.cs

0
src/ImageSharp/Drawing/Pens/IPen.cs → src/ImageSharp.Drawing/Pens/IPen.cs

0
src/ImageSharp/Drawing/Pens/Pen.cs → src/ImageSharp.Drawing/Pens/Pen.cs

0
src/ImageSharp/Drawing/Pens/Pens.cs → src/ImageSharp.Drawing/Pens/Pens.cs

0
src/ImageSharp/Drawing/Pens/Pens{TColor}.cs → src/ImageSharp.Drawing/Pens/Pens{TColor}.cs

3
src/ImageSharp/Drawing/Pens/Pen{TColor}.cs → src/ImageSharp.Drawing/Pens/Pen{TColor}.cs

@ -10,8 +10,7 @@ namespace ImageSharp.Drawing.Pens
using ImageSharp.Drawing.Brushes;
using ImageSharp.Drawing.Paths;
using ImageSharp.Drawing.Pens.Processors;
using ImageSharp.Drawing.Processors;
using Processors;
/// <summary>
/// Provides a pen that can apply a pattern to a line with a set brush and thickness

2
src/ImageSharp/Drawing/Pens/Processors/ColoredPointInfo.cs → src/ImageSharp.Drawing/Pens/Processors/ColoredPointInfo.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Drawing.Pens.Processors
namespace ImageSharp.Drawing.Processors
{
using System;

2
src/ImageSharp/Drawing/Pens/Processors/IPenApplicator.cs → src/ImageSharp.Drawing/Pens/Processors/IPenApplicator.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Drawing.Pens.Processors
namespace ImageSharp.Drawing.Processors
{
using System;
using Paths;

5
src/ImageSharp/Drawing/Processors/DrawImageProcessor.cs → src/ImageSharp.Drawing/Processors/DrawImageProcessor.cs

@ -3,12 +3,14 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Processors
namespace ImageSharp.Drawing.Processors
{
using System;
using System.Numerics;
using System.Threading.Tasks;
using ImageSharp.Processing;
/// <summary>
/// Combines two images together by blending the pixels.
/// </summary>
@ -57,6 +59,7 @@ namespace ImageSharp.Processors
{
if (this.Image.Bounds.Size != this.Size)
{
// should Resize be moved to core?
this.Image = this.Image.Resize(this.Size.Width, this.Size.Height);
}

5
src/ImageSharp/Drawing/Processors/DrawPathProcessor.cs → src/ImageSharp.Drawing/Processors/DrawPathProcessor.cs

@ -9,10 +9,9 @@ namespace ImageSharp.Drawing.Processors
using System.Linq;
using System.Numerics;
using System.Threading.Tasks;
using ImageSharp.Processors;
using ImageSharp.Processing;
using Paths;
using Pens;
using Pens.Processors;
using Shapes;
using Rectangle = ImageSharp.Rectangle;
@ -20,7 +19,7 @@ namespace ImageSharp.Drawing.Processors
/// Draws a path using the processor pipeline
/// </summary>
/// <typeparam name="TColor">The type of the color.</typeparam>
/// <seealso cref="ImageSharp.Processors.ImageProcessor{TColor}" />
/// <seealso cref="ImageSharp.Processing.ImageProcessor{TColor}" />
public class DrawPathProcessor<TColor> : ImageProcessor<TColor>
where TColor : struct, IPackedPixel, IEquatable<TColor>
{

2
src/ImageSharp/Drawing/Processors/FillProcessor.cs → src/ImageSharp.Drawing/Processors/FillProcessor.cs

@ -10,7 +10,7 @@ namespace ImageSharp.Drawing.Processors
using System.Threading.Tasks;
using Drawing;
using ImageSharp.Processors;
using ImageSharp.Processing;
/// <summary>
/// Using the bursh as a source of pixels colors blends the brush color with source.

4
src/ImageSharp/Drawing/Processors/FillShapeProcessor.cs → src/ImageSharp.Drawing/Processors/FillShapeProcessor.cs

@ -9,7 +9,7 @@ namespace ImageSharp.Drawing.Processors
using System.Numerics;
using System.Threading.Tasks;
using Drawing;
using ImageSharp.Processors;
using ImageSharp.Processing;
using Shapes;
using Rectangle = ImageSharp.Rectangle;
@ -17,7 +17,7 @@ namespace ImageSharp.Drawing.Processors
/// Usinf a brsuh and a shape fills shape with contents of brush the
/// </summary>
/// <typeparam name="TColor">The type of the color.</typeparam>
/// <seealso cref="ImageSharp.Processors.ImageProcessor{TColor}" />
/// <seealso cref="ImageSharp.Processing.ImageProcessor{TColor}" />
public class FillShapeProcessor<TColor> : ImageProcessor<TColor>
where TColor : struct, IPackedPixel, IEquatable<TColor>
{

6
src/ImageSharp.Drawing/Properties/AssemblyInfo.cs

@ -0,0 +1,6 @@
// <copyright file="AssemblyInfo.cs" company="James Jackson-South">
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
// Common values read from `AssemblyInfo.Common.cs`

0
src/ImageSharp/Drawing/Shapes/BezierPolygon.cs → src/ImageSharp.Drawing/Shapes/BezierPolygon.cs

0
src/ImageSharp/Drawing/Shapes/ComplexPolygon.cs → src/ImageSharp.Drawing/Shapes/ComplexPolygon.cs

0
src/ImageSharp/Drawing/Shapes/IShape.cs → src/ImageSharp.Drawing/Shapes/IShape.cs

0
src/ImageSharp/Drawing/Shapes/LinearPolygon.cs → src/ImageSharp.Drawing/Shapes/LinearPolygon.cs

0
src/ImageSharp/Drawing/Shapes/Polygon.cs → src/ImageSharp.Drawing/Shapes/Polygon.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/Clipper.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/Clipper.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/ClipperException.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/ClipperException.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/Direction.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/Direction.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/EdgeSide.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/EdgeSide.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/IntersectNode.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/IntersectNode.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/IntersectNodeSort.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/IntersectNodeSort.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/Join.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/Join.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/LocalMinima.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/LocalMinima.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/Maxima.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/Maxima.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/OutPt.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/OutPt.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/OutRec.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/OutRec.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/PolyNode.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/PolyNode.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/PolyTree.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/PolyTree.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/PolyType.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/PolyType.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/README.md → src/ImageSharp.Drawing/Shapes/PolygonClipper/README.md

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/Scanbeam.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/Scanbeam.cs

0
src/ImageSharp/Drawing/Shapes/PolygonClipper/TEdge.cs → src/ImageSharp.Drawing/Shapes/PolygonClipper/TEdge.cs

0
src/ImageSharp/Drawing/Shapes/RectangularPolygon.cs → src/ImageSharp.Drawing/Shapes/RectangularPolygon.cs

83
src/ImageSharp.Drawing/project.json

@ -0,0 +1,83 @@
{
"version": "1.0.0-alpha1-*",
"title": "ImageSharp.Drawing",
"description": "A cross-platform library for the processing of image files; written in C#",
"authors": [
"James Jackson-South and contributors"
],
"packOptions": {
"owners": [
"James Jackson-South and contributors"
],
"projectUrl": "https://github.com/JimBobSquarePants/ImageSharp",
"licenseUrl": "http://www.apache.org/licenses/LICENSE-2.0",
"iconUrl": "https://raw.githubusercontent.com/JimBobSquarePants/ImageSharp/master/build/icons/imagesharp-logo-128.png",
"requireLicenseAcceptance": false,
"repository": {
"type": "git",
"url": "https://github.com/JimBobSquarePants/ImageSharp"
},
"tags": [
"Image Resize Crop Gif Jpg Jpeg Bitmap Png Core"
]
},
"buildOptions": {
"allowUnsafe": true,
"xmlDoc": true,
"additionalArguments": [ "/additionalfile:../Shared/stylecop.json", "/ruleset:../../ImageSharp.ruleset" ],
"compile": [
"../Shared/*.cs"
]
},
"configurations": {
"Release": {
"buildOptions": {
"warningsAsErrors": true,
"optimize": true
}
}
},
"dependencies": {
"ImageSharp": {
"target": "project",
"version": "1.0.0-*"
},
"ImageSharp.Processing": {
"target": "project",
"version": "1.0.0-*"
},
"StyleCop.Analyzers": {
"version": "1.0.0",
"type": "build"
},
"System.Buffers": "4.0.0",
"System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
"netstandard1.1": {
"dependencies": {
"System.Collections": "4.0.11",
"System.Diagnostics.Debug": "4.0.11",
"System.Diagnostics.Tools": "4.0.1",
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
"System.Runtime.InteropServices": "4.1.0",
"System.Runtime.Numerics": "4.0.1",
"System.Text.Encoding.Extensions": "4.0.11",
"System.Threading": "4.0.11",
"System.Threading.Tasks": "4.0.11",
"System.Threading.Tasks.Parallel": "4.0.1"
}
},
"net45": {
"dependencies": {
"System.Runtime": "4.0.0"
}
}
}
}

0
src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs → src/ImageSharp.Formats.Bmp/BmpBitsPerPixel.cs

0
src/ImageSharp/Formats/Bmp/BmpCompression.cs → src/ImageSharp.Formats.Bmp/BmpCompression.cs

0
src/ImageSharp/Formats/Bmp/BmpDecoder.cs → src/ImageSharp.Formats.Bmp/BmpDecoder.cs

0
src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs → src/ImageSharp.Formats.Bmp/BmpDecoderCore.cs

0
src/ImageSharp/Formats/Bmp/BmpEncoder.cs → src/ImageSharp.Formats.Bmp/BmpEncoder.cs

2
src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs → src/ImageSharp.Formats.Bmp/BmpEncoderCore.cs

@ -46,7 +46,7 @@ namespace ImageSharp.Formats
this.padding = bytesPerLine - (image.Width * (int)bitsPerPixel);
// Do not use IDisposable pattern here as we want to preserve the stream.
EndianBinaryWriter writer = new EndianBinaryWriter(EndianBitConverter.Little, stream);
EndianBinaryWriter writer = new EndianBinaryWriter(Endianness.LittleEndian, stream);
BmpInfoHeader infoHeader = new BmpInfoHeader
{

0
src/ImageSharp/Formats/Bmp/BmpFileHeader.cs → src/ImageSharp.Formats.Bmp/BmpFileHeader.cs

0
src/ImageSharp/Formats/Bmp/BmpFormat.cs → src/ImageSharp.Formats.Bmp/BmpFormat.cs

0
src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs → src/ImageSharp.Formats.Bmp/BmpInfoHeader.cs

32
src/ImageSharp.Formats.Bmp/ImageExtensions.cs

@ -0,0 +1,32 @@
// <copyright file="ImageExtensions.cs" company="James Jackson-South">
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp
{
using System;
using System.IO;
using Formats;
/// <summary>
/// Extension methods for the <see cref="Image{TColor}"/> type.
/// </summary>
public static partial class ImageExtensions
{
/// <summary>
/// Saves the image to the given stream with the bmp format.
/// </summary>
/// <typeparam name="TColor">The pixel format.</typeparam>
/// <param name="source">The image this method extends.</param>
/// <param name="stream">The stream to save the image to.</param>
/// <exception cref="System.ArgumentNullException">Thrown if the stream is null.</exception>
/// <returns>
/// The <see cref="Image{TColoR}"/>.
/// </returns>
public static Image<TColor> SaveAsBmp<TColor>(this Image<TColor> source, Stream stream)
where TColor : struct, IPackedPixel, IEquatable<TColor>
=> source.Save(stream, new BmpEncoder());
}
}

25
src/ImageSharp.Formats.Bmp/ImageSharp.Formats.Bmp.xproj

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>c77661b9-f793-422e-8e27-ac60ecc5f215</ProjectGuid>
<RootNamespace>ImageSharp.Formats.Bmp</RootNamespace>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<ProduceOutputsOnBuild>True</ProduceOutputsOnBuild>
</PropertyGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

6
src/ImageSharp.Formats.Bmp/Properties/AssemblyInfo.cs

@ -0,0 +1,6 @@
// <copyright file="AssemblyInfo.cs" company="James Jackson-South">
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
// Common values read from `AssemblyInfo.Common.cs`

0
src/ImageSharp/Formats/Bmp/README.md → src/ImageSharp.Formats.Bmp/README.md

81
src/ImageSharp.Formats.Bmp/project.json

@ -0,0 +1,81 @@
{
"version": "1.0.0-alpha1-*",
"title": "ImageSharp.Formats.Bmp",
"description": "A cross-platform library for the processing of image files; written in C#",
"authors": [
"James Jackson-South and contributors"
],
"packOptions": {
"owners": [
"James Jackson-South and contributors"
],
"projectUrl": "https://github.com/JimBobSquarePants/ImageSharp",
"licenseUrl": "http://www.apache.org/licenses/LICENSE-2.0",
"iconUrl": "https://raw.githubusercontent.com/JimBobSquarePants/ImageSharp/master/build/icons/imagesharp-logo-128.png",
"requireLicenseAcceptance": false,
"repository": {
"type": "git",
"url": "https://github.com/JimBobSquarePants/ImageSharp"
},
"tags": [
"Image Resize Crop Gif Jpg Jpeg Bitmap Png Core"
]
},
"buildOptions": {
"allowUnsafe": true,
"xmlDoc": true,
"additionalArguments": [ "/additionalfile:../Shared/stylecop.json", "/ruleset:../../ImageSharp.ruleset" ],
"compile": [
"../Shared/*.cs"
]
},
"configurations": {
"Release": {
"buildOptions": {
"warningsAsErrors": true,
"optimize": true
}
}
},
"dependencies": {
"ImageSharp": {
"target": "project",
"version": "1.0.0-*"
},
"StyleCop.Analyzers": {
"version": "1.1.0-beta001",
"type": "build"
},
"System.Buffers": "4.0.0",
"System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
"netstandard1.1": {
"dependencies": {
"System.Collections": "4.0.11",
"System.Diagnostics.Debug": "4.0.11",
"System.Diagnostics.Tools": "4.0.1",
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
"System.Runtime.InteropServices": "4.1.0",
"System.Runtime.Numerics": "4.0.1",
"System.Text.Encoding.Extensions": "4.0.11",
"System.Threading": "4.0.11",
"System.Threading.Tasks": "4.0.11",
"System.Threading.Tasks.Parallel": "4.0.1"
}
},
"net45": {
"dependencies": {
"System.Runtime": "4.0.0",
"System.IO": "4.0.0",
"System.Threading.Tasks.Parallel": "4.0.0"
}
}
}
}

0
src/ImageSharp/Formats/Gif/DisposalMethod.cs → src/ImageSharp.Formats.Gif/DisposalMethod.cs

0
src/ImageSharp/Formats/Gif/GifConstants.cs → src/ImageSharp.Formats.Gif/GifConstants.cs

0
src/ImageSharp/Formats/Gif/GifDecoder.cs → src/ImageSharp.Formats.Gif/GifDecoder.cs

0
src/ImageSharp/Formats/Gif/GifDecoderCore.cs → src/ImageSharp.Formats.Gif/GifDecoderCore.cs

0
src/ImageSharp/Formats/Gif/GifEncoder.cs → src/ImageSharp.Formats.Gif/GifEncoder.cs

2
src/ImageSharp/Formats/Gif/GifEncoderCore.cs → src/ImageSharp.Formats.Gif/GifEncoderCore.cs

@ -62,7 +62,7 @@ namespace ImageSharp.Formats
}
// Do not use IDisposable pattern here as we want to preserve the stream.
EndianBinaryWriter writer = new EndianBinaryWriter(EndianBitConverter.Little, stream);
EndianBinaryWriter writer = new EndianBinaryWriter(Endianness.LittleEndian, stream);
// Ensure that quality can be set but has a fallback.
int quality = this.Quality > 0 ? this.Quality : image.Quality;

0
src/ImageSharp/Formats/Gif/GifFormat.cs → src/ImageSharp.Formats.Gif/GifFormat.cs

33
src/ImageSharp.Formats.Gif/ImageExtensions.cs

@ -0,0 +1,33 @@
// <copyright file="ImageExtensions.cs" company="James Jackson-South">
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp
{
using System;
using System.IO;
using Formats;
/// <summary>
/// Extension methods for the <see cref="Image{TColor}"/> type.
/// </summary>
public static partial class ImageExtensions
{
/// <summary>
/// Saves the image to the given stream with the gif format.
/// </summary>
/// <typeparam name="TColor">The pixel format.</typeparam>
/// <param name="source">The image this method extends.</param>
/// <param name="stream">The stream to save the image to.</param>
/// <param name="quality">The quality to save the image to representing the number of colors. Between 1 and 256.</param>
/// <exception cref="System.ArgumentNullException">Thrown if the stream is null.</exception>
/// <returns>
/// The <see cref="Image{TColor}"/>.
/// </returns>
public static Image<TColor> SaveAsGif<TColor>(this Image<TColor> source, Stream stream, int quality = 256)
where TColor : struct, IPackedPixel, IEquatable<TColor>
=> source.Save(stream, new GifEncoder { Quality = quality });
}
}

25
src/ImageSharp.Formats.Gif/ImageSharp.Formats.Gif.xproj

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>27ad4b5f-ecc4-4c63-9ecb-04ec772fdb6f</ProjectGuid>
<RootNamespace>ImageSharp.Formats.Gif</RootNamespace>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<ProduceOutputsOnBuild>True</ProduceOutputsOnBuild>
</PropertyGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

0
src/ImageSharp/Formats/Gif/LzwDecoder.cs → src/ImageSharp.Formats.Gif/LzwDecoder.cs

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save