Jon (00:04.014) Hey there everybody. Welcome back to this week's gone mobile. And we were just talking about before I hit the record button that I couldn't think of a, an opener. I couldn't think of a topic to lead in with. And then Alan had this excellent joke, dad joke. Allan (00:19.15) Yeah, the lead in so John is drawing a blank today. Waka Waka Waka, I guess what we're talking about. Jon (00:23.79) What I don't have my my joke jump thing going on. That's too bad Allan (00:28.462) Yeah, but I did Fuzzy the Bear, so that's fine, right? Yeah, there we go, walk, walk, walk. Yeah, everybody loves Muppets. We're like two giant Muppets. We'll be the old grumpy guys in the booth one day going, what is this stupid thing? Jon (00:33.294) Yeah, that's great. Love the Fozzy. That's right. like what are their names again? Yeah, that was a lot of fun going back to that Disney experience. I won't say ride, but the Muppet Vision or whatever. That's one of my favorites. Yeah. so I was going to say, should we? Allan (00:51.533) yeah. I love it. I love the Muppets. I've always loved it. Always loved it. So that's a good segue though, just because everybody gets it. Jon (01:01.197) Should we let everyone in on the inside joke of that or make that inside joke? Yeah. Allan (01:04.172) Well, I did kind of briefly say it. I briefly said it, but yeah, the topic today is drawing controls. Something that John wants to talk about and get it out there. Jon (01:09.806) did you? I wasn't. Well, it's been an idea for an episode. it's something that, that I see over and over again that comes up over and over again. And I thought it would be worth talking about, especially when you start the conversation around like, why isn't Maui more like Flutter or something like that. Right. So Allan (01:31.34) You don't have to be like Flutter. You don't have to be Flutter. There could be different ways of accomplishing the same thing, but... Jon (01:37.198) Yeah, that's I mean, that's that's a great point. So that that seems to be somewhat of a I don't know. I'm not gonna call it a debate but I I see often enough and and maybe one of the things that made me kind of think about like is is this a good topic for this week's episode because again, I think it was a reddit post or something. That's what you know, twitter, whatever who knows maybe it was the presidential debate. I don't somebody was saying like why is maui not just like flutter and why doesn't it just do this and it Allan (02:01.099) He he. Jon (02:05.454) You know, the question comes up a lot and what you just said is kind of the right answer for it. It's like there's a bunch of different ways to accomplish the same goal. Some of them might work better than others. Some of them might work better for a different goal than the other works for that same goal, right? Allan (02:23.179) Well, you know, there is something to be said about this though. And, you know, you can do drawing controls, obviously, we're going to talk about that. But Maui's got one of the interesting kind of value propositions to people that are thinking about it is if, let's say XAML is not working for you, there's C sharp markup, and there's blazer. You know, it's C sharp through and through, there's multiple avenues to go through. You're not kind of I guess you're still somewhat vendor locked, but you're not technology locked, if that makes sense. There's many, many ways to go at it. Whereas with, if you go flutter, you're vendor locked and technology locked. And if some new pattern comes out tomorrow, right? Cause MVU is all hot and cool right now. It's kind of, well, whatever. Jon (02:57.87) Yeah, no, I think that's an interesting aspect too, right? It's not. Yeah, you're there. That's it, right? Yeah. Jon (03:17.87) Well, we've, we've talked about that in episodes. I mean, there, there's aspects of MVU that I would love to have in app, you know, in my coding toolbox with C sharp, but you know, it's again, it's another way to do things, right? Allan (03:30.025) But it changes all the time, right? So I do react. I know you're not a react guy, but I've done a lot of react. And that keeps changing on me constantly, constantly. Every time I go back in, I might not do a web project for like a year, and then I'll go back in and I'll be like, what the hell happened here? So there's a good thing to be said about consistency and the fact that I'm still not technology locked. Jon (03:32.142) Yeah. Jon (03:36.334) No. Jon (03:45.934) Well that's - Allan (03:59.912) You know, I can change my course if I need to without disrupting too too much. Jon (04:04.878) Yeah. So, you know, let's, let's, I guess, get into the idea of it a little bit more too. So, you know, now you've thrown out some other suggestions. Like I kind of viewed the notes for this episode as like ends of the spectrum, right? But there's actually like several, it's, it's a 3d spectrum, I think, right? Cause you've got web blazer, other things, but for the purpose of this episode, I kind of was thinking through the debate, if you will, of like, Allan (04:10.216) All right. Jon (04:34.798) drawn, completely drawn. Everything's drawn versus everything's not drawn and abstracted. And so, you know, Xamarin has, was the history of expose everything native always, right? And so before forms Xamarin was Xamarin and it was like, you can use the native frameworks and APIs and controls and everything on that platform. And you would write your code to target, you know, different platforms, right? Yeah. Allan (04:59.177) which is another point, you can still do that. So. Jon (05:01.934) That's, that's another one of those, the other spectrums, right? You could, you could just go that route and say, yeah, I'm going to write against like UI kit for everything on iOS and right against Android. Who knows whatever the thing is now. Yeah. Like, I don't, I don't know if we do compose. I know there's so many different things, but I don't know if Android knows where Android is either. So, but in terms of, of the history of Xamarin, right? It's always the idea was always Allan (05:05.288) Yep. Allan (05:13.033) whatever it is. I have no idea where Android is anymore. I don't want to. That's always been the case. Jon (05:28.27) abstract over the native things because that builds a better experience and feels more native. And that for a long time, I think was really true. If you compared like a, a phone gap app built, you know, to, to something that was Xamarin, which exposed the native stuff, like I, you could always tell when the thing was built with a web view in it, right? It was, it just had a weird feeling, just wasn't quite right. Allan (05:52.393) You can still kind of tell too. It's just, yep. Jon (05:54.286) you can still kind of tell. And you can still kind of tell in some cases, although it's getting a lot harder if something's built with like, like take a Flutter app, for example. Sometimes you can tell, right? You can tell that it's not quite, it's not native. Allan (06:06.569) Yeah, there's, they've got some interesting way, I've noticed on shadows and stuff, like the way they draw things is it's not, there's something off about it. Not off in a bad way, just in case there's any flutter freaks that are gonna attack. It's different. There's something noticeable about it and I can't quite put my finger on it. Jon (06:17.838) Yeah. No, no, it's just it's different, right? Yeah. Jon (06:26.958) And I don't know if, I think for a while, I don't know if it's true anymore. I think there were things like, you know, you couldn't always select text because it was just like rendered to a canvas, right? So if there was a screen that you used a native label on, you probably could like hold your thumb down and select the text. And I don't know if Flutter could do that and maybe it can better now. I'm not sure. But there are things like that that were subtly different. And some people, you know, I think like that subtly different in terms of building your app. Maybe you want your app to be a little bit different. This is one of the arguments when we, that we hear about drawing controls versus not is some people want their app to look identical on every platform. And that's a, that's kind of a feature for them, right? that could be just because, you know, Allan (07:09.32) Yep. Jon (07:13.134) That's how the designers designed it that you want to kind of adhere to. That could be because you're trying to save resources on, you know, how you write up like documentation and stuff and take screenshots of, you know, to provide in that documentation and things. It all looks the same across platforms. And so that's maybe a bonus for you. but then, you know, there, there's the argument of like, no, I want the app to look and feel like it belongs on that platform and to be as, as platform, kind of conforming as it can be. And so. Again, this isn't, it's not necessarily that there's one that's better than the other. It's that there's different kind of applications or different, desires for, for different, you know, ends of that spectrum, depending on what your scenario is. Right. Allan (07:57.222) Now, Flutter's helped close that gap. They do have like the, I forget that the iOS theming and the Android theming, they're there now. I think they've been there for at least a couple of years now, but it's a gap they've closed. Jon (08:08.846) I don't know how easy it is though, just like I know the last time. And again, admittedly, I am not a Flutter developer. I don't spend a lot of time there. I have spent some time just learning over the years because I kind of want to understand what they're doing. but I know last time I looked to it was kind of like you, maybe it's better. You had to like pick, you know, how you were going to do this kind of, and all of the control like hierarchies kind of stemmed from, am I choosing like to do iOS, you know, theming here? Or am I choosing to do something else? So I'd imagine that's gotten better. I can't see how it wouldn't have, but that was a weird thing I found when I was experimenting with it and kind of playing with it at least, you know, maybe a couple of years ago now. Allan (08:50.469) Well, that's one of the things with XAML styles is they're pretty good like that, right? You can kind of go left or right based on many, many things. Unless you don't go too deep, but yeah, the styles support that. So I'm sure they've improved it. I haven't tinkered with it. You know, when I'm writing my POCs, obviously I'm not known for UI stuff. So. Jon (09:14.03) Yeah. and, and you know, that's, so the path that flutter took is, is definitely interesting. if you start to kind of like pick apart how they've gotten there versus how, you know, other stuff works, like one of the things that we always thought about has been thought like, like, should we ever do a drawn? Fully drawn, you know, version for .net. How would that work? Right. Then you start like, and this is like Xamarin days, I think even before Microsoft, because I think Flutter was around back then. if not that, you know, there were other kinds of things that were doing similar drawing things. And so the, the conversations, you know, inevitably came up. and you know, they've, they've got a different set of challenges, right? Like one of the things that's really hard to do well, if you're rendering stuff yourself is like scrolling. Like how do you, Like that was where things always felt a little uncanny, I think in other technologies and stacks that didn't use like the native scrolling stuff was like, how do you do that well and have it not feel just slightly off for the platform that you're on? so, you know, there's stuff like that. Like, how do you, how do you make that work? Do you, can you actually use native controls in the mix to do it? I don't actually know how flutter does it. I think they, they figure out the whole thing themselves. Like, I think they're. Allan (10:32.035) They must be. Jon (10:32.878) they're mapping it as accurately as they can to feel like the native platform, but I don't think it is the native scrolling view. Again, could be wrong. Allan (10:39.523) I'm 99%. How could it be? Right. I guess they could swap in stuff. Yeah, I guess they could be swiping stuff in, but I don't think they are. Jon (10:44.11) Well, there's, there's tricks you can do. Yeah. I don't think that's how they do it though. Cause I think they can render to like canvases on web and stuff right now. So it's, it's, you know, God, there's gotta be some kind of implementation anyway. That's just purely drawn. Allan (10:56.547) Well, that's the interesting part because there's a big difference between the drawn controls and a bit of the layout stuff, right? I think you've talked about it a few times with me too, is that that's... So let's unpack that a bit. If you were gonna do a drawn set of controls right now, would that include layout? That's actually a good question. I'm interested in the answer. Jon (11:06.606) Yeah. Jon (11:20.27) I guess the, well, yeah, it's an interesting question. Like from a Maui perspective, our layout in code is all cross -platform. Like it's all managed like level, right? We're not, we're not using, we're not like mapping, a stack layout to the native stack layout. Like we're doing all the layout calculations in our, in our own level of code. So Allan (11:22.274) Or what would that look like? Jon (11:46.606) I guess, you know, in terms of drawing, like nothing would really change in Maui if Maui was to add a bunch of drawing controls to our layouts. Cause our layouts are all calculated, you know, based on, they're calculated based on, you know, a number of things. One of which is like the native control telling the layout about itself. Like if you, here, maybe a good example is something like a label, right? Like you change the text that you assigned to a label. Well, that label on iOS right now in Maui is a UI label. And when you add text to it, it's gonna potentially change its dimensions to accommodate displaying that text, depending on how it's been set up, right? And so when that happens, that label, that native control sends a, hey, my size has changed or whatever, my measure is invalidated, I need a layout, right? And then our layouts know when that happens and they kind of accommodate making sure to... re -measure the right things when that happens and recalculate the right grids or whatever, you have that native control nested inside of. So there's that kind of aspect of it. So that part actually would get a lot easier with drawing controls because you don't have like the native label on iOS acting maybe slightly differently than the native label on Android, then on windows, et cetera. Yeah, I mean, kind of, right? Cause at that point you're... Allan (13:04.45) One size fits all. Jon (13:09.582) you're in charge of rendering the text if you're drawing the label. And so you can say, I want to render the text the same everywhere. I want to, you know, I'm going to measure the string. I have the amount of space that I have left. If I want to like, you know, cut off the text because it's like a single line label and I want to add the dots on the end, you know, where that space ends, I can do that. Allan (13:34.401) the ellipsis. Jon (13:35.886) Yeah, it's the word. I didn't want to try and say it because I figured I would mess it up. So the problem becomes like... Allan (13:41.697) That would have been good for an outtake though. Come on man, go for it. Jon (13:46.094) Yeah, yeah, I would have. Yeah. Well, that's what we should do. I bet you we can use AI to gather the outtakes. Allan (13:52.16) No, man, people laugh about when we say stupid things, I'm sure they're like, what is this guy talking about? Jon (13:55.982) I'm sure they're laughing most of the episode, but, not, you know, that's fine. People can laugh at my expense. I don't mind. so yeah, and, and you start getting into this conversation about like shifting some of the problems. Now you were asking about layouts and stuff. So I think like, yeah, layouts wouldn't change much from that perspective. I think, the only thing that maybe would actually change and we can get into the details here is like, there are some Allan (14:04.96) Yeah, that's how I am. Hehehehehe Jon (14:24.398) performance things you can do kind of like, so right now a Maui layout has a native view mapped to it because you might want to change the background color of a grid, right? So we actually do have a native view that, you know, sits in that layout or, you know, behind that layout and then everything else inside that layout kind of lays out on top of it. so you could start to do some optimizations and things where you wouldn't have to have one native view for every layout that you have in the tree. For instance, like, let's say you've got, you know, let's say you're making a really good layout, a really good visual page and you've got a grid and then inside that grid, you've got a stack layout. And then inside that stack layout, you've got another grid with three more grids inside of that and two more stack layouts inside of that, because that's. You know what people do? Allan (15:15.103) Sounds like a Tales from the Crypt. Jon (15:16.462) Yeah, I think so. So we could, we could compress that a little bit, right? If all of the like nested layouts didn't have a background color set, it's like, okay, fine. We don't need a view for all of those, that kind of stuff. So, so that's, that's one advantage. And that's getting into kind of like drawing controls. One of the nice things is they can have a positive performance implication compared to, so if I have like a thousand labels on the screen, which again, like, you know, we, Allan (15:27.807) Okay. So. Jon (15:44.334) You're familiar with the the lulls per second comparisons, right? Yeah. What do you think about those? Allan (15:48.383) Yes. Yeah, I've seen that. Yep. Well, other than being a non realistic use case ever, it's generally nonsense, right? It just, they're all gonna be fairly close at some point, right? Well, to some degree, I mean, like once you get down to the metal, the closer you get to the metal, the faster it's gonna be. That's the fact. Jon (16:04.494) The well, they're not but like but yeah Jon (16:12.35) yeah, yeah, yeah. Yeah. So like the, my, my favorite thing with some of those in the past is we've seen like, you know, somebody comparing like, yeah, look, I can do like 20 times more than, you know, Xamarin or Maui Ken because I'm fast. And it's like, yeah, but you, you, all you're doing is taking a canvas and you're, you're drawing the strings on the canvas. Like we can, we can do that in Maui too, if you want to compare it that way. But like the idea was like compare apples to apples. So Allan (16:37.631) Yep. Jon (16:38.19) I think that the metric is suitably named because it's kind of laughable that it's a metric. Allan (16:45.535) Exactly. They're all going to hit about the same par, but anything that's layered on is always going to be fighting. There's always going to be faster until it gets to the metal. Jon (16:54.286) Yeah. So, but that is like a, and you could argue though that, hey, maybe there is some validity to it because Maui does instantiate a UI label on iOS for every label that you have on screen. And maybe some other drawn only thing does actually just draw the strings to a canvas. And that is going to be faster. But I think like realistically, If you're getting to the point, there's not a lot of apps. I know, I know of one, I can't talk about it, but I know of one app that has a, you know, a ton of that kind of stuff on a screen. And it's like a use case that you're like, yeah, okay. Yeah. You, you, you have that data to display. So maybe that's fine. But most apps, like if you, if you have that many controls on screen, that it's becoming a huge performance problem, you're probably not doing the best design for that screen. Is that fair? Allan (17:48.255) Probably not. No, that's that's fair. Probably. Some people do can consume a lot of information if you're looking like kind of a dashboard setup, but I don't know. And nobody's actually consuming it. It's just they're looking for something to highlight for them, right? So if you've got, you know, I work with some security systems, you know, if I'm watching like 20 cameras, I'm actually watching all 20 cameras, what I'm waiting for something is to blink at me and say, look here, like this one. Jon (17:51.854) Yeah. Yeah. Mm -hmm. So it can happen, but... Allan (18:17.823) Okay, and then you click on that now you're consuming it. So that's, I think that's more the case of what they're using. And maybe they don't need the 10 ,000 labels, maybe they need a better kind of alerting setup of some sort. Anyhow. Jon (18:29.23) Yeah, maybe they need to put some AI in the app and then just have it know for them. Allan (18:35.679) here. Well, yeah, I don't know. You don't always trust AI. It's, it's, you want to, but it's nice to still see that everything's working, but occasionally you're like, okay, why didn't you see that? Right. So you still need human eyes. I think we'll still be using humans for quite some time. Jon (18:39.758) And don't usually. Jon (18:54.99) I hope so, personally. So yeah, so drawing can be faster, right? Allan (19:01.023) So. So what else would make drawing controls hard? Now that we've got the layout solved, collection view, scrolling, probably related so we can leave them outish. Jon (19:09.294) Mm -hmm. Jon (19:15.854) Well, it, I mean, so here's where I think the idea of drawn controls kind of gets more interesting. And where I've thought about this often is where to draw the line between drawn and native. And so just like you can, you can almost have another like ends of the spectrum conversation about drawn controls within itself, which is do I, yeah, do I do like flutter and draw everything down the stack? I have one canvas and I have a my whole page of controls and I have to figure out how to do that. And in that case, something like a collection view or at any kind of list that that becomes a harder problem, right? Because now you're, you're trying to reason about, first of all, we talked like scrolling, like we said, but then, you know, just drawing everything in the right spot at the right time. that becomes a challenge. Now I've Often thought this there's there's a sweet spot to be found which is kind of more the hybrid approach and I think this gets into like well What are the hard problems to solve we can talk more about the hybrid approach, but one of the hard problems to solve Is like entry right text entry? how do you how do you Do that? And if you're gonna do that purely drawn form, like what does that even look like? How do you? How do you draw? You know, you have to draw the the cursor the carrot, you know blinking in the box. Do you go to that? much detail like I'm assuming Flutter maybe does maybe not maybe they they shove a a native control yeah Allan (20:41.087) You'd kind of have to, you kind of have to because the interesting part, if you look at some of the drawn control libraries that are out there, you won't find one with that entry box right now. Jon (20:52.206) Well, or what they're doing is like what I alluded to, which is kind of that hybrid approach, right? And so I always thought, you know, one way to tackle this problem is for text entry specifically, let's say, you know, you take the native control. So we still have to keep an abstraction over like, okay, what every native text entry control on each platform, but that's, that's not easy. Like clearly, cause we still have a lot of bugs probably around it in Maui. but you're, you're scoping the problem, right? Allan (21:17.663) but you can blank it all out. Yep. Jon (21:21.038) And so, you know, take that control, remove everything native from it, like as much, all the styling that you can, right? So like give it a transparent background, no outline, leave maybe the cursor in and, you know, style that accordingly. If, if you have like APIs to set the color of it or whatever, and then, you know, draw behind it, draw something on a canvas behind it, draw something if you need to on a canvas in front of it. whether that's the border or some shadowing or something, and you can kind of figure out which canvas in front or behind it needs to be. And then you've got sort of a drawn control, but you're still leveraging the native text box APIs and functionality and copy and paste and system integration and all that stuff, right? Because some of that's really hard to do if you're trying to recreate it. Allan (22:15.007) So that covers entry. So entry is a pretty hard one. What are the controls? I mean, carousel view is in line with collection view. Same thing, more or less. What do we? Jon (22:18.062) Mhm. Jon (22:23.694) Yeah. Well, so that kind of touches though on scrolling, right? So scroll and we talked about it a bit, but like in the sense of a hybrid control or how I would tackle it would be use the native scroll view, right? And this is kind of where you get into like, if you're, if you're drawing stuff, maybe your, your composition of a page is actually many drawn canvases, right? Yeah. And so Allan (22:29.791) Yeah, anything that's scrolling is. Allan (22:49.215) Potentially. Well, and think about that for a second too, because you would need to have something to control virtualization, right? So that may be where you get into multiple canvases. Maybe, and just, I don't even know how to solve that. That'd be interesting. Jon (22:58.67) Mm -hmm. Yeah, yeah, yeah, maybe. And so like, but you, but the other option is like to, to kind of slowly wade into the turning everything drawn, right? So we have, maybe collection view is not the right example here to use because you know, collection view is still one of the areas that is needing, needing more love. but if I was to take like my virtual list view, for instance, which, you know, I love and I think works fairly well. I could still, it uses RecyclerView on Android. It uses UI CollectionView on iOS and some thing on Windows. I forget the name of it, but it's like a virtualized thing. And those controls all basically are like, give me like a native container for whatever that cell, that item should show, right? And so you could start by saying the drawn version of this is still using those things. And then every cell or every item is basically just a canvas or set of canvases that are made up of your drawn controls or maybe the mixed in hybrid controls as well. Right. So that would be one way to tackle it, kind of leverage what we have, but, you know, do it on more of a granular level. Allan (24:10.655) Hehehehe Allan (24:18.111) guess there wouldn't be much of a performance loss having multiple canvases. It's the same as a view. View is a view is a view. Jon (24:22.062) No, so yeah, no, that's, that's an actually, depending on, on type of canvas too, it can actually be quite a bit faster. Like one of the things I believe I'd have to go back and reference it to make sure I'm not lying. But I think, we tested a bunch of like Skia. I think it was a lulls test. I think we used a bunch of Skia sharp canvases like SK canvas or SK bitmap or whatever the thing is there. graphics view and we drew on that versus drawing on like the native iOS camera view or whatever, right? Like, so you can draw on one of those views and the Skia one was faster, like by a non -trivial amount. So, and that's even like having like a thousand Skia canvases on your page, right? So it's pretty performant. Allan (25:08.095) wow, okay. Allan (25:15.135) Somebody was having fun. Jon (25:16.814) Yeah, and even the native one wasn't bad either. Like if you compare both of those to a thousand instances of a UI label, the thing, the ski one was blazing fast. The native, you know, graphics view or whatever was, you know, not that much faster than the UI label. I want to say, I think, because I mean, you're, you're still like UI label is at some point kind of doing what you're trying to redo, like, like re -implement, right? Like they're drawing on the canvas at some level too. It's just really low down the stack. Allan (25:47.039) Hoops to jump through to get to where you need to be. Jon (25:47.086) So yeah, exactly, exactly. So, and that's another option, right? As you like, how do you wanna draw these things? Do they need to be pixel perfect? You can use something like Skia across platforms to achieve that, but then you're managing some more of the detail in terms of like your text layout and like kerning and all these little details. So talk about challenges, like just even rendering text, depending how you wanna do it can be a challenge. Like how do you wanna do it? have it look more native system? So do you use like their, their, you know, canvas and stuff and let their kind of text drawing APIs do some of the work and then you're gonna deal with subtle differences across platforms because you're using the native API on every platform to lay out the text. Or do you use something like Skia and Skia sharp where you're doing all of that text layout and font work and everything. cross -platform so it's going to look the same everywhere, but it might not be quite feeling platform specific everywhere, if you know what I mean. Allan (26:54.357) Hmm. So you have POCs for this, yes? Jon (26:59.438) not a ton. Well, there's, there's, I mean, okay. Allan (27:02.772) There's the .NET ones. You guys have some. Jon (27:06.062) Yeah, I was yeah, that's that's true. That is the the fun fact Well, there's actually two things that I think are are like everyone's gonna be like duh like everyone who hears it right But it you know, it's worth saying what like one is yeah We have a graphics view in maui so you can do this today You can draw your own controls today if you really want right like if you want to make a button And you want to draw that button a certain way. Maybe it's got like spiky borders and stuff You can do that. Just just go do it And you can even choose, do I want to draw that with the native drawing surfaces or do I want to use SkiaSharp? And you can make that decision as well. And it's pretty much the same code, I think too, we've abstracted over it. So you can make that decision, maybe even at runtime, I want to say, like you could swap out renderers from SkiaSharp to the native thing and back and forth, depending what you want with your graphics view. So that's one thing, you can do that, right? And maybe like, maybe that's the thing that you want to investigate if you're really just, you know, dying to get the most lulls you can on the screen per second. So. Allan (28:15.858) I mean, I just use the image at that point, but you know, what do I know? Jon (28:20.526) Well, I mean, clearly not as much as everyone else who knows better than us. So, so there's that, but the other, the other fun fact, that I was going to see if you knew there's a control in Maui today that is already drawn. Do you know which one it is? Allan (28:26.386) You know, okay, do it the hard way. Allan (28:39.41) There he is. All right. Jon (28:40.43) Hmm Allan (28:45.522) the checkbox. That's not native. Jon (28:48.782) Got it. Yep. Not native on iOS anyway. I think there's a native one on Android. I could be wrong though. We might use the same one everywhere. If I had more time, I was going to go look at the code and make sure I had the right answer. But on one or more platforms, the checkbox is drawn in Maui today. Allan (29:09.361) be honest I like the checkbox more anyways because the switch I could never tell is it on or is it off because sometimes people would use weird colors and I'm like I don't know which one that is Jon (29:19.982) Yeah, I think radio button might be lumped into that too. Allan (29:24.625) Could be, yeah. Jon (29:26.222) And those have like, you know, control templates so you can swap out your own content for that control. And that's kind of how it was done originally because we wanted to draw it some places. So yeah, cause I think. Allan (29:38.961) People use radio buttons, huh? I always just use like a, like a, this row is selected and then you press save or. Jon (29:42.542) I've used them for some things. Yeah. I know we've used them for tab like to make your own tab control in the past too. It's kind of convenient for that because it's a control template. You can like swap out the content of the actual radio button too. I think David taught me that trick early days, Maui when the actual tab bar just no. So Allan (29:54.289) All right. Jon (30:08.654) He had made his own. It was like, do you remember the weather 21 demo? The weather demo? Yeah, it's from 21, I guess. Allan (30:13.522) 2021 Devon, you know? Yeah. Okay. Yeah, I do remember it. Yeah. Jon (30:19.054) I had like a tab bar on the side and yeah, that was all that was all a radio buttons. I think yeah with like a visual state stuff and yeah, good times. Allan (30:24.434) wow, I did not know that. Allan (30:31.154) That was a pretty app. That was a pretty app. Jon (30:32.43) Yeah. So yeah, so we have a precedent. There's a draw and control today. That kind of, I think, is a good indicator that people don't necessarily know. So it works. It works OK. The other thing, and part of the challenge with doing that one too, was like, how do you do accessibility for these things when they're drawn? Allan (30:59.168) I feel like that wouldn't be as hard as anything else though. Right, because accessibility is, well, I guess it's based on a control. So if you had different canvases, it's not too much of an issue. If you have one solid canvas, then you need to do it by coordinates and Z index and. Jon (31:12.59) Right. Jon (31:17.582) Yep. And all of the APIs per platform are not necessarily conducive to doing it the same way. one of the things that, that we did in Maui compared to forms is, as we found that doing, doing less with accessibility was actually way better. So like, you know, and, and probably early days forms, you know, you, you had to hack around things to get it to work properly. And so like over years, it's just like solution on top of solution hack on top of hack. Allan (31:20.271) I still think it's. Jon (31:48.27) to make accessibility kind of do the right thing. And then in Maui, we're like, what if we just like remove that all and like let the system, what happens by default, right? And like, it kind of just works mostly. Now that's simplifying it. And I don't mean to undermine all of the effort that my team put into accessibility stuff, but that was kind of the starting point, right? It's like peel everything back and start from the basics. And part of why it was easier is yeah, we had native controls. Allan (31:56.655) Yep. Allan (32:16.24) funny how that works out when you remove the years of engineering or overengineering that may have occurred. Jon (32:22.03) Yeah, and this is kind of where we're getting to with like collection view stuff too on some of the platforms is, you know, things didn't exist maybe when we first started and things were engineered on top of other things. And now it's like, if you just remove a lot of that and kind of start from the basics again, things just kind of work better. But so yeah, so accessibility is a hard one. Allan (32:40.271) Who knew? Sizing, so you could lump accessibility in with that, right? Kind of, because if you're blind or hard of seeing, which I will be at some point, I'm wearing contacts right now, but I will be blind at some point, I will have huge fonts on my phone. So I could see that being, I mean, there is system events you can react to. So you could just scale everything, but. Jon (33:01.358) Yeah. Jon (33:05.454) Yep, absolutely. Allan (33:10.55) that's or certain things, I guess technically only the fonts. So it'd be another problem with the typeface that you have to deal with, right? So anything that's doing fonts has to also scale and then push everything else out. Jon (33:14.766) Yeah. Jon (33:21.934) Yeah. And have you ever taken one of your apps and just cranked up the font size on your phone to see what happens with it? Allan (33:33.069) Yeah, most of them tend to have issues, but you know what? I don't do design. So designers, wake up, man. Quit trying to make pretty if you want to be accessible. Just features on a page. Jon (33:46.766) Yeah. So, but that, that like, that's a fun exercise. And then you start kind of seeing where the system controls, like understand how to, how to put those, what did you call them? The ellipses in, into the, you know, into the labels and stuff like that. These are all things that, yeah, you have to think about this if you're going to draw those things yourself. and that's, that's been like a big sticking point for us to internally and externally is how do we make it so it's, it's easy to make your, your own app. Allan (33:58.061) The ellipsis, yeah. Jon (34:16.078) relatively accessible and we don't put you in a bad spot to start with. So it's a consideration as well. Allan (34:24.109) But it's a good one though, because a lot of people have those requirements, right? Jon (34:27.342) Yeah. I mean, there's a lot of legal requirements now, right? So it's like, and even if not, like even, yeah, yeah, true. I'm sure other, some other countries, maybe, maybe Canada is a little bit more, you know, ahead of the times than other, some places, but, they'll, they'll probably get there too. but even like, yeah, like after I've seen how my parents have their font sizes on their phones, like, you know, I, I wanted to make sure that I'm like, yeah. Allan (34:32.333) In Canada. In Canada. Allan (34:55.211) Would you like a tablet? Jon (34:56.462) Yeah, well, yeah, that first like, maybe next time you should get the max, you know, version of the iPhone, because you have a little more real estate, but, with, with my pool app too, it's like, well, our demographic, you know, interestingly enough skews to be to the older side. and so like, yeah, most people have their fonts cranked up and there's been enough people that would give feedback, be like, why can I only, why is this look like Mike? Allan (35:16.491) Hehehehe Jon (35:20.462) Cause I never thought you'd have size 80 font on your phone and I guess you do so now I have to change stuff. Yeah. Allan (35:26.187) way to go. You didn't deal with that, did you? Jon (35:32.206) No, I mean, I didn't at first. The latest, the whole rewrite of the app was kind of, that was part of the intention of changing some of the design elements where, I used to put like two text boxes side by side on a screen, cause I'm like, yeah, there's just enough room to do that for the things that I'm like, as soon as you crank the font up at all, you can't read anything on either of them. So I'm gonna just put those on new lines to start with. And yeah, if you have a smaller font, it's gonna look, a little spacious, but you know, it looks okay still and it scales much better if you have old people font. Allan (36:08.651) I had one other thought because there is that kind of colorblind slash tinting mode that it has. I think you get that automatic no matter what though. I'm pretty, because if you go into web browsers as well, it's like the colors are just changed on your behalf. And I was like, most websites wouldn't do that. So I think the OS does that entirely for you and flips the colors. I don't know though. That's another interesting part to consider though. Jon (36:12.494) Mm -hmm. Jon (36:17.55) Maybe, yeah. Jon (36:23.342) Yeah. Jon (36:32.206) You might, I mean. There's probably, I mean, there's probably an API that you can like, and you can react to some event that tells you it's in that mode. But yeah, I think, I think you're right in that it just kind of applies it on top of what you've colored. Allan (36:44.907) I think it's just like, you're telling me you're red, but guess what? I'm going to tell you you're like this, this like off tint color. Deal with it. Jon (36:51.854) Yeah, yeah, just like the, have you, have you played with the iOS 18 betas? Just, just like the icons that when you set it to like a, a tinted color, have you done that? And, and does it like your phone like heat up to a million degrees doing it? Yeah. Yeah. And then Allan (36:57.131) I have, I have it on my phone surprisingly. Allan (37:03.467) Yeah, and then I have to wait for it to re -render all my icons. It's like it uninstalled everything. Allan (37:12.651) Yeah, yeah, it's getting better though. Surprisingly, I can use it as a daily driver without too much issue, but yeah, they have all these cool things. Jon (37:18.734) Yeah. Yeah. And when you do the whole tinted icons, it just looks terrible. Anyway, I find I don't like it. Allan (37:29.292) Yeah, it's more like old school theming, right? Remember when Windows used to just be, hey, you can make your start bar black and cool and that's it. And that was like the extent of, you know, we had dark mode way back then. It just, we didn't have a name for it. Now they're like, hey, you can change it all. Now we have multicolor mode. Great. I needed dark and I needed eye singeing. Jon (37:33.006) Yeah. Jon (37:38.733) Yeah. Jon (37:46.574) Yeah, that's right. It was, yeah. Jon (37:52.782) Yeah, no, I don't. I don't like it at all. But that shouldn't hopefully be a problem with drawing controls either way. Allan (38:04.044) Yeah, but you do have to watch now if that's another case, then you bring it up. We still have to watch light and dark modes, but that doesn't really change. I mean, that's already there. Same thing. It's pretty much on the the the engineer to deal with that problem anyways. It's like, well, you're in you're in light mode. What do you want us to do? Give us a color here in dark mode now. Give us a color. OK, great. Super. Right. Jon (38:12.782) No, you're going to do something similar regardless. Yeah. Jon (38:20.43) Mm -hmm. Allan (38:30.027) I mean, if you really wanted to play a prank on your user, you could flip those around and be like, haha, we gotcha. But the point is, is that the control doesn't have to deal with it. You just have to give it a color. So when you green lighting this project in Maui, John, that's. Jon (38:39.918) Exactly. Yeah, no, no, I mean, yeah, no, it's, it's, it's one of those things that to be honest, I've, I've gone back and forth on my opinion and viewpoint on it several times over the last few years. partially because so like one of the things that I think in some areas you can gain, we could gain value from like a Maui Allan (38:48.011) pressure. Jon (39:10.67) building Maui as the product itself perspective is, right now it's very resource and time consuming to maintain abstractions over every native control for every platform that we support, right? So, right. So if you look at something like a label, there's a lot... Allan (39:24.139) especially because they're changing and adding and all the time. Breaking. Jon (39:36.494) that we like, we talked about some of it that goes into it is the label multi -line. You know what, how did the fonts work out on the label? How, with labels we have like formatted text or string or whatever the type is called. And you can have, you know, different, different spans with different fonts, with different sizes, with different decorations and well, yeah, but the, the, the, the native things support that, right? Yeah. Yeah. Allan (39:56.331) But that was you guys adding that. You brought your own pain there. Android? No. See, I am out of the loop on Android then. But to be fair, I hate Android. So I can see why it'd be. Jon (40:06.382) Yeah? Yeah. Jon (40:10.798) Yeah, it's not like just a, that was one area that I did some of the work when we ported stuff over to Maui to make work was the spans and formatted text and stuff. And yeah, every platform has their own kind of set of APIs that deal with that. And including like, maybe you have some of those spans like underlined and maybe you have gestures on them, right? You can click a part of it and we have to figure that out. So there's a lot of code that goes into maintaining the abstraction over each platform's implementation of that. And the end result is like none of them behave quite the same on every platform. And so there's always gonna be subtle differences. And on a lot of times we try to code around those differences to make them consistent because yeah, of course I want my label to behave relatively the same, especially a label, right? Like it's not, like you could almost argue a button or something could behave more platformy on each platform and that's okay. But a label is it's text. I want it to look relatively the same. And then like on iOS, another good example, if you want to set, if you want to, I forget which one it is. I think it's vertically centered. So if I have a label that's like 200 high, right? And I have one word in that label and I want to vertically center that, the iOS doesn't let you do that in the label. You just can't, there's no, there's no, you can horizontally center the text, but you can't vertically center it. And so when, what we ended up having to do is like wrap that up in another control so that it does get centered so that the behavior is consistent because otherwise people are like, well, I have a label it's 200 high and on iOS, you know, and then the background color is red and on iOS it's only red on the height of the actual text in the label. It's like, well, yeah, cause that's how the label works on iOS. Allan (42:07.499) So you're doing it wrong. You just tell people, deal with it. Jon (42:10.286) I, yeah, no, I, I, I, and that's sadly that should have probably been the way it was approached initially, right? Is to be like, okay, well, if you want to do that and platforms are different, then maybe you need to stick that in a grid and you make the grid background color. And, but here we are. Allan (42:27.275) You were too nice about it. Jon (42:28.846) Well, and to get people to move over from like forms and stuff, right? Like that's just another paper cut if it's like, well now all of these things don't work the same, that they did in form. So yeah, anyway, but that's just highlighting the, the, the intricacies of maintaining those abstractions. So from a building the product perspective, yeah, if we could draw the label in theory, that code is the same for every platform, right? And so rendering out different spans with different colors and font sizes and fonts, like it's just the same code. Like it just, it's just going to work everywhere. And so in theory, if we have a bug that says, well, you know, when we render out that label, whenever I put the thing to red, it doesn't render red. You know, probably the bug is in the cross -platform code and not at the platform level. Now that's not always going to be true, but. a lot of times that kind of stuff will be true. It's just like our layout code, right? Where we have the grid, the way that we measure stuff in the grid, generally if the bug exists, it's going to exist on that level. Again, not always the case. Maybe sometimes there's some weird platform nuances, but the maintainability in theory is easier if you're drawing stuff because you're one set of code, not four sets of code. And then the scalability is easier too, right? If we ever... If we ever were to extend to Linux or something, right? Like, no, we're not doing that. Like, don't get ideas. Allan (43:55.339) don't yet. Look at now the pitchforks are coming out, John. Way to go. Jon (43:58.67) Yeah, yeah, no, I would love to do that, but we can't currently just, you know, we have other priorities to focus on. It's, it's, there's not enough, of a, a business case. There's not enough value there for us yet to do it. but let's say one day we do like, okay, then we're maintaining another implementation of the abstraction of a label somewhere else. Allan (44:19.243) Yeah, and which one's the right one on Linux? Jon (44:22.094) Well, yeah, and that's, yeah, that's a whole other discussion, right? well, well, then let's just do like two or three of them on Linux to cover all the toolkits. Yeah. So like you can see the point of, you know, code, you know, maintenance and cost of, and just size of code base, right? You can see that kind of going down, but so for a long time, you know, I, I kind of had the, the opinion of like, if we did this, we'd probably be able to Allan (44:28.875) Yeah, that sounds like fun. Jon (44:49.358) up our quality in some key areas and have things a bit more maintainable. Yeah, yeah, yeah, you could, you could draw just anywhere and like, yeah, you still have to do some platform, you know, comparisons, but generally you'd kind of know it's going to look the same. Allan (44:54.027) Unit testing would be easier. Yeah, a lot easier in that form. Allan (45:05.131) hey, the eight Windows users could benefit from drawing controls. Because nobody knows what WinUI is doing. Well, I don't know what WinUI is doing these days, so I care less. But if I had drawing controls and I didn't have to deal with what Windows is today, all right, I'll do Windows. That's fine. So. Jon (45:08.782) And yeah, they could, they could. Jon (45:24.27) And we could have an editor too, right? Because we could then render those drawn controls to a canvas that gave our designer, right? Because everybody wants a designer. I'm not everybody. The people who had a designer want a designer, I think is what it amounts to. I mean, it'd be cool to have a designer. Why not? But that's kind of like saying like, yeah, I'd love to buy this other car if I won the lottery. Allan (45:34.027) Mm -hmm. Allan (45:50.058) You know what, I must be too old because I stopped using designers after front page and classic web forms because you drag something on, you'd be like, here's 5 million divs. no, it wasn't divs. What was it? Paragraph and span. And then there was like a ton of styles. And you're like, I just dragged on a label, man. It doesn't need to solve world peace. Jon (45:54.83) Yeah Jon (46:02.35) No, yeah, yeah, yes. Yes. Jon (46:10.222) So I was having lunch in, when I was, I was in Redmond a couple of weeks ago. and I was having lunch with some people that were reminiscing about working on front page. And, I kind of made that, that joke. No, no, no, he wasn't, he wasn't, he wasn't around then he wasn't in Microsoft. I mean, he was around, he's, he's, he's ancient. He's around forever. but I kind of, I kind of take every chance I can. Allan (46:27.243) Was it Grandpa David? Grandpa David, okay. All right. Allan (46:36.459) Heh. You Jon (46:40.046) no, but that, and then I kind of said that to him like, yeah, I loved front page except for that. It always put a ton of junk in my HTML and that was not, felt super, well, that joke didn't, didn't land. Yeah. So I had, I did, I do have to apologize. Well, no, I know, but I mean, there's probably, probably reasons anyway. yeah. So Allan (46:52.523) you, you insulted people. Well, if the shoe fits, then if it fits, if you were meant to be offended. Jon (47:06.926) we could do a lot of things if we had drawn controls, but you know, as you start kind of talking through these cases, like with the hybrid controls, right? So, okay. You know, you asked, how do you do, how do you do a text box? Well, you still kind of use the native one. Okay. So text box, we're not saving as much on, we're still, you know, keeping the abstraction over that. Okay. Well, how do you do, you know, scrolling scroll view? Well, you still use the native one because you kind of want to. Okay. So we're, Allan (47:34.731) Okay. Jon (47:35.47) We're not, we're not, this, this is the argument or like if we were not going a hundred percent drawn for everything, right? Cause that's, that's a whole other conversation of cost and effort and skillset and technology and like figuring out how to do that. so like my, yeah, well, my, my point is kind of like, as you start thinking through what are the things that you can actually, have like that. Allan (47:42.283) Okay. Allan (47:52.171) Well, there's a lot to talk about there too, so. Jon (48:04.046) one set of cross -platform code, the number is kind of decreasing. Like, yeah, I can do a button like that. But then again, I still need to like worry about the accessibility APIs on each platform and kind of bake that into it. So the point is basically it, I think there's a potential value in doing it, but it's not as kind of clear cut as it first seems when you start thinking through it. Yeah. Allan (48:30.435) ever is. Right? There's a bit of give and take but like I think the other thing that people need to realize too is that you use Syncfusion or you use any of those other libraries there's an existing investment in them, right? Use all those platform renderers, sorry, handlers now, right? You've brought all them over. You understand that there's documentation for Android and iOS that you can still work with, still get to those underlying controls. Jon (48:45.582) Mm -hmm. Jon (48:49.006) Mm -hmm. Jon (48:59.31) Mm -hmm. Allan (48:59.875) you flip that on its head and you go to draw and controls and now all of that goes out the window. There's a lot of stuff from a business perspective that the value proposition probably goes, it starts to tank very quickly too, right? So, and you've got an existing app and existing, you know, infrastructure, all that stuff. You're not just going to get it and switch for, if there's no real value. Jon (49:27.246) Right, exactly. Allan (49:28.387) Would I start a new app with it? Sure, why not? Maybe that makes sense, but there's not a lot of new apps being written anymore. Mobile's not quite as hot as it used to be in that department. So just consider your investment. Jon (49:30.83) Yeah. Jon (49:40.238) Yeah, it's interesting that you mentioned Syncfusion and stuff too, right? Because there are a few vendors out there that, again, maybe people would be surprised by that do a fair bit of drawn control stuff. Yeah. Yeah. Allan (49:53.474) Yep. But they also get complaints because of it, right? Because Skia Sharp is now I love Skia, but it's not a small library. So all the people that complain about like, you're referencing this, this and I don't want to reactive extensions. And John gives me a hate on every time I add something with with reactive extensions, right? So Jon (50:01.294) Mm -hmm. No, it's a bit heavy. Jon (50:10.382) I don't want to add 10 megs to my app or something. Whatever. I think it's lower than that now, but it's still not zero. Jon (50:19.534) That's right. Allan (50:21.473) Now that you could say that's a bit of a footprint, but it's not a footprint like skia skia is a big, big, big, big thing. And if you look at Jon (50:28.782) It's a big, yeah, no, it is like I know it's gotten a lot better. I think it used to be like 15 or 20 megs in your app. It's not that anymore, but it's still not zero by any means. Allan (50:39.873) Right, and if people still are thinking about app size, right, I know that's what the vendors get complaints, they're like, dude, I just want controls. Well, we gave you control. Yeah, but what's the skill thing? It's like 10, 15 megs. well, we draw the controls. We'll stop drawing them, make them native. Right, so you're damned if you do and you're damned if you don't. That's, you can't win, you can't win. Jon (50:46.318) Yep. Jon (51:02.318) Yeah, exactly. No, no, you can't. But again, like, you know, there's always the baked in stuff, the graphics view stuff that uses the native platform things. Like I kind of think of this back to what I did very early days with, do you remember monotouch .dialogue? Yeah. So that was like a thing for, yeah, for building like lists of things. Allan (51:21.985) Yes, I do. Yeah, man, JSON UI. Jon (51:29.518) I mean, you could use JSON. That was one aspect of it. Allan (51:33.793) that use table views. John, table views. Make table views great again. I had to get that in there. Jon (51:35.246) Yeah, they use the table views. Yeah. Yeah. It's a, so that, that was a thing. And one of the things that I ended up building with and for monotouch .dialogue was a draw, a owner drawn cell or, or list item. And the reason I did that is early on, I made a, an app that was it was Facebook. has, has groups, right. And that they did early on and they had an API for that where you could like get the posts and stuff for a given group. And I had written an app that was like a client for that. And this is actually one of the many things I've done in my life that have caused me to get cease and desists served to me. yeah, which was, you know, I had named it like Facebook groups or something like that. And they're like, you can't do that. It was like, okay. Allan (52:25.313) Good job. Allan (52:32.641) Hehehehe Jon (52:34.99) And then they're like, you can't use the colors from Facebook either in your logo and you can't use anything. Right. And so I ended up like making some different colored icon and I called it groups for FB or something like that to comply. but, you know, I, I, so I was trying to draw these posts, and, and posts are kind of weird cause they can be like a variable height of text. They could have an image or more in them. They would have like the. the different buttons at the bottom for like comment or like, or whatever. And then they'd have, you know, the stuff below them. And that was, I was using monotouch .dialogue to build this app and it was hard to get it to kind of, well, one perform well. I mean, it was early days. So like adding a bunch of variable height things was just slow. so I'm like, okay, if I render this myself, it's not actually that hard to write the code conceivably to like measure the stream for the given space I have, how much height does it take up? Allan (53:11.485) Hehehehehe Jon (53:33.23) you know, here's the image, like how many images are there? How, how should they be laid out or whatever? And so I ended up making the thing and just drawing the whole cell with all the different parts in it. And at the end of it, I'm like, that was really quite easy, like in, in quite satisfying from like a code perspective, cause like measuring and laying out stuff, isn't that hard of code to write. and it performed amazingly. And then I'm like, well, why don't I just do this more? And so I think back to that. encounter. and I, and I often wonder like, if people are trying to do this, like super complex thing, like maybe that's what they should just do is just draw their own control in this case. It's not that hard to do. So maybe worth trying. Allan (54:18.049) It's interesting. I don't know what control I draw nowadays. Jon (54:21.358) Yeah, well, and that's part of the problem is like, I can compose enough existing ones and it's fast enough that I don't generally need to think about that, but. Allan (54:29.601) I mean, the only control I looked for recently was a bottom sheet. I was like, yeah, I need a bottom sheet for this. I need a pretty one. Jon (54:35.086) But again, like what, what did you, would you draw that though? You'd probably just like, yeah, exactly. You'd use my, pop -up, you know, mechanism, right? Well, you should have. Allan (54:38.177) No... I'm... Allan (54:44.449) No, no, well, I kind of, you know, it's not hard to do. But I could use your pop -up thing, but I like to call it from services and just say, show this, show this page, put it in nav service. Put it in nav service. It's pretty anyways, it'll do the thing. But to draw it, no. Jon (54:51.566) Yeah. Jon (55:02.254) Yeah. Yeah. Yeah. Jon (55:10.19) The, the, yeah, no, no. Like it would have to be, I don't know, some crazy like special kind of shape of a thing that you would, but even that, like you can just clip things and I don't know. I do think though, as a, another side bar to that, cause you know, we have, we're almost at the hour. one of the areas that I also think people could explore more of that kind of customized thing is layouts, like build a custom layout. If you have some really weird thing you're trying to do. And sometimes that's actually easier. Allan (55:40.725) You know my the image one that I've had recently where the sizes are dynamic? Yeah, that's still flipping hard. Jon (55:47.854) Yeah. Well, that's, that's, that yeah, that that's a customized kind of layout within the context of like a virtualized list though. Right. So that, that does get a bit trickier. I'm, I'm thinking more. Yeah, no, that, that is harder. what I was thinking is more the, like I have a custom layout in my pool app. So on the main screen, there's these kind of like tiles that have Allan (55:59.073) Yeah. Whatever Pinterest has done is magical there. Magical. Jon (56:17.486) information about the different chemical levels, right? It's kind of like your overview. And what I essentially wanted to do is have it be like a grid because on like an iPad or, you know, on, on the desktop, I want it to show more of those tiles, in one row as it has more space. But then I also wanted to make sure I sized them to the, to know like they needed to be big enough to fit everything in them. But then I wanted to make sure that they were, they used up the full space of the view of the parent, the layout so that like, if, if I could fit three in it, that's great. evenly spaced them out and take up all of the space, you know, accounting for like the margins on the side and between each item. But then as you size it smaller and it can only fit two, but because it's just barely can't fit three, I want those two to get big enough so they fill up the remaining space as well. Right? Does that, does that make sense? And so like, I kind of wrestled with like, how do I do this? And at the end of it, I'm like, I just need to write this layout and do a little bit of math to figure this out. Like just say, Hey, here's the amount of space. How much space does an item take up? I want all my items to be the same width. So figure out which item has the most, you know, the biggest width. And that's the width I'm going to use. How many of these can I fit in a row? And then Allan (57:18.401) Okay, yep, yep. Jon (57:46.03) once I figure that out, then I say, okay, the new size of the item is this much because that's how I can fit two items in a row and I have this much space for those two items. It was really not that hard to write, but it's kind of like there wasn't anything out there that would do it for me out of the box. Right? So Allan (58:03.329) It's evenly spacing things too, though. So it's a little bit easier in those cases. And I think for layouts, those are, I have seen some cool layouts recently. I think Javier wrote some, like a radial layout recently. I was like, I'm not sure what I would do with that. It was pretty neat. There you go. So check out a radial layout. I don't know. Jon (58:06.03) Yeah. Yeah. yeah, yeah, yeah. It's not, yeah. And that's what I'm saying. It wasn't hard to write. Jon (58:19.118) Mm -hmm. Jon (58:26.67) But that, yeah, no, that sounds cool too. But that, but the point is kind of like, yeah, sometimes it may be digging a bit deeper and thinking about like, instead of thinking like, what am I going to find that that does this for me? Like it's sometimes not that hard to make the thing yourself at a lower, you know, more primitive level is the point. So. Allan (58:45.345) something to check out. I mean the only time I've ever had to do anything kind of weird drawing was but I would use native shapes or well not native shapes I use the shapes in Maui. That's what I was complaining about the the drag and drop which you guys have fixed so that's there now. Yeah and I did some lines on a page. Football plays fun stuff. Anyhow yes. Jon (58:54.126) Yeah, but like the shape, yeah, yeah. Jon (59:01.934) Yeah, see, there you go. Jon (59:08.622) Football plays so Have we have we missed any anything? I don't think so. Is there anything else that that's you know burning in your mind? Allan (59:14.945) This. No, this was your show notes. You pulled an audible, as you say. You had a burning desire to talk about... Jon (59:22.062) I, yeah, well, you said, I just, you said you weren't ready with the other topic and, you know, I didn't really want to talk about the other ones today. I just didn't feel it. So here we are. Allan (59:36.609) That's a shame. Those are much better frame topics. But anyhow, I guess they'll come in the future. Jon (59:40.943) That's right. So I think, you know, if I'm gonna pick, I'm gonna pick two. I'm gonna pick two plugins, packages or products this week. Allan (59:50.625) All right, go for it. Jon (59:53.198) I'm going to pick a lo -ha kit one because I love Javier. He's on my team and he has done a lot of things with drawing controls and a lot of fun, cool things. And in general, just like kind of figuring out how to make, good looking designs, right? Cause there's like the good looking UI thing in Maui and drawing has been a part of that. And I think if we ever do something with drawing, you know, he's going to be the one that, that does a lot of the work because he has a lot of a background doing it. So Aloha kit is kind of interesting cause it does a few different controls. I haven't actually looked at that recently to see where, no, no, no. And that's Allan (01:00:29.239) doesn't do it entry yet. I've been toying around with it. Same thing. Jon (01:00:33.614) Yeah. And that's, and that's kind of, you know, on purpose, right? It's, it's not, you know, we, we've talked about how that might be accomplished, but it's kind of like, yeah, no, let's focus on other areas right now. Cause like entries, I think that's already there. So like kind of cool indicators, a checkbox, some like gauges and charts and stuff. Actually, if you're looking for like a simple chart, you know, it's probably not a bad library to look at because it's got, you know, some pretty basic ones, but they look nice. Allan (01:00:59.991) Pretty controls, pretty drawing controls. Skia based, right? No, actually his is graphics based. Jon (01:01:01.326) Yeah, exactly. Yup. They're graphics view. But again, like because it's graphics view, you can basically sub in the, I don't know if he leaves that open for customization, but in theory you should be able to say like, don't draw this all with Skia please. So it looks identical. And it uses the same APIs. That was the whole idea with Maui graphics was that we abstracted over the platform drawing views, but that we also abstracted over Skia. so that you can pick your poison. What do you want to use? Allan (01:01:33.623) Do you want the 10 or 15 megs or do you not? Jon (01:01:36.558) Well, yeah, again, it depends on like, do you need pixel perfect? Right? Probably nobody does really, but some people think they do. So yeah, how about it? So yeah, AlohaKit. And then have you ever used this drawn UI? Allan (01:01:51.703) No, I've seen this coming out or I've seen lots of posts about it. I took a look at it myself. It's very interesting proof of concept to start. I'm interested to see where he takes it. But it's a damn good start. Jon (01:02:00.654) Yep. Yep. Yeah, it looks really cool. It looks fast. I haven't used it myself either. Allan (01:02:10.774) This one I'm pretty sure is Skia based. Yes, Skia Sharp. Yes. Skia layout. Look at that, Skia layout. Skia label. So this, what's that? Lottie's in there, yeah. Jon (01:02:13.55) Yeah, it is. I mean, even all the controls are named like, you know, Ski -a drawer, Ski -a button. Jon (01:02:23.758) Ski -a -lottie. Ski -a -lottie. That's a fun one that you can do, right? You can always do that with Ski -a. Allan (01:02:31.094) Yeah, this is an interesting start. He's got a lot of animations in there already, like the ripple, a shimmer. So yeah, I think this is worth giving a try to be honest. there's even a Ski -a GIF coming. wow. And our Ski -a Rive. Rive is the new cool kid on the block over Lottie, I guess. I haven't done it. I use Lottie occasionally, but. Jon (01:02:34.478) Yeah. Mm -hmm. Jon (01:02:48.586) yeah, arrive. Jon (01:02:53.262) Yeah. Me, yeah, me either. Jon (01:02:59.15) I don't know what what you know, Rive solves that Lottie doesn't do. I'm sure there's something, but. Hmm. So I would think, you know. Presumably somebody's written like a, if there's a thing that you absolutely can't want, that's only in Rive. You probably can like convert it to Lottie or something too. I would imagine. Allan (01:03:04.822) I think it's just smaller payloads from what I've read, but who knows? I can't keep up anymore. Allan (01:03:18.742) I'm pretty sure Javier wrote something for Rive as well if I remember correctly. So it seems like something. Skiia Carousel, Skiia Drawer. So yeah, this one's interesting, right? This is more focused on like the layouts and... Jon (01:03:22.574) Yeah, that's right. Yeah. Jon (01:03:30.638) Mm -hmm. Jon (01:03:35.054) Yeah, I think, I think the idea here was that they wanted to build something that you could do your whole UI in, right? Allan (01:03:42.486) Interesting. I'll check this one out. Jon (01:03:43.982) Now, and we didn't even talk about it. And honestly, like, you know, it's in the same bucket, in a lot of ways, I think as flutter and stuff, right? Like there are, you know, I, I, I'm not trying to, intentionally not mention things like Avalonia or UNO. they, they do, you know, fully drawn stuff. I haven't, I haven't used their stuff a lot. you know, we did a, We did a spike with them quite a while ago with Avalonia on like, Hey, what would it look like to stick Avalonia stuff in interior Maui apps? And, which is, it's kind of a cool idea. but you know, I don't, I don't think they've, gone the direction of, you know, trying to, to make that a thing, at any point. So, you know, maybe, maybe one day, it might've been a cool concept. Yeah. Yeah. Yeah, for sure. so yeah, there, there are those two, right? But like the thing that I kind of think is neat about Allan (01:04:28.66) Yeah, you kind of got to fly on your own sometimes, I guess. Jon (01:04:37.454) something like this drawn UI is again, you can, you can mix and match it, right? You can, you can stick some of those controls in your Maui app and like under the hood, you know, both UNO and Avalonia are using, you know, the .net stuff, right. And the tooling, right. Like the, the Microsoft provided tooling. And I know they've, they're doing some of their own like extensions and stuff for VS code and stuff, which is cool, but like they're still running on. .NET like you've got a .NET app. So if you're going to be there, I think it's kind of fun to be able to mix and match something like this drawn UI. But yeah, so yeah, it's improved since the last time I've looked or like there's more stuff in it than the first time that I checked it out. That's for sure. So it might be worth another look. Allan (01:05:07.796) sphere. Allan (01:05:11.412) I'm going to go play with this library. This one. Allan (01:05:20.692) You know, I'll give you another Waka Waka lead way. I'm about to go star this library because I didn't have it starred. Take it away, John. Do your thing. Jon (01:05:30.574) oooo Allan (01:05:35.988) What? If you can go give us a star. Geez, man. wow. It's Friday. No, I don't do the radio voice. You go into full like radio, you know, guns a blast and I'm just like, I'm gonna sit back and let you do your thing. But you have it. Would it say what is it a thumbs up? Sorry, a review. Yeah, like sorry. Well, there you go. Jon (01:05:48.398) Hmm. Jon (01:05:55.662) But it's not a star. It's a review. I know. I, but it was close. No, like, like, like, like, like, like and subscribe. Smash that button. Isn't that what the, well, that's probably what the cool kids used to say. Allan (01:06:06.259) I don't know you. So I starred on GitHub because that's the cool thing to do. I'm not going to fork it because I'm never going to fix it. At least I mean right now and watching. No, I'm not going to watch it. So I'll start it. There you go. Like and subscribe. There you go. Thank you for catching up, John. Jon (01:06:15.438) Yeah. Jon (01:06:21.614) Yeah, yeah, start, start, start up and, and, and, hey, just like you're going to start that repo. Yeah, we should edit out the part before. So it's like just totally organic and worked. No, I'm, I'm not gonna cause that would be a lot of work. It would be more work than I'm willing to do and more work than I think I'm willing to ask the, our audio editor to do to audio video editor. so go leave the review so that we don't have to make bad jokes about starring things equating to leaving podcast reviews. Allan (01:06:35.283) No, no, don't edit it out. Allan (01:06:40.627) . Allan (01:06:46.707) There you go. Allan (01:06:56.115) But we're still going to do the bad jokes though. Jon (01:06:57.102) but we're still going to anyway, even if we don't have to. So please go leave that five star five. yeah. Five star. I don't know. Is that, is that the thing now? I'm, I'm, I'm thinking about the stars now. Do the, do the review, leave the good review, the one that has the most whatever units. Allan (01:07:04.531) I don't know. There you go. Allan (01:07:14.643) of things, some sort of image. Jon (01:07:16.174) Yeah, units of review. Yeah, units of positive review. Yeah. And if you don't know where to find that, I'm not sure how you wouldn't and would be listening to this, but you could still go to the website, gonemobile .io and that will give you links to all of the things to leave with units of things to review as well as places you can reach us. If you have comments, feedback, if you have some jokes you'd like to feature, that would be great too. So go check it out. Allan (01:07:44.595) They might not have seen it because our zits, zits, x's, may have been broken for a while. Or if you want to go with my more colorful term, the excrements, our excrements haven't been going out on x or tweets. Jon (01:07:55.757) the That fits now with mastodon too, right? Because now you've got the excrements and the toots So yeah, that's great. My you know, seven -year -olds will love that. So Yeah That's right. Mm -hmm. Mm -hmm. All right. Well that puts us well past an hour or so and we're gonna cut it off here, but Thanks for listening if you still got this far and hopefully you come back and listen to the next one. We'll see you next time Allan (01:08:07.186) There you go. Go tooted and excremented on the things. Allan (01:08:29.49) toots.