From e91f6671c493ad29292c82843ae848f7dc144adc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 10 Apr 2015 19:01:20 +0200 Subject: [PATCH] Subtle gray background for images when hovered, mostly for dark items to be able to see them better. Also more state witchery. --- .../client/renderer/markdown/Document.scala | 8 +++++ .../markdown/segment/RenderSegment.scala | 32 +++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala index a159d2a47..7c22f0f2e 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala @@ -35,6 +35,11 @@ object Document { def render(document: Iterable[Segment], x: Int, y: Int, maxWidth: Int, maxHeight: Int, yOffset: Int, renderer: FontRenderer, mouseX: Int, mouseY: Int): Option[InteractiveSegment] = { val mc = Minecraft.getMinecraft + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS) + + // Because reasons. + GL11.glDisable(GL11.GL_ALPHA_TEST) + // Clear depth mask, then create masks in foreground above and below scroll area. GL11.glColor4f(1, 1, 1, 1) GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT) @@ -70,6 +75,9 @@ object Document { } if (mouseX < x || mouseX > x + maxWidth || mouseY < y || mouseY > y + maxHeight) hovered = None hovered.foreach(_.notifyHover()) + + GL11.glPopAttrib() + hovered } diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/RenderSegment.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/RenderSegment.scala index d922da599..4ed5c12bf 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/RenderSegment.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/RenderSegment.scala @@ -21,18 +21,44 @@ private[markdown] class RenderSegment(val parent: Segment, val title: String, va } override def render(x: Int, y: Int, indent: Int, maxWidth: Int, minY: Int, maxY: Int, renderer: FontRenderer, mouseX: Int, mouseY: Int): Option[InteractiveSegment] = { - val xOffset = (maxWidth - imageWidth(maxWidth)) / 2 + val width = imageWidth(maxWidth) + val height = imageHeight(maxWidth) + val xOffset = (maxWidth - width) / 2 val yOffset = 4 + (if (indent > 0) Document.lineHeight(renderer) else 0) val s = scale(maxWidth) - GL11.glColor4f(1, 1, 1, 1) + val hovered = checkHovered(mouseX, mouseY, x + xOffset, y + yOffset, width, height) + GL11.glPushMatrix() GL11.glTranslatef(x + xOffset, y + yOffset, 0) GL11.glScalef(s, s, s) + + GL11.glEnable(GL11.GL_BLEND) + GL11.glEnable(GL11.GL_ALPHA_TEST) + + if (hovered.isDefined) { + GL11.glColor4f(1, 1, 1, 0.15f) + GL11.glDisable(GL11.GL_TEXTURE_2D) + GL11.glBegin(GL11.GL_QUADS) + GL11.glVertex2f(0, 0) + GL11.glVertex2f(0, imageRenderer.getHeight) + GL11.glVertex2f(imageRenderer.getWidth, imageRenderer.getHeight) + GL11.glVertex2f(imageRenderer.getWidth, 0) + GL11.glEnd() + GL11.glEnable(GL11.GL_TEXTURE_2D) + } + + GL11.glColor4f(1, 1, 1, 1) + imageRenderer.render() + + GL11.glDisable(GL11.GL_BLEND) + GL11.glDisable(GL11.GL_ALPHA_TEST) + GL11.glDisable(GL11.GL_LIGHTING) + GL11.glPopMatrix() - checkHovered(mouseX, mouseY, x + xOffset, y + yOffset, imageWidth(maxWidth), imageHeight(maxWidth)) + hovered } override def toString: String = s"{RendererSegment: title = $title, imageRenderer = $imageRenderer}"