forked from mia/Aegisub
65990cc0eb
csriapi.cpp is removed since the version a one dir up is the correct one, this one wasn't maintained. These patch files were used as base for porting the patches to guliverkli2. Originally committed to SVN as r2288.
123 lines
3.9 KiB
Diff
123 lines
3.9 KiB
Diff
Index: subtitles/RTS.cpp
|
|
===================================================================
|
|
--- subtitles/RTS.cpp (revision 2285)
|
|
+++ subtitles/RTS.cpp (working copy)
|
|
@@ -796,6 +796,7 @@
|
|
{
|
|
memset(m_effects, 0, sizeof(Effect*)*EF_NUMBEROFEFFECTS);
|
|
m_pClipper = NULL;
|
|
+ m_clipInverse = false;
|
|
m_scalex = m_scaley = 1;
|
|
}
|
|
|
|
@@ -1455,6 +1456,8 @@
|
|
params.Add(cmd.Mid(3)), cmd = cmd.Left(3);
|
|
else if(!cmd.Find(L"fs"))
|
|
params.Add(cmd.Mid(2)), cmd = cmd.Left(2);
|
|
+ else if(!cmd.Find(L"iclip"))
|
|
+ ;
|
|
else if(!cmd.Find(L"i"))
|
|
params.Add(cmd.Mid(1)), cmd = cmd.Left(1);
|
|
else if(!cmd.Find(L"kt") || !cmd.Find(L"kf") || !cmd.Find(L"ko"))
|
|
@@ -1573,7 +1576,7 @@
|
|
? (n == 0 ? FW_NORMAL : n == 1 ? FW_BOLD : n >= 100 ? n : org.fontWeight)
|
|
: org.fontWeight;
|
|
}
|
|
- else if(cmd == L"clip")
|
|
+ else if(cmd == L"clip" || cmd == L"iclip")
|
|
{
|
|
if(params.GetCount() == 1 && !sub->m_pClipper)
|
|
{
|
|
@@ -1588,6 +1591,9 @@
|
|
{
|
|
CRect r;
|
|
|
|
+ if(cmd == L"iclip") // TODO: Also support inverse vector clips?
|
|
+ sub->m_clipInverse = true;
|
|
+
|
|
r.SetRect(
|
|
wcstol(params[0], NULL, 10),
|
|
wcstol(params[1], NULL, 10),
|
|
@@ -2458,6 +2464,13 @@
|
|
|
|
p = p2;
|
|
|
|
+ // Rectangles for inverse clip
|
|
+ CRect iclipRect[4];
|
|
+ iclipRect[0] = CRect(0, 0, spd.w, clipRect.top);
|
|
+ iclipRect[1] = CRect(0, clipRect.top, clipRect.left, clipRect.bottom);
|
|
+ iclipRect[2] = CRect(clipRect.right, clipRect.top, spd.w, clipRect.bottom);
|
|
+ iclipRect[3] = CRect(0, clipRect.bottom, spd.w, spd.h);
|
|
+
|
|
pos = s->GetHeadPosition();
|
|
while(pos)
|
|
{
|
|
@@ -2467,7 +2480,17 @@
|
|
: (s->m_scrAlignment%3) == 0 ? org.x - l->m_width
|
|
: org.x - (l->m_width/2);
|
|
|
|
- bbox2 |= l->PaintShadow(spd, clipRect, pAlphaMask, p, org2, m_time, alpha);
|
|
+ if (s->m_clipInverse)
|
|
+ {
|
|
+ bbox2 |= l->PaintShadow(spd, iclipRect[0], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintShadow(spd, iclipRect[1], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintShadow(spd, iclipRect[2], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintShadow(spd, iclipRect[3], pAlphaMask, p, org2, m_time, alpha);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ bbox2 |= l->PaintShadow(spd, clipRect, pAlphaMask, p, org2, m_time, alpha);
|
|
+ }
|
|
|
|
p.y += l->m_ascent + l->m_descent;
|
|
}
|
|
@@ -2483,7 +2506,17 @@
|
|
: (s->m_scrAlignment%3) == 0 ? org.x - l->m_width
|
|
: org.x - (l->m_width/2);
|
|
|
|
- bbox2 |= l->PaintOutline(spd, clipRect, pAlphaMask, p, org2, m_time, alpha);
|
|
+ if (s->m_clipInverse)
|
|
+ {
|
|
+ bbox2 |= l->PaintOutline(spd, iclipRect[0], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintOutline(spd, iclipRect[1], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintOutline(spd, iclipRect[2], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintOutline(spd, iclipRect[3], pAlphaMask, p, org2, m_time, alpha);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ bbox2 |= l->PaintOutline(spd, clipRect, pAlphaMask, p, org2, m_time, alpha);
|
|
+ }
|
|
|
|
p.y += l->m_ascent + l->m_descent;
|
|
}
|
|
@@ -2499,7 +2532,17 @@
|
|
: (s->m_scrAlignment%3) == 0 ? org.x - l->m_width
|
|
: org.x - (l->m_width/2);
|
|
|
|
- bbox2 |= l->PaintBody(spd, clipRect, pAlphaMask, p, org2, m_time, alpha);
|
|
+ if (s->m_clipInverse)
|
|
+ {
|
|
+ bbox2 |= l->PaintBody(spd, iclipRect[0], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintBody(spd, iclipRect[1], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintBody(spd, iclipRect[2], pAlphaMask, p, org2, m_time, alpha);
|
|
+ bbox2 |= l->PaintBody(spd, iclipRect[3], pAlphaMask, p, org2, m_time, alpha);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ bbox2 |= l->PaintBody(spd, clipRect, pAlphaMask, p, org2, m_time, alpha);
|
|
+ }
|
|
|
|
p.y += l->m_ascent + l->m_descent;
|
|
}
|
|
Index: subtitles/RTS.h
|
|
===================================================================
|
|
--- subtitles/RTS.h (revision 2279)
|
|
+++ subtitles/RTS.h (working copy)
|
|
@@ -172,6 +172,7 @@
|
|
|
|
CRect m_rect, m_clip;
|
|
int m_topborder, m_bottomborder;
|
|
+ bool m_clipInverse;
|
|
|
|
double m_scalex, m_scaley;
|
|
|