diff --git a/README.md b/README.md index 8632f33e60b197764fd29685e8b5c9d391b1e8b8..d1208c010dcab14de03e67badab84c71f3e65533 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Install all the dependencies with the package manager of your distribution: - opengl - openal - openssl or libressl +- agg Optional dependencies: @@ -55,6 +56,7 @@ On debian buster, the packages are the following: - libboost-regex-dev - libboost-thread-dev - astyle +- libagg-dev ### Build the binary diff --git a/assdraw/Makefile b/assdraw/Makefile index 34127323566da17d1c482454c9c562c200279799..23f2479d6794bd31fc11af144b539dba437092b4 100644 --- a/assdraw/Makefile +++ b/assdraw/Makefile @@ -2,15 +2,6 @@ include $(dir $(lastword $(MAKEFILE_LIST)))../header.mk PROGRAM += $(d)assdraw -libres_SOURCES := \ - $(d)xpm/res.cpp \ - $(d)xpm/res.h - -libaggwindow_SOURCES := \ - $(d)wxAGG/AGGWindow.cpp \ - $(d)wxAGG/AGGWindow.h \ - $(d)wxAGG/PixelFormatConvertor.h - assdraw_EXTRA_DIST := \ $(d)_common.hpp \ $(d)agghelper.hpp \ @@ -23,11 +14,18 @@ assdraw_EXTRA_DIST := \ $(d)enums.hpp \ $(d)include_once.hpp \ $(d)library.hpp \ - $(d)settings.hpp + $(d)settings.hpp \ + $(d)agg_bcspline.h \ + $(d)agg_conv_bcspline.h \ + $(d)agg_vcgen_bcspline.h \ + $(d)resource.h \ + $(d)xpm/res.h \ + $(d)wxAGG/AGGWindow.h \ + $(d)wxAGG/PixelFormatConvertor.h assdraw_SOURCES := \ - $(libres_SOURCES) \ - $(libaggwindow_SOURCES) \ + $(d)xpm/res.cpp \ + $(d)wxAGG/AGGWindow.cpp \ $(d)agg_bcspline.cpp \ $(d)agg_vcgen_bcspline.cpp \ $(d)assdraw.cpp \ @@ -40,11 +38,7 @@ assdraw_SOURCES := \ $(d)library.cpp \ $(d)settings.cpp -assdraw_SOURCES += \ - $(d)agg_bcspline.h \ - $(d)agg_conv_bcspline.h \ - $(d)agg_vcgen_bcspline.h \ - $(d)resource.h - - -assdraw_OBJ := $(assdraw_SOURCES:.cpp=.o) +assdraw_CPPFLAGS := -I$(d) +assdraw_CXXFLAGS := $(CXXFLAGS_WX) +assdraw_OBJ := $(assdraw_SOURCES:.cpp=.o) +assdraw_LIBS := $(LIBS_WX) diff --git a/assdraw/agg_bcspline.h b/assdraw/agg_bcspline.h index e5f049b97902d3b00ef6776bb01190182f5c545d..a91d4ba3e87bf9593d0c92bf155d9f99c2f16c6f 100644 --- a/assdraw/agg_bcspline.h +++ b/assdraw/agg_bcspline.h @@ -25,7 +25,7 @@ #ifndef AGG_bcspline_INCLUDED #define AGG_bcspline_INCLUDED -#include "agg_array.h" +#include <agg2/agg_array.h> namespace agg { //----------------------------------------------------------------bcspline diff --git a/assdraw/agg_conv_bcspline.h b/assdraw/agg_conv_bcspline.h index 6a4cac602c64af8a587c6edad2fed174efa229b9..984ddcfbce31248d63310e522a62184336999f53 100644 --- a/assdraw/agg_conv_bcspline.h +++ b/assdraw/agg_conv_bcspline.h @@ -25,9 +25,9 @@ #ifndef AGG_conv_bcspline_INCLUDED #define AGG_conv_bcspline_INCLUDED -#include "agg_basics.h" +#include <agg2/agg_basics.h> #include "agg_vcgen_bcspline.h" -#include "agg_conv_adaptor_vcgen.h" +#include <agg2/agg_conv_adaptor_vcgen.h> namespace agg { diff --git a/assdraw/agg_vcgen_bcspline.h b/assdraw/agg_vcgen_bcspline.h index e9f68577b41a8c6baff9c8e79d2baf43b9ebf7ba..f7e5b85b8f1e5c530bd9986766ef8130bcc9311a 100644 --- a/assdraw/agg_vcgen_bcspline.h +++ b/assdraw/agg_vcgen_bcspline.h @@ -25,8 +25,8 @@ #ifndef AGG_vcgen_bcspline_INCLUDED #define AGG_vcgen_bcspline_INCLUDED -#include "agg_basics.h" -#include "agg_array.h" +#include <agg2/agg_basics.h> +#include <agg2/agg_array.h> #include "agg_bcspline.h" diff --git a/assdraw/agghelper.hpp b/assdraw/agghelper.hpp index 4a2a9904fb836c0246a3101c16f461dd4e8caac3..a42916ccc63914bd209c91035f4adb6945d58b08 100644 --- a/assdraw/agghelper.hpp +++ b/assdraw/agghelper.hpp @@ -1,6 +1,6 @@ #pragma once -#include "agg_path_storage.h" +#include <agg2/agg_path_storage.h> class agghelper { public: diff --git a/assdraw/assdraw.cpp b/assdraw/assdraw.cpp index b80966e5d86c275b7196c4ed659d9972fe69f184..ebb3af45e6f9f36fa7fc9bf746a4e8bdfba6d9f7 100644 --- a/assdraw/assdraw.cpp +++ b/assdraw/assdraw.cpp @@ -615,11 +615,12 @@ void ASSDrawFrame::OnChoose_TBarRClickMenu(wxCommandEvent &event) if (tb[i]) { if (show[0]) m_mgr.GetPane(tbar[i]).Show(show[1]); - if (dock[0]) + if (dock[0]) { if (dock[1]) m_mgr.GetPane(tbar[i]).Dock(); else m_mgr.GetPane(tbar[i]).Float(); + } } } m_mgr.Update(); diff --git a/assdraw/canvas.cpp b/assdraw/canvas.cpp index 56f6fe6155e58f3a52f758dd51b475e825f428d7..8cbe7929caff17adf81a1eb05397b4d1152dace7 100644 --- a/assdraw/canvas.cpp +++ b/assdraw/canvas.cpp @@ -35,11 +35,11 @@ #include "assdraw.hpp" #include "cmd.hpp" -#include "agg_gsv_text.h" -#include "agg_ellipse.h" -#include "agg_conv_dash.h" -#include "agg_trans_bilinear.h" -#include "agg_trans_perspective.h" +#include <agg2/agg_gsv_text.h> +#include <agg2/agg_ellipse.h> +#include <agg2/agg_conv_dash.h> +#include <agg2/agg_trans_bilinear.h> +#include <agg2/agg_trans_perspective.h> #include "agghelper.hpp" #include <math.h> @@ -300,6 +300,7 @@ void ASSDrawCanvas::OnMouseMove(wxMouseEvent &event) undodesc = _T("Bilinear transform"); *dragAnchor_left = mouse_point; break; + case MODE_SCALEROTATE: if (rectbound2upd2 == -1) { //only one vertex dragged int adjacent[2] = { (rectbound2upd + 3) % 4, (rectbound2upd + 1) % 4 }; @@ -378,6 +379,10 @@ void ASSDrawCanvas::OnMouseMove(wxMouseEvent &event) UpdateTranformModeRectCenter(); undodesc = _T("Scale"); break; + + default: + /* FIXME: Add an error message here */ + break; } // update points @@ -577,11 +582,17 @@ void ASSDrawCanvas::ProcessOnMouseLeftUp() newcommand->Init(); switch (newcommand->type) { case M: - undodesc = _T("Add a new M"); break; + undodesc = _T("Add a new M"); + break; case L: - undodesc = _T("Add a new L"); break; + undodesc = _T("Add a new L"); + break; case B: - undodesc = _T("Add a new B"); break; + undodesc = _T("Add a new B"); + break; + default: + /* FIXME: Add an error message here */ + break; } newcommand = NULL; // we need to manually refresh the GUI to draw the new control points @@ -603,11 +614,17 @@ void ASSDrawCanvas::ProcessOnMouseLeftUp() RefreshDisplay(); switch (t) { case M: - undodesc = _T("Delete a M"); break; + undodesc = _T("Delete a M"); + break; case L: - undodesc = _T("Delete a L"); break; + undodesc = _T("Delete a L"); + break; case B: - undodesc = _T("Delete a B"); break; + undodesc = _T("Delete a B"); + break; + default: + /* FIXME: Add an error message here */ + break; } } else { @@ -675,6 +692,9 @@ void ASSDrawCanvas::OnMouseLeftDown(wxMouseEvent &event) case MODE_B: newcommand = NewCmd(B, px, py); break; + default: + /* FIXME: Add an error message here */ + break; } // continue working on the new command (if any) @@ -812,10 +832,12 @@ void ASSDrawCanvas::OnMouseRightDClick(wxMouseEvent &event) #endif menu->Append(cmdmenuitem); menu->Enable(MENU_DUMMY, false); + switch (dblclicked_point_right->cmd_main->type) { case L: menu->Append(MENU_DRC_LNTOBEZ, _T("Convert to Bezier curve (B command)")); break; + case B: if (dblclicked_point_right->type != MP) break; menu->AppendCheckItem(MENU_DRC_BEZTOLN, _T("Convert to line (L command)")); @@ -825,6 +847,10 @@ void ASSDrawCanvas::OnMouseRightDClick(wxMouseEvent &event) menu->Check(MENU_DRC_C1CONTBEZ, true); } break; + + default: + /* FIXME: Add an error message here */ + break; } } @@ -898,11 +924,12 @@ void ASSDrawCanvas::ChangeZoomLevel( double amount, wxPoint bgzoomctr ) if (CanZoom() && drag_mode.drawing) ChangeDrawingZoomLevel( amount ); - if (CanZoom() && drag_mode.bgimg) + if (CanZoom() && drag_mode.bgimg) { if (drag_mode.drawing) ChangeBackgroundZoomLevel(bgimg.scale * pointsys->scale / old_scale, wxRealPoint(pointsys->originx, pointsys->originy)); else ChangeBackgroundZoomLevel(bgimg.scale + amount / 10.0, wxRealPoint(bgzoomctr.x, bgzoomctr.y)); + } RefreshDisplay(); } @@ -952,7 +979,12 @@ void ASSDrawCanvas::MoveCanvasDrawing(double xamount, double yamount) rectbound2[i].x += (int) xamount; rectbound2[i].y += (int) yamount; } - unsigned vertices = backupcmds.total_vertices(); + unsigned vertices_unsigned = backupcmds.total_vertices(); + int vertices = vertices_unsigned; + if (vertices < 0) { + /* Place an overflow error message here */ + abort(); + } double x, y; for (int i = 0; i < vertices; i++) { backupcmds.vertex(i, &x, &y); @@ -1045,7 +1077,8 @@ void ASSDrawCanvas::EnforceC1Continuity (DrawCmd *cmd, Point *pnt) theotherpoint = *it; mainpoint = prevb->m_point; } - else if (pnt->num = cmd->controlpoints.size()) { + /* XXX: Here replaced `=` by `==`. See if it breaks things or not */ + else if (pnt->num == cmd->controlpoints.size()) { DrawCmd_B *thisb = static_cast< DrawCmd_B * >(cmd); if (!thisb->C1Cont) return; theotherpoint = *(cmd->m_point->cmd_next->controlpoints.begin()); @@ -1209,7 +1242,7 @@ void ASSDrawCanvas::DoDraw( RendererBase &rbase, RendererPrimitives &rprim, Rend rasterizer.reset(); interpolator_type interpolator(bgimg.img_mtx); PixelFormat::AGGType ipixfmt(bgimg.ibuf); - span_gen_type spangen(ipixfmt, agg::rgba_pre(0, 0, 0), interpolator); + span_gen_type spangen(ipixfmt, agg::rgba_pre(0, 0, 0, 0), interpolator); agg::conv_transform< agg::path_storage > bg_border(bgimg.bg_path, bgimg.path_mtx); agg::conv_clip_polygon< agg::conv_transform< agg::path_storage >> bg_clip(bg_border); bg_clip.clip_box(0, 0, ww, hh); @@ -1640,7 +1673,12 @@ void ASSDrawCanvas::UpdateNonUniformTransformation() rectbound2[3].x, rectbound2[3].y }; agg::path_storage trans; - unsigned vertices = backupcmds.total_vertices(); + unsigned vertices_unsigned = backupcmds.total_vertices(); + int vertices = vertices_unsigned; + if (vertices < 0) { + /* FIXME: Place an abort overflow error message here */ + abort(); + } agg::trans_bilinear trans_b(rectbound[0].x, rectbound[0].y, rectbound[2].x, rectbound[2].y, bound); agg::conv_transform<agg::path_storage, agg::trans_bilinear> transb(backupcmds, trans_b); @@ -1740,33 +1778,33 @@ void ASSDrawCanvas::CustomOnKeyDown(wxKeyEvent &event) } else { Point *warpto = NULL; - if (pointedAt_point->type == MP && pointedAt_point->cmd_next) + if (pointedAt_point->type == MP && pointedAt_point->cmd_next) { if (pointedAt_point->cmd_next->controlpoints.size() > 0) warpto = pointedAt_point->cmd_next->controlpoints.front(); else warpto = pointedAt_point->cmd_next->m_point; + } + else { + PointList::iterator it = pointedAt_point->cmd_main->controlpoints.begin(); + while (*it != pointedAt_point) it++; + it++; + if (it == pointedAt_point->cmd_main->controlpoints.end()) + warpto = pointedAt_point->cmd_main->m_point; + else + warpto = *it; + } + if (warpto == NULL) + warpto = cmds.front()->m_point; + wxPoint point = warpto->ToWxPoint(); + WarpPointer(point.x, point.y); } - else { - PointList::iterator it = pointedAt_point->cmd_main->controlpoints.begin(); - while (*it != pointedAt_point) it++; - it++; - if (it == pointedAt_point->cmd_main->controlpoints.end()) - warpto = pointedAt_point->cmd_main->m_point; - else - warpto = *it; - } - if (warpto == NULL) - warpto = cmds.front()->m_point; - wxPoint point = warpto->ToWxPoint(); - WarpPointer(point.x, point.y); } + break; + default: + event.Skip(); } - break; - default: - event.Skip(); } } -} void ASSDrawCanvas::CustomOnKeyUp(wxKeyEvent &event) { diff --git a/assdraw/canvas.hpp b/assdraw/canvas.hpp index 8f83d6127cd7c1d1292fda3b84dd59be99edb76b..73a3ecd44e03081bc1eafbe7cfdfa83f1a12a3a9 100644 --- a/assdraw/canvas.hpp +++ b/assdraw/canvas.hpp @@ -44,12 +44,12 @@ #include <wx/splitter.h> #include <wx/clntdata.h> -#include "agg_span_allocator.h" -#include "agg_span_interpolator_linear.h" -#include "agg_span_image_filter_rgb.h" -#include "agg_span_image_filter_rgba.h" -#include "agg_image_accessors.h" -#include "agg_conv_clip_polygon.h" +#include <agg2/agg_span_allocator.h> +#include <agg2/agg_span_interpolator_linear.h> +#include <agg2/agg_span_image_filter_rgb.h> +#include <agg2/agg_span_image_filter_rgba.h> +#include <agg2/agg_image_accessors.h> +#include <agg2/agg_conv_clip_polygon.h> class ASSDrawFrame; class ASSDrawCanvas; diff --git a/assdraw/engine.hpp b/assdraw/engine.hpp index 30c1d4e604ef1c709bce846241ac8de2921c6bec..e5155351ebed8a22dd4c8768be5682d48693f7a1 100644 --- a/assdraw/engine.hpp +++ b/assdraw/engine.hpp @@ -45,19 +45,19 @@ // agg support #include "wxAGG/AGGWindow.h" -#include "agg_color_rgba.h" -#include "agg_rasterizer_scanline_aa.h" -#include "agg_scanline_p.h" -#include "agg_renderer_base.h" -#include "agg_renderer_primitives.h" -#include "agg_renderer_scanline.h" -#include "agg_path_storage.h" -#include "agg_curves.h" -#include "agg_conv_curve.h" -#include "agg_conv_contour.h" -#include "agg_conv_stroke.h" +#include <agg2/agg_color_rgba.h> +#include <agg2/agg_rasterizer_scanline_aa.h> +#include <agg2/agg_scanline_p.h> +#include <agg2/agg_renderer_base.h> +#include <agg2/agg_renderer_primitives.h> +#include <agg2/agg_renderer_scanline.h> +#include <agg2/agg_path_storage.h> +#include <agg2/agg_curves.h> +#include <agg2/agg_conv_curve.h> +#include <agg2/agg_conv_contour.h> +#include <agg2/agg_conv_stroke.h> #include "agg_conv_bcspline.h" -#include "agg_math.h" +#include <agg2/agg_math.h> #define DEFAULT_SCALE 10 diff --git a/assdraw/wxAGG/AGGWindow.cpp b/assdraw/wxAGG/AGGWindow.cpp index f412edfcf0864829abb2b71b50637a644bc60698..08de413189d43aff8069eaa02a7e1fcbe9d76bdd 100644 --- a/assdraw/wxAGG/AGGWindow.cpp +++ b/assdraw/wxAGG/AGGWindow.cpp @@ -1,7 +1,7 @@ #include "AGGWindow.h" -#include "agg_rendering_buffer.h" -#include "agg_pixfmt_rgb.h" +#include <agg2/agg_rendering_buffer.h> +#include <agg2/agg_pixfmt_rgb.h> #include <wx/dcclient.h> diff --git a/assdraw/wxAGG/AGGWindow.h b/assdraw/wxAGG/AGGWindow.h index 3c46990c8f7a7e2e34d722319a1b3fc093d89040..21a91b387fcce9440991aeb4d5ab5986dfe5a7ac 100644 --- a/assdraw/wxAGG/AGGWindow.h +++ b/assdraw/wxAGG/AGGWindow.h @@ -8,7 +8,7 @@ #include <wx/window.h> #include <wx/dcmemory.h> -#include "agg_rendering_buffer.h" +#include <agg2/agg_rendering_buffer.h> namespace GUI { diff --git a/assdraw/wxAGG/PixelFormatConvertor.h b/assdraw/wxAGG/PixelFormatConvertor.h index 4f89c44949b012a84724564c141ccba681c4b60d..f5cfaab123eca8666fb7810016d5918011ce037b 100644 --- a/assdraw/wxAGG/PixelFormatConvertor.h +++ b/assdraw/wxAGG/PixelFormatConvertor.h @@ -28,8 +28,8 @@ #ifndef WX_AGG_PIXEL_FORMAT_CONVERTOR_H #define WX_AGG_PIXEL_FORMAT_CONVERTOR_H -#include "agg_pixfmt_rgb.h" -#include "agg_pixfmt_rgba.h" +#include <agg2/agg_pixfmt_rgb.h> +#include <agg2/agg_pixfmt_rgba.h> namespace { diff --git a/libaegisub/lua/modules/lfs.cpp b/libaegisub/lua/modules/lfs.cpp index 8053b6893a76fc28af0a6a77d308c5a86af398c8..38f29d7928852a64ba247379c0ff366c067b6220 100644 --- a/libaegisub/lua/modules/lfs.cpp +++ b/libaegisub/lua/modules/lfs.cpp @@ -112,7 +112,7 @@ DirectoryIterator *dir_new(const char *path, char **err) const char *get_mode(const char *path, char **err) { - return wrap(err, [ = ]() -> const char* { + return wrap(err, [ = ]() -> const char * { switch (bfs::status(path).type()) { case bfs::file_not_found: return nullptr; break; diff --git a/src/mkv_wrap.cpp b/src/mkv_wrap.cpp index bc9aa58d97a978112a6e5279b3822a6574cb01a3..acb4be0e7c9732b0be224ea1f3ad2bdc0c26c282 100644 --- a/src/mkv_wrap.cpp +++ b/src/mkv_wrap.cpp @@ -105,7 +105,7 @@ struct MkvStdIO final : InputStream { read = &MkvStdIO::Read; scan = &MkvStdIO::Scan; getcachesize = [](InputStream *) -> unsigned int { return 16 * 1024 * 1024; }; - geterror = [](InputStream * st) -> const char* { return ((MkvStdIO *)st)->error.c_str(); }; + geterror = [](InputStream * st) -> const char * { return ((MkvStdIO *)st)->error.c_str(); }; memalloc = [](InputStream *, size_t size) { return malloc(size); }; memrealloc = [](InputStream *, void *mem, size_t size) { return realloc(mem, size); }; memfree = [](InputStream *, void *mem) { free(mem); };