forked from mia/Aegisub
Clean up VisualFeature a bit and make most of OpenGlWrapper's methods const
Originally committed to SVN as r4309.
This commit is contained in:
parent
008d59d71e
commit
115dacb37e
5 changed files with 98 additions and 156 deletions
|
@ -89,7 +89,7 @@ OpenGLWrapper::OpenGLWrapper() {
|
|||
/// @param x2
|
||||
/// @param y2
|
||||
///
|
||||
void OpenGLWrapper::DrawLine(float x1,float y1,float x2,float y2) {
|
||||
void OpenGLWrapper::DrawLine(float x1,float y1,float x2,float y2) const {
|
||||
SetModeLine();
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(x1,y1);
|
||||
|
@ -106,7 +106,7 @@ void OpenGLWrapper::DrawLine(float x1,float y1,float x2,float y2) {
|
|||
/// @param y2
|
||||
/// @param step
|
||||
///
|
||||
void OpenGLWrapper::DrawDashedLine(float x1,float y1,float x2,float y2,float step) {
|
||||
void OpenGLWrapper::DrawDashedLine(float x1,float y1,float x2,float y2,float step) const {
|
||||
float dist = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
|
||||
int steps = (int)((dist-20)/step);
|
||||
double stepx = double(x2-x1)/steps;
|
||||
|
@ -124,7 +124,7 @@ void OpenGLWrapper::DrawDashedLine(float x1,float y1,float x2,float y2,float ste
|
|||
/// @param radiusX
|
||||
/// @param radiusY
|
||||
///
|
||||
void OpenGLWrapper::DrawEllipse(float x,float y,float radiusX,float radiusY) {
|
||||
void OpenGLWrapper::DrawEllipse(float x,float y,float radiusX,float radiusY) const {
|
||||
DrawRing(x,y,radiusY,radiusY,radiusX/radiusY);
|
||||
}
|
||||
|
||||
|
@ -136,7 +136,7 @@ void OpenGLWrapper::DrawEllipse(float x,float y,float radiusX,float radiusY) {
|
|||
/// @param x2
|
||||
/// @param y2
|
||||
///
|
||||
void OpenGLWrapper::DrawRectangle(float x1,float y1,float x2,float y2) {
|
||||
void OpenGLWrapper::DrawRectangle(float x1,float y1,float x2,float y2) const {
|
||||
// Fill
|
||||
if (a2 != 0.0) {
|
||||
SetModeFill();
|
||||
|
@ -170,7 +170,7 @@ void OpenGLWrapper::DrawRectangle(float x1,float y1,float x2,float y2) {
|
|||
/// @param x3
|
||||
/// @param y3
|
||||
///
|
||||
void OpenGLWrapper::DrawTriangle(float x1,float y1,float x2,float y2,float x3,float y3) {
|
||||
void OpenGLWrapper::DrawTriangle(float x1,float y1,float x2,float y2,float x3,float y3) const {
|
||||
// Fill
|
||||
if (a2 != 0.0) {
|
||||
SetModeFill();
|
||||
|
@ -203,7 +203,7 @@ void OpenGLWrapper::DrawTriangle(float x1,float y1,float x2,float y2,float x3,fl
|
|||
/// @param arcStart
|
||||
/// @param arcEnd
|
||||
///
|
||||
void OpenGLWrapper::DrawRing(float x,float y,float r1,float r2,float ar,float arcStart,float arcEnd) {
|
||||
void OpenGLWrapper::DrawRing(float x,float y,float r1,float r2,float ar,float arcStart,float arcEnd) const {
|
||||
// Make r1 bigger
|
||||
if (r2 > r1) {
|
||||
float temp = r1;
|
||||
|
@ -324,7 +324,7 @@ void OpenGLWrapper::SetFillColour(wxColour col,float alpha) {
|
|||
|
||||
/// @brief Line
|
||||
///
|
||||
void OpenGLWrapper::SetModeLine() {
|
||||
void OpenGLWrapper::SetModeLine() const {
|
||||
glColor4f(r1,g1,b1,a1);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
@ -336,7 +336,7 @@ void OpenGLWrapper::SetModeLine() {
|
|||
|
||||
/// @brief Fill
|
||||
///
|
||||
void OpenGLWrapper::SetModeFill() {
|
||||
void OpenGLWrapper::SetModeFill() const {
|
||||
glColor4f(r2,g2,b2,a2);
|
||||
if (a2 == 1.0f) glDisable(GL_BLEND);
|
||||
else {
|
||||
|
|
|
@ -90,21 +90,21 @@ public:
|
|||
|
||||
void SetLineColour(wxColour col,float alpha=1.0f,int width=1);
|
||||
void SetFillColour(wxColour col,float alpha=1.0f);
|
||||
void SetModeLine();
|
||||
void SetModeFill();
|
||||
void DrawLine(float x1,float y1,float x2,float y2);
|
||||
void DrawDashedLine(float x1,float y1,float x2,float y2,float dashLen);
|
||||
void DrawEllipse(float x,float y,float radiusX,float radiusY);
|
||||
void SetModeLine() const;
|
||||
void SetModeFill() const;
|
||||
void DrawLine(float x1,float y1,float x2,float y2) const;
|
||||
void DrawDashedLine(float x1,float y1,float x2,float y2,float dashLen) const;
|
||||
void DrawEllipse(float x,float y,float radiusX,float radiusY) const;
|
||||
|
||||
/// @brief DOCME
|
||||
/// @param x
|
||||
/// @param y
|
||||
/// @param radius
|
||||
///
|
||||
void DrawCircle(float x,float y,float radius) { DrawEllipse(x,y,radius,radius); }
|
||||
void DrawRectangle(float x1,float y1,float x2,float y2);
|
||||
void DrawRing(float x,float y,float r1,float r2,float ar=1.0f,float arcStart=0.0f,float arcEnd=0.0f);
|
||||
void DrawTriangle(float x1,float y1,float x2,float y2,float x3,float y3);
|
||||
void DrawCircle(float x,float y,float radius) const { DrawEllipse(x,y,radius,radius); }
|
||||
void DrawRectangle(float x1,float y1,float x2,float y2) const;
|
||||
void DrawRing(float x,float y,float r1,float r2,float ar=1.0f,float arcStart=0.0f,float arcEnd=0.0f) const;
|
||||
void DrawTriangle(float x1,float y1,float x2,float y2,float x3,float y3) const;
|
||||
|
||||
static bool IsExtensionSupported(const char *ext);
|
||||
};
|
||||
|
|
|
@ -34,117 +34,77 @@
|
|||
/// @ingroup visual_ts
|
||||
///
|
||||
|
||||
|
||||
///////////
|
||||
// Headers
|
||||
#include "config.h"
|
||||
|
||||
#include "ass_dialogue.h"
|
||||
#include "gl_wrap.h"
|
||||
#include "visual_feature.h"
|
||||
|
||||
|
||||
/// @brief Constructor
|
||||
///
|
||||
VisualDraggableFeature::VisualDraggableFeature() {
|
||||
type = DRAG_NONE;
|
||||
x = INT_MIN;
|
||||
y = INT_MIN;
|
||||
value = value2 = 0;
|
||||
layer = 0;
|
||||
lineN = -1;
|
||||
line = NULL;
|
||||
VisualDraggableFeature::VisualDraggableFeature()
|
||||
: type(DRAG_NONE)
|
||||
, x(INT_MIN)
|
||||
, y(INT_MIN)
|
||||
, layer(0)
|
||||
, value(0)
|
||||
, value2(0)
|
||||
, line(NULL)
|
||||
, lineN(-1)
|
||||
{
|
||||
for (int i=0;i<4;i++) brother[i] = -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// @brief Is mouse over it?
|
||||
/// @param mx
|
||||
/// @param my
|
||||
/// @return
|
||||
///
|
||||
bool VisualDraggableFeature::IsMouseOver(int mx,int my) {
|
||||
// Square
|
||||
if (type == DRAG_BIG_SQUARE) {
|
||||
if (mx < x-8 || mx > x+8 || my < y-8 || my > y+8) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Circle
|
||||
else if (type == DRAG_BIG_CIRCLE) {
|
||||
switch (type) {
|
||||
case DRAG_BIG_SQUARE:
|
||||
return !(mx < x-8 || mx > x+8 || my < y-8 || my > y+8);
|
||||
case DRAG_BIG_CIRCLE: {
|
||||
int dx = mx-x;
|
||||
int dy = my-y;
|
||||
if (dx*dx + dy*dy <= 64) return true;
|
||||
return false;
|
||||
return dx*dx + dy*dy <= 64;
|
||||
}
|
||||
|
||||
// Triangle
|
||||
else if (type == DRAG_BIG_TRIANGLE) {
|
||||
case DRAG_BIG_TRIANGLE: {
|
||||
int _my = my+2;
|
||||
if (_my < y-8 || _my > y+8) return false;
|
||||
int dx = mx-x;
|
||||
int dy = _my-y-8;
|
||||
return (16*dx+9*dy < 0 && 16*dx-9*dy > 0);
|
||||
}
|
||||
|
||||
// Small square
|
||||
else if (type == DRAG_SMALL_SQUARE) {
|
||||
if (mx < x-4 || mx > x+4 || my < y-4 || my > y+4) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Small circle
|
||||
else if (type == DRAG_SMALL_CIRCLE) {
|
||||
case DRAG_SMALL_SQUARE:
|
||||
return !(mx < x-4 || mx > x+4 || my < y-4 || my > y+4);
|
||||
case DRAG_SMALL_CIRCLE: {
|
||||
int dx = mx-x;
|
||||
int dy = my-y;
|
||||
if (dx*dx + dy*dy <= 16) return true;
|
||||
return dx*dx + dy*dy <= 16;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
// Fallback
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// @brief Draw feature
|
||||
/// @param gl
|
||||
///
|
||||
void VisualDraggableFeature::Draw(OpenGLWrapper *gl) {
|
||||
wxASSERT(gl);
|
||||
|
||||
// Square
|
||||
if (type == DRAG_BIG_SQUARE) {
|
||||
gl->DrawRectangle(x-8,y-8,x+8,y+8);
|
||||
gl->DrawLine(x,y-16,x,y+16);
|
||||
gl->DrawLine(x-16,y,x+16,y);
|
||||
}
|
||||
|
||||
// Circle
|
||||
else if (type == DRAG_BIG_CIRCLE) {
|
||||
gl->DrawCircle(x,y,8);
|
||||
gl->DrawLine(x,y-16,x,y+16);
|
||||
gl->DrawLine(x-16,y,x+16,y);
|
||||
}
|
||||
|
||||
// Triangle
|
||||
else if (type == DRAG_BIG_TRIANGLE) {
|
||||
gl->DrawTriangle(x-9,y-6,x+9,y-6,x,y+10);
|
||||
gl->DrawLine(x,y,x,y-16);
|
||||
gl->DrawLine(x,y,x-14,y+8);
|
||||
gl->DrawLine(x,y,x+14,y+8);
|
||||
}
|
||||
|
||||
// Square
|
||||
else if (type == DRAG_SMALL_SQUARE) {
|
||||
gl->DrawRectangle(x-4,y-4,x+4,y+4);
|
||||
}
|
||||
|
||||
// Small circle
|
||||
else if (type == DRAG_SMALL_CIRCLE) {
|
||||
gl->DrawCircle(x,y,4);
|
||||
void VisualDraggableFeature::Draw(OpenGLWrapper const& gl) {
|
||||
switch (type) {
|
||||
case DRAG_BIG_SQUARE:
|
||||
gl.DrawRectangle(x-8,y-8,x+8,y+8);
|
||||
gl.DrawLine(x,y-16,x,y+16);
|
||||
gl.DrawLine(x-16,y,x+16,y);
|
||||
break;
|
||||
case DRAG_BIG_CIRCLE:
|
||||
gl.DrawCircle(x,y,8);
|
||||
gl.DrawLine(x,y-16,x,y+16);
|
||||
gl.DrawLine(x-16,y,x+16,y);
|
||||
break;
|
||||
case DRAG_BIG_TRIANGLE:
|
||||
gl.DrawTriangle(x-9,y-6,x+9,y-6,x,y+10);
|
||||
gl.DrawLine(x,y,x,y-16);
|
||||
gl.DrawLine(x,y,x-14,y+8);
|
||||
gl.DrawLine(x,y,x+14,y+8);
|
||||
break;
|
||||
case DRAG_SMALL_SQUARE:
|
||||
gl.DrawRectangle(x-4,y-4,x+4,y+4);
|
||||
break;
|
||||
case DRAG_SMALL_CIRCLE:
|
||||
gl.DrawCircle(x,y,4);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -34,15 +34,9 @@
|
|||
/// @ingroup visual_ts
|
||||
///
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
//////////////
|
||||
// Prototypes
|
||||
class OpenGLWrapper;
|
||||
class AssDialogue;
|
||||
|
||||
|
||||
/// DOCME
|
||||
enum DraggableFeatureType {
|
||||
|
||||
|
@ -65,47 +59,35 @@ enum DraggableFeatureType {
|
|||
DRAG_SMALL_CIRCLE
|
||||
};
|
||||
|
||||
|
||||
|
||||
/// DOCME
|
||||
/// @class VisualDraggableFeature
|
||||
/// @brief DOCME
|
||||
///
|
||||
/// DOCME
|
||||
/// @brief Onscreen control used by many visual tools which doesn't do much
|
||||
class VisualDraggableFeature {
|
||||
public:
|
||||
/// @brief Constructor
|
||||
VisualDraggableFeature();
|
||||
|
||||
/// DOCME
|
||||
/// Shape of feature
|
||||
DraggableFeatureType type;
|
||||
|
||||
/// DOCME
|
||||
int x; /// x coordinate
|
||||
int y; /// y coordinate
|
||||
|
||||
/// DOCME
|
||||
int x,y;
|
||||
int layer; /// Layer; Higher = above
|
||||
|
||||
/// DOCME
|
||||
int layer; // Higher = above
|
||||
int value; /// userdata
|
||||
int value2; /// more userdata
|
||||
|
||||
/// DOCME
|
||||
AssDialogue* line; /// The dialogue line this feature is for
|
||||
int lineN; /// The line's index in the file
|
||||
|
||||
/// DOCME
|
||||
int value,value2;
|
||||
|
||||
|
||||
/// DOCME
|
||||
AssDialogue *line;
|
||||
|
||||
/// DOCME
|
||||
int lineN;
|
||||
|
||||
|
||||
/// DOCME
|
||||
int brother[4];
|
||||
int brother[4]; /// userdata; generall indexes of other features in an array
|
||||
|
||||
/// @brief Is the given point over this feature?
|
||||
/// @param mx x coordinate to test
|
||||
/// @param my y coordinate to test
|
||||
bool IsMouseOver(int x,int y);
|
||||
void Draw(OpenGLWrapper *gl);
|
||||
|
||||
VisualDraggableFeature();
|
||||
/// @brief Draw this feature
|
||||
/// @param gl OpenGLWrapper to use
|
||||
void Draw(OpenGLWrapper const& gl);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -312,7 +312,7 @@ void VisualTool::DrawAllFeatures() {
|
|||
for (size_t i=0;i<features.size();i++) {
|
||||
SetFillColour(colour[(signed)i == mouseOver ? 2 : 1],0.6f);
|
||||
SetLineColour(colour[0],1.0f,2);
|
||||
features[i].Draw(this);
|
||||
features[i].Draw(*this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue