diff --git a/p-designer/ass_drawing.h b/p-designer/ass_drawing.h new file mode 100644 index 000000000..1e8237d7a --- /dev/null +++ b/p-designer/ass_drawing.h @@ -0,0 +1,71 @@ +// Copyright (c) 2006, Niels Martin Hansen +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Aegisub Group nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#ifndef _ASS_DRAWING_H +#define _ASS_DRAWING_H + +#include +#include +#include + +enum AssDrawingSegmentType { + SEGMENT_MOVE, // m + SEGMENT_MOVE_NOCLOSE, // n + SEGMENT_LINE, // l + SEGMENT_BEZIER, // b + SEGMENT_SPLINE, // s [... ] + SEGMENT_SPLINE_EXTEND, // p + SEGMENT_SPLINE_CLOSE, // c + // thought: maybe join the three last into one? +}; + +struct AssDrawingPoint { + int x, y; +}; + +struct AssDrawingSegment { + AssDrawingSegmentType type; + std::vector points; +}; + +struct AssDrawing { + int scale; + std::vector data; + + wxString ToString(); // stupid conversion to string, doesn't try to shorten things out + int FromString(wxString &src); // returns 0 on success, index+1 of offending character on fail + + void Collapse(); // try to join as many segments together as possible, without affecting the actual shape (eg. join "l 1 2 l 3 4" into "l 1 2 3 4") + void Expand(); // split into as many segments as possible, without creating any meaningless ones, such as null-moves (ie. expand "l 1 2 3 4" into "l 1 2 l 3 4") + + void Rescale(int new_scale); // change the scale value, stretching the drawing to match the new one + void Stretch(float factor); // up/down scale the drawing by a factor +}; + +#endif diff --git a/p-designer/p-designer.vcproj b/p-designer/p-designer.vcproj new file mode 100644 index 000000000..ce795a837 --- /dev/null +++ b/p-designer/p-designer.vcproj @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/p-designer/readme.txt b/p-designer/readme.txt new file mode 100644 index 000000000..f61fc724a --- /dev/null +++ b/p-designer/readme.txt @@ -0,0 +1,29 @@ +This is a drawing designer, or is intended to become one. +The name p-designer obviously comes from the tag, \p. + +Intended roadmap: + +1. Create datastructures to store drawing in +2. Write something to parse \p strings into those datastructures +3. Render some kind of basic outline of the figure in a way + (is easy in Win32 and probably also wx) +4. Generate \p strings from the datastructures +5. Add draggable handles to the preview display +6. Add something to add further segments to a drawing +7. ??? + +Other stuff / wishlist: +* It should be possible to somehow split a segment into two, eg. click + somewhere on a bezier and split it into two there. Same for lines etc. +* How about moves? ('m' command) + - Maybe render as a dotted or dashed line between points +* Zoom ability +* Feature to convert between scales (number after \p) +* Stretch? +* Integrate into Aegisub video preview +* Maybe import outlines of one or more characters from a font to modify? + (At least is possible with Win32 and Freetype2.) +* Convert segments between different types + +Things to check: +* What happens when a drawing doesn't start with an 'm' command?