Example #1
0
        /// <summary>Draws an underline (or a strikethrough).</summary>
        public override void DrawUnderline(Renderman renderer)
        {
            // Setup the mesh:
            if (Underline == null)
            {
                // We'll need the root gameObject - this should always be on a TextNode, but the parentNode
                // will always be an Element. Therefore we can grab the gameObject via that parentNode:
                HtmlElement parent = RenderData.Node.parentNode as HtmlElement;

                Underline = new MeshBufferExtruded(parent.rootGameObject.transform);

                // Update material:
                Underline.SetMaterial(new Material(renderer.CurrentShaderSet.Extruded));

                Underline.ExtrudeAmount = Extrude;
            }

            // Update colours:
            Underline.FrontColor = renderer.FontColour;
            Underline.BackColor  = renderer.FontColour;
            Underline.SideColor  = renderer.FontColour;

            BoxRegion region = renderer.CurrentRegion;

            // 4 corners (back face):
            Vector3 a = renderer.PixelToWorldUnit(region.X, region.Y, renderer.TextDepth);
            Vector3 b = renderer.PixelToWorldUnit(region.MaxX, region.Y, renderer.TextDepth);
            Vector3 c = renderer.PixelToWorldUnit(region.MaxX, region.MaxY, renderer.TextDepth);
            Vector3 d = renderer.PixelToWorldUnit(region.X, region.MaxY, renderer.TextDepth);

            // Build a simple cube:
            Underline.BuildCube(a, b, c, d);
        }
Example #2
0
        internal override void Layout(LayoutBox box, Renderman renderer)
        {
            if (Characters == null)
            {
                return;
            }

            // Setup the mesh:
            if (Mesh == null)
            {
                // We'll need the root gameObject - this should always be on a TextNode, but the parentNode
                // will always be an Element. Therefore we can grab the gameObject via that parentNode:
                HtmlElement parent = RenderData.Node.parentNode as HtmlElement;

                Mesh = new MeshBufferExtruded(parent.rootGameObject.transform);

                // Update material:
                Mesh.SetMaterial(new Material(renderer.CurrentShaderSet.Extruded));

                Mesh.ExtrudeAmount = Extrude;
            }

            // Get the font colour:
            Color fontColour = BaseColour * renderer.ColorOverlay;

            // Update colours:
            Mesh.FrontColor = fontColour;
            Mesh.BackColor  = fontColour;
            Mesh.SideColor  = fontColour;

            // Update size:
            Mesh.XScaleFactor = FontSize;
            Mesh.YScaleFactor = FontSize;

            int verts = 0;
            int tris  = 0;

            for (int i = 0; i < Characters.Length; i++)
            {
                // Add vert/ tri count:
                Glyph character = Characters[i];

                if (character == null)
                {
                    continue;
                }

                int localTriCount;
                verts += Mesh.GetVertCount(character, out localTriCount);

                tris += localTriCount;
            }

            // Apply the size:
            Mesh.RequireSize(verts, tris);

            // Draw now!
            base.Layout(box, renderer);

            // Flush the mesh:
            Mesh.Flush();
        }