Commit 01c2b449 authored by Roman Sedaikin's avatar Roman Sedaikin

Added interface ClipRectangle.

parent 2ec24c22
package SkijaInjectSample
import java.awt.BorderLayout
import java.awt.Color
import java.awt.Dimension
import java.awt.BorderLayout
import java.awt.event.ComponentAdapter
import java.awt.event.ComponentEvent
import java.awt.event.KeyEvent
import java.awt.event.MouseEvent
import java.awt.event.MouseMotionAdapter
......@@ -14,6 +16,7 @@ import javax.swing.event.MouseInputAdapter
import javax.swing.WindowConstants
import org.jetbrains.skiko.SkiaPanel
fun Button(text: String): JButton {
val btn = JButton(text)
btn.setPreferredSize(Dimension(100, 100))
......@@ -36,12 +39,10 @@ fun SwingSkia() {
val btnPanelOK = JPanel()
btnPanelOK.setLayout(BorderLayout(0, 0))
btnPanelOK.setBounds(50, 50, 200, 40)
btnPanelOK.setBackground(Color.white)
btnPanelOK.add(JButton("OK"))
val btnCancel = JButton("Cancel")
btnCancel.setBounds(300, 50, 200, 40)
panel.add(btnPanelOK)
panel.add(btnCancel)
......@@ -52,6 +53,16 @@ fun SwingSkia() {
var mouseX = 0
var mouseY = 0
panel.addComponentListener(object : ComponentAdapter() {
override fun componentResized(e: ComponentEvent) {
btnPanelOK.setBounds(panel.width - 200, panel.height - 100, 200, 40)
btnCancel.setBounds(panel.width - 200, panel.height - 50, 200, 40)
panel.invalidate()
panel.validate()
panel.repaint()
}
})
panel.layer.renderer = Renderer { renderer, w, h -> displayScene(renderer, w, h, mouseX, mouseY, state) }
panel.layer.addMouseMotionListener(object : MouseMotionAdapter() {
......
package org.jetbrains.skiko
import java.awt.Component
interface ClipRectangle {
val x: Float
val y: Float
val width: Float
val height: Float
}
class ClipComponent(val component: Component) : ClipRectangle {
override val x: Float
get() = component.x.toFloat()
override val y: Float
get() = component.y.toFloat()
override val width: Float
get() = component.width.toFloat()
override val height: Float
get() = component.height.toFloat()
}
\ No newline at end of file
......@@ -36,7 +36,7 @@ open class SkiaLayer() : HardwareLayer() {
open val api: GraphicsApi = GraphicsApi.OPENGL
var renderer: SkiaRenderer? = null
val clipComponets = mutableListOf<Component>()
val clipComponets = mutableListOf<ClipRectangle>()
private val skijaState = SkijaState()
protected var inited: Boolean = false
......@@ -77,14 +77,14 @@ open class SkiaLayer() : HardwareLayer() {
}
}
private fun clipRectBy(component: Component) {
private fun clipRectBy(rectangle: ClipRectangle) {
skijaState.apply {
canvas!!.clipRect(
Rect.makeLTRB(
component.x.toFloat(),
component.y.toFloat(),
component.x.toFloat() + component.width.toFloat(),
component.y.toFloat() + component.height.toFloat()
rectangle.x,
rectangle.y,
rectangle.x + rectangle.width,
rectangle.y + rectangle.height
),
ClipMode.DIFFERENCE,
true
......
......@@ -16,7 +16,7 @@ open class SkiaPanel: JLayeredPane {
}
override fun add(component: Component): Component {
layer.clipComponets.add(component)
layer.clipComponets.add(ClipComponent(component))
return super.add(component, Integer.valueOf(0))
}
......
......@@ -284,9 +284,6 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_HardwareLayer_updateLayer(JNIEnv
dsi_mac = ( __bridge NSObject<JAWT_SurfaceLayers> *) dsi->platformInfo;
LayerHandler *layersSet = [[LayerHandler alloc] init];
lockLayers();
[layerStorage addObject: layersSet];
unlockLayers();
layersSet.container = [dsi_mac windowLayer];
[layersSet.container removeAllAnimations];
......@@ -319,10 +316,19 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_HardwareLayer_updateLayer(JNIEnv
}
for (LayerHandler* value in layerStorage)
{
if (layersSet.container == value.container)
{
layersSet.window = value.window;
}
[windows removeObject: value.window];
}
layersSet.window = [windows firstObject];
if (layersSet.window == NULL)
{
layersSet.window = [windows firstObject];
}
}
[layerStorage addObject: layersSet];
}
ds->FreeDrawingSurfaceInfo(dsi);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment