Skip to content

Commit

Permalink
add JavaScriptDrawableControl
Browse files Browse the repository at this point in the history
  • Loading branch information
scheffle committed Jan 27, 2024
1 parent 907ab20 commit 0acfb07
Showing 1 changed file with 60 additions and 11 deletions.
71 changes: 60 additions & 11 deletions vstgui/uidescription-scripting/uiscripting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "../uidescription/uiviewcreator.h"
#include "../uidescription/uidescriptionaddonregistry.h"
#include "../uidescription/detail/uiviewcreatorattributes.h"
#include "../uidescription/viewcreator/controlcreator.h"
#include "../lib/iviewlistener.h"
#include "../lib/events.h"
#include "../lib/cresourcedescription.h"
Expand Down Expand Up @@ -411,11 +412,9 @@ struct DrawContextObject : ScriptObject,
};

//------------------------------------------------------------------------
struct JavaScriptDrawableView : CView
struct JavaScriptDrawable
{
using CView::CView;

void drawRect (CDrawContext* context, const CRect& rect) override;
void onDraw (CDrawContext* context, const CRect& rect, const CRect& viewSize);

void setup (ViewScriptObject* object);

Expand All @@ -424,6 +423,27 @@ struct JavaScriptDrawableView : CView
DrawContextObject drawContext;
};

//------------------------------------------------------------------------
struct JavaScriptDrawableView : CView,
JavaScriptDrawable
{
using CView::CView;

void drawRect (CDrawContext* context, const CRect& rect) override;
};

//------------------------------------------------------------------------
struct JavaScriptDrawableControl : CControl,
JavaScriptDrawable
{
using CControl::CControl;

void draw (CDrawContext* pContext) override;
void drawRect (CDrawContext* context, const CRect& rect) override;

CLASS_METHODS_NOCOPY (JavaScriptDrawableControl, CControl);
};

//------------------------------------------------------------------------
struct JavaScriptDrawableViewCreator : ViewCreatorAdapter
{
Expand All @@ -435,6 +455,17 @@ struct JavaScriptDrawableViewCreator : ViewCreatorAdapter
}
};

//------------------------------------------------------------------------
struct JavaScriptDrawableControlCreator : UIViewCreator::ControlCreator
{
IdStringPtr getViewName () const override { return "JavaScriptDrawableControl"; }
IdStringPtr getBaseViewName () const override { return UIViewCreator::kCControl; }
CView* create (const UIAttributes& attributes, const IUIDescription* description) const override
{
return new JavaScriptDrawableControl (CRect ());
}
};

struct IViewScriptObjectContext;

//------------------------------------------------------------------------
Expand Down Expand Up @@ -1199,7 +1230,7 @@ ViewScriptObject::ViewScriptObject (CView* view, IViewScriptObjectContext* conte
var->getReturnVar ()->setInt (control->getTag ());
});
}
if (auto drawable = dynamic_cast<JavaScriptDrawableView*> (view))
if (auto drawable = dynamic_cast<JavaScriptDrawable*> (view))
drawable->setup (this);
}

Expand Down Expand Up @@ -1489,16 +1520,16 @@ void DrawContextObject::onDestroy (CScriptVar* v)
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
void JavaScriptDrawableView::drawRect (CDrawContext* context, const CRect& rect)
void JavaScriptDrawable::onDraw (CDrawContext* context, const CRect& rect, const CRect& viewSize)
{
if (!scriptObject)
{
auto dashLength = std::round ((getWidth () * 2 + getHeight () * 2) / 40.);
auto dashLength = std::round ((viewSize.getWidth () * 2 + viewSize.getHeight () * 2) / 40.);
CLineStyle ls (CLineStyle::kLineCapButt, CLineStyle::kLineJoinMiter, 0,
{dashLength, dashLength});

auto lineWidth = 1.;
auto size = getViewSize ();
auto size = viewSize;
size.inset (lineWidth / 2., lineWidth / 2.);
context->setLineStyle (ls);
context->setLineWidth (lineWidth);
Expand All @@ -1518,8 +1549,7 @@ void JavaScriptDrawableView::drawRect (CDrawContext* context, const CRect& rect)

drawContext.setDrawContext (context, scriptContext->getUIDescription ());

CDrawContext::Transform tm (*context,
CGraphicsTransform ().translate (getViewSize ().getTopLeft ()));
CDrawContext::Transform tm (*context, CGraphicsTransform ().translate (viewSize.getTopLeft ()));

auto rectObj = makeScriptRect (rect);
auto scriptRoot = scriptContext->getRoot ();
Expand All @@ -1534,7 +1564,26 @@ void JavaScriptDrawableView::drawRect (CDrawContext* context, const CRect& rect)
}

//------------------------------------------------------------------------
void JavaScriptDrawableView::setup (ViewScriptObject* inObject) { scriptObject = inObject; }
void JavaScriptDrawable::setup (ViewScriptObject* inObject) { scriptObject = inObject; }

//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
void JavaScriptDrawableView::drawRect (CDrawContext* context, const CRect& rect)
{
onDraw (context, rect, getViewSize ());
}

//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
void JavaScriptDrawableControl::draw (CDrawContext* context) { drawRect (context, getViewSize ()); }

//------------------------------------------------------------------------
void JavaScriptDrawableControl::drawRect (CDrawContext* context, const CRect& rect)
{
onDraw (context, rect, getViewSize ());
}

//------------------------------------------------------------------------
//------------------------------------------------------------------------
Expand Down

0 comments on commit 0acfb07

Please sign in to comment.