aboutsummaryrefslogtreecommitdiff
path: root/engines/tony/font.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tony/font.cpp')
-rw-r--r--engines/tony/font.cpp185
1 files changed, 119 insertions, 66 deletions
diff --git a/engines/tony/font.cpp b/engines/tony/font.cpp
index 8cc60a917b..5712014bf2 100644
--- a/engines/tony/font.cpp
+++ b/engines/tony/font.cpp
@@ -152,12 +152,19 @@ RMGfxPrimitive *RMFont::MakeLetterPrimitive(byte bChar, int &nLength) {
return prim;
}
-void RMFont::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim2) {
- RMFontPrimitive *prim = (RMFontPrimitive *)prim2;
+void RMFont::Draw(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim2) {
+ CORO_BEGIN_CONTEXT;
+ CORO_END_CONTEXT(_ctx);
+
+ RMFontPrimitive *prim = (RMFontPrimitive *)prim2;
+
+ CORO_BEGIN_CODE(_ctx);
+
+ // Richiama la Draw della lettera assegnata alla primitiva
+ if (prim->m_nChar != -1)
+ CORO_INVOKE_2(m_letter[prim->m_nChar].Draw, bigBuf, prim);
- // Richiama la Draw della lettera assegnata alla primitiva
- if (prim->m_nChar != -1)
- m_letter[prim->m_nChar].Draw(bigBuf,prim);
+ CORO_END_CODE;
}
void RMFont::Close(void) {
@@ -1845,10 +1852,10 @@ void RMText::SetMaxLineLength(int max) {
maxLineLength = max;
}
-bool RMText::RemoveThis() {
+void RMText::RemoveThis(CORO_PARAM, bool &result) {
// Qui possiamo fare i controlli sul numero di frame, sul tempo trascorso
// etc.
- return true;
+ result = true;
}
@@ -2007,7 +2014,11 @@ void RMText::ClipOnScreen(RMGfxPrimitive *prim) {
if (prim->Dst().y1+m_dimy > 475) prim->Dst().y1 = 475 - m_dimy;
}
-void RMText::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+void RMText::Draw(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+ CORO_BEGIN_CONTEXT;
+ CORO_END_CONTEXT(_ctx);
+
+ CORO_BEGIN_CODE(_ctx);
// Allinea orizzontalmente
if (aHorType == HCENTER)
prim->Dst().TopLeft() -= RMPoint(m_dimx / 2, 0);
@@ -2016,22 +2027,20 @@ void RMText::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
// Alinea verticalemente
- switch (aVerType) {
- case VTOP:
- break;
+ if (aVerType == VTOP) {
- case VCENTER:
- prim->Dst().y1-=m_dimy/2;
- break;
+ } else if (aVerType == VCENTER) {
+ prim->Dst().y1 -= m_dimy / 2;
- case VBOTTOM:
- prim->Dst().y1-=m_dimy;
- break;
+ } else if (aVerType == VBOTTOM) {
+ prim->Dst().y1 -= m_dimy;
}
ClipOnScreen(prim);
- RMGfxWoodyBuffer::Draw(bigBuf,prim);
+ CORO_INVOKE_2(RMGfxWoodyBuffer::Draw, bigBuf, prim);
+
+ CORO_END_CODE;
}
/****************************************************************************\
@@ -2127,7 +2136,7 @@ void RMTextDialog::RemoveThis(CORO_PARAM, bool &result) {
}
if (!m_bNoTab)
- if ((GetAsyncKeyState(Common::KEYCODE_TAB) & 0x8001) == 0x8001)
+ if (_vm->GetEngine()->GetInput().GetAsyncKeyState(Common::KEYCODE_TAB))
return;
if (!m_bNoTab)
@@ -2173,16 +2182,23 @@ void RMTextDialog::Unregister(void) {
CoroScheduler.setEvent(hEndDisplay);
}
-void RMTextDialog::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+void RMTextDialog::Draw(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+ CORO_BEGIN_CONTEXT;
+ CORO_END_CONTEXT(_ctx);
+
+ CORO_BEGIN_CODE(_ctx);
+
if (m_startTime == 0)
m_startTime = _vm->GetTime();
if (m_bShowed) {
if (bCfgSottotitoli || m_bAlwaysDisplay) {
prim->Dst().TopLeft() = dst;
- RMText::Draw(bigBuf, prim);
+ CORO_INVOKE_2(RMText::Draw, bigBuf, prim);
}
}
+
+ CORO_END_CODE;
}
void RMTextDialog::SetCustomSkipHandle(uint32 hCustom) {
@@ -2217,17 +2233,23 @@ RMTextDialogScrolling::RMTextDialogScrolling(RMLocation *loc) {
RMTextDialogScrolling::~RMTextDialogScrolling() {
}
-void RMTextDialogScrolling::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
- RMPoint curDst;
+void RMTextDialogScrolling::Draw(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+ CORO_BEGIN_CONTEXT;
+ RMPoint curDst;
+ CORO_END_CONTEXT(_ctx);
+
+ CORO_BEGIN_CODE(_ctx);
- curDst = dst;
+ _ctx->curDst = dst;
if (curLoc != NULL)
dst -= curLoc->ScrollPosition() - startScroll;
- RMTextDialog::Draw(bigBuf, prim);
+ CORO_INVOKE_2(RMTextDialog::Draw, bigBuf, prim);
+
+ dst = _ctx->curDst;
- dst = curDst;
+ CORO_END_CODE;
}
void RMTextDialogScrolling::ClipOnScreen(RMGfxPrimitive *prim) {
@@ -2298,7 +2320,12 @@ void RMTextItemName::DoFrame(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMLocation &
}
-void RMTextItemName::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+void RMTextItemName::Draw(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+ CORO_BEGIN_CONTEXT;
+ CORO_END_CONTEXT(_ctx);
+
+ CORO_BEGIN_CODE(_ctx);
+
// Se non c'e' testo, e' inutile continuare
if (m_buf == NULL)
return;
@@ -2306,7 +2333,9 @@ void RMTextItemName::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
// Setta come coordinate destinazione quelle del mouse
prim->Dst().TopLeft() = m_mpos-RMPoint(0, 30);
- RMText::Draw(bigBuf,prim);
+ CORO_INVOKE_2(RMText::Draw, bigBuf, prim);
+
+ CORO_END_CODE;
}
RMPoint RMTextItemName::GetHotspot() {
@@ -2411,9 +2440,13 @@ void RMDialogChoice::AddChoice(RMString string) {
m_drawedStrings[m_curAdded++].WriteText(string,0);
}
-void RMDialogChoice::Prepare(void) {
- int i;
- RMPoint ptPos;
+void RMDialogChoice::Prepare(CORO_PARAM) {
+ CORO_BEGIN_CONTEXT;
+ int i;
+ RMPoint ptPos;
+ CORO_END_CONTEXT(_ctx);
+
+ CORO_BEGIN_CODE(_ctx);
AddPrim(new RMGfxPrimitive(&DlgText,RMPoint(0,0)));
AddPrim(new RMGfxPrimitive(&DlgTextLine,RMPoint(0,155)));
@@ -2421,53 +2454,60 @@ void RMDialogChoice::Prepare(void) {
AddPrim(new RMGfxPrimitive(&DlgTextLine,RMPoint(0,155+83+83)));
AddPrim(new RMGfxPrimitive(&DlgTextLine,RMPoint(0,155+83+83+83)));
- ptPos.Set(20,90);
+ _ctx->ptPos.Set(20,90);
- for (i = 0; i < m_numChoices; i++) {
- AddPrim(new RMGfxPrimitive(&m_drawedStrings[i], ptPos));
- m_ptDrawStrings[i] = ptPos;
- ptPos.Offset(0,m_drawedStrings[i].Dimy() + 15);
+ for (_ctx->i = 0; _ctx->i < m_numChoices; _ctx->i++) {
+ AddPrim(new RMGfxPrimitive(&m_drawedStrings[_ctx->i], _ctx->ptPos));
+ m_ptDrawStrings[_ctx->i] = _ctx->ptPos;
+ _ctx->ptPos.Offset(0,m_drawedStrings[_ctx->i].Dimy() + 15);
}
- DrawOT();
+ CORO_INVOKE_0(DrawOT);
ClearOT();
- m_ptDrawPos.Set(0,480-ptPos.y);
+ m_ptDrawPos.Set(0,480-_ctx->ptPos.y);
+
+ CORO_END_CODE;
}
-void RMDialogChoice::SetSelected(int pos) {
- //uint16 * buf = (uint16 *)m_buf;
- RMGfxBox box;
- RMRect rc;
+void RMDialogChoice::SetSelected(CORO_PARAM, int pos) {
+ CORO_BEGIN_CONTEXT;
+ RMGfxBox box;
+ RMRect rc;
+ CORO_END_CONTEXT(_ctx);
+
+ CORO_BEGIN_CODE(_ctx);
if (pos == m_curSelection)
return;
- box.SetPriority(5);
+ _ctx->box.SetPriority(5);
if (m_curSelection != -1) {
- box.SetColor(0xCC, 0xCC, 0xFF);
- rc.TopLeft()=RMPoint(18, m_ptDrawStrings[m_curSelection].y);
- rc.BottomRight() = rc.TopLeft() + RMPoint(597, m_drawedStrings[m_curSelection].Dimy());
- AddPrim(new RMGfxPrimitive(&box, rc));
+ _ctx->box.SetColor(0xCC, 0xCC, 0xFF);
+ _ctx->rc.TopLeft()=RMPoint(18, m_ptDrawStrings[m_curSelection].y);
+ _ctx->rc.BottomRight() = _ctx->rc.TopLeft() + RMPoint(597, m_drawedStrings[m_curSelection].Dimy());
+ AddPrim(new RMGfxPrimitive(&_ctx->box, _ctx->rc));
AddPrim(new RMGfxPrimitive(&m_drawedStrings[m_curSelection], m_ptDrawStrings[m_curSelection]));
- DrawOT();
+ CORO_INVOKE_0(DrawOT);
ClearOT();
}
if (pos != -1) {
- box.SetColor(100, 100, 100);
- rc.TopLeft()=RMPoint(18, m_ptDrawStrings[pos].y);
- rc.BottomRight() = rc.TopLeft()+RMPoint(597, m_drawedStrings[pos].Dimy());
- AddPrim(new RMGfxPrimitive(&box, rc));
+ _ctx->box.SetColor(100, 100, 100);
+ _ctx->rc.TopLeft()=RMPoint(18, m_ptDrawStrings[pos].y);
+ _ctx->rc.BottomRight() = _ctx->rc.TopLeft()+RMPoint(597, m_drawedStrings[pos].Dimy());
+ AddPrim(new RMGfxPrimitive(&_ctx->box, _ctx->rc));
AddPrim(new RMGfxPrimitive(&m_drawedStrings[pos], m_ptDrawStrings[pos]));
}
- DrawOT();
+ CORO_INVOKE_0(DrawOT);
ClearOT();
m_curSelection = pos;
+
+ CORO_END_CODE;
}
void RMDialogChoice::Show(CORO_PARAM, RMGfxTargetBuffer *bigBuf) {
@@ -2480,7 +2520,7 @@ void RMDialogChoice::Show(CORO_PARAM, RMGfxTargetBuffer *bigBuf) {
CORO_BEGIN_CODE(_ctx);
- Prepare();
+ CORO_INVOKE_0(Prepare);
m_bShow = false;
if (!m_nInList && bigBuf != NULL)
@@ -2513,12 +2553,19 @@ void RMDialogChoice::Show(CORO_PARAM, RMGfxTargetBuffer *bigBuf) {
CORO_END_CODE;
}
-void RMDialogChoice::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+void RMDialogChoice::Draw(CORO_PARAM, RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) {
+ CORO_BEGIN_CONTEXT;
+ CORO_END_CONTEXT(_ctx);
+
+ CORO_BEGIN_CODE(_ctx);
+
if (m_bShow == false)
return;
prim->SetDst(m_ptDrawPos);
- RMGfxSourceBuffer16::Draw(bigBuf, prim);
+ CORO_INVOKE_2(RMGfxSourceBuffer16::Draw, bigBuf, prim);
+
+ CORO_END_CODE;
}
@@ -2553,24 +2600,30 @@ void RMDialogChoice::Hide(CORO_PARAM) {
}
-bool RMDialogChoice::RemoveThis(void) {
- return bRemoveFromOT;
+void RMDialogChoice::RemoveThis(CORO_PARAM, bool &result) {
+ result = bRemoveFromOT;
}
-void RMDialogChoice::DoFrame(RMPoint ptMousePos) {
- int i;
-
+void RMDialogChoice::DoFrame(CORO_PARAM, RMPoint ptMousePos) {
+ CORO_BEGIN_CONTEXT;
+ int i;
+ CORO_END_CONTEXT(_ctx);
+
+ CORO_BEGIN_CODE(_ctx);
+
if (ptMousePos.y > m_ptDrawPos.y) {
- for (i = 0; i < m_numChoices; i++) {
- if ((ptMousePos.y >= m_ptDrawPos.y+m_ptDrawStrings[i].y) && (ptMousePos.y < m_ptDrawPos.y+m_ptDrawStrings[i].y+m_drawedStrings[i].Dimy())) {
- SetSelected(i);
+ for (_ctx->i = 0; _ctx->i < m_numChoices; _ctx->i++) {
+ if ((ptMousePos.y >= m_ptDrawPos.y+m_ptDrawStrings[_ctx->i].y) && (ptMousePos.y < m_ptDrawPos.y+m_ptDrawStrings[_ctx->i].y+m_drawedStrings[_ctx->i].Dimy())) {
+ CORO_INVOKE_1(SetSelected, _ctx->i);
break;
}
}
- if (i == m_numChoices)
- SetSelected(-1);
+ if (_ctx->i == m_numChoices)
+ CORO_INVOKE_1(SetSelected, -1);
}
+
+ CORO_END_CODE;
}
int RMDialogChoice::GetSelection(void) {