From d3ca7e27da152ce2f3d46a2ddb581f596feb213a Mon Sep 17 00:00:00 2001
From: Sebi <pape@vr.rwth-aachen.de>
Date: Wed, 17 Apr 2024 16:59:09 +0200
Subject: [PATCH] Rewriting Dashers color handling and reading to support
 transparency

---
 Source/DasherVR/Private/Dasher3DWidget.cpp  |  39 ++-----
 Source/DasherVR/Private/SDasherWidget.cpp   | 108 ++++++--------------
 Source/DasherVR/Public/Dasher3DWidget.h     |  17 ++-
 Source/DasherVR/Public/SDasherWidget.h      |  15 ++-
 Source/Thirdparty/Dasher/DasherCore         |   2 +-
 Source/Thirdparty/Dasher/Lib/DasherCore.lib |   4 +-
 Source/Thirdparty/Dasher/Lib/DasherCore.pdb | Bin 10186752 -> 10326016 bytes
 7 files changed, 59 insertions(+), 126 deletions(-)

diff --git a/Source/DasherVR/Private/Dasher3DWidget.cpp b/Source/DasherVR/Private/Dasher3DWidget.cpp
index f5d673a..d52de31 100644
--- a/Source/DasherVR/Private/Dasher3DWidget.cpp
+++ b/Source/DasherVR/Private/Dasher3DWidget.cpp
@@ -78,9 +78,9 @@ std::pair<Dasher::screenint, Dasher::screenint> ADasher3DWidget::TextSize(Label*
 	return {CharScale.X, CharScale.Y};
 }
 
-void ADasher3DWidget::DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, int iColour){}
+void ADasher3DWidget::DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, const Dasher::ColorPalette::Color& color){}
 
-void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, int Colour, int iOutlineColour, int iThickness) {
+void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) {
 		
 	if (sizeX == 0 || sizeY == 0) return;
 	const FVector Scale = FVector(FVector2D(sizeX, sizeY) / DrawingSize, 
@@ -88,14 +88,7 @@ void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, D
 							+ FVector(extrusionLevel,extrusionLevel,0)*FLT_EPSILON;
 	const FVector2D Translation = FVector2D(posX, posY) / DrawingSize - FVector2D(0.5f, 0.5f);
 	
-	FLinearColor RectColor;
-
-	if (ColorPalette) {
-		RectColor = FLinearColor(ColorPalette->Colors[Colour].Red / 255.0, ColorPalette->Colors[Colour].Green / 255.0, ColorPalette->Colors[Colour].Blue / 255.0);
-	}
-	else {
-		RectColor = FLinearColor::Blue;
-	}
+	const FLinearColor RectColor = FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0);
 
 	BackBuffer->first.Add(FTransform(FQuat::Identity, FVector(Translation, -ExtrusionLevelToHeight(levelUnderCrosshair)) * WorldToMeters, Scale));
 	BackBuffer->second.Add(RectColor.R);
@@ -108,7 +101,7 @@ void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, D
 }
 
 // x & y are given as upper left corner of the character
-void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, int iColour) {
+void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, const Dasher::ColorPalette::Color& color) {
 		float CharacterOffset = 0; // in Meters
 		
 		for (int i = 0; i < label->m_strText.size(); i++)
@@ -154,17 +147,17 @@ void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::scr
 		}
 }
 
-void ADasher3DWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, int Colour, int iOutlineColour, int iThickness)
+void ADasher3DWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness)
 {
-	DrawCube((x2 - x1)/2 + x1, (y2-y1)/2 + y1, x2-x1, y2-y1, 1, 0, 0, Colour, iOutlineColour, iThickness);
+	DrawCube((x2 - x1)/2 + x1, (y2-y1)/2 + y1, x2-x1, y2-y1, 1, 0, 0, color, outlineColor, iThickness);
 }
 
-void ADasher3DWidget::DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, int iFillColour, int iLineColour, int iLineWidth)
+void ADasher3DWidget::DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& lineColor, int iLineWidth)
 {
 	//Todo
 }
 
