mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
fix clipping
This commit is contained in:
parent
6e07c4f357
commit
b5ad3b5352
3 changed files with 35 additions and 18 deletions
|
|
@ -131,7 +131,7 @@ class GuiControl {
|
||||||
rect.position = parentRect.position.add(this.position.multiply(uiScaleFactor));
|
rect.position = parentRect.position.add(this.position.multiply(uiScaleFactor));
|
||||||
}
|
}
|
||||||
|
|
||||||
var scaleFactor = 1.0 / Window.getInstance().windowToPixelRatio;
|
var scaleFactor = 1.0;
|
||||||
#if (js || android)
|
#if (js || android)
|
||||||
scaleFactor = 1 / Settings.zoomRatio; // 768 / js.Browser.window.innerHeight * js.Browser.window.devicePixelRatio; // 0.5; // 768 / js.Browser.window.innerHeight; // js.Browser.window.innerHeight * js.Browser.window.devicePixelRatio / 768;
|
scaleFactor = 1 / Settings.zoomRatio; // 768 / js.Browser.window.innerHeight * js.Browser.window.devicePixelRatio; // 0.5; // 768 / js.Browser.window.innerHeight; // js.Browser.window.innerHeight * js.Browser.window.devicePixelRatio / 768;
|
||||||
#end
|
#end
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package gui;
|
package gui;
|
||||||
|
|
||||||
|
import h2d.Flow;
|
||||||
import shaders.GuiClipFilter;
|
import shaders.GuiClipFilter;
|
||||||
import h2d.filter.Mask;
|
import h2d.filter.Mask;
|
||||||
import gui.GuiControl.MouseState;
|
import gui.GuiControl.MouseState;
|
||||||
|
|
@ -11,6 +12,7 @@ import src.MarbleGame;
|
||||||
@:publicFields
|
@:publicFields
|
||||||
class GuiImage extends GuiControl {
|
class GuiImage extends GuiControl {
|
||||||
var bmp:Bitmap;
|
var bmp:Bitmap;
|
||||||
|
var bmpFlow:Flow;
|
||||||
|
|
||||||
public var pressedAction:GuiEvent->Void = null;
|
public var pressedAction:GuiEvent->Void = null;
|
||||||
|
|
||||||
|
|
@ -24,30 +26,43 @@ class GuiImage extends GuiControl {
|
||||||
public override function render(scene2d:Scene) {
|
public override function render(scene2d:Scene) {
|
||||||
var renderRect = this.getRenderRectangle();
|
var renderRect = this.getRenderRectangle();
|
||||||
var hittestRect = this.getHitTestRect();
|
var hittestRect = this.getHitTestRect();
|
||||||
if (doClipping
|
|
||||||
&& (hittestRect.position.x > renderRect.position.x
|
var obj:h2d.Object = bmp;
|
||||||
|| hittestRect.position.y > renderRect.position.y
|
if (doClipping) {
|
||||||
|| hittestRect.extent.x < renderRect.extent.x
|
bmpFlow = new Flow();
|
||||||
|| hittestRect.extent.y < renderRect.extent.y)) {
|
bmpFlow.addChild(bmp);
|
||||||
if (bmp.filter == null) {
|
bmpFlow.overflow = FlowOverflow.Hidden;
|
||||||
bmp.filter = new GuiClipFilter(hittestRect);
|
bmpFlow.multiline = true;
|
||||||
}
|
bmpFlow.setPosition(hittestRect.position.x, hittestRect.position.y);
|
||||||
|
obj = bmpFlow;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doClipping) {
|
||||||
|
var fp = bmpFlow.getProperties(bmp);
|
||||||
|
fp.offsetX = -Std.int(hittestRect.position.x - renderRect.position.x);
|
||||||
|
fp.offsetY = -Std.int(hittestRect.position.y - renderRect.position.y);
|
||||||
|
} else {
|
||||||
|
bmp.setPosition(Math.floor(renderRect.position.x), Math.floor(renderRect.position.y));
|
||||||
}
|
}
|
||||||
bmp.setPosition(Math.floor(renderRect.position.x), Math.floor(renderRect.position.y));
|
|
||||||
// bmp.scaleX = renderRect.extent.x / bmp.tile.width;
|
|
||||||
// bmp.scaleY = renderRect.extent.y / bmp.tile.height;
|
|
||||||
bmp.width = renderRect.extent.x;
|
bmp.width = renderRect.extent.x;
|
||||||
bmp.height = renderRect.extent.y;
|
bmp.height = renderRect.extent.y;
|
||||||
if (scene2d.contains(bmp)) {
|
if (doClipping) {
|
||||||
scene2d.removeChild(bmp); // Refresh "layer"
|
bmpFlow.maxWidth = Std.int(hittestRect.extent.x);
|
||||||
|
bmpFlow.maxHeight = Std.int(hittestRect.extent.y);
|
||||||
}
|
}
|
||||||
scene2d.addChild(bmp);
|
if (scene2d.contains(obj)) {
|
||||||
|
scene2d.removeChild(obj); // Refresh "layer"
|
||||||
|
}
|
||||||
|
scene2d.addChild(obj);
|
||||||
super.render(scene2d);
|
super.render(scene2d);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override function dispose() {
|
public override function dispose() {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
this.bmp.remove();
|
if (this.doClipping) {
|
||||||
|
bmpFlow.remove();
|
||||||
|
} else
|
||||||
|
this.bmp.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override function onMouseRelease(mouseState:MouseState) {
|
public override function onMouseRelease(mouseState:MouseState) {
|
||||||
|
|
@ -59,6 +74,9 @@ class GuiImage extends GuiControl {
|
||||||
|
|
||||||
public override function onRemove() {
|
public override function onRemove() {
|
||||||
super.onRemove();
|
super.onRemove();
|
||||||
|
if (MarbleGame.canvas.scene2d.contains(bmpFlow)) {
|
||||||
|
MarbleGame.canvas.scene2d.removeChild(bmpFlow); // Refresh "layer"
|
||||||
|
}
|
||||||
if (MarbleGame.canvas.scene2d.contains(bmp)) {
|
if (MarbleGame.canvas.scene2d.contains(bmp)) {
|
||||||
MarbleGame.canvas.scene2d.removeChild(bmp); // Refresh "layer"
|
MarbleGame.canvas.scene2d.removeChild(bmp); // Refresh "layer"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,7 @@ class Rect {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function inRect(point:Vector) {
|
public function inRect(point:Vector) {
|
||||||
return (position.x <= point.x && (position.x + extent.x) >= point.x)
|
return (position.x < point.x && (position.x + extent.x) > point.x) && (position.y < point.y && (position.y + extent.y) > point.y);
|
||||||
&& (position.y <= point.y && (position.y + extent.y) >= point.y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function intersect(other:Rect) {
|
public function intersect(other:Rect) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue