https://kotlinlang.org logo
Docs
Join the conversationJoin Slack
Channels
100daysofcode
100daysofkotlin
100daysofkotlin-2021
advent-of-code
aem
ai
alexa
algeria
algolialibraries
amsterdam
android
android-architecture
android-databinding
android-studio
androidgithubprojects
androidthings
androidx
androidx-xprocessing
anime
anko
announcements
apollo-kotlin
appintro
arabic
argentina
arkenv
arksemdevteam
armenia
arrow
arrow-contributors
arrow-meta
ass
atlanta
atm17
atrium
austin
australia
austria
awesome-kotlin
ballast
bangladesh
barcelona
bayarea
bazel
beepiz-libraries
belgium
berlin
big-data
books
boston
brazil
brikk
budapest
build
build-tools
bulgaria
bydgoszcz
cambodia
canada
carrat
carrat-dev
carrat-feed
chicago
chile
china
chucker
cincinnati-user-group
cli
clikt
cloudfoundry
cn
cobalt
code-coverage
codeforces
codemash-precompiler
codereview
codingame
codingconventions
coimbatore
collaborations
colombia
colorado
communities
competitive-programming
competitivecoding
compiler
compose
compose-android
compose-desktop
compose-hiring
compose-ios
compose-mp
compose-ui-showcase
compose-wear
compose-web
connect-audit-events
corda
cork
coroutines
couchbase
coursera
croatia
cryptography
cscenter-course-2016
cucumber-bdd
cyprus
czech
dagger
data2viz
databinding
datascience
dckotlin
debugging
decompose
decouple
denmark
deprecated
detekt
detekt-hint
dev-core
dfw
docs-revamped
dokka
domain-driven-design
doodle
dsl
dublin
dutch
eap
eclipse
ecuador
edinburgh
education
effective-kotlin
effectivekotlin
emacs
embedded-kotlin
estatik
event21-community-content
events
exposed
failgood
fb-internal-demo
feed
firebase
flow
fluid-libraries
forkhandles
forum
fosdem
fp-in-kotlin
framework-elide
freenode
french
fritz2
fuchsia
functional
funktionale
gamedev
ge-kotlin
general-advice
georgia
geospatial
german-lang
getting-started
github-workflows-kt
glance
godot-kotlin
google-io
gradle
graphic
graphkool
graphql
graphql-kotlin
graviton-browser
greece
grpc
gsoc
gui
hackathons
hacktoberfest
hamburg
hamkrest
helios
helsinki
hexagon
hibernate
hikari-cp
hire-me
hiring
hongkong
hoplite
http4k
hungary
hyderabad
image-processing
india
indonesia
inkremental
intellij
intellij-plugins
intellij-tricks
internships
introduce-yourself
io
ios
iran
israel
istanbulcoders
italian
jackson-kotlin
jadx
japanese
jasync-sql
java-to-kotlin-refactoring
javadevelopers
javafx
javalin
javascript
jdbi
jhipster-kotlin
jobsworldwide
jpa
jshdq
juul-libraries
jvm-ir-backend-feedback
jxadapter
k2-early-adopters
kaal
kafka
kakao
kalasim
kapt
karachi
karg
karlsruhe
kash_shell
kaskade
kbuild
kdbc
kgen-doc-tools
kgraphql
kinta
klaxon
klock
kloudformation
kmdc
kmm-español
kmongo
knbt
knote
koalaql
koans
kobalt
kobweb
kodein
kodex
kohesive
koin
koin-dev
komapper
kondor-json
kong
kontent
kontributors
korau
korean
korge
korim
korio
korlibs
korte
kotest
kotest-contributors
kotless
kotlick
kotlin-asia
kotlin-beam
kotlin-by-example
kotlin-csv
kotlin-data-storage
kotlin-foundation
kotlin-fuel
kotlin-in-action
kotlin-inject
kotlin-latam
kotlin-logging
kotlin-multiplatform-contest
kotlin-mumbai
kotlin-native
kotlin-pakistan
kotlin-plugin
kotlin-pune
kotlin-roadmap
kotlin-samples
kotlin-sap
kotlin-serbia
kotlin-spark
kotlin-szeged
kotlin-website
kotlinacademy
kotlinbot
kotlinconf
kotlindl
kotlinforbeginners
kotlingforbeginners
kotlinlondon
kotlinmad
kotlinprogrammers
kotlinsu
kotlintest
kotlintest-devs
kotlintlv
kotlinultimatechallenge
kotlinx-datetime
kotlinx-files
kotlinx-html
kotrix
kotson
kovenant
kprompt
kraph
krawler
kroto-plus
ksp
ktcc
ktfmt
ktlint
ktor
ktp
kubed
kug-leads
kug-torino
kvision
kweb
lambdaworld_cadiz
lanark
language-evolution
language-proposals
latvia
leakcanary
leedskotlinusergroup
lets-have-fun
libgdx
libkgd
library-development
linkeddata
lithuania
london
losangeles
lottie
love
lychee
macedonia
machinelearningbawas
madrid
malaysia
mathematics
meetkotlin
memes
meta
metro-detroit
mexico
miami
micronaut
minnesota
minutest
mirror
mockk
moko
moldova
monsterpuzzle
montreal
moonbean
morocco
motionlayout
mpapt
mu
multiplatform
mumbai
munich
mvikotlin
mvrx
myndocs-oauth2-server
naming
navigation-architecture-component
nepal
new-mexico
new-zealand
newname
nigeria
nodejs
norway
npm-publish
nyc
oceania
ohio-kotlin-users
oldenburg
oolong
opensource
orbit-mvi
osgi
otpisani
package-search
pakistan
panamá
pattern-matching
pbandk
pdx
peru
philippines
phoenix
pinoy
pocketgitclient
polish
popkorn
portugal
practical-functional-programming
proguard
prozis-android-backup
pyhsikal
python
python-contributors
quasar
random
re
react
reaktive
realm
realworldkotlin
reductor
reduks
redux
redux-kotlin
refactoring-to-kotlin
reflect
refreshversions
reports
result
rethink
revolver
rhein-main
rocksdb
romania
room
rpi-pico
rsocket
russian
russian_feed
russian-kotlinasfirst
rx
rxjava
san-diego
science
scotland
scrcast
scrimage
script
scripting
seattle
serialization
server
sg-user-group
singapore
skia-wasm-interop-temp
skrape-it
slovak
snake
sofl-user-group
southafrica
spacemacs
spain
spanish
speaking
spek
spin
splitties
spotify-mobius
spring
spring-security
squarelibraries
stackoverflow
stacks
stayhungrystayfoolish
stdlib
stlouis
strife-discord-lib
strikt
students
stuttgart
sudan
swagger-gradle-codegen
swarm
sweden
swing
swiss-user-group
switzerland
talking-kotlin
tallinn
tampa
teamcity
tegal
tempe
tensorflow
terminal
test
testing
testtestest
texas
tgbotapi
thailand
tornadofx
touchlab-tools
training
tricity-kotlin-user-group
trójmiasto
truth
tunisia
turkey
turkiye
twitter-feed
uae
udacityindia
uk
ukrainian
uniflow
unkonf
uruguay
utah
uuid
vancouver
vankotlin
vertx
videos
vienna
vietnam
vim
vkug
vuejs
web-mpp
webassembly
webrtc
wimix_sentry
wwdc
zircon
Powered by Linen
doodle
  • c

    Cherrio LLC

    12/18/2022, 1:22 PM
    I used to be able to do
    += view
    . Any api change or i have to import something?
    n
    • 2
    • 3
  • a

    ayodele

    12/19/2022, 8:15 AM
    What's wrong with my constraint?? Code in 🧵
    n
    c
    • 3
    • 5
  • a

    ayodele

    12/29/2022, 7:00 PM
    Hello, can
    margin
    be applied to a view itself instead of on the
    constraint
    ?
    n
    • 2
    • 7
  • a

    ayodele

    12/30/2022, 12:23 PM
    Hello, I'm here once again. I have a couple of views that goes off screen, how can I make the parent scrollable. I tried to use
    ScrollPanel
    with a
    SimpleMutableListModel
    n
    • 2
    • 19
  • a

    ayodele

    01/02/2023, 12:56 PM
    Happy new year. Is there a way I can update a layout? After init and stuffs
  • n

    Nick

    01/04/2023, 4:35 PM
    0.9.0 Released (https://github.com/nacular/doodle/releases/tag/v0.9.0) This release has lots of new features including: • Revamped Animation APIs • New Constraint Layout Engine • Improved Tables and TreeTables • New FileSelector Control • New Form Controls (
    slider
    ,
    rangeSlider
    ,
    circularSlider
    ,
    circularRangeSlider
    ,
    file
    and
    files
    ) It also brings some performance improvements and fixes.
  • n

    Nick

    01/07/2023, 3:33 PM
    Doodle now has 400 ⭐ on github 🎉
  • c

    Cherrio LLC

    01/08/2023, 5:03 PM
    Hello, is there a reason that a View's layout or render is not exposed? for example
    val view = object: View(){}
  • n

    Nick

    01/08/2023, 5:12 PM
    The
    layout
    is
    protected
    to prevent arbitrary code from changing it for a view that assumes it has a particular one. Same goes for the render. But it’s easy to make a new view with whatever you’d like for these. The first option is to use the view builder. This will let you specify the render behavior (but not layout, though this might make sense to expose there as well).
    val view = view {
        render = {
           // this points to a Canvas
           rect(…)
        }
    }
    The second is to override render or set layout in a derived class:
    object: View() {
        init {
          layout = …
        }
    
        override render(…) {…}
    }
    c
    • 2
    • 34
  • a

    Anant Kumar Gupta

    01/13/2023, 3:38 PM
    Hey anyone's here can guide me to use javascript code in kotlinjs? Please
  • n

    Nick

    01/13/2023, 3:56 PM
    Do you mean generally? Or via a framework like Doodle?
  • a

    Anant Kumar Gupta

    01/14/2023, 3:37 AM
    Generally
  • a

    Anant Kumar Gupta

    01/14/2023, 3:42 AM
    Is there any special method for framework?
    n
    • 2
    • 8
  • c

    Cherrio LLC

    02/08/2023, 6:11 PM
    Hello, I get a weird behaviour with
    simpleLayout
    code in thread
    n
    • 2
    • 5
  • c

    Cherrio LLC

    02/14/2023, 1:39 PM
    Hello, I wanna style some widgets like button. Add some rounded corners and elevation. I figured out from the documentation that i need a behavior but the documentation is not very clear. 1. Is there ready to use behaviour that i can extend from? 2. Can I customize colors like primary secondary using Theme?
    n
    • 2
    • 1
  • s

    ShellWen 颉文

    02/15/2023, 4:29 AM
    I have a question about Doodle. What is the main difference between it and Compose? Sorry for my poor English.
    n
    a
    • 3
    • 8
  • c

    Cherrio LLC

    02/19/2023, 5:02 PM
    Hello, how can i use the
    renderProperty
    , to change the value of textField? When I try, I get:
    n
    • 2
    • 5
  • n

    Nazar Pohonchuk

    02/22/2023, 10:06 PM
    Hi! Could anyone please explain why my simple project doesn't work? build.gradle.kts
    plugins {
        id ("org.jetbrains.kotlin.js") version "1.7.21"
    }
    
    group = "org.example"
    version = "1.0-SNAPSHOT"
    
    repositories {
        mavenCentral()
    }
    
    kotlin {
        js().browser()
    
        val doodleVersion = "0.9.0" // <--- Latest Doodle version
    
        dependencies {
            implementation ("io.nacular.doodle:core:$doodleVersion"   )
            implementation ("io.nacular.doodle:browser:$doodleVersion")
    
            // Optional
            implementation ("io.nacular.doodle:controls:$doodleVersion" )
            implementation ("io.nacular.doodle:animation:$doodleVersion")
            implementation ("io.nacular.doodle:themes:$doodleVersion"   )
        }
    }
    Main.kt
    import io.nacular.doodle.application.Application
    import io.nacular.doodle.application.application
    
    fun main() {
        application {
            UsefulApp()
        }
    }
    
    class UsefulApp: Application {
        init {
            //println("Hi!")
        }
    
        override fun shutdown() {}
    }
    When I run gradle task 'browserRun', I get this
  • n

    Nick

    02/22/2023, 10:54 PM
    do you have an html file in your src/resources dir? and does it include the js file created by the build? see this for an example https://github.com/nacular/doodle-tutorials/tree/master/PhotoStream/src/main/resources
    n
    • 2
    • 1
  • n

    Nick

    02/23/2023, 4:56 PM
    hmm. this should work (and does when i try it locally). are you sure the js file you have in index.html is the right one? also, can you add
    println
    statements to verify that your code is being executed? last thing to consider is whether
    display.size
    is empty by chance. that would mean your view has no size. as defined, your view's size will be a fixed value and won't change as you resize the window. you can fix that by doing:
    class HelloDoodle(display: Display): Application {
        init {
            val view = view {
                render = {
                    text("Hello, Doodle!", color = Black)
                }
            }
    
            display += view
            display.fill(White.paint)
            display.layout = constrain(view, fill) // adds a constraint based layout that causes view to fit the display
        }
    
        override fun shutdown() {}
    }
    n
    • 2
    • 1
  • c

    Cherrio LLC

    02/27/2023, 1:02 AM
    Can i implement margin without wrapping my view within a container or another view. I thought I could use
    view.bounds
    but couldn't so far
    n
    • 2
    • 12
  • n

    Nazar Pohonchuk

    03/01/2023, 9:13 PM
    Hi! I am trying to create a simple Tic Tac Toe. I am creating my custom View called Cell, which is basically a rectangle with a text on it, but I can't make the size of the text equal to the size of the rectangle. Could anybody help me, please?
    class TicTacToe(display: Display, textMetrics: TextMetrics) : Application {
    
        private var playerMoves = Player.X
    
        private fun getPlayerName(): String {
            val playerName = playerMoves.toString()
            playerMoves = playerMoves.next
            return playerName
        }
        init {
    
            val panel = GridPanel().apply {
                rowSpacing         = { 10.0 }
                columnSpacing      = { 10.0 }
                rowSizingPolicy    = FitPanel // FitContent, or custom policy
                columnSizingPolicy = FitPanel // FitContent, or custom policy
    
    
                for (i in 0..2)
                    for (j in 0..2) {
                        add(Cell(textMetrics, ::getPlayerName), row = i, column = j)
                    }
    
                val panelSize = min(display.width, display.height) * 0.8
                size = Size(panelSize, panelSize)
                Resizer(this).apply { movable = false }
    
            }
    
            display += panel
            display.layout = constrain(display.first(), center)
        }
    
        override fun shutdown() {}
    }
    
    class Cell(textMetrics: TextMetrics, getPlayerName: () -> String) : View() {
    
        var text by renderProperty("")
    
        init {
            this.pointerChanged += object : PointerListener {
    
                override fun clicked(event: PointerEvent) {
                    if (text.isEmpty()) text = getPlayerName()
                }
            }
        }
        override fun render(canvas: Canvas) {
            canvas.rect(bounds.atOrigin, Blue.lighter(0.4f))
    
            canvas.text(text, at = Point(width / 2, height / 2), color = White)
        }
    
    }
    
    enum class Player {
        X {
            override fun toString(): String {
                return "X";
            }
        },
    
        O {
            override fun toString(): String {
                return "O";
            }
        };
    
        val next
            get() = if (this == X) O else X
    }
    
    fun main() {
    
        application(modules = listOf(PointerModule)) {
            TicTacToe(display = instance(), textMetrics = instance())
        }
    }
    n
    • 2
    • 1
  • n

    Nazar Pohonchuk

    03/01/2023, 9:14 PM
    image.png
  • n

    Nazar Pohonchuk

    03/01/2023, 11:15 PM
    General question. At the university, instead of an exam, there will be a project (web application) on the subject of 'Web programming', the topic of which I have to come up with. The teacher uses .Net and React, so the lectures will be based on these technologies, but students can use anything they like. I was learning Kotlin and started learning Android (TO-DO is the hardest thing I've done), so I want to do a project in an already familiar language. Project requirements: 1. Swagger UI 2. Authorization using a Google account or Azure AD 3. Use a database and ORM 4. Dependency injection 5. Use an open API 6. Data processing algorithm (conversion, mapping, calculation) 7. Use Azure Monitor (Application Insights) to store and analyze application logs 8. Deployment of the project in Azure 9. All code must be stored on GitHub with constant updates 10. Configure Continuous Integration / Continuous Delivery There is documentation and testing as well. It looks terrifying, because I, like most students, am 0 in the front-end. I only tried Ktor a little. I thought about using Compose for Web, but there is not much information. There are no courses or books, the documentation is minimal. The Kotlin documentation has this https://kotlinlang.org/docs/multiplatform-full-stack-app.html#serve-the-frontend, but I don't know React, so I think it won't be easy. Finally the question. Would you recommend Doodle to me? I like Kotlin and I like Doodle, but there is not much information. I mean I can't just find an answer on stackoverflow for my newbie question. And one more question. Do you have a group in Telegram or any other messenger for a Doodle community? Thank you very much for your reply
    a
    n
    • 3
    • 2
  • s

    Stan

    03/02/2023, 1:18 PM
    Hello doodle-devs. I want to experiment with doodle. I want to build a beautiful web-ui for someone who takes old jewelry and reshapes it to designs worked out between the artist and the jewelry owner. Every thing is done face-to-face, and she would like to be able to move a lot of this work on-line. I was thinking doodle could be very useful in rendering 3d images for clients to gawk at, while they go back and forth with the artist to get the designs just right. I'm motivated to spend some time figuring out how to work with doodle, but have some questions before I dive in. Some background: I'm new to Kotlin, but old (very) in Java. My UI (styling) chops are horrible, but server side (incl web-app, rest), and code organization skills are good. My questions: 1) I see the last check-in on the project was two months ago, and there are four contributors. "Two months ago" is pretty recent, but I wonder, and ask,
    is the project really active?
    2) Many of the UI components don't render until I click the "Usage" link, then go back to "Demo". https://nacular.github.io/doodle/docs/ui_components/overview The ony Animations demo that renders is the #key-frames demo. https://nacular.github.io/doodle/docs/animations https://nacular.github.io/doodle/docs/animations#key-frames
    Are there known issues about many of the demos not rendering?
    I know the project is young and you say there are / will be bugs, and they could be due to other reasons, i.e., browser extensions? OS (Linux) related? PEBKAC? Regardless, I'm still interested. 3) I'm particularly interested in the doodle rendering and animations -- no CSS!?! Did I mention no CSS!?! Do you think there is a chance that any of the jewlry maker's photoshop chops transfer to any aspects or concepts behind doodle code supporting image design, rendering, and/or animations? 4) Finally, can I "Build a full-stack web app with Kotlin Multiplatform",
    using only the doodle
    	ui-components I mentioned in item (#3 rendering and animations)?
    https://kotlinlang.org/docs/multiplatform-full-stack-app.html In other words, I want to build a Kotlin KMM system (first for web, then mobile,) with a small number doodle widgets, not a a full blown "doodle system". Does that make sense? Or do I have to go "all in"? That is probably a dumb question, due to my lack of Kotlin chops. My java experience tells me "of course" I can use just the doodle widgets I need in the web views that need them, but ask anyway. (You can laugh.)
    a
    n
    r
    • 4
    • 37
  • n

    Nick

    03/10/2023, 4:52 PM
    Hey folks. I just published 0.9.1-SNAPSHOT and would love to get some feedback before a full release. You can try it out by pointing to `maven { url = uri("`https://oss.sonatype.org/content/repositories/snapshots`") }` Here's what's included so far... New PopupManager You can now present top-level Views that will cover all other existing ones in a safe and reliable way using the new
    PopupManager
    . Before, you could make custom popups by directly adding items to the
    Display
    . This worked in many cases, but had a lot of limitations. For example, Views added this way would be affected by any
    Layout
    on the
    Display
    , which meant you couldn't control these Popups as easily. Also, new Views added to the
    Display
    after a custom popup was shown could overlay the popup. So there was no way to guarantee that a popup remained the top-most View. The new PopupManager fixes these limitations and provides a simple API for showing popups. Any View Can Be A Popup The PopupManager's API works with
    View
    , so you can make anything a popup. Simply do the following:
    popupManager.show(myView) {
        it.center eq parent.center
    }
    
    // ...
    
    popupManager.hide(myView)
    Views that are shown as popups will automatically become top-level (being removed from their existing parent if already displayed) and sit above all other existing Views. Hiding a popup removes it from the
    Display
    , but it won't return the View to a previous parent if it had one. Popup Layouts Popups are shown with layout information directly. There are two ways to show a popup: relative to the
    Display
    , or relative to another
    View
    and the
    Display
    . There is an API call for each: Here,
    myView
    is positioned with only a "reference" to the Display (parent).
    popupManager.show(myView) {
        it.center eq parent.center
    }
    But sometimes a popup needs to be positioned relative to another View. This shows how to place
    myView
    so it tracks the bounds of
    someView
    . The PopupManager will handle keeping the popup aligned with
    someView
    .
    // myView is positioned with only a "reference" to the Display (parent)
    popupManager.show(myView, relativeTo = someView) { popup, anchor ->
        <http://popup.top|popup.top>     greaterEq 0                             // Popup top-left always visible
        popup.left    greaterEq 0                             // Popup top-left always visible
        popup.width.preserve                                  // don't shrink popup
        popup.height.preserve                                 // don't shrink popup
    
       (popup.right   lessEq    parent.right ) .. Strong      // stay in parent as long as doesn't compress popup
       (popup.bottom  lessEq    parent.bottom) .. Strong      // stay in parent as long as doesn't compress popup 
      
       (<http://popup.top|popup.top>     eq        anchor.bottom + 10) .. Medium // follow anchor, as long as stronger constraints not in conflict 
       (popup.centerY eq        anchor.centerY    ) .. Medium // follow anchor, as long as stronger constraints not in conflict
    }
    More Powerful Text Rendering Text Alignment There is a new
    TextAlignment
    enum that controls how wrapped text is displayed within its margins. This is a replacement for
    HorizontalAlignment
    , which currently uses
    Left
    ,
    Right
    (instead of
    Start
    ,
    End
    ) and does not support
    Justify
    . You can justify text by doing the following:
    canvas.wrapped(
      text,
      at          = Origin,
      leftMargin  = 0.0,
      rightMargin = width,
      alignment   = TextAlignment.Justify,
      fill        = Black.paint
    )
    
    canvas.wrapped(
      styledText,
      at          = Origin,
      leftMargin  = 0.0,
      rightMargin = width,
      alignment   = TextAlignment.Justify,
    )
    Letter, Word, And Line Spacing You can now control the way letters, words and lines are spaced when rendering text. Letter and words spacing can be provided to the text rendering methods on
    Canvas
    using the new
    TextSpacing
    class. This information can also be passed to
    TextMetrics
    when measuring text.
    Label
    also has support for both letter and word spacing. Line spacing can also be specified whenever you deal with wrapped text. APIs •
    Rectangle.toPath
    that allows specifying each corner radius • Exposing
    insets
    in
    simpleTextButtonRenderer
    function •
    repeat
    and
    loop
    animations can now have delays •
    Canvas
    can now render wrapped text with custom line-spacing •
    Label
    now has
    lineSpacing
    property which controls how it displays wrapped text • Animatable Properties are no longer restricted to use within Views • New method to create
    Ellipse
    and
    Circle
    by inscribing within
    Rectangle
    • New
    Circle.diameter
    property • New constructor for
    StyledText
    that takes a
    String
    and
    Style
    Accessibility • Browser ◦
    Button
    now sets
    accessibilityLabel
    to its
    text
    if no label is already provided ◦
    HyperLink
    with native behavior will now apply aria-label to the anchor tag using the HyperLink's text when the
    AccessibilityManager
    is present Fixes | Improvements • General ◦ Bug with empty AnimationBlock when created during active animation ◦ Wrapped text not correctly aligned ◦ Bug in
    FilteredList
    iterator.remove ◦
    CommonLabelBehavior
    no longer provides an x offset for wrapped text since the alignment is handled correctly by
    Canvas
    ◦ Edge case where layout can hang b/c of double imprecision ◦ Issue where
    CommonLabelBehavior
    overrides
    Label.foregroundColor
    on uninstall ◦ Bug where incorrect item could be removed from
    RenderManagerImpl.pendingLayout
    ◦ Bug where some View properties lost during behavior install ◦ Bug where some views not cleaned up by
    RenderManager
    ◦ Bug in pointer handling when
    Display
    transformed ◦
    ToggleButton
    no longer relies on being displayed to listen to its model ◦
    StyledText.text
    now returns correct value • Browser ◦ Misidentifying elements as native scroll panels led to incorrect pointer behavior ◦ Reuse instances for linear/radial gradient paints ◦ Reusing clipped images ◦ Hyperlinks now open in new tab ◦ Shadow render bug when using SVG ◦ Element sometimes not reused when drawing shadow ◦ Remove overflow on element w/ shadow ◦ Fixed wrapped
    StyledText
    rendering ◦ Wrapped
    StyledText
    now supports text decoration on previously unsupported cases • Desktop ◦ Fixed SVG image file loading issue ◦ Fixed rendering of images with radius ◦ Issue where font families weren't being properly tracked and therefore incorrectly applied ◦ Incorrect paragraph width measurement
  • s

    Stan

    03/10/2023, 4:52 PM
    I want to build a very simple UI for users who only use their smart-phones for internet access (almost exclusively iPhone). But, I understand "SVG capabilities on mobile browsers are not equal to SVG capabilities on modern desktop computer browsers, and mobile browsers may support fewer SVG features, or may have slower performance when rendering complex SVG graphics. Additionally, mobile browsers may have different support for SVG-related technologies, such as animation and scripting, than desktop browsers." -- ChatGPT That said, do you think it is not worth attempting to build a doodle UI for iPhone Safari that does basically one thing, varying only the images (pictures) displayed. This is the use case: - Display an image of a ring (jewelry) with an empty setting in the middle of the page. - Display a vertical strip of small images (stones) on the right side of the page. As the user moves her finger down the sliding, vertical strip of stone images, the image at y-coordinate=0 appears in the ring's setting (in the center of the page). The only variations of this use case are displaying a different model ring (or necklace) in the center of the page, and different stones or pendants in the right-hand-side vertical (sliding) strip. Do you think doodle-svg could do this in iOS Safari? Do you think I should even try?
  • s

    Stan

    03/10/2023, 4:56 PM
    What I did not do before asking that question is trying to run your tutorial demos on an ipad & iphone. Oops. Sorry 'bout that.
  • n

    Nick

    03/10/2023, 4:57 PM
    Hey @Stan. I think this should be doable w/ Doodle and it should work just fine on Safari mobile. Everything you mentioned is already supported by Doodle and works well on mobile. All the tutorials you see and the docs use SVG when necessary to render (i.e. https://nacular.github.io/doodle/docs/rendering/overview#pattern-paints). These all work as expected on mobile Safari.
  • n

    Nick

    03/10/2023, 4:57 PM
    They should all work as expected. And your use-case should be already possible.
Powered by Linen
Title
n

Nick

03/10/2023, 4:57 PM
They should all work as expected. And your use-case should be already possible.
View count: 2