-void ADasher3DWidget::Polyline(point* Points, int Number, int iWidth, int Colour)
+void ADasher3DWidget::Polyline(point* Points, int Number, int iWidth, const Dasher::ColorPalette::Color& color)
 {
 	for(int i = 1; i < Number; i++)
 	{
@@ -175,14 +168,7 @@ void ADasher3DWidget::Polyline(point* Points, int Number, int iWidth, int Colour
 		const FVector2D Translation = FVector2D((p2.x - p1.x)/2.0f + p1.x, (p2.y - p1.y)/2.0f + p1.y) / DrawingSize - FVector2D(0.5f, 0.5f);
 		const FQuat Rotation = FQuat().MakeFromEuler({0,0,FMath::RadiansToDegrees(FMath::Atan2(static_cast<float>(p2.y - p1.y), static_cast<float>(p2.x - p1.x)))});
 		
-		FLinearColor RectColor;
-
-		if (ColorPalette) {
-			RectColor = FLinearColor(ColorPalette->Colors[Colour].Red / 255.0, ColorPalette->Colors[Colour].Green / 255.0, ColorPalette->Colors[Colour].Blue / 255.0);
-		}
-		else {
-			RectColor = FLinearColor::Black;
-		}
+		const FLinearColor RectColor = FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0);
 
 		BackBuffer->first.Add(FTransform(Rotation, FVector(Translation, 0) * WorldToMeters, Scale));
 		BackBuffer->second.Add(RectColor.R);
@@ -195,7 +181,7 @@ void ADasher3DWidget::Polyline(point* Points, int Number, int iWidth, int Colour
 	}
 }
 
-void ADasher3DWidget::Polygon(point* Points, int Number, int fillColour, int outlineColour, int lineWidth)
+void ADasher3DWidget::Polygon(point* Points, int Number, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& outlineColor, int lineWidth)
 {
 	//Todo
 }
@@ -238,11 +224,6 @@ void ADasher3DWidget::Display()
 
 }
 
-void ADasher3DWidget::SetColourScheme(const Dasher::CColourIO::ColourInfo* pColourScheme)
-{
-	ColorPalette = pColourScheme;
-}
-
 bool ADasher3DWidget::IsPointVisible(Dasher::screenint x, Dasher::screenint y)
 {
 	return true;
diff --git a/Source/DasherVR/Private/SDasherWidget.cpp b/Source/DasherVR/Private/SDasherWidget.cpp
index dc69aa9..3f715fe 100644
--- a/Source/DasherVR/Private/SDasherWidget.cpp
+++ b/Source/DasherVR/Private/SDasherWidget.cpp
@@ -30,7 +30,6 @@ void SDasherWidget::UnpauseInput()
     InputPaused = false;
 }
 
-
 //Event Handlers
 //Mouse position saved for mouse Input
 FReply SDasherWidget::HandleMouseMoveEvent(const FGeometry& Geometry, const FPointerEvent& MouseEvent)
@@ -183,13 +182,6 @@ void SDasherWidget::SetParameter(FString ParameterName, FString Value) {
         }
 }
 
-
-
-//Set the colour Scheme for dasher
-void SDasherWidget::SetColourScheme(const Dasher::CColourIO::ColourInfo* pcolours) {
-  ColorPalette = pcolours;
-}
-
 //paints our stuff, then lets compoundwidget (super::) draw its stuff
 //This draws from bottom to top rectangles->lines->labels, this is enough for our use, but for more complex scenarios a proper layering system might have to be implemented
 int32 SDasherWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyClippingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const
@@ -212,7 +204,7 @@ int32 SDasherWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGe
         RectObject = static_cast<FFilledRect*>(GeneralObject.Get());
         Size = { FMath::Abs(RectObject->top.X - RectObject->bottom.X), FMath::Abs(RectObject->top.Y - RectObject->bottom.Y) };
         FSlateDrawElement::MakeBox(OutDrawElements, LayerId++, AllottedGeometry.ToPaintGeometry(Size, FSlateLayoutTransform(1, RectObject->top)), &MyBrush, ESlateDrawEffect::None, RectObject->color); //actually adds the box to the geometry
-        break;
+    	break;
       case Writing:
         WritingObject = static_cast<FWriting*>(GeneralObject.Get());
         Text = FString(UTF8_TO_TCHAR(WritingObject->label->m_strText.c_str()));
@@ -280,85 +272,51 @@ void SDasherWidget::Display() {
 }
 
 //Functions for Drawing
