rounded theme stuff

This commit is contained in:
Cloudburst
2021-07-20 22:10:53 +02:00
parent a8b3b1c53b
commit a1d8e3d567
3 changed files with 101 additions and 22 deletions

View File

@@ -19,8 +19,9 @@ public interface MeteorWidget extends BaseWidget {
default void renderBackground(GuiRenderer renderer, WWidget widget, boolean pressed, boolean mouseOver) { default void renderBackground(GuiRenderer renderer, WWidget widget, boolean pressed, boolean mouseOver) {
MeteorRoundedGuiTheme theme = theme(); MeteorRoundedGuiTheme theme = theme();
int r = theme.roundAmount(); int r = theme.roundAmount();
double s = theme.scale(2);
Color outlineColor = theme.outlineColor.get(pressed, mouseOver); Color outlineColor = theme.outlineColor.get(pressed, mouseOver);
GuiUtils.quadRounded(renderer, widget, theme.backgroundColor.get(pressed, mouseOver), r); GuiUtils.quadRounded(renderer, widget.x + s, widget.y + s, widget.width - s * 2, widget.height - s * 2, theme.backgroundColor.get(pressed, mouseOver), r);
GuiUtils.quadOutlineRounded(renderer, widget, outlineColor, r, theme.scale(2)); GuiUtils.quadOutlineRounded(renderer, widget, outlineColor, r, s);
} }
} }

View File

