From 15d7672d53717d9aa2c235d80603609a11268884 Mon Sep 17 00:00:00 2001
From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com>
Date: Thu, 22 Dec 2022 13:13:32 +0100
Subject: [PATCH]
checkbox!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
---
assets/images/desktop/ui.xml | 3 +
assets/images/desktop/ui/checkbox.png | Bin 1387 -> 2033 bytes
buildnumber.txt | 2 +-
source/funkin/desktop/DesktopMain.hx | 5 +-
source/funkin/desktop/DesktopUtils.hx | 11 ++++
source/funkin/desktop/editors/HelloWorld.hx | 4 ++
source/funkin/desktop/import.hx | 1 +
source/funkin/desktop/sprites/Button.hx | 7 +--
source/funkin/desktop/sprites/Checkbox.hx | 65 ++++++++++++++++++++
source/funkin/desktop/theme/Theme.hx | 10 +++
source/funkin/desktop/windows/Window.hx | 3 +-
11 files changed, 102 insertions(+), 9 deletions(-)
create mode 100644 source/funkin/desktop/DesktopUtils.hx
create mode 100644 source/funkin/desktop/import.hx
create mode 100644 source/funkin/desktop/sprites/Checkbox.hx
diff --git a/assets/images/desktop/ui.xml b/assets/images/desktop/ui.xml
index 26c8d287..40df3f67 100644
--- a/assets/images/desktop/ui.xml
+++ b/assets/images/desktop/ui.xml
@@ -10,4 +10,7 @@
+
+
+
\ No newline at end of file
diff --git a/assets/images/desktop/ui/checkbox.png b/assets/images/desktop/ui/checkbox.png
index 44c22b6f3755f8e0c2f22a985dd2f40c1f42afbf..c50a939080d6e44dd02fa41e9b7c9cf06974e1b9 100644
GIT binary patch
delta 2013
zcmV<32O{|E3h@t+7YaZK1^@s6Tp;vDks%j<2ct@`dh=~elARZV@vr`GEXoM(WFrbKF;sLFa0wIBv1zhv<^SR2M@|H?Ac@{tyx3{;$WHNCz
z8jTFacR-B=gFyrW0j>=V4cs7=Z1OCCPIPp1z-qO^VzIz%HghBK4bU}yzaKuI4_>bq
z_4W094V7&2EPzgQc6P#Ux5pZxI}v|>he)*oyId~R)zxuFRP^wBKDq-BG#yRK@B3_;
zrtcqq@?=8)EWqROpsTA3MMXs@EG*<8h6{j#r)viX2T@yF%hys#mH*)F8+d=-W1UI)
z&v)FZDd34`eo5$`1<--+?rszp7sF<=X$o+=-EcacsHv&p4ymNVzu8n)lB)O%QD
zcQitK{22LB(st-^QsGBMk50ZkZ>Y+D@bGM5fo$?DVE=bvocZH-SSz~_&^>kD(e>El+Z1OCi^+*U8E}TWN-2l7IATJPq23Smq4fp~P
zdBF+6iTU#^B7hY5_ujC^f|&N;xuksi-bzgY4GVh``WFIP
zJ&0JYa07}BhO>ZTA8H`qSAqFWA{iTrU%%EA3*e!}y_)>DyGLt(3Q+Sb;J|(lLRNhO
z4BiUNTOa~Zc=GR(7Y7pf_~7ZB7OzKu!n1%wtvvf*`-9!|Umv
z1$4HCapID`rF{CBDX41_sX#V)7I3^Zy<}=elNck}wst=C^z7iVW-oN
zfdN1Ipi&Q}m|Mm7;ar=EgB;}8OdAFwTXFvK=LjNpa-CJ%9__|Rw&MxO8
z7F1S<0L*5w(D?l!4xmTQL3*$FaN%DUN-Q;Ke$B?`Q{~scI-d8ZHJnV!x9!mWZnW{4
zQwjYG0UMm~=bgrc@pgfsYTK&S~*_1SmWUct>(#z^uA_)s9{P+87dH?MXdzg>64ILYa
z*JB}tX91feH_k)fARdnztd_*xRrr(b!+$kS!KcFO8N>?D0=Bkz(e2hZjn>#|vBDvy
z!FXOh4U%oHg;y748dZ1}u)W2PB8g-yn|$u4(?bFr
zX*SR@6hPK^x&w}!{)veMskCw9MkyJ;eED)o%lF&1ZIjf0
zKXf~;*ZV?^jg1`K=FOX>Wc;#a%QOY-+__UyziQyP9`6gynKLIA*p@9@q-6Z!#fvos
z?B2awQoros_`ly5nmKc3ET}zu_DEX%qD6}|1*rLq3LyWswY5p{e0=b9ZloKKmViuI
zXywY4-1)(S2PNX;Z9~UWv0z#j%G4l8UbSk~u$@!zsZIiE4dP5rqv~mpY;!HVx(qvw
vW_lq~f*`-9!|Ptiaz2&F>0~a~)9L>J`g8K7Rre*&00000NkvXXu0mjfzeV64
delta 1362
zcmV-Y1+Dt=59r38~OJbhqdf{>;m)te>xF7s_+{@?pJm24ae=p4$ve_&c42CR!
zs3YHDhz8jVJ(xuA5!q9soP@L|8-4`#EO
zs>x&`NE`qgOQlkfOeU#1ola^Hi6iWb;$7e&K5Oj8S(z949-O^HqhSQ4oyu>biW*b;aqJ#fuUD_mE}MC
z=wVp_QogDJ(7&&pyIsJGlgE4IIzW|xYFWs8@hF|Yaej?>v2E~LB^Fd=p=u4{xl3I|
zgJSZPP6Db1aW$t==`@J8*$pp$Ek&o%YA-}W66jYoyyAsS_ge{FZ{~Eroz}eoJYHVR
z;2FI}dX;$Gd7W73RpG14J#N^kxj%5~7;gbBc@l8t`!wAA{Wq{#Yp7Z+MlhR+tUReP>&;MNzpBFF}hm>Ir
z_BUIgvB4}WU~?-8ch(bN%C(9RJQ+=6nLr4c?LEzn$4HD?rMBlYqG^QQ&OK1Te8?
z=sU?LAn@qlmtWs1;Kj+~Jvm;90D&g~-+AK@F)6c
zhU@<*Tgs0fI1F8Gek-6QPXexa)orGpbn|0GOJ4um=^X(cl?`0jNkB6md%&aXe<@Lb
z-v6oh=>7YEXD`1G3=IvjO{IDGs8-M-1Yq5-v_$8yYorS&d#!O
z{J_9~tNPD*jgF2|@cH?97J0F4@LDAnRAr%R4dSt}
zv7*5-`AR1}0ab&zn$xIs8bsUdhL@J2(`dC9A|VO%s~TSMLZ@~
diff --git a/buildnumber.txt b/buildnumber.txt
index f01f3762..62cab397 100644
--- a/buildnumber.txt
+++ b/buildnumber.txt
@@ -1 +1 @@
-1675
\ No newline at end of file
+1683
\ No newline at end of file
diff --git a/source/funkin/desktop/DesktopMain.hx b/source/funkin/desktop/DesktopMain.hx
index 7f8a2620..93a61891 100644
--- a/source/funkin/desktop/DesktopMain.hx
+++ b/source/funkin/desktop/DesktopMain.hx
@@ -1,5 +1,6 @@
package funkin.desktop;
+import flixel.math.FlxRect;
import openfl.geom.Rectangle;
import flixel.FlxObject;
import lime.app.Application;
@@ -140,11 +141,11 @@ class MouseInput {
}
public function overlaps(spr:FlxObject, ?camera:FlxCamera) {
- return overlapsRect(spr, new Rectangle(spr.x, spr.y, spr.width, spr.height), camera);
+ return overlapsRect(spr, new FlxRect(spr.x, spr.y, spr.width, spr.height), camera);
// return FlxG.mouse.overlaps(spr, camera);
}
- public function overlapsRect(spr:FlxBasic, rect:Rectangle, ?camera:FlxCamera) {
+ public function overlapsRect(spr:FlxBasic, rect:FlxRect, ?camera:FlxCamera) {
if (__cancelled) return false;
if (camera == null) camera = FlxG.camera;
if (spr is FlxObject) {
diff --git a/source/funkin/desktop/DesktopUtils.hx b/source/funkin/desktop/DesktopUtils.hx
new file mode 100644
index 00000000..760f267f
--- /dev/null
+++ b/source/funkin/desktop/DesktopUtils.hx
@@ -0,0 +1,11 @@
+package funkin.desktop;
+
+import flixel.FlxObject;
+
+class DesktopUtils {
+ public static function copyProperties(spr1:FlxObject, spr2:FlxObject) {
+ spr1.cameras = spr2.cameras;
+ spr1.setPosition(spr2.x, spr2.y);
+ spr1.scrollFactor.set(spr2.scrollFactor.x, spr2.scrollFactor.y);
+ }
+}
\ No newline at end of file
diff --git a/source/funkin/desktop/editors/HelloWorld.hx b/source/funkin/desktop/editors/HelloWorld.hx
index 69105f6a..a93294b7 100644
--- a/source/funkin/desktop/editors/HelloWorld.hx
+++ b/source/funkin/desktop/editors/HelloWorld.hx
@@ -32,6 +32,10 @@ class HelloWorld extends WindowContent {
});
butt.scrollFactor.set();
add(butt);
+
+ var checkbox = new Checkbox(10, 40, 0, "Test Checkbox", CHECKED);
+ checkbox.scrollFactor.set();
+ add(checkbox);
}
public var time:Float = 0;
diff --git a/source/funkin/desktop/import.hx b/source/funkin/desktop/import.hx
new file mode 100644
index 00000000..764de2d5
--- /dev/null
+++ b/source/funkin/desktop/import.hx
@@ -0,0 +1 @@
+using funkin.desktop.DesktopUtils;
\ No newline at end of file
diff --git a/source/funkin/desktop/sprites/Button.hx b/source/funkin/desktop/sprites/Button.hx
index 897ba134..bee4f808 100644
--- a/source/funkin/desktop/sprites/Button.hx
+++ b/source/funkin/desktop/sprites/Button.hx
@@ -103,11 +103,8 @@ class Button extends FlxObject {
default: normalSprite;
};
spr.resize(width, height);
- for(sprite in [spr, label]) {
- sprite.cameras = cameras;
- sprite.setPosition(x, y);
- sprite.scrollFactor.set(scrollFactor.x, scrollFactor.y);
- }
+ for(sprite in [spr, label])
+ sprite.copyProperties(this);
spr.draw();
label.y += (height - label.height) / 2;
label.draw();
diff --git a/source/funkin/desktop/sprites/Checkbox.hx b/source/funkin/desktop/sprites/Checkbox.hx
new file mode 100644
index 00000000..2672bc99
--- /dev/null
+++ b/source/funkin/desktop/sprites/Checkbox.hx
@@ -0,0 +1,65 @@
+package funkin.desktop.sprites;
+
+import flixel.FlxSprite;
+import flixel.text.FlxText;
+import flixel.FlxObject;
+
+class Checkbox extends WindowText {
+ public var checked:CheckState = UNCHECKED;
+ public var disabled:Bool = false;
+ public var checkboxSprite:FlxSprite;
+
+ public function new(x:Float, y:Float, w:Float, t:String, checked:CheckState = UNCHECKED) {
+ super(x, y, w, t);
+ this.checked = checked;
+ offset.x -= 20;
+
+ var t = DesktopMain.theme.checkbox;
+
+ checkboxSprite = new FlxSprite(0, (20 - t.height) / 2);
+ checkboxSprite.loadGraphic(Paths.image(t.sprite), true, Std.int(t.width), Std.int(t.height));
+ checkboxSprite.animation.add("checkbox", [for(i in 0...checkboxSprite.frames.frames.length) i], 0, true);
+ checkboxSprite.animation.play("checkbox");
+ }
+
+ public override function update(elapsed:Float) {
+ super.update(elapsed);
+ checkboxSprite.update(elapsed);
+
+ var overlaps = DesktopMain.mouseInput.overlaps(this, camera) || DesktopMain.mouseInput.overlaps(checkboxSprite, camera);
+ var pressed = DesktopMain.mouseInput.pressed;
+
+ if (overlaps) {
+ // cancel so that sprites in the bg dont get hovered as well
+ if (!disabled && DesktopMain.mouseInput.justPressed) {
+ checked = switch(checked) {
+ case CHECKED | BOTH:
+ UNCHECKED;
+ case UNCHECKED:
+ CHECKED;
+ }
+ }
+ DesktopMain.mouseInput.cancel();
+ }
+
+ checkboxSprite.animation.curAnim.curFrame = (switch(checked) {
+ case UNCHECKED: 0;
+ case CHECKED: 1;
+ case BOTH: 2;
+ }) + (disabled ? 9 : (overlaps ? (pressed ? 6 : 3) : 0));
+ }
+
+ public override function draw() {
+ checkboxSprite.copyProperties(this);
+ rotOffset.y = (this.height - checkboxSprite.height) / 2;
+ super.draw();
+ checkboxSprite.draw();
+ }
+}
+
+@:enum
+abstract CheckState(Null) {
+ var CHECKED:CheckState = true;
+ var UNCHECKED:CheckState = false;
+ var BOTH:CheckState = null;
+}
\ No newline at end of file
diff --git a/source/funkin/desktop/theme/Theme.hx b/source/funkin/desktop/theme/Theme.hx
index 20012316..98f6192d 100644
--- a/source/funkin/desktop/theme/Theme.hx
+++ b/source/funkin/desktop/theme/Theme.hx
@@ -39,6 +39,11 @@ class Theme {
public var pressedButton:ThemeData = new ThemeData();
public var disabledButton:ThemeData = new ThemeData();
+ /**
+ * CHECKBOX
+ */
+ public var checkbox:ThemeData = new ThemeData();
+
public function new(content:String) {
try {
var access = new Access(Xml.parse(content).firstElement());
@@ -60,6 +65,8 @@ class Theme {
if (element.has.right) data.right = Std.parseFloat(element.att.right).getDefault(0);
if (element.has.top) data.top = Std.parseFloat(element.att.top).getDefault(0);
if (element.has.bottom) data.bottom = Std.parseFloat(element.att.bottom).getDefault(0);
+ if (element.has.width) data.width = Std.parseFloat(element.att.width).getDefault(data.width);
+ if (element.has.height) data.height = Std.parseFloat(element.att.height).getDefault(data.height);
if (element.has.size) {
var split = element.att.size.split(",");
data.size.set(
@@ -100,6 +107,9 @@ class ThemeData implements IFlxDestroyable {
public var top:Float = 4;
public var right:Float = 4;
+ public var width:Float = 4;
+ public var height:Float = 4;
+
public var margin:FlxPoint = FlxPoint.get(0, 0);
public var size:FlxPoint = FlxPoint.get(20, 20);
public var offset:FlxPoint = FlxPoint.get(5, 5);
diff --git a/source/funkin/desktop/windows/Window.hx b/source/funkin/desktop/windows/Window.hx
index 86947d3d..7129bc9c 100644
--- a/source/funkin/desktop/windows/Window.hx
+++ b/source/funkin/desktop/windows/Window.hx
@@ -1,5 +1,6 @@
package funkin.desktop.windows;
+import flixel.math.FlxRect;
import flixel.addons.ui.FlxUIText;
import flixel.group.FlxGroup.FlxTypedGroup;
import flixel.FlxBasic;
@@ -252,7 +253,7 @@ class Window extends FlxTypedGroup {
windowInactiveFrame.visible = !(windowFrame.visible = focused);
var i = members.length;
- var shouldCancel = DesktopMain.mouseInput.overlapsRect(this, new Rectangle(0, 0, windowCaptionCamera.width, windowCaptionCamera.height), windowCaptionCamera);
+ var shouldCancel = DesktopMain.mouseInput.overlapsRect(this, new FlxRect(0, 0, windowCaptionCamera.width, windowCaptionCamera.height), windowCaptionCamera);