-void SDasherWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, int colour, int iOutlineColour, int iThickness)
+void SDasherWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness)
 {
-   FLinearColor RectColorFG = FLinearColor(0, 0, 0);
-   FLinearColor RectColorBG = FLinearColor(0, 0, 0);
-
-   FVector2D TopBG = FVector2D(x1, y1);
-   FVector2D BottomBG = FVector2D(x2, y2);
-   FVector2D TopFG(x1, y1);
-   FVector2D BottomFG(x2, y2);
-
-   if (iThickness && !(colour == 99 || colour == 96))
-   {
-       const int BGColour = iOutlineColour == -1 ? 3 : iOutlineColour;
-       TopFG = FVector2D(x1+iThickness, y1+iThickness);
-       BottomFG = FVector2D(x2-iThickness, y2-iThickness);
-
-       RectColorBG = FLinearColor(ColorPalette->Colors[BGColour].Red / 255.0, ColorPalette->Colors[BGColour].Green / 255.0, ColorPalette->Colors[BGColour].Blue / 255.0);
-       BackBuffer->Add(MakeUnique<FFilledRect>(TopBG, BottomBG, RectColorBG));
-   }
-
- 
-    if (colour == 99 || colour == 96)
-    {
-        RectColorFG = FLinearColor(ColorPalette->Colors[colour].Red / 255.0, ColorPalette->Colors[colour].Green / 255.0, ColorPalette->Colors[colour].Blue / 255.0, 0.5);
-    }
-    else
-    {
-        RectColorFG = FLinearColor(ColorPalette->Colors[colour].Red / 255.0, ColorPalette->Colors[colour].Green / 255.0, ColorPalette->Colors[colour].Blue / 255.0);
-    }
-
-    BackBuffer->Add(MakeUnique<FFilledRect>(TopFG, BottomFG, RectColorFG));
+	FVector2D TopBG = FVector2D(x1, y1);
+	FVector2D BottomBG = FVector2D(x2, y2);
+	FVector2D TopFG(x1, y1);
+	FVector2D BottomFG(x2, y2);
+
+	if (iThickness)
+	{
+		TopFG = FVector2D(x1+iThickness, y1+iThickness);
+		BottomFG = FVector2D(x2-iThickness, y2-iThickness);
+
+		TArray<FVector2D> PointArray = {
+		{TopBG.X, TopBG.Y},
+		{TopBG.X, BottomBG.Y},
+		{BottomBG.X, BottomBG.Y},
+		{BottomBG.X, TopBG.Y},
+		{TopBG.X, TopBG.Y}
+		};
+
+		BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iThickness), FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0f)));
+	}
+
+	if(color != Dasher::ColorPalette::noColor)
+	{
+		BackBuffer->Add(MakeUnique<FFilledRect>(TopFG, BottomFG, FLinearColor(color.Red / 255.0f, color.Green / 255.0f, color.Blue / 255.0f, color.Alpha / 255.0f)));
+	}
 }
 
-void SDasherWidget::DrawString(CDasherScreen::Label* lab, screenint x1, screenint y1, unsigned int iSize, int colour) {
-  const FVector2D Pos(x1, y1);
-
-  FLinearColor TextColor;
-
-  if (ColorPalette) {
-    TextColor = FLinearColor(ColorPalette->Colors[colour].Red / 255.0, ColorPalette->Colors[colour].Green / 255.0, ColorPalette->Colors[colour].Blue / 255.0);
-  }
-  else {
-    TextColor = FLinearColor::Black;
-  }
-  
-  BackBuffer->Add(MakeUnique<FWriting>(lab, Pos, static_cast<int>(iSize), TextColor));
+void SDasherWidget::DrawString(CDasherScreen::Label* lab, screenint x1, screenint y1, unsigned int iSize, const Dasher::ColorPalette::Color& color) {
+    BackBuffer->Add(MakeUnique<FWriting>(lab, FVector2D(x1, y1), static_cast<int>(iSize), FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0f)));
 }
 
