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

Added interface ClipRectangle.

parent 2ec24c22
package SkijaInjectSample package SkijaInjectSample
import java.awt.BorderLayout
import java.awt.Color import java.awt.Color
import java.awt.Dimension 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.KeyEvent
import java.awt.event.MouseEvent import java.awt.event.MouseEvent
import java.awt.event.MouseMotionAdapter import java.awt.event.MouseMotionAdapter
...@@ -14,6 +16,7 @@ import javax.swing.event.MouseInputAdapter ...@@ -14,6 +16,7 @@ import javax.swing.event.MouseInputAdapter
import javax.swing.WindowConstants import javax.swing.WindowConstants
import org.jetbrains.skiko.SkiaPanel import org.jetbrains.skiko.SkiaPanel
fun Button(text: String): JButton { fun Button(text: String): JButton {
val btn = JButton(text) val btn = JButton(text)
btn.setPreferredSize(Dimension(100, 100)) btn.setPreferredSize(Dimension(100, 100))
...@@ -36,12 +39,10 @@ fun SwingSkia() { ...@@ -36,12 +39,10 @@ fun SwingSkia() {
val btnPanelOK = JPanel() val btnPanelOK = JPanel()
btnPanelOK.setLayout(BorderLayout(0, 0)) btnPanelOK.setLayout(BorderLayout(0, 0))
btnPanelOK.setBounds(50, 50, 200, 40)
btnPanelOK.setBackground(Color.white) btnPanelOK.setBackground(Color.white)
btnPanelOK.add(JButton("OK")) btnPanelOK.add(JButton("OK"))
val btnCancel = JButton("Cancel") val btnCancel = JButton("Cancel")
btnCancel.setBounds(300, 50, 200, 40)
panel.add(btnPanelOK) panel.add(btnPanelOK)
panel.add(btnCancel) panel.add(btnCancel)
...@@ -52,6 +53,16 @@ fun SwingSkia() { ...@@ -52,6 +53,16 @@ fun SwingSkia() {
var mouseX = 0 var mouseX = 0
var mouseY = 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.renderer = Renderer { renderer, w, h -> displayScene(renderer, w, h, mouseX, mouseY, state) }
panel.layer.addMouseMotionListener(object : MouseMotionAdapter() { 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() { ...@@ -36,7 +36,7 @@ open class SkiaLayer() : HardwareLayer() {
open val api: GraphicsApi = GraphicsApi.OPENGL open val api: GraphicsApi = GraphicsApi.OPENGL
var renderer: SkiaRenderer? = null var renderer: SkiaRenderer? = null
val clipComponets = mutableListOf<Component>() val clipComponets = mutableListOf<ClipRectangle>()
private val skijaState = SkijaState() private val skijaState = SkijaState()
protected var inited: Boolean = false protected var inited: Boolean = false
...@@ -77,14 +77,14 @@ open class SkiaLayer() : HardwareLayer() { ...@@ -77,14 +77,14 @@ open class SkiaLayer() : HardwareLayer() {
} }
} }
private fun clipRectBy(component: Component) { private fun clipRectBy(rectangle: ClipRectangle) {
skijaState.apply { skijaState.apply {
canvas!!.clipRect( canvas!!.clipRect(
Rect.makeLTRB( Rect.makeLTRB(
component.x.toFloat(), rectangle.x,
component.y.toFloat(), rectangle.y,
component.x.toFloat() + component.width.toFloat(), rectangle.x + rectangle.width,
component.y.toFloat() + component.height.toFloat() rectangle.y + rectangle.height
), ),
ClipMode.DIFFERENCE, ClipMode.DIFFERENCE,
true true
......
...@@ -16,7 +16,7 @@ open class SkiaPanel: JLayeredPane { ...@@ -16,7 +16,7 @@ open class SkiaPanel: JLayeredPane {
} }
override fun add(component: Component): Component { override fun add(component: Component): Component {
layer.clipComponets.add(component) layer.clipComponets.add(ClipComponent(component))
return super.add(component, Integer.valueOf(0)) return super.add(component, Integer.valueOf(0))
} }
......
...@@ -284,9 +284,6 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_HardwareLayer_updateLayer(JNIEnv ...@@ -284,9 +284,6 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_HardwareLayer_updateLayer(JNIEnv
dsi_mac = ( __bridge NSObject<JAWT_SurfaceLayers> *) dsi->platformInfo; dsi_mac = ( __bridge NSObject<JAWT_SurfaceLayers> *) dsi->platformInfo;
LayerHandler *layersSet = [[LayerHandler alloc] init]; LayerHandler *layersSet = [[LayerHandler alloc] init];
lockLayers();
[layerStorage addObject: layersSet];
unlockLayers();
layersSet.container = [dsi_mac windowLayer]; layersSet.container = [dsi_mac windowLayer];
[layersSet.container removeAllAnimations]; [layersSet.container removeAllAnimations];
...@@ -319,12 +316,21 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_HardwareLayer_updateLayer(JNIEnv ...@@ -319,12 +316,21 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_HardwareLayer_updateLayer(JNIEnv
} }
for (LayerHandler* value in layerStorage) for (LayerHandler* value in layerStorage)
{ {
if (layersSet.container == value.container)
{
layersSet.window = value.window;
}
[windows removeObject: value.window]; [windows removeObject: value.window];
} }
if (layersSet.window == NULL)
{
layersSet.window = [windows firstObject]; layersSet.window = [windows firstObject];
} }
} }
[layerStorage addObject: layersSet];
}
ds->FreeDrawingSurfaceInfo(dsi); ds->FreeDrawingSurfaceInfo(dsi);
ds->Unlock(ds); ds->Unlock(ds);
awt.FreeDrawingSurface(ds); awt.FreeDrawingSurface(ds);
......
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