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);