-void SDasherWidget::Polyline(CDasherScreen::point* points, int number, int iwidth, int colour) {
-  
-  FLinearColor LinearColor;
-
-  if (ColorPalette) {
-    LinearColor = FLinearColor(ColorPalette->Colors[colour].Red / 255.0, ColorPalette->Colors[colour].Green / 255.0, ColorPalette->Colors[colour].Blue / 255.0);
-  }
-  else {
-    LinearColor = FLinearColor::Blue;
-  }
-
+void SDasherWidget::Polyline(CDasherScreen::point* points, int number, int iwidth, const Dasher::ColorPalette::Color& color) {
   TArray<FVector2D> PointArray;
   for (int i = 0; i < number; i++) {
     FVector2D Point(points[i].x, points[i].y);
     PointArray.Add(Point);
   }
   
-  BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iwidth), LinearColor));
+  BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iwidth), FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0f)));
 }
 
 //techincally polygons are just multiple polylines. Dasher doesn't actually draw polygons in our case.
-void SDasherWidget::Polygon(CDasherScreen::point* points, int number, int fillcolour, int outlinecolour, int iwidth) {
-  FLinearColor LinearColor;
-
-  if (ColorPalette) {
-    LinearColor = FLinearColor(ColorPalette->Colors[outlinecolour].Red / 255.0, ColorPalette->Colors[outlinecolour].Green / 255.0, ColorPalette->Colors[outlinecolour].Blue / 255.0);
-  }
-  else {
-    LinearColor = FLinearColor::Blue;
-  }
-
+void SDasherWidget::Polygon(CDasherScreen::point* points, int number, const Dasher::ColorPalette::Color& fillcolor, const Dasher::ColorPalette::Color& outlinecolor, int iwidth) {
   TArray<FVector2D> PointArray;
   for (int i = 0; i < number; i++) {
     FVector2D Point(points[i].x, points[i].y);
@@ -366,7 +324,7 @@ void SDasherWidget::Polygon(CDasherScreen::point* points, int number, int fillco
   }
   PointArray.Add(FVector2D(points[0].x, points[0].y));
 
-  BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iwidth), LinearColor));
+  BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iwidth), FLinearColor(outlinecolor.Red / 255.0, outlinecolor.Green / 255.0, outlinecolor.Blue / 255.0, outlinecolor.Alpha / 255.0)));
 }
 
 //We pass through the contents of the dasher buffer
diff --git a/Source/DasherVR/Public/Dasher3DWidget.h b/Source/DasherVR/Public/Dasher3DWidget.h
index 2444822..df3167a 100644
--- a/Source/DasherVR/Public/Dasher3DWidget.h
+++ b/Source/DasherVR/Public/Dasher3DWidget.h
@@ -41,15 +41,14 @@ public:
 	virtual void Tick(float DeltaTime) override;
 
 	virtual std::pair<Dasher::screenint, Dasher::screenint> TextSize(Label* label, unsigned iFontSize) override;
-	virtual void DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, int iColour) override;
-	virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, int Colour, int iOutlineColour, int iThickness) override;
-	virtual void DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, int Colour, int iOutlineColour, int iThickness) override;
-	virtual void Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, int iColour) override;
-	virtual void DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, int iFillColour, int iLineColour, int iLineWidth) override;
-	virtual void Polyline(point* Points, int Number, int iWidth, int Colour) override;
-	virtual void Polygon(point* Points, int Number, int fillColour, int outlineColour, int lineWidth) override;
+	virtual void DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, const Dasher::ColorPalette::Color& color) override;
+	virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) override;
+	virtual void DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) override;
+	virtual void Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, const Dasher::ColorPalette::Color& color) override;
+	virtual void DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& lineColor, int iLineWidth) override;
+	virtual void Polyline(point* Points, int Number, int iWidth, const Dasher::ColorPalette::Color& color) override;
+	virtual void Polygon(point* Points, int Number, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& outlineColor, int lineWidth) override;
 	virtual void Display() override;
-	virtual void SetColourScheme(const Dasher::CColourIO::ColourInfo* pColourScheme) override;
 	virtual bool IsPointVisible(Dasher::screenint x, Dasher::screenint y) override;
 	virtual bool GetScreenCoords(Dasher::screenint& iX, Dasher::screenint& iY, Dasher::CDasherView* pView) override;
 	virtual bool MultiSizeFonts() override { return true; }
@@ -69,8 +68,6 @@ public:
 	virtual void PostInitializeComponents() override;
 
 private:
-	// stores color information 
-	const Dasher::CColourIO::ColourInfo* ColorPalette = nullptr;
 	FVector2D CursorPosition;
 	float WorldToMeters; // normally 100
 	FVector2D DrawingSize = {1000,1000}; // Rendering Resolution
