Rasterific 0.7.4.1 → 0.7.4.2
raw patch · 4 files changed
+22/−13 lines, 4 filesdep ~JuicyPixelsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: JuicyPixels
API changes (from Hackage documentation)
+ Graphics.Rasterific.Linear: infixl 6 ^-^
- Graphics.Rasterific: cacheDrawing :: forall px. (RenderablePixel px) => Int -> Int -> Dpi -> Drawing px () -> Drawing px ()
+ Graphics.Rasterific: cacheDrawing :: forall px. RenderablePixel px => Int -> Int -> Dpi -> Drawing px () -> Drawing px ()
- Graphics.Rasterific: drawOrdersOfDrawing :: forall px. (RenderablePixel px) => Int -> Int -> Dpi -> px -> Drawing px () -> [DrawOrder px]
+ Graphics.Rasterific: drawOrdersOfDrawing :: forall px. RenderablePixel px => Int -> Int -> Dpi -> px -> Drawing px () -> [DrawOrder px]
- Graphics.Rasterific: dumpDrawing :: (Show px, Show (PixelBaseComponent px), PixelBaseComponent (PixelBaseComponent px) ~ (PixelBaseComponent px)) => Drawing px () -> String
+ Graphics.Rasterific: dumpDrawing :: (Show px, Show (PixelBaseComponent px), PixelBaseComponent (PixelBaseComponent px) ~ PixelBaseComponent px) => Drawing px () -> String
- Graphics.Rasterific: listToPrims :: (Geometry a, (Foldable f)) => f a -> [Primitive]
+ Graphics.Rasterific: listToPrims :: (Geometry a, Foldable f) => f a -> [Primitive]
- Graphics.Rasterific: renderDrawing :: forall px. (RenderablePixel px) => Int -> Int -> px -> Drawing px () -> Image px
+ Graphics.Rasterific: renderDrawing :: forall px. RenderablePixel px => Int -> Int -> px -> Drawing px () -> Image px
- Graphics.Rasterific: renderDrawingAtDpi :: forall px. (RenderablePixel px) => Int -> Int -> Dpi -> px -> Drawing px () -> Image px
+ Graphics.Rasterific: renderDrawingAtDpi :: forall px. RenderablePixel px => Int -> Int -> Dpi -> px -> Drawing px () -> Image px
- Graphics.Rasterific: stroke :: (Geometry geom) => Float -> Join -> (Cap, Cap) -> geom -> Drawing px ()
+ Graphics.Rasterific: stroke :: Geometry geom => Float -> Join -> (Cap, Cap) -> geom -> Drawing px ()
- Graphics.Rasterific.Immediate: DrawOrder :: ![[Primitive]] -> !(Texture px) -> !FillMethod -> !(Maybe (Texture (PixelBaseComponent px))) -> !(forall s. DrawContext (ST s) px ()) -> DrawOrder px
+ Graphics.Rasterific.Immediate: DrawOrder :: ![[Primitive]] -> !Texture px -> !FillMethod -> !Maybe (Texture (PixelBaseComponent px)) -> !forall s. DrawContext (ST s) px () -> DrawOrder px
- Graphics.Rasterific.Immediate: [_orderDirect] :: DrawOrder px -> !(forall s. DrawContext (ST s) px ())
+ Graphics.Rasterific.Immediate: [_orderDirect] :: DrawOrder px -> !forall s. DrawContext (ST s) px ()
- Graphics.Rasterific.Immediate: [_orderMask] :: DrawOrder px -> !(Maybe (Texture (PixelBaseComponent px)))
+ Graphics.Rasterific.Immediate: [_orderMask] :: DrawOrder px -> !Maybe (Texture (PixelBaseComponent px))
- Graphics.Rasterific.Immediate: [_orderTexture] :: DrawOrder px -> !(Texture px)
+ Graphics.Rasterific.Immediate: [_orderTexture] :: DrawOrder px -> !Texture px
- Graphics.Rasterific.Immediate: meshToImage :: forall px. (RenderablePixel px) => Maybe Transformation -> Int -> Int -> PatchInterpolation -> MeshPatch px -> Image px
+ Graphics.Rasterific.Immediate: meshToImage :: forall px. RenderablePixel px => Maybe Transformation -> Int -> Int -> PatchInterpolation -> MeshPatch px -> Image px
- Graphics.Rasterific.MeshPatch: MeshPatch :: !Int -> !Int -> !(Vector Point) -> !(Vector InterBezier) -> !(Vector InterBezier) -> !(Vector px) -> !(Maybe (Vector Derivatives)) -> MeshPatch px
+ Graphics.Rasterific.MeshPatch: MeshPatch :: !Int -> !Int -> !Vector Point -> !Vector InterBezier -> !Vector InterBezier -> !Vector px -> !Maybe (Vector Derivatives) -> MeshPatch px
- Graphics.Rasterific.MeshPatch: [_meshColors] :: MeshPatch px -> !(Vector px)
+ Graphics.Rasterific.MeshPatch: [_meshColors] :: MeshPatch px -> !Vector px
- Graphics.Rasterific.MeshPatch: [_meshHorizontalSecondary] :: MeshPatch px -> !(Vector InterBezier)
+ Graphics.Rasterific.MeshPatch: [_meshHorizontalSecondary] :: MeshPatch px -> !Vector InterBezier
- Graphics.Rasterific.MeshPatch: [_meshPrimaryVertices] :: MeshPatch px -> !(Vector Point)
+ Graphics.Rasterific.MeshPatch: [_meshPrimaryVertices] :: MeshPatch px -> !Vector Point
- Graphics.Rasterific.MeshPatch: [_meshTensorDerivatives] :: MeshPatch px -> !(Maybe (Vector Derivatives))
+ Graphics.Rasterific.MeshPatch: [_meshTensorDerivatives] :: MeshPatch px -> !Maybe (Vector Derivatives)
- Graphics.Rasterific.MeshPatch: [_meshVerticalSecondary] :: MeshPatch px -> !(Vector InterBezier)
+ Graphics.Rasterific.MeshPatch: [_meshVerticalSecondary] :: MeshPatch px -> !Vector InterBezier
- Graphics.Rasterific.MeshPatch: calculateMeshColorDerivative :: forall px. (InterpolablePixel px) => MeshPatch px -> MeshPatch (Derivative px)
+ Graphics.Rasterific.MeshPatch: calculateMeshColorDerivative :: forall px. InterpolablePixel px => MeshPatch px -> MeshPatch (Derivative px)
- Graphics.Rasterific.MeshPatch: coonPatchAtWithDerivative :: (InterpolablePixel px) => MeshPatch (Derivative px) -> Int -> Int -> CoonPatch (CubicCoefficient px)
+ Graphics.Rasterific.MeshPatch: coonPatchAtWithDerivative :: InterpolablePixel px => MeshPatch (Derivative px) -> Int -> Int -> CoonPatch (CubicCoefficient px)
- Graphics.Rasterific.MeshPatch: cubicCoonPatchesOf :: (InterpolablePixel px) => MeshPatch (Derivative px) -> [CoonPatch (CubicCoefficient px)]
+ Graphics.Rasterific.MeshPatch: cubicCoonPatchesOf :: InterpolablePixel px => MeshPatch (Derivative px) -> [CoonPatch (CubicCoefficient px)]
- Graphics.Rasterific.MeshPatch: cubicTensorPatchesOf :: (InterpolablePixel px) => MeshPatch (Derivative px) -> [TensorPatch (CubicCoefficient px)]
+ Graphics.Rasterific.MeshPatch: cubicTensorPatchesOf :: InterpolablePixel px => MeshPatch (Derivative px) -> [TensorPatch (CubicCoefficient px)]
- Graphics.Rasterific.MeshPatch: tensorPatchAtWithDerivative :: (InterpolablePixel px) => MeshPatch (Derivative px) -> Int -> Int -> TensorPatch (CubicCoefficient px)
+ Graphics.Rasterific.MeshPatch: tensorPatchAtWithDerivative :: InterpolablePixel px => MeshPatch (Derivative px) -> Int -> Int -> TensorPatch (CubicCoefficient px)
- Graphics.Rasterific.PathWalker: currentPosition :: (Monad m) => PathWalkerT m (Maybe Point)
+ Graphics.Rasterific.PathWalker: currentPosition :: Monad m => PathWalkerT m (Maybe Point)
- Graphics.Rasterific.PathWalker: currentTangeant :: (Monad m) => PathWalkerT m (Maybe Vector)
+ Graphics.Rasterific.PathWalker: currentTangeant :: Monad m => PathWalkerT m (Maybe Vector)
- Graphics.Rasterific.PathWalker: runPathWalking :: (Monad m) => Path -> PathWalkerT m a -> m a
+ Graphics.Rasterific.PathWalker: runPathWalking :: Monad m => Path -> PathWalkerT m a -> m a
Files
- Rasterific.cabal +2/−2
- changelog +8/−0
- src/Graphics/Rasterific/MicroPdf.hs +10/−9
- src/Graphics/Rasterific/PathWalker.hs +2/−2
Rasterific.cabal view
@@ -1,7 +1,7 @@ -- Initial Rasterific.cabal generated by cabal init. For further -- documentation, see http://haskell.org/cabal/users-guide/ name: Rasterific -version: 0.7.4.1 +version: 0.7.4.2 synopsis: A pure haskell drawing engine. -- A longer description of the package. description: @@ -38,7 +38,7 @@ Source-Repository this Type: git Location: git://github.com/Twinside/Rasterific.git - Tag: v0.7.4.1 + Tag: v0.7.4.2 flag embed_linear description: Embed a reduced version of Linear avoiding a (huge) dep
changelog view
@@ -1,6 +1,14 @@ Change log ========== +v0.7.4.2 December 2018 +---------------------- + + * Refactoring: minor enhancement in the PathWalker + (newtype instead of single constructor data) (thanks to yairchu) + * Fix: PDF rendering didn't produce valid pdf in some cases, + the XRef table wasn't sorted by ID (thanks to robx) + v0.7.4.1 October 2018 ---------------------
src/Graphics/Rasterific/MicroPdf.hs view
@@ -17,6 +17,7 @@ import Control.Monad.Reader( Reader, local, asks, runReader ) import Numeric( showFFloat ) +import Data.List( sortOn ) import Data.Monoid( (<>) ) import qualified Data.Foldable as F import Data.Word( Word32 ) @@ -945,7 +946,7 @@ buildXRefTable lst = tp "xref\n0 " <> intDec (glength lst) <> tp "\n" <> foldMap build lst where build 0 = "0000000000 65535 f \n" - build ix = toPdf . B.pack $ printf "%010d 00000 n \n" ix + build off = toPdf . B.pack $ printf "%010d 00000 n \n" off buildTrailer :: Foldable f => f a -> PdfId -> Builder buildTrailer objs startId = tp "trailer\n" <> toPdf @@ -1000,12 +1001,13 @@ <> reverse (_generatedPdfObjects endContext) (indexes, objs) = unzip $ prepareObjects objects - lastIndex = last indexes - xrefIndex = lastIndex + B.length (last objs) + (_, lastOffset) = last indexes + xrefOffset = lastOffset + B.length (last objs) - xrefPosition = "startxref\n" <> intDec xrefIndex <> tp "\n" + xrefPosition = "startxref\n" <> intDec xrefOffset <> tp "\n" - xref = buildXRefTable indexes + offsets = map snd $ sortOn fst indexes + xref = buildXRefTable offsets renderDrawingToPdf :: (forall px . PdfColorable px => Drawing px () -> [DrawOrder px]) -> Int -> Int -> Dpi -> Drawing PixelRGBA8 () @@ -1165,7 +1167,6 @@ , _pdfConfToOrder = toOrders } -prepareObjects :: [PdfObject] -> [(Int, B.ByteString)] -prepareObjects = scanl go (0, pdfSignature) where - go (ix, prev) obj = (ix + B.length prev, buildToStrict $ toPdf obj) - +prepareObjects :: [PdfObject] -> [((PdfId, Int), B.ByteString)] +prepareObjects = scanl go ((0, 0), pdfSignature) where + go ((_, off), prev) obj = ((_pdfId obj, off + B.length prev), buildToStrict $ toPdf obj)
src/Graphics/Rasterific/PathWalker.hs view
@@ -41,8 +41,8 @@ -- | State of the path walker, just a bunch of primitives -- with continuity guarantee. The continuity is guaranteed -- by the Path used to derive this primitives. -data WalkerState = WalkerState - { _walkerPrims :: ![Primitive] +newtype WalkerState = WalkerState + { _walkerPrims :: [Primitive] } -- | Create a path walker from a given path