mirror of https://github.com/odrling/Aegisub
Very early reform to visual typesetting, in order to implement the more advanced tools.
Originally committed to SVN as r1322.
This commit is contained in:
parent
3a7fa50f9d
commit
af9af29419
|
@ -210,6 +210,7 @@ aegisub_SOURCES = \
|
||||||
video_context.cpp \
|
video_context.cpp \
|
||||||
video_display.cpp \
|
video_display.cpp \
|
||||||
video_display_visual.cpp \
|
video_display_visual.cpp \
|
||||||
|
video_dragable_feature.cpp \
|
||||||
video_frame.cpp \
|
video_frame.cpp \
|
||||||
video_provider.cpp \
|
video_provider.cpp \
|
||||||
video_provider_dummy.cpp \
|
video_provider_dummy.cpp \
|
||||||
|
|
|
@ -169,18 +169,18 @@ void VideoDisplayVisual::DrawOverlay() {
|
||||||
|
|
||||||
// Get scale
|
// Get scale
|
||||||
if (isCur && mode == 4) {
|
if (isCur && mode == 4) {
|
||||||
scalX = curScaleX;
|
scalX = curFloat1;
|
||||||
scalY = curScaleY;
|
scalY = curFloat2;
|
||||||
}
|
}
|
||||||
else GetLineScale(diag,scalX,scalY);
|
else GetLineScale(diag,scalX,scalY);
|
||||||
|
|
||||||
// Get angle
|
// Get angle
|
||||||
GetLineRotation(diag,rx,ry,rz);
|
GetLineRotation(diag,rx,ry,rz);
|
||||||
if (isCur) {
|
if (isCur) {
|
||||||
if (mode == 2) rz = curAngle;
|
if (mode == 2) rz = curFloat1;
|
||||||
else if (mode == 3) {
|
else if (mode == 3) {
|
||||||
rx = curAngle;
|
rx = curFloat1;
|
||||||
ry = curAngle2;
|
ry = curFloat2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -859,23 +859,23 @@ void VideoDisplayVisual::OnMouseEvent (wxMouseEvent &event) {
|
||||||
|
|
||||||
// Rotate Z
|
// Rotate Z
|
||||||
if (mode == 2) {
|
if (mode == 2) {
|
||||||
startAngle = atan2(double(lineOrgY-y*sh/h),double(x*sw/w-lineOrgX)) * 180.0 / 3.1415926535897932;
|
startFloat1 = atan2(double(lineOrgY-y*sh/h),double(x*sw/w-lineOrgX)) * 180.0 / 3.1415926535897932;
|
||||||
GetLineRotation(curSelection,rx,ry,rz);
|
GetLineRotation(curSelection,rx,ry,rz);
|
||||||
origAngle = rz;
|
origFloat1 = rz;
|
||||||
curAngle = rz;
|
curFloat1 = rz;
|
||||||
curSelection->StripTag(_T("\\frz"));
|
curSelection->StripTag(_T("\\frz"));
|
||||||
curSelection->StripTag(_T("\\fr"));
|
curSelection->StripTag(_T("\\fr"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rotate XY
|
// Rotate XY
|
||||||
if (mode == 3) {
|
if (mode == 3) {
|
||||||
startAngle = (lineOrgY-y*sh/h)*2.0;
|
startFloat1 = (lineOrgY-y*sh/h)*2.0;
|
||||||
startAngle2 = (x*sw/w-lineOrgX)*2.0;
|
startFloat2 = (x*sw/w-lineOrgX)*2.0;
|
||||||
GetLineRotation(curSelection,rx,ry,rz);
|
GetLineRotation(curSelection,rx,ry,rz);
|
||||||
origAngle = rx;
|
origFloat1 = rx;
|
||||||
origAngle2 = ry;
|
origFloat2 = ry;
|
||||||
curAngle = rx;
|
curFloat1 = rx;
|
||||||
curAngle2 = ry;
|
curFloat2 = ry;
|
||||||
curSelection->StripTag(_T("\\frx"));
|
curSelection->StripTag(_T("\\frx"));
|
||||||
curSelection->StripTag(_T("\\fry"));
|
curSelection->StripTag(_T("\\fry"));
|
||||||
}
|
}
|
||||||
|
@ -887,10 +887,10 @@ void VideoDisplayVisual::OnMouseEvent (wxMouseEvent &event) {
|
||||||
startX = x;
|
startX = x;
|
||||||
startY = y;
|
startY = y;
|
||||||
GetLineScale(curSelection,scalX,scalY);
|
GetLineScale(curSelection,scalX,scalY);
|
||||||
origScaleX = scalX;
|
origFloat1 = scalX;
|
||||||
origScaleY = scalY;
|
origFloat2 = scalY;
|
||||||
curScaleX = scalX;
|
curFloat1 = scalX;
|
||||||
curScaleY = scalY;
|
curFloat2 = scalY;
|
||||||
curSelection->StripTag(_T("\\fscx"));
|
curSelection->StripTag(_T("\\fscx"));
|
||||||
curSelection->StripTag(_T("\\fscy"));
|
curSelection->StripTag(_T("\\fscy"));
|
||||||
}
|
}
|
||||||
|
@ -930,20 +930,20 @@ void VideoDisplayVisual::OnMouseEvent (wxMouseEvent &event) {
|
||||||
else if (hold == 2) {
|
else if (hold == 2) {
|
||||||
// Find angle
|
// Find angle
|
||||||
float screenAngle = atan2(double(lineOrgY-y*sh/h),double(x*sw/w-lineOrgX)) * 180.0 / 3.1415926535897932;
|
float screenAngle = atan2(double(lineOrgY-y*sh/h),double(x*sw/w-lineOrgX)) * 180.0 / 3.1415926535897932;
|
||||||
curAngle = screenAngle - startAngle + origAngle;
|
curFloat1 = screenAngle - startFloat1 + origFloat1;
|
||||||
while (curAngle < 0.0f) curAngle += 360.0f;
|
while (curFloat1 < 0.0f) curFloat1 += 360.0f;
|
||||||
while (curAngle >= 360.0f) curAngle -= 360.0f;
|
while (curFloat1 >= 360.0f) curFloat1 -= 360.0f;
|
||||||
|
|
||||||
// Snap
|
// Snap
|
||||||
if (event.ShiftDown()) {
|
if (event.ShiftDown()) {
|
||||||
curAngle = (float)((int)((curAngle+15.0f)/30.0f))*30.0f;
|
curFloat1 = (float)((int)((curFloat1+15.0f)/30.0f))*30.0f;
|
||||||
if (curAngle == 360.0f) curAngle = 0.0f;
|
if (curFloat1 == 360.0f) curFloat1 = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
if (realTime) {
|
if (realTime) {
|
||||||
AssLimitToVisibleFilter::SetFrame(frame_n);
|
AssLimitToVisibleFilter::SetFrame(frame_n);
|
||||||
wxString param = PrettyFloat(wxString::Format(_T("(%0.3f)"),curAngle));
|
wxString param = PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat1));
|
||||||
grid->editBox->SetOverride(_T("\\frz"),param,0,false);
|
grid->editBox->SetOverride(_T("\\frz"),param,0,false);
|
||||||
grid->editBox->CommitText(true);
|
grid->editBox->CommitText(true);
|
||||||
grid->CommitChanges(false,true);
|
grid->CommitChanges(false,true);
|
||||||
|
@ -954,29 +954,29 @@ void VideoDisplayVisual::OnMouseEvent (wxMouseEvent &event) {
|
||||||
else if (hold == 3) {
|
else if (hold == 3) {
|
||||||
// Find screen angles
|
// Find screen angles
|
||||||
float screenAngle = (lineOrgY-y*sh/h)*2.0;
|
float screenAngle = (lineOrgY-y*sh/h)*2.0;
|
||||||
float screenAngle2 = (x*sw/w-lineOrgX)*2.0;
|
float screenFloat2 = (x*sw/w-lineOrgX)*2.0;
|
||||||
|
|
||||||
// Calculate
|
// Calculate
|
||||||
curAngle = screenAngle - startAngle + origAngle;
|
curFloat1 = screenAngle - startFloat1 + origFloat1;
|
||||||
curAngle2 = screenAngle2 - startAngle2 + origAngle2;
|
curFloat2 = screenFloat2 - startFloat2 + origFloat2;
|
||||||
while (curAngle < 0.0) curAngle += 360.0;
|
while (curFloat1 < 0.0) curFloat1 += 360.0;
|
||||||
while (curAngle >= 360.0) curAngle -= 360.0;
|
while (curFloat1 >= 360.0) curFloat1 -= 360.0;
|
||||||
while (curAngle2 < 0.0) curAngle2 += 360.0;
|
while (curFloat2 < 0.0) curFloat2 += 360.0;
|
||||||
while (curAngle2 >= 360.0) curAngle2 -= 360.0;
|
while (curFloat2 >= 360.0) curFloat2 -= 360.0;
|
||||||
|
|
||||||
// Oh Snap
|
// Oh Snap
|
||||||
if (event.ShiftDown()) {
|
if (event.ShiftDown()) {
|
||||||
curAngle = (float)((int)((curAngle+15.0f)/30.0f))*30.0f;
|
curFloat1 = (float)((int)((curFloat1+15.0f)/30.0f))*30.0f;
|
||||||
curAngle2 = (float)((int)((curAngle2+15.0f)/30.0f))*30.0f;
|
curFloat2 = (float)((int)((curFloat2+15.0f)/30.0f))*30.0f;
|
||||||
if (curAngle == 360.0f) curAngle = 0.0f;
|
if (curFloat1 == 360.0f) curFloat1 = 0.0f;
|
||||||
if (curAngle2 == 360.0f) curAngle = 0.0f;
|
if (curFloat2 == 360.0f) curFloat1 = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
if (realTime) {
|
if (realTime) {
|
||||||
AssLimitToVisibleFilter::SetFrame(frame_n);
|
AssLimitToVisibleFilter::SetFrame(frame_n);
|
||||||
grid->editBox->SetOverride(_T("\\frx"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curAngle)),0,false);
|
grid->editBox->SetOverride(_T("\\frx"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat1)),0,false);
|
||||||
grid->editBox->SetOverride(_T("\\fry"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curAngle2)),0,false);
|
grid->editBox->SetOverride(_T("\\fry"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat2)),0,false);
|
||||||
grid->editBox->CommitText(true);
|
grid->editBox->CommitText(true);
|
||||||
grid->CommitChanges(false,true);
|
grid->CommitChanges(false,true);
|
||||||
}
|
}
|
||||||
|
@ -985,22 +985,22 @@ void VideoDisplayVisual::OnMouseEvent (wxMouseEvent &event) {
|
||||||
// Scale
|
// Scale
|
||||||
else if (hold == 4) {
|
else if (hold == 4) {
|
||||||
// Calculate
|
// Calculate
|
||||||
curScaleX = (float(x - startX)/0.8f) + origScaleX;
|
curFloat1 = (float(x - startX)/0.8f) + origFloat1;
|
||||||
curScaleY = (float(startY - y)/0.8f) + origScaleY;
|
curFloat2 = (float(startY - y)/0.8f) + origFloat2;
|
||||||
if (curScaleX < 0.0f) curScaleX = 0.0f;
|
if (curFloat1 < 0.0f) curFloat1 = 0.0f;
|
||||||
if (curScaleY < 0.0f) curScaleY = 0.0f;
|
if (curFloat2 < 0.0f) curFloat2 = 0.0f;
|
||||||
|
|
||||||
// Snap
|
// Snap
|
||||||
if (event.ShiftDown()) {
|
if (event.ShiftDown()) {
|
||||||
curScaleX = (float)((int)((curScaleX+12.5f)/25.0f))*25.0f;
|
curFloat1 = (float)((int)((curFloat1+12.5f)/25.0f))*25.0f;
|
||||||
curScaleY = (float)((int)((curScaleY+12.5f)/25.0f))*25.0f;
|
curFloat2 = (float)((int)((curFloat2+12.5f)/25.0f))*25.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
if (realTime) {
|
if (realTime) {
|
||||||
AssLimitToVisibleFilter::SetFrame(frame_n);
|
AssLimitToVisibleFilter::SetFrame(frame_n);
|
||||||
grid->editBox->SetOverride(_T("\\fscx"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curScaleX)),0,false);
|
grid->editBox->SetOverride(_T("\\fscx"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat1)),0,false);
|
||||||
grid->editBox->SetOverride(_T("\\fscy"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curScaleY)),0,false);
|
grid->editBox->SetOverride(_T("\\fscy"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat2)),0,false);
|
||||||
grid->editBox->CommitText(true);
|
grid->editBox->CommitText(true);
|
||||||
grid->CommitChanges(false,true);
|
grid->CommitChanges(false,true);
|
||||||
}
|
}
|
||||||
|
@ -1046,19 +1046,19 @@ void VideoDisplayVisual::OnMouseEvent (wxMouseEvent &event) {
|
||||||
|
|
||||||
// Finished rotating Z
|
// Finished rotating Z
|
||||||
else if (hold == 2) {
|
else if (hold == 2) {
|
||||||
grid->editBox->SetOverride(_T("\\frz"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curAngle)),0,false);
|
grid->editBox->SetOverride(_T("\\frz"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat1)),0,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finished rotating XY
|
// Finished rotating XY
|
||||||
else if (hold == 3) {
|
else if (hold == 3) {
|
||||||
grid->editBox->SetOverride(_T("\\frx"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curAngle)),0,false);
|
grid->editBox->SetOverride(_T("\\frx"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat1)),0,false);
|
||||||
grid->editBox->SetOverride(_T("\\fry"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curAngle2)),0,false);
|
grid->editBox->SetOverride(_T("\\fry"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat2)),0,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finished scaling
|
// Finished scaling
|
||||||
else if (hold == 4) {
|
else if (hold == 4) {
|
||||||
grid->editBox->SetOverride(_T("\\fscx"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curScaleX)),0,false);
|
grid->editBox->SetOverride(_T("\\fscx"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat1)),0,false);
|
||||||
grid->editBox->SetOverride(_T("\\fscy"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curScaleY)),0,false);
|
grid->editBox->SetOverride(_T("\\fscy"),PrettyFloat(wxString::Format(_T("(%0.3f)"),curFloat2)),0,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finished clipping
|
// Finished clipping
|
||||||
|
@ -1114,7 +1114,7 @@ void VideoDisplayVisual::OnMouseEvent (wxMouseEvent &event) {
|
||||||
/////////////
|
/////////////
|
||||||
// Key event
|
// Key event
|
||||||
void VideoDisplayVisual::OnKeyEvent(wxKeyEvent &event) {
|
void VideoDisplayVisual::OnKeyEvent(wxKeyEvent &event) {
|
||||||
// FIXME: should these beconfigurable?
|
// FIXME: should these be configurable?
|
||||||
// Think of the frenchmen and other people not using qwerty layout
|
// Think of the frenchmen and other people not using qwerty layout
|
||||||
if (event.GetKeyCode() == 'A') SetMode(0);
|
if (event.GetKeyCode() == 'A') SetMode(0);
|
||||||
if (event.GetKeyCode() == 'S') SetMode(1);
|
if (event.GetKeyCode() == 'S') SetMode(1);
|
||||||
|
|
|
@ -40,6 +40,8 @@
|
||||||
///////////
|
///////////
|
||||||
// Headers
|
// Headers
|
||||||
#include "gl_wrap.h"
|
#include "gl_wrap.h"
|
||||||
|
#include "video_dragable_feature.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
|
@ -60,9 +62,8 @@ private:
|
||||||
int startX,startY;
|
int startX,startY;
|
||||||
int curX,curY,curX2,curY2;
|
int curX,curY,curX2,curY2;
|
||||||
int origX,origY;
|
int origX,origY;
|
||||||
float curAngle,startAngle,origAngle;
|
float curFloat1,startFloat1,origFloat1;
|
||||||
float curAngle2,startAngle2,origAngle2;
|
float curFloat2,startFloat2,origFloat2;
|
||||||
float curScaleX,curScaleY,origScaleX,origScaleY;
|
|
||||||
int lineOrgX,lineOrgY;
|
int lineOrgX,lineOrgY;
|
||||||
|
|
||||||
int mode;
|
int mode;
|
||||||
|
@ -73,6 +74,8 @@ private:
|
||||||
AssDialogue *curSelection;
|
AssDialogue *curSelection;
|
||||||
VideoDisplay *parent;
|
VideoDisplay *parent;
|
||||||
|
|
||||||
|
std::vector<VideoDragAbleFeature> drags;
|
||||||
|
|
||||||
void GetLinePosition(AssDialogue *diag,int &x,int &y);
|
void GetLinePosition(AssDialogue *diag,int &x,int &y);
|
||||||
void GetLinePosition(AssDialogue *diag,int &x,int &y,int &orgx,int &orgy);
|
void GetLinePosition(AssDialogue *diag,int &x,int &y,int &orgx,int &orgy);
|
||||||
void GetLineRotation(AssDialogue *diag,float &rx,float &ry,float &rz);
|
void GetLineRotation(AssDialogue *diag,float &rx,float &ry,float &rz);
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
// Copyright (c) 2007, Rodrigo Braz Monteiro
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// AEGISUB
|
||||||
|
//
|
||||||
|
// Website: http://aegisub.cellosoft.com
|
||||||
|
// Contact: mailto:zeratul@cellosoft.com
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
///////////
|
||||||
|
// Headers
|
||||||
|
#include "video_dragable_feature.h"
|
||||||
|
|
||||||
|
|
||||||
|
///////////////
|
||||||
|
// Constructor
|
||||||
|
VideoDragAbleFeature::VideoDragAbleFeature() {
|
||||||
|
type = DRAG_NONE;
|
||||||
|
x = -1;
|
||||||
|
y = -1;
|
||||||
|
line = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////
|
||||||
|
// Is mouse over it?
|
||||||
|
bool VideoDragAbleFeature::IsMouseOver(int x,int y) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// Draw feature
|
||||||
|
void VideoDragAbleFeature::Draw(bool highlighted) {
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
// Copyright (c) 2007, Rodrigo Braz Monteiro
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// AEGISUB
|
||||||
|
//
|
||||||
|
// Website: http://aegisub.cellosoft.com
|
||||||
|
// Contact: mailto:zeratul@cellosoft.com
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
///////////
|
||||||
|
// Headers
|
||||||
|
#include "ass_dialogue.h"
|
||||||
|
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// Feature type
|
||||||
|
enum DragAbleFeatureType {
|
||||||
|
DRAG_NONE,
|
||||||
|
DRAG_BIG_SQUARE,
|
||||||
|
DRAG_BIG_CIRCLE,
|
||||||
|
DRAG_SMALL_SQUARE,
|
||||||
|
DRAG_SMALL_CIRCLE
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////
|
||||||
|
// Drag-able feature
|
||||||
|
class VideoDragAbleFeature {
|
||||||
|
public:
|
||||||
|
DragAbleFeatureType type;
|
||||||
|
int x,y;
|
||||||
|
int index;
|
||||||
|
AssDialogue *line;
|
||||||
|
|
||||||
|
bool IsMouseOver(int x,int y);
|
||||||
|
void Draw(bool highlighted);
|
||||||
|
|
||||||
|
VideoDragAbleFeature();
|
||||||
|
};
|
Loading…
Reference in New Issue