diff --git a/Source/DasherVR/Public/SDasherWidget.h b/Source/DasherVR/Public/SDasherWidget.h
index 74eac99..b3fa7ad 100644
--- a/Source/DasherVR/Public/SDasherWidget.h
+++ b/Source/DasherVR/Public/SDasherWidget.h
@@ -86,19 +86,17 @@ public:
 
 	//set of functions inherited from Dasherscreen used for displaying, see DasherScreen for further info
 
-	virtual void SetColourScheme(const Dasher::CColourIO::ColourInfo* pcolours) override;
-
     virtual std::pair<screenint, screenint> TextSize(CDasherScreen::Label* Label, unsigned int Size) override;
 
-	virtual void DrawString(CDasherScreen::Label *label, screenint x1, screenint y1, unsigned int size, int colour) override;
+	virtual void DrawString(CDasherScreen::Label *label, screenint x1, screenint y1, unsigned int size, const Dasher::ColorPalette::Color& color) override;
 
-	virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, int colour, int ioutlinecolour, int ithickness) override;
+	virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlinecolor, int ithickness) override;
 
-	virtual void DrawCircle(screenint icx, screenint icy, screenint ir, int ifillcolour, int ilinecolour, int ithickness) override {} //we don't really need to draw circles, so it's not implemented
+	virtual void DrawCircle(screenint icx, screenint icy, screenint ir, const Dasher::ColorPalette::Color& ifillcolor, const Dasher::ColorPalette::Color& ilinecolor, int ithickness) override {} //we don't really need to draw circles, so it's not implemented
 
-	virtual void Polyline(CDasherScreen::point* points, int number, int iwidth, int colour) override;
+	virtual void Polyline(CDasherScreen::point* points, int number, int iwidth, const Dasher::ColorPalette::Color& color) override;
 
-	virtual void Polygon(CDasherScreen::point* points, int number, int fillcolour, int outlinecolour, int iwidth) override;
+	virtual void Polygon(CDasherScreen::point* points, int number, const Dasher::ColorPalette::Color& fillcolor, const Dasher::ColorPalette::Color& outlinecolor, int iwidth) override;
 
 	virtual void Display() override;
 
@@ -137,7 +135,7 @@ public:
 	//Allows to Pause Input
 	void PauseInput();
 	void UnpauseInput();
-	
+
 	FDasherMouseUpDelegate MouseUpListeners;
 	FDasherMouseUpDelegate MouseDownListeners;
 	FBufferManiputlationDelegate CharacterEntered;
@@ -171,7 +169,6 @@ private:
 
 protected:
 	// stores color information 
-	const Dasher::CColourIO::ColourInfo* ColorPalette = nullptr;
 	TSharedPtr<Dasher::DasherInterface> DasherMainInterface;
 };
 
diff --git a/Source/Thirdparty/Dasher/DasherCore b/Source/Thirdparty/Dasher/DasherCore
index 6cc6411..a061849 160000
--- a/Source/Thirdparty/Dasher/DasherCore
+++ b/Source/Thirdparty/Dasher/DasherCore
@@ -1 +1 @@
-Subproject commit 6cc641100217e9e31cc949974724d2346eba7b15
+Subproject commit a061849126815c95bda625aee511b63030904236
diff --git a/Source/Thirdparty/Dasher/Lib/DasherCore.lib b/Source/Thirdparty/Dasher/Lib/DasherCore.lib
index bd77a09..0541fb6 100644
--- a/Source/Thirdparty/Dasher/Lib/DasherCore.lib
+++ b/Source/Thirdparty/Dasher/Lib/DasherCore.lib
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:91a02180462eac8d5b805d8ab56e6372f0952713e541722e1266ccdd01800930
-size 20021478
+oid sha256:461b5d6f6fec5470088444f0467fd5a7ed51f135bef940b1fc1142d950a950dd
+size 19978948
diff --git a/Source/Thirdparty/Dasher/Lib/DasherCore.pdb b/Source/Thirdparty/Dasher/Lib/DasherCore.pdb
index bd97442b08d1e1a2f37728fea5e52f9480e3ad91..130b41dcca7bc1dfc61498ffa647656a8c135793 100644
GIT binary patch
delta 90455
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

delta 12169
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
F0|1=#K6L;9

-- 
GitLab