1 #include "debugscript.h"
7 void DebugScript::ParseAction()
9 std::string actionType;
12 while (actionType[0] == '#')
15 std::getline(inp, tmp);
16 inp >> std::ws >> actionType;
18 if (actionType == "loop")
20 inp >> currentAction.loops >> actionType;
24 currentAction.loops = 1;
27 if (actionType == "wait")
29 currentAction.type = AT_WaitFrame;
32 else if (actionType == "translate")
36 currentAction.type = AT_Translate;
37 currentAction.x = RealFromStr(_x.c_str());
38 currentAction.y = RealFromStr(_y.c_str());
41 else if (actionType == "zoom")
43 std::string _x, _y, _z;
44 inp >> _x >> _y >> _z;
45 currentAction.type = AT_Zoom;
46 currentAction.x = RealFromStr(_x.c_str());
47 currentAction.y = RealFromStr(_y.c_str());
48 currentAction.z = RealFromStr(_z.c_str());
50 else if (actionType == "pxtranslate")
52 inp >> currentAction.ix >> currentAction.iy;
53 currentAction.type = AT_TranslatePx;
55 else if (actionType == "pxzoom")
57 inp >> currentAction.ix >> currentAction.iy >> currentAction.iz;
58 currentAction.type = AT_ZoomPx;
60 else if (actionType == "gpu")
62 currentAction.type = AT_SetGPURendering;
64 else if (actionType == "cpu")
66 currentAction.type = AT_SetCPURendering;
68 else if (actionType == "lazy")
70 currentAction.type = AT_EnableLazyRendering;
72 else if (actionType == "nolazy")
74 currentAction.type = AT_DisableLazyRendering;
76 else if (actionType == "quit")
78 currentAction.type = AT_Quit;
80 else if (actionType == "loadsvg")
82 currentAction.type = AT_LoadSVG;
83 inp >> currentAction.textargs;
85 else if (actionType == "label")
87 currentAction.type = AT_Label;
88 inp >> currentAction.textargs;
90 else if (actionType == "goto")
92 currentAction.type = AT_Goto;
93 inp >> currentAction.textargs;
95 else if (actionType == "debug")
97 currentAction.type = AT_Debug;
98 getline(inp,currentAction.textargs);
102 bool DebugScript::Execute(View *view, Screen *scr)
104 if (currentAction.loops <= 0)
106 if (m_index >= m_actions.size())
109 if (m_labels.size() > 0)
111 m_actions.push_back(currentAction);
117 currentAction = m_actions[m_index++];
120 switch(currentAction.type)
127 view->Translate(currentAction.x, currentAction.y);
130 view->Translate(Real(currentAction.ix)/Real(scr->ViewportWidth()), Real(currentAction.iy)/Real(scr->ViewportHeight()));
133 view->ScaleAroundPoint(currentAction.x, currentAction.y, currentAction.z);
136 view->ScaleAroundPoint(Real(currentAction.ix)/Real(scr->ViewportWidth()),Real(currentAction.iy)/Real(scr->ViewportHeight()), Real(expf(-currentAction.iz/20.f)));
138 case AT_SetGPURendering:
139 view->SetGPURendering(true);
141 case AT_SetCPURendering:
142 view->SetGPURendering(false);
144 case AT_EnableLazyRendering:
145 view->SetLazyRendering(true);
147 case AT_DisableLazyRendering:
148 view->SetLazyRendering(false);
152 #ifdef TRANSFORM_OBJECTS_NOT_VIEW
153 view->Doc().LoadSVG(currentAction.textargs, Rect(Real(1)/Real(2),Real(1)/Real(2),Real(1)/Real(800),Real(1)/Real(600)));
155 const Rect & bounds = view->GetBounds();
156 view->Doc().LoadSVG(currentAction.textargs, Rect(bounds.x+bounds.w/Real(2),bounds.y+bounds.h/Real(2),bounds.w/Real(800),bounds.h/Real(600)));
158 currentAction.type = AT_WaitFrame;
159 view->ForceRenderDirty();
160 view->ForceBufferDirty();
161 view->ForceBoundsDirty();
162 currentAction.loops = 1;
166 m_labels[currentAction.textargs] = m_index;
167 currentAction.type = AT_WaitFrame;
168 currentAction.loops = 1;
171 m_index = m_labels[currentAction.textargs];
172 currentAction.loops = 1;
175 Debug("View bounds: %s", view->GetBounds().Str().c_str());
176 if (currentAction.textargs.size() > 0)
177 Debug("%s", currentAction.textargs.c_str());
180 Fatal("Unknown script command in queue.");
182 currentAction.loops--;