Unverified Commit ce81afca authored by Nikolay Igotti's avatar Nikolay Igotti Committed by GitHub

Simplify JS rendering. (#419)

parent f0454b49
package org.jetbrains.skiko.wasm.api package org.jetbrains.skiko
import kotlinx.browser.window import kotlinx.browser.window
import org.jetbrains.skia.BackendRenderTarget import org.jetbrains.skia.BackendRenderTarget
...@@ -12,16 +12,6 @@ import org.jetbrains.skiko.wasm.CreateWebGLContext ...@@ -12,16 +12,6 @@ import org.jetbrains.skiko.wasm.CreateWebGLContext
import org.jetbrains.skiko.wasm.GL import org.jetbrains.skiko.wasm.GL
import org.w3c.dom.HTMLCanvasElement import org.w3c.dom.HTMLCanvasElement
fun Surface.Companion.createFromGL(context: DirectContext, width: Int, height: Int) = makeFromBackendRenderTarget(
context,
BackendRenderTarget.makeGL(
width, height, 1, 8, 0, 0x8058
),
SurfaceOrigin.BOTTOM_LEFT,
SurfaceColorFormat.RGBA_8888,
ColorSpace.sRGB
)
abstract class CanvasRenderer constructor(htmlCanvas: HTMLCanvasElement, val width: Int, val height: Int) { abstract class CanvasRenderer constructor(htmlCanvas: HTMLCanvasElement, val width: Int, val height: Int) {
constructor(canvas: HTMLCanvasElement): this(canvas, canvas.width, canvas.height) constructor(canvas: HTMLCanvasElement): this(canvas, canvas.width, canvas.height)
private val contextPointer = CreateWebGLContext(htmlCanvas) private val contextPointer = CreateWebGLContext(htmlCanvas)
...@@ -30,13 +20,21 @@ abstract class CanvasRenderer constructor(htmlCanvas: HTMLCanvasElement, val wid ...@@ -30,13 +20,21 @@ abstract class CanvasRenderer constructor(htmlCanvas: HTMLCanvasElement, val wid
GL.makeContextCurrent(contextPointer) GL.makeContextCurrent(contextPointer)
} }
private val context = DirectContext.makeGL() private val context = DirectContext.makeGL()
private val surface = Surface.createFromGL(context, width, height) private val surface = Surface.makeFromBackendRenderTarget(
context,
BackendRenderTarget.makeGL(
width, height, 1, 8, 0, 0x8058
),
SurfaceOrigin.BOTTOM_LEFT,
SurfaceColorFormat.RGBA_8888,
ColorSpace.sRGB
)
val canvas: Canvas val canvas: Canvas
get() = surface.canvas get() = surface.canvas
abstract fun drawFrame(currentTimestamp: Double) abstract fun drawFrame(currentTimestamp: Double)
fun draw() { fun needRedraw() {
window.requestAnimationFrame { timestamp -> window.requestAnimationFrame { timestamp ->
GL.makeContextCurrent(contextPointer) GL.makeContextCurrent(contextPointer)
canvas.clear(-1) canvas.clear(-1)
......
package org.jetbrains.skiko package org.jetbrains.skiko
import org.jetbrains.skiko.wasm.api.CanvasRenderer
import org.w3c.dom.HTMLCanvasElement import org.w3c.dom.HTMLCanvasElement
import org.w3c.dom.events.InputEvent import org.w3c.dom.events.InputEvent
import org.w3c.dom.events.KeyboardEvent import org.w3c.dom.events.KeyboardEvent
...@@ -25,7 +24,7 @@ actual open class SkiaLayer { ...@@ -25,7 +24,7 @@ actual open class SkiaLayer {
} }
actual fun needRedraw() { actual fun needRedraw() {
state?.draw() state?.needRedraw()
} }
actual var skikoView: SkikoView? = null actual var skikoView: SkikoView? = null
...@@ -85,7 +84,6 @@ actual open class SkiaLayer { ...@@ -85,7 +84,6 @@ actual open class SkiaLayer {
}) })
} }
} }
private var ticking = false
actual typealias SkikoGesturePlatformEvent = Any actual typealias SkikoGesturePlatformEvent = Any
actual typealias SkikoPlatformInputEvent = InputEvent actual typealias SkikoPlatformInputEvent = InputEvent
...@@ -93,116 +91,4 @@ actual typealias SkikoPlatformKeyboardEvent = KeyboardEvent ...@@ -93,116 +91,4 @@ actual typealias SkikoPlatformKeyboardEvent = KeyboardEvent
// MouseEvent is base class of PointerEvent // MouseEvent is base class of PointerEvent
actual typealias SkikoPlatformPointerEvent = MouseEvent actual typealias SkikoPlatformPointerEvent = MouseEvent
actual enum class SkikoKey(val value: Int) {
KEY_UNKNOWN(-1),
KEY_A(65),
KEY_S(83),
KEY_D(68),
KEY_F(70),
KEY_H(72),
KEY_G(71),
KEY_Z(90),
KEY_X(88),
KEY_C(67),
KEY_V(86),
KEY_B(66),
KEY_Q(81),
KEY_W(87),
KEY_E(69),
KEY_R(82),
KEY_Y(89),
KEY_T(54),
KEY_U(85),
KEY_I(73),
KEY_P(80),
KEY_L(76),
KEY_J(74),
KEY_K(75),
KEY_N(78),
KEY_M(77),
KEY_O(79),
KEY_1(49),
KEY_2(50),
KEY_3(51),
KEY_4(52),
KEY_5(53),
KEY_6(54),
KEY_7(55),
KEY_8(56),
KEY_9(57),
KEY_0(48),
KEY_CLOSE_BRACKET(221),
KEY_OPEN_BRACKET(219),
KEY_QUOTE(222),
KEY_SEMICOLON(59),
KEY_SLASH(191),
KEY_COMMA(188),
KEY_BACKSLASH(220),
KEY_PERIOD(190),
KEY_BACK_QUOTE(192),
KEY_EQUALS(61),
KEY_MINUS(173),
KEY_ENTER(13),
KEY_ESCAPE(27),
KEY_TAB(9),
KEY_BACKSPACE(8),
KEY_SPACE(32),
KEY_CAPSLOCK(20),
KEY_LEFT_META(224),
KEY_LEFT_SHIFT(16),
KEY_LEFT_ALT(18),
KEY_LEFT_CONTROL(17),
KEY_RIGHT_META(0x80000000.toInt() or 224),
KEY_RIGHT_SHIFT(0x80000000.toInt() or 16),
KEY_RIGHT_ALT(225),
KEY_RIGHT_CONTROL(0x80000000.toInt() or 17),
KEY_UP(38),
KEY_DOWN(40),
KEY_LEFT(37),
KEY_RIGHT(39),
KEY_F1(112),
KEY_F2(113),
KEY_F3(114),
KEY_F4(115),
KEY_F5(116),
KEY_F6(117),
KEY_F7(118),
KEY_F8(119),
KEY_F9(120),
KEY_F10(121),
KEY_F11(122),
KEY_F12(123),
KEY_PRINTSCEEN(44),
KEY_SCROLL_LOCK(145),
KEY_PAUSE(19),
KEY_INSERT(45),
KEY_HOME(36),
KEY_PGUP(33),
KEY_DELETE(46),
KEY_END(35),
KEY_PGDOWN(34),
KEY_NUM_LOCK(144),
KEY_NUMPAD_0(96),
KEY_NUMPAD_1(97),
KEY_NUMPAD_2(98),
KEY_NUMPAD_3(99),
KEY_NUMPAD_4(100),
KEY_NUMPAD_5(101),
KEY_NUMPAD_6(102),
KEY_NUMPAD_7(103),
KEY_NUMPAD_8(104),
KEY_NUMPAD_9(105),
KEY_NUMPAD_ENTER(14),
KEY_NUMPAD_ADD(107),
KEY_NUMPAD_SUBTRACT(109),
KEY_NUMPAD_MULTIPLY(106),
KEY_NUMPAD_DIVIDE(111),
KEY_NUMPAD_DECIMAC(110);
companion object {
fun valueOf(value: Int): SkikoKey {
val key = SkikoKey.values().firstOrNull { it.value == value }
return if (key == null) SkikoKey.KEY_UNKNOWN else key
}
}
}
package org.jetbrains.skiko
actual enum class SkikoKey(val value: Int) {
KEY_UNKNOWN(-1),
KEY_A(65),
KEY_S(83),
KEY_D(68),
KEY_F(70),
KEY_H(72),
KEY_G(71),
KEY_Z(90),
KEY_X(88),
KEY_C(67),
KEY_V(86),
KEY_B(66),
KEY_Q(81),
KEY_W(87),
KEY_E(69),
KEY_R(82),
KEY_Y(89),
KEY_T(54),
KEY_U(85),
KEY_I(73),
KEY_P(80),
KEY_L(76),
KEY_J(74),
KEY_K(75),
KEY_N(78),
KEY_M(77),
KEY_O(79),
KEY_1(49),
KEY_2(50),
KEY_3(51),
KEY_4(52),
KEY_5(53),
KEY_6(54),
KEY_7(55),
KEY_8(56),
KEY_9(57),
KEY_0(48),
KEY_CLOSE_BRACKET(221),
KEY_OPEN_BRACKET(219),
KEY_QUOTE(222),
KEY_SEMICOLON(59),
KEY_SLASH(191),
KEY_COMMA(188),
KEY_BACKSLASH(220),
KEY_PERIOD(190),
KEY_BACK_QUOTE(192),
KEY_EQUALS(61),
KEY_MINUS(173),
KEY_ENTER(13),
KEY_ESCAPE(27),
KEY_TAB(9),
KEY_BACKSPACE(8),
KEY_SPACE(32),
KEY_CAPSLOCK(20),
KEY_LEFT_META(224),
KEY_LEFT_SHIFT(16),
KEY_LEFT_ALT(18),
KEY_LEFT_CONTROL(17),
KEY_RIGHT_META(0x80000000.toInt() or 224),
KEY_RIGHT_SHIFT(0x80000000.toInt() or 16),
KEY_RIGHT_ALT(225),
KEY_RIGHT_CONTROL(0x80000000.toInt() or 17),
KEY_UP(38),
KEY_DOWN(40),
KEY_LEFT(37),
KEY_RIGHT(39),
KEY_F1(112),
KEY_F2(113),
KEY_F3(114),
KEY_F4(115),
KEY_F5(116),
KEY_F6(117),
KEY_F7(118),
KEY_F8(119),
KEY_F9(120),
KEY_F10(121),
KEY_F11(122),
KEY_F12(123),
KEY_PRINTSCEEN(44),
KEY_SCROLL_LOCK(145),
KEY_PAUSE(19),
KEY_INSERT(45),
KEY_HOME(36),
KEY_PGUP(33),
KEY_DELETE(46),
KEY_END(35),
KEY_PGDOWN(34),
KEY_NUM_LOCK(144),
KEY_NUMPAD_0(96),
KEY_NUMPAD_1(97),
KEY_NUMPAD_2(98),
KEY_NUMPAD_3(99),
KEY_NUMPAD_4(100),
KEY_NUMPAD_5(101),
KEY_NUMPAD_6(102),
KEY_NUMPAD_7(103),
KEY_NUMPAD_8(104),
KEY_NUMPAD_9(105),
KEY_NUMPAD_ENTER(14),
KEY_NUMPAD_ADD(107),
KEY_NUMPAD_SUBTRACT(109),
KEY_NUMPAD_MULTIPLY(106),
KEY_NUMPAD_DIVIDE(111),
KEY_NUMPAD_DECIMAC(110);
companion object {
fun valueOf(value: Int): SkikoKey {
return values().firstOrNull { it.value == value } ?: KEY_UNKNOWN
}
}
}
\ No newline at end of file
...@@ -2,4 +2,4 @@ package org.jetbrains.skiko ...@@ -2,4 +2,4 @@ package org.jetbrains.skiko
val currentSystemTheme: SystemTheme val currentSystemTheme: SystemTheme
// TODO: getting actual OS system theme // TODO: getting actual OS system theme
get() = SystemTheme.LIGHT get() = SystemTheme.UNKNOWN
\ No newline at end of file \ No newline at end of file
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