@@ -5,10 +5,22 @@
package cloudburst.rejects.gui.themes.rounded.widgets; package cloudburst.rejects.gui.themes.rounded.widgets;
import net.minecraft.client.gui.screen.Screen;
import cloudburst.rejects.gui.themes.rounded.MeteorRoundedGuiTheme;
import cloudburst.rejects.gui.themes.rounded.MeteorWidget; import cloudburst.rejects.gui.themes.rounded.MeteorWidget;
import cloudburst.rejects.utils.gui.GuiUtils;
import meteordevelopment.meteorclient.gui.renderer.GuiRenderer;
import meteordevelopment.meteorclient.gui.tabs.Tab;
import meteordevelopment.meteorclient.gui.tabs.TabScreen;
import meteordevelopment.meteorclient.gui.tabs.Tabs;
import meteordevelopment.meteorclient.gui.widgets.WTopBar; import meteordevelopment.meteorclient.gui.widgets.WTopBar;
import meteordevelopment.meteorclient.gui.widgets.pressable.WPressable;
import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.color.Color;
import static meteordevelopment.meteorclient.utils.Utils.mc;
import static org.lwjgl.glfw.GLFW.glfwSetCursorPos;
public class WMeteorTopBar extends WTopBar implements MeteorWidget { public class WMeteorTopBar extends WTopBar implements MeteorWidget {
@Override @Override
protected Color getButtonColor(boolean pressed, boolean hovered) { protected Color getButtonColor(boolean pressed, boolean hovered) {
@@ -19,4 +31,72 @@ public class WMeteorTopBar extends WTopBar implements MeteorWidget {
protected Color getNameColor() { protected Color getNameColor() {
return theme().textColor.get(); return theme().textColor.get();
} }
@Override
public void init() {
for (Tab tab : Tabs.get()) {
add(new WTopBarButton(tab));
}
}
protected int getState(WTopBarButton btn) {
int a = 0;
if (btn.equals(cells.get(0).widget()))
a |= 1;
if (btn.equals(cells.get(cells.size() - 1).widget()))
a |= 2;
return a;
}
protected class WTopBarButton extends WPressable {
private final Tab tab;
public WTopBarButton(Tab tab) {
this.tab = tab;
}
@Override
protected void onCalculateSize() {
double pad = pad();
width = pad + theme.textWidth(tab.name) + pad;
height = pad + theme.textHeight() + pad;
}
@Override
protected void onPressed(int button) {
Screen screen = mc.currentScreen;
if (!(screen instanceof TabScreen) || ((TabScreen) screen).tab != tab) {
double mouseX = mc.mouse.getX();
double mouseY = mc.mouse.getY();
tab.openScreen(theme);
glfwSetCursorPos(mc.getWindow().getHandle(), mouseX, mouseY);
}
}
@Override
protected void onRender(GuiRenderer renderer, double mouseX, double mouseY, double delta) {
double pad = pad();
Color color = getButtonColor(pressed || (mc.currentScreen instanceof TabScreen && ((TabScreen) mc.currentScreen).tab == tab), mouseOver);
//renderer.quad(x, y, width, height, color);
switch (getState(this)) {
case 1:
GuiUtils.quadRoundedSide(renderer, this, color, ((MeteorRoundedGuiTheme)theme).roundAmount(), false);
break;
case 2:
GuiUtils.quadRoundedSide(renderer, this, color, ((MeteorRoundedGuiTheme)theme).roundAmount(), true);
break;
case 3:
GuiUtils.quadRounded(renderer, this, color, ((MeteorRoundedGuiTheme)theme).roundAmount());
break;
default:
renderer.quad(this, color);
break;
}
renderer.text(tab.name, x + pad, y + pad, getNameColor(), false);
}
}
} }

View File

@@ -95,35 +95,33 @@ public class RoundedRenderer2D {
int cirDepth = getCirDepth(r, angle); int cirDepth = getCirDepth(r, angle);
double cirPart = angle / cirDepth; double cirPart = angle / cirDepth;
int center = mb.triangles.vec2(x, y).color(color).next(); int center = mb.triangles.vec2(x, y).color(color).next();
int prev = mb.triangles.vec2(x + Math.sin(startAngle) * r, y - Math.cos(startAngle) * r).color(color).next(); int prev = vecOnCircle(mb, x, y, r, startAngle, color);
for (int i = 1; i < cirDepth + 1; i++) { for (int i = 1; i < cirDepth + 1; i++) {
double xV = x + Math.sin(startAngle + cirPart * i) * r; int next = vecOnCircle(mb, x, y, r, startAngle + cirPart * i, color);
double yV = y - Math.cos(startAngle + cirPart * i) * r;
int next = mb.triangles.vec2(xV, yV).color(color).next();
mb.triangles.quad(prev, center, next, next); mb.triangles.quad(prev, center, next, next);
prev = next; prev = next;
} }
} }
public static void circlePartOutline(Renderer2D mb, double x, double y, double r, double startAngle, double angle, Color color, double outlineWidth) { public static void circlePartOutline(Renderer2D mb, double x, double y, double r, double startAngle, double angle, Color color, double outlineWidth) {
if (outlineWidth >= r) {
circlePart(mb, x, y, r, startAngle, angle, color);
return;
}
int cirDepth = getCirDepth(r, angle); int cirDepth = getCirDepth(r, angle);
double cirPart = angle / cirDepth; double cirPart = angle / cirDepth;
for (int i = 0; i < cirDepth; i++) { int innerPrev = vecOnCircle(mb, x, y, r - outlineWidth, startAngle, color);
double xOC = x + Math.sin(startAngle + cirPart * i) * r; int outerPrev = vecOnCircle(mb, x, y, r, startAngle, color);
double yOC = y - Math.cos(startAngle + cirPart * i) * r; for (int i = 1; i < cirDepth + 1; i++) {
double xIC = x + Math.sin(startAngle + cirPart * i) * (r - outlineWidth); int inner = vecOnCircle(mb, x, y, r - outlineWidth, startAngle + cirPart * i, color);
double yIC = y - Math.cos(startAngle + cirPart * i) * (r - outlineWidth); int outer = vecOnCircle(mb, x, y, r, startAngle + cirPart * i, color);
double xON = x + Math.sin(startAngle + cirPart * (i + 1)) * r; mb.triangles.quad(inner, innerPrev, outerPrev, outer);
double yON = y - Math.cos(startAngle + cirPart * (i + 1)) * r; innerPrev = inner;
double xIN = x + Math.sin(startAngle + cirPart * (i + 1)) * (r - outlineWidth); outerPrev = outer;
double yIN = y - Math.cos(startAngle + cirPart * (i + 1)) * (r - outlineWidth); }
}
mb.triangles.quad( private static int vecOnCircle(Renderer2D mb, double x, double y, double r, double angle, Color color) {
mb.triangles.vec2(xOC, yOC).color(color).next(), return mb.triangles.vec2(x + Math.sin(angle) * r, y - Math.cos(angle) * r).color(color).next();
mb.triangles.vec2(xON, yON).color(color).next(),
mb.triangles.vec2(xIC, yIC).color(color).next(),
mb.triangles.vec2(xIN, yIN).color(color).next()
);
}
} }
} }