forked from mia/Aegisub
Starting out on a \p drawing editor
Originally committed to SVN as r525.
This commit is contained in:
parent
3c1936cf49
commit
da0da02ac0
3 changed files with 235 additions and 0 deletions
71
p-designer/ass_drawing.h
Normal file
71
p-designer/ass_drawing.h
Normal file
|
@ -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 <vector>
|
||||
#include <pair>
|
||||
#include <wx/string.h>
|
||||
|
||||
enum AssDrawingSegmentType {
|
||||
SEGMENT_MOVE, // m <x> <y>
|
||||
SEGMENT_MOVE_NOCLOSE, // n <x> <y>
|
||||
SEGMENT_LINE, // l <x> <y>
|
||||
SEGMENT_BEZIER, // b <x1> <y1> <x2> <y2> <x3> <y3>
|
||||
SEGMENT_SPLINE, // s <x1> <y2> <x2> <y2> <x3> <y3> [... <xN> <yN>]
|
||||
SEGMENT_SPLINE_EXTEND, // p <x> <y>
|
||||
SEGMENT_SPLINE_CLOSE, // c
|
||||
// thought: maybe join the three last into one?
|
||||
};
|
||||
|
||||
struct AssDrawingPoint {
|
||||
int x, y;
|
||||
};
|
||||
|
||||
struct AssDrawingSegment {
|
||||
AssDrawingSegmentType type;
|
||||
std::vector<AssDrawingPoint> points;
|
||||
};
|
||||
|
||||
struct AssDrawing {
|
||||
int scale;
|
||||
std::vector<AssDrawingSegment> 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
|
135
p-designer/p-designer.vcproj
Normal file
135
p-designer/p-designer.vcproj
Normal file
|
@ -0,0 +1,135 @@
|
|||
<?xml version="1.0" encoding="shift_jis"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="p-designer"
|
||||
ProjectGUID="{4FB7425E-8EDF-4107-87BE-3BB05A3B78B5}"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="Debug"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="5"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/p-designer.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/p-designer.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
RuntimeLibrary="4"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/p-designer.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||
<File
|
||||
RelativePath=".\ass_drawing.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\readme.txt">
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
29
p-designer/readme.txt
Normal file
29
p-designer/readme.txt
Normal file
|
@ -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?
|
Loading…
Reference in a new issue