summaryrefslogtreecommitdiff
path: root/src/aftereffects/DrawbotBot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/aftereffects/DrawbotBot.cpp')
-rw-r--r--src/aftereffects/DrawbotBot.cpp239
1 files changed, 239 insertions, 0 deletions
diff --git a/src/aftereffects/DrawbotBot.cpp b/src/aftereffects/DrawbotBot.cpp
new file mode 100644
index 0000000..3d6cee6
--- /dev/null
+++ b/src/aftereffects/DrawbotBot.cpp
@@ -0,0 +1,239 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "DrawbotBot.h"
+
+
+DrawbotBot::DrawbotBot(struct SPBasicSuite *pica_basicP, PF_ContextH contextH, A_long appl_id) :
+ suites(pica_basicP),
+ _appl_id(appl_id),
+ _suiteP(NULL),
+ _drawbot_ref(NULL),
+ _supplier_ref(NULL),
+ _surface_ref(NULL)
+{
+ suites.EffectCustomUISuite1()->PF_GetDrawingReference(contextH, &_drawbot_ref);
+
+ _suiteP = suites.SupplierSuiteCurrent();
+
+ suites.DrawbotSuiteCurrent()->GetSupplier(_drawbot_ref, &_supplier_ref);
+ suites.DrawbotSuiteCurrent()->GetSurface(_drawbot_ref, &_surface_ref);
+
+ _brush_pos.x = 0.f;
+ _brush_pos.y = 0.f;
+
+ SetColor(PF_App_Color_TEXT);
+
+ _suiteP->GetDefaultFontSize(_supplier_ref, &_font_size);
+}
+
+
+DrawbotBot::~DrawbotBot()
+{
+
+}
+
+
+void DrawbotBot::SetColor(PF_App_ColorType color, float a)
+{
+ if(_appl_id == 'FXTC')
+ {
+ PF_App_Color app_color;
+
+ suites.AppSuite4()->PF_AppGetColor(color, &app_color);
+
+ _brush_color.red = (float)app_color.red / (float)PF_MAX_CHAN16;
+ _brush_color.green = (float)app_color.green / (float)PF_MAX_CHAN16;
+ _brush_color.blue = (float)app_color.blue / (float)PF_MAX_CHAN16;
+ }
+ else
+ {
+ // Premiere isn't doing this properly, so I'll have to.
+ // Only supporting the colors I'm actually using at the moment.
+ switch(color)
+ {
+ case PF_App_Color_BLACK:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.f;
+ break;
+
+ case PF_App_Color_WHITE:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 1.f;
+ break;
+
+ case PF_App_Color_RED:
+ _brush_color.red = 1.f;
+ _brush_color.green = _brush_color.blue = 0.f;
+ break;
+
+ case PF_App_Color_TEXT_DISABLED:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.6f;
+ break;
+
+ case PF_App_Color_SHADOW:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.3f;
+ break;
+
+ case PF_App_Color_HILITE:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.8f;
+ break;
+
+ case PF_App_Color_LIGHT_TINGE:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.7f;
+ break;
+
+ case PF_App_Color_BUTTON_FILL:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.5f;
+ break;
+
+ case PF_App_Color_BUTTON_PRESSED_FILL:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.3f;
+ break;
+
+ case PF_App_Color_PANEL_BACKGROUND:
+ {
+ PF_App_Color app_color;
+ suites.AppSuite4()->PF_AppGetBgColor(&app_color);
+
+ _brush_color.red = (float)app_color.red / (float)65535;
+ _brush_color.green = (float)app_color.green / (float)65535;
+ _brush_color.blue = (float)app_color.blue / (float)65535;
+ }
+ break;
+
+ default:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.9f;
+ break;
+ }
+ }
+
+ _brush_color.alpha = a;
+}
+
+
+void DrawbotBot::DrawLineTo(float x, float y, float brush_size)
+{
+ DRAWBOT_PathP pathP(_suiteP, _supplier_ref);
+ DRAWBOT_PenP penP(_suiteP, _supplier_ref, &_brush_color, brush_size);
+
+ suites.PathSuiteCurrent()->MoveTo(pathP.Get(), _brush_pos.x, _brush_pos.y);
+
+ suites.PathSuiteCurrent()->LineTo(pathP.Get(), x, y);
+
+ suites.SurfaceSuiteCurrent()->StrokePath(_surface_ref, penP.Get(), pathP.Get());
+
+ MoveTo(x, y);
+}
+
+
+void DrawbotBot::DrawRect(float w, float h, float brush_size) const
+{
+ DRAWBOT_PathP pathP(_suiteP, _supplier_ref);
+ DRAWBOT_PenP penP(_suiteP, _supplier_ref, &_brush_color, brush_size);
+
+ DRAWBOT_RectF32 rect;
+
+ rect.left = _brush_pos.x - 0.5f;
+ rect.top = _brush_pos.y - 0.5f;
+ rect.width = w;
+ rect.height = h;
+
+ suites.PathSuiteCurrent()->AddRect(pathP.Get(), &rect);
+
+ suites.SurfaceSuiteCurrent()->StrokePath(_surface_ref, penP.Get(), pathP.Get());
+}
+
+void DrawbotBot::PaintRect(float w, float h) const
+{
+ DRAWBOT_RectF32 rect;
+
+ rect.left = _brush_pos.x;
+ rect.top = _brush_pos.y;
+ rect.width = w;
+ rect.height = h;
+
+ suites.SurfaceSuiteCurrent()->PaintRect(_surface_ref, &_brush_color, &rect);
+}
+
+
+void DrawbotBot::PaintTriangle(float w, float h) const
+{
+ DRAWBOT_PathP pathP(_suiteP, _supplier_ref);
+ DRAWBOT_BrushP brushP(_suiteP, _supplier_ref, &_brush_color);
+
+ suites.PathSuiteCurrent()->MoveTo(pathP.Get(), _brush_pos.x, _brush_pos.y);
+
+ suites.PathSuiteCurrent()->LineTo(pathP.Get(), _brush_pos.x + w, _brush_pos.y);
+
+ suites.PathSuiteCurrent()->LineTo(pathP.Get(), _brush_pos.x + (w / 2.f),
+ _brush_pos.y + h);
+
+ suites.PathSuiteCurrent()->Close(pathP.Get());
+
+ suites.SurfaceSuiteCurrent()->FillPath(_surface_ref, brushP.Get(), pathP.Get(),
+ kDRAWBOT_FillType_Default);
+}
+
+
+void DrawbotBot::DrawString(
+ const DRAWBOT_UTF16Char *str,
+ DRAWBOT_TextAlignment align,
+ DRAWBOT_TextTruncation truncate,
+ float truncation_width) const
+{
+ DRAWBOT_BrushP brushP(_suiteP, _supplier_ref, &_brush_color);
+ DRAWBOT_FontP fontP(_suiteP, _supplier_ref, _font_size);
+
+ suites.SurfaceSuiteCurrent()->DrawString(_surface_ref, brushP.Get(), fontP.Get(), str,
+ &_brush_pos, align, truncate, truncation_width);
+}
+
+
+void DrawbotBot::DrawString(
+ const char *str,
+ DRAWBOT_TextAlignment align,
+ DRAWBOT_TextTruncation truncate,
+ float truncation_width) const
+{
+ DRAWBOT_UTF16Char u_str[256] = {'\0'};
+
+ DRAWBOT_UTF16Char *u = u_str;
+ const char *c = str;
+
+ if(*c != '\0')
+ {
+ do{
+ *u++ = *c++;
+
+ }while(*c != '\0');
+
+ *u = '\0';
+ }
+
+ DrawString(u_str, align, truncate, truncation_width);
+} \ No newline at end of file