Browse Source

Add offset to glow

Michael Ragazzon 6 years ago
parent
commit
00f66332d8
3 changed files with 24 additions and 10 deletions
  1. 8 1
      Samples/basic/demo/data/demo.rml
  2. 13 7
      Source/Core/FontEffectGlow.cpp
  3. 3 2
      Source/Core/FontEffectGlow.h

+ 8 - 1
Samples/basic/demo/data/demo.rml

@@ -115,7 +115,7 @@ p.title
 {
 	font-size: 35px;
 	color: #b33;
-	font-effect: glow(3px #ed5);
+	font-effect: glow(3px 3px 2px 2px #733); /* 15px 5px  */
 }
 p.title1
 {
@@ -129,6 +129,12 @@ p.title2
 	color: transparent;
 	font-effect: blur(10px #ed5);
 }
+p.title3
+{
+	font-size: 35px;
+	color: #b33;
+	font-effect: shadow(2px 2px #ed5);
+}
 .center {
 	text-align: center;
 }
@@ -453,6 +459,7 @@ form h2
 	<p class="title" style="margin-top: 1.8em;">RmlUi 😍</p>
 	<p class="title1" style="margin-top: 1.8em;">RmlUi 😍</p>
 	<p class="title2" style="margin-top: 1.8em;">RmlUi 😍</p>
+	<p class="title3" style="margin-top: 1.8em;">RmlUi 😍</p>
 	<p>Have fun fiddling about in this demo.</p>
 	<p>Press 'F8' to open up the debugger.</p>
 	<p class="title" style="margin-top: 1em;">🎉</p>

+ 13 - 7
Source/Core/FontEffectGlow.cpp

@@ -50,14 +50,15 @@ bool FontEffectGlow::HasUniqueTexture() const
 	return true;
 }
 
-bool FontEffectGlow::Initialise(int _width_outline, int _width_blur)
+bool FontEffectGlow::Initialise(int _width_outline, int _width_blur, Vector2i _offset)
 {
-	if (_width_outline <= 0 || _width_blur <= 0)
+	if (_width_outline < 0 || _width_blur < 0)
 		return false;
 
 	width_outline = _width_outline;
 	width_blur = _width_blur;
 	combined_width = width_blur + width_outline;
+	offset = _offset;
 
 	// Outline filter.
 	filter_outline.Initialise(width_outline, FilterOperation::Dilation);
@@ -80,7 +81,7 @@ bool FontEffectGlow::Initialise(int _width_outline, int _width_blur)
 
 
 	// Gaussian blur filter
-	const float std_dev = .4f * float(width_blur);
+	const float std_dev = (width_blur == 0 ? 1.f : .4f * float(width_blur));
 	const float two_variance = 2.f * std_dev * std_dev;
 	const float gain = 1.f / Math::SquareRoot(Math::RMLUI_PI * two_variance);
 
@@ -115,8 +116,8 @@ bool FontEffectGlow::GetGlyphMetrics(Vector2i& origin, Vector2i& dimensions, con
 
 	if (dimensions.x * dimensions.y > 0)
 	{
-		origin.x -= combined_width;
-		origin.y -= combined_width;
+		origin.x += offset.x - combined_width;
+		origin.y += offset.y - combined_width;
 
 		dimensions.x += combined_width;
 		dimensions.y += combined_width;
@@ -149,8 +150,10 @@ FontEffectGlowInstancer::FontEffectGlowInstancer() : id_width_outline(PropertyId
 {
 	id_width_outline = RegisterProperty("width-outline", "1px", true).AddParser("length").GetId();
 	id_width_blur = RegisterProperty("width-blur", "-1px", true).AddParser("length").GetId();
+	id_offset_x = RegisterProperty("offset-x", "0px", true).AddParser("length").GetId();
+	id_offset_y = RegisterProperty("offset-y", "0px", true).AddParser("length").GetId();
 	id_color = RegisterProperty("color", "white", false).AddParser("color").GetId();
-	RegisterShorthand("font-effect", "width-outline, width-blur, color", ShorthandType::FallThrough);
+	RegisterShorthand("font-effect", "width-outline, width-blur, offset-x, offset-y, color", ShorthandType::FallThrough);
 }
 
 FontEffectGlowInstancer::~FontEffectGlowInstancer()
@@ -161,15 +164,18 @@ SharedPtr<FontEffect> FontEffectGlowInstancer::InstanceFontEffect(const String&
 {
 	RMLUI_UNUSED(name);
 
+	Vector2i offset;
 	int width_outline = properties.GetProperty(id_width_outline)->Get< int >();
 	int width_blur = properties.GetProperty(id_width_blur)->Get< int >();
+	offset.x = properties.GetProperty(id_offset_x)->Get< int >();
+	offset.y = properties.GetProperty(id_offset_y)->Get< int >();
 	Colourb color = properties.GetProperty(id_color)->Get< Colourb >();
 
 	if (width_blur < 0)
 		width_blur = width_outline;
 
 	auto font_effect = std::make_shared<FontEffectGlow>();
-	if (font_effect->Initialise(width_outline, width_blur))
+	if (font_effect->Initialise(width_outline, width_blur, offset))
 	{
 		font_effect->SetColour(color);
 		return font_effect;

+ 3 - 2
Source/Core/FontEffectGlow.h

@@ -49,7 +49,7 @@ public:
 	FontEffectGlow();
 	virtual ~FontEffectGlow();
 
-	bool Initialise(int width_outline, int width_blur);
+	bool Initialise(int width_outline, int width_blur, Vector2i offset);
 
 	bool HasUniqueTexture() const override;
 
@@ -59,6 +59,7 @@ public:
 
 private:
 	int width_outline, width_blur, combined_width;
+	Vector2i offset;
 	ConvolutionFilter filter_outline, filter_blur_x, filter_blur_y;
 };
 
@@ -77,7 +78,7 @@ public:
 	SharedPtr<FontEffect> InstanceFontEffect(const String& name, const PropertyDictionary& properties) override;
 
 private:
-	PropertyId id_width_outline, id_width_blur, id_color;
+	PropertyId id_width_outline, id_width_blur, id_offset_x, id_offset_y, id_color;
 };