Skip to content

Commit

Permalink
Added interface ClipRectangle.
Browse files Browse the repository at this point in the history
  • Loading branch information
Rsedaikin committed Dec 21, 2020
1 parent 2ec24c2 commit 01c2b44
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
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
Expand All @@ -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))
Expand All @@ -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)
Expand All @@ -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() {
Expand Down
21 changes: 21 additions & 0 deletions skiko/src/jvmMain/kotlin/org/jetbrains/skiko/ClipRectangle.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
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()
}
12 changes: 6 additions & 6 deletions skiko/src/jvmMain/kotlin/org/jetbrains/skiko/SkiaLayer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion skiko/src/jvmMain/kotlin/org/jetbrains/skiko/SkiaPanel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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))
}

Expand Down
14 changes: 10 additions & 4 deletions skiko/src/jvmMain/objectiveC/macos/drawlayer.m
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 01c2b44

Please sign in to comment.