<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DarkMode &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/darkmode/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Mon, 18 Aug 2025 20:41:29 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Android ColorGroup and Improved Dark Mode Support</title>
		<link>https://blog.xojo.com/2025/03/25/android-colorgroup-and-improved-dark-mode-support/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 15:33:35 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[2025r1]]></category>
		<category><![CDATA[ColorGroups]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Layout Editor]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=14622</guid>

					<description><![CDATA[Xojo 2025 Release 1 adds support for ColorGroups and improves dark mode support for Android. ColorGroups Now available for Android, ColorGroups are a way to&#8230;]]></description>
										<content:encoded><![CDATA[
<p>Xojo 2025 Release 1 adds support for ColorGroups and improves dark mode support for Android.</p>



<h2 class="wp-block-heading">ColorGroups</h2>



<p>Now available for Android, ColorGroups are a way to have a color that can differ between light mode and dark mode. There are three types of ColorGroups: Single, Dual and Named. Add a ColorGroup to your project using Insert-&gt;ColorGroup.</p>



<p>A Single ColorGroup is not really a group, it is just a single color. A Dual ColorGroup has separate colors for light and dark mode. A Named ColorGroup gets the color from the system or, in the case of Android, the app theme. You can see the available options in the Android submenu.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="977" height="1024" src="https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.30.12@2x-977x1024.png" alt="" class="wp-image-14623" srcset="https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.30.12@2x-977x1024.png 977w, https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.30.12@2x-286x300.png 286w, https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.30.12@2x-768x805.png 768w, https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.30.12@2x-1465x1536.png 1465w, https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.30.12@2x-1953x2048.png 1953w, https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.30.12@2x.png 2020w" sizes="(max-width: 977px) 100vw, 977px" /></figure>



<p>For the most part you can use ColorGroups just like you can with other project types. Android does have one addition, the ColorGroup.ToColor() method lets you specifically convert a ColorGroup to a Color. Normally this is done automatically by Operator_Convert, but support for that in Android is still young and this method serves as a workaround should you run into issues with it.</p>



<p>In the Inspector for controls with ColorGroup properties, such as MobileButton.CaptionColor, you can use the ColorGroup selector to manually choose a Color or a ColorGroup:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="590" height="444" src="https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.32.38@2x.png" alt="" class="wp-image-14624" srcset="https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.32.38@2x.png 590w, https://blog.xojo.com/wp-content/uploads/2025/03/CleanShot-2025-03-05-at-14.32.38@2x-300x226.png 300w" sizes="(max-width: 590px) 100vw, 590px" /></figure>



<p>In addition to working with ColorGroups as project items, you can also create ColorGroups in code:</p>



<pre class="wp-block-code"><code>Var cg1 As New ColorGroup()
cg1.AddColorPair(ColorGroup.Platforms.Mobile, Color.Blue, Color.Teal)</code></pre>



<p>You can also use Android system color names to create a named color:</p>



<pre class="wp-block-code"><code>Var cg2 As New ColorGroup()
cg1.AddNamedColor(ColorGroup.Platforms.Mobile, "holo_purple")</code></pre>



<p>Refer to the <a href="https://developer.android.com/reference/android/R.color.html">Android docs for R.color</a> to see what the system color names are. Keep in mind that not all names are available on all versions Android OS.</p>



<p>For more about ColorGroups, <a href="https://documentation.xojo.com/api/graphics/colorgroup.html#colorgroup">refer to the documentation</a>.</p>



<h2 class="wp-block-heading">Dark Mode Support</h2>



<p>ColorGroups are particularly useful with dark mode and starting with 2025r1, Android projects now default to having Supports Dark Mode switched on.</p>



<p>Several controls have been improved to work better in dark mode at runtime.</p>



<p>In addition, the Android Layout Editor has been improved to look better when working in dark mode and now shows controls with dark mode variants.</p>



<p><a href="https://xojo.com/download/" target="_blank" rel="noreferrer noopener">Download</a> the latest Xojo release and get access to these new features and more. </p>



<p><em>Paul learned to program in BASIC at age 13 and has programmed in more languages than he remembers, with Xojo being an obvious favorite. When not working on Xojo, you can find him talking about retrocomputing at <a href="https://goto10.substack.com" target="_blank" rel="noreferrer noopener">Goto 10</a> and </em>on Mastodon @lefebvre@hachyderm.io.</p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>More fun with cha, cha, cha … charts!</title>
		<link>https://blog.xojo.com/2024/06/26/more-fun-with-cha-cha-cha-charts/</link>
		
		<dc:creator><![CDATA[Javier Menendez]]></dc:creator>
		<pubDate>Wed, 26 Jun 2024 15:00:00 +0000</pubDate>
				<category><![CDATA[Cross-Platform]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[2024r2]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Multi-Platform Development]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=13189</guid>

					<description><![CDATA[Xojo 2024r2 includes inline labels for Pie charts, more rendering options and full DarkMode support. You will also find fixes to a bunch of Chart related bugs.]]></description>
										<content:encoded><![CDATA[
<p>Based on user feedback, we added new functionality to the Chart control for Desktop, Web and iOS. Xojo 2024r2 includes inline labels for Pie charts, more rendering options and full DarkMode support. You will also find fixes to a bunch of Chart related bugs.</p>



<span id="more-13189"></span>



<h2 class="wp-block-heading">DarkMode</h2>



<p>All of the chart types now have the ability to render themselves properly in both light and dark modes. For that to happen, using different colors for data representation when the light or dark modes are enabled, all you need to do is assign ColorGroup instances instead of Color values when creating the DataChart instance.</p>



<p>For example, this snippet of code will create two data sets using ColorGroup instances for the values:</p>



<pre class="wp-block-code"><code>Var dsInflaction As New ChartLinearDataset("Dollar", New colorGroup(Color.red, Color.orange), True, dollar)
Var dsTemp As New ChartLinearDataset("Euro", New colorgroup(Color.blue, Color.white), True, euro)</code></pre>



<p>And this is how it is rendered in light and dark modes:</p>


<div class="wp-block-image is-style-default">
<figure class="aligncenter"><img decoding="async" width="2991" height="1225" src="https://blog.xojo.com/wp-content/uploads/2024/06/ChartDarkMode.png" alt="" class="wp-image-13190" srcset="https://blog.xojo.com/wp-content/uploads/2024/06/ChartDarkMode.png 2991w, https://blog.xojo.com/wp-content/uploads/2024/06/ChartDarkMode-300x123.png 300w, https://blog.xojo.com/wp-content/uploads/2024/06/ChartDarkMode-1024x419.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/06/ChartDarkMode-768x315.png 768w, https://blog.xojo.com/wp-content/uploads/2024/06/ChartDarkMode-1536x629.png 1536w, https://blog.xojo.com/wp-content/uploads/2024/06/ChartDarkMode-2048x839.png 2048w" sizes="(max-width: 2991px) 100vw, 2991px" /></figure>
</div>


<h2 class="wp-block-heading">More Grid Flexibility</h2>



<p>We added three new properties the the Chart control itself to better handle the way you want the chart grid to be rendered:</p>



<ul class="wp-block-list">
<li>IsGridVisible</li>



<li>IsYAxisVisible</li>



<li>IsXAxisVisible</li>
</ul>



<p>For example, in previous releases you needed to set the GridColor property to Color.Clear to avoid the drawing of the grid lines in the chart. Now, you can set the GridColor to any other color you (or your app user) may want, and simply control if the grid is rendered or not setting the IsGridVisible property to the True/False boolean value.</p>



<p>In addition to the grid itself, you have the flexibility to decide if the rendered chart will display the X or the Y axis along their values through the IsXAxisVisible and the IsYAxisVisible boolean properties. As with the IsGridVisible property, you can change these values at runtime and the chart will be updated accordingly:</p>



<figure class="wp-block-video"><video controls src="https://blog.xojo.com/wp-content/uploads/2024/06/GridXYVisible.mp4"></video></figure>



<h2 class="wp-block-heading">Inline Labels</h2>



<p>Also, starting with Xojo 2024r2, for all the chart representations based on a ChartCircularDataset, you will be able to decide if you want the Labels to be rendered inline in addition to these rendered by default in the upper section of the chart, or instead of these. This can get a better identification of the label representing every Pie chart section, requiring less screen space.</p>



<figure class="wp-block-video"><video controls src="https://blog.xojo.com/wp-content/uploads/2024/06/InlineLabels.mp4"></video></figure>



<p>In order to display the Inline labels all you need to do is set the ChartCircularDataset.HasInlineLabels property to True.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>As always, we look forward to keep improving Charts and see how do you use them in you Xojo developed apps and solutions!</p>



<p><em>Javier Menendez is an engineer at Xojo and has been using Xojo since 1998. He lives in Castellón</em>, <em>Spain and hosts regular Xojo hangouts en español. Ask Javier questions on Twitter at <a href="https://twitter.com/xojoes" target="_blank" rel="noreferrer noopener">@XojoES</a> or on the <a href="https://forum.xojo.com/u/javier_menendez/summary" target="_blank" rel="noreferrer noopener">Xojo Forum</a>.</em></p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		<enclosure url="https://blog.xojo.com/wp-content/uploads/2024/06/GridXYVisible.mp4" length="379781" type="video/mp4" />
<enclosure url="https://blog.xojo.com/wp-content/uploads/2024/06/InlineLabels.mp4" length="132654" type="video/mp4" />

			</item>
		<item>
		<title>TabPanel has Finally Joined the Dark Side</title>
		<link>https://blog.xojo.com/2024/03/26/tabpanel-has-finally-joined-the-dark-side/</link>
		
		<dc:creator><![CDATA[William Yu]]></dc:creator>
		<pubDate>Tue, 26 Mar 2024 15:26:49 +0000</pubDate>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[2024r1]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[DesktopXAMLContainer]]></category>
		<category><![CDATA[TabPanel]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=12752</guid>

					<description><![CDATA[Xojo's TabPanel on Windows has fought hard to stay on the light side by making the dark mode transition annoyingly difficult, but at long last it has given up the fight and has embraced the dark side.]]></description>
										<content:encoded><![CDATA[
<p>Xojo&#8217;s TabPanel on Windows has fought hard to stay on the light side by making the dark mode transition annoyingly difficult, but at long last it has given up the fight and has embraced the dark side.</p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" autoplay controls loop src="https://blog.xojo.com/wp-content/uploads/2024/03/LightToDarkRepeat.mp4"></video></figure>



<p>Supporting dark mode with Win32 controls is never an easy exercise, but if you&#8217;ve been following along with our work to modernize our Windows framework with XAML, then you may have already updated your apps with the XAML TabView control that natively supports dark mode.</p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" autoplay controls loop src="https://blog.xojo.com/wp-content/uploads/2024/03/XAMLTabPanel.mp4"></video></figure>



<p>Simply plug this bit of XAML into our DesktopXAMLContainer Content property and you&#8217;ve got yourself a modern looking TabPanel that already supported dark mode even before we did.</p>



<pre class="wp-block-code"><code>&lt;winui:TabView&gt;
	&lt;winui:TabView.TabItems&gt;
		&lt;winui:TabViewItem Header="Tab 1"&gt;
			&lt;StackPanel&gt;
				&lt;TextBlock Text="This is Tab 1" Margin="5"/&gt;
				&lt;Button Content="Button 1" Margin="5"/&gt;
				&lt;CheckBox Content="Checkbox 1" IsChecked="True" Margin="5"/&gt;
			&lt;/StackPanel&gt;
		&lt;/winui:TabViewItem&gt;
		&lt;winui:TabViewItem Header="Tab 2"&gt;
			&lt;StackPanel&gt;
				&lt;TextBlock Text="This is Tab 2" Margin="5"/&gt;
				&lt;TextBox Text="Enter text here" Margin="5"/&gt;
				&lt;ComboBox Margin="5"&gt;
					&lt;ComboBoxItem Content="Item 1"/&gt;
					&lt;ComboBoxItem Content="Item 2"/&gt;
					&lt;ComboBoxItem Content="Item 3"/&gt;
				&lt;/ComboBox&gt;
			&lt;/StackPanel&gt;
		&lt;/winui:TabViewItem&gt;
	&lt;/winui:TabView.TabItems&gt;
&lt;/winui:TabView&gt;</code></pre>



<p>While people debate on which mode (light or dark) they prefer to work in, you can ultimately control whether you want to support dark mode or not in your app by toggling the &#8220;Supports Dark Mode&#8221; build setting.  For an example on how to dynamically switch between dark and light mode in your app using XAML, see the XAML ButtonStyling example project and the RequestedTheme property.</p>



<p><em><em><em>William Yu grew up in Canada learning to program BASIC on a Vic-20. He is Xojo’s resident Windows and Linux engineer, among his many other skills. Some may say he has joined the dark side here in the USA, but he will always be a Canadian at heart.</em></em></em></p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		<enclosure url="https://blog.xojo.com/wp-content/uploads/2024/03/LightToDarkRepeat.mp4" length="1852724" type="video/mp4" />
<enclosure url="https://blog.xojo.com/wp-content/uploads/2024/03/XAMLTabPanel.mp4" length="801534" type="video/mp4" />

			</item>
		<item>
		<title>Bootstrap 5 in Xojo Web 2023r2</title>
		<link>https://blog.xojo.com/2023/08/09/bootstrap-5-in-xojo-web-2023r2/</link>
		
		<dc:creator><![CDATA[Ricardo Cruz]]></dc:creator>
		<pubDate>Wed, 09 Aug 2023 13:30:00 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Beginner Tips]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=11762</guid>

					<description><![CDATA[Bootstrap continues to improve and as a result we have upgraded the Web framework to the latest version. For most Xojo users, this update won't require any changes at all to your existing projects.]]></description>
										<content:encoded><![CDATA[
<p><a rel="noreferrer noopener" href="https://getbootstrap.com" target="_blank">Bootstrap</a> is the toolkit the Xojo Web framework uses to create the UI controls for your web projects. Bootstrap continues to improve and as a result we have upgraded the Web framework to the latest version.</p>



<p>For most Xojo users, this update won&#8217;t require any changes at all to your existing projects. For those that create their own controls using the Web SDK, there will likely be a minor bit of work.</p>



<h3 class="wp-block-heading">Dark Mode Support</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="716" src="https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284-1024x716.png" alt="" class="wp-image-11199" srcset="https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284-1024x716.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284-300x210.png 300w, https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284-768x537.png 768w, https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284.png 1237w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Eddie&#8217;s Electronics sample app running with Dark Mode support enabled.</figcaption></figure>



<p>The Web framework is currently the only Xojo framework that doesn&#8217;t support Dark Mode. Fortunately, Bootstrap 5 does. As with Desktop targets, users of your Web projects will be able to decide between the light and dark modes. For Web projects, there is now a Supports Dark Mode Build Setting that will be off by default for existing projects and on by default for new ones.</p>



<h3 class="wp-block-heading">More Than Dark Mode</h3>



<p>Visually, Bootstrap 5 comes with some subtle changes. For example the blue color it uses is still blue… but not that blue, helping to increase the contrast of your buttons.</p>



<p>You may notice that the buttons are a little bit rounder by default, following the latest design trends.</p>



<p>The look and feel of some input controls, like checkboxes and radio buttons, will be more similar between different browsers and operating systems.</p>



<p>Bootstrap 5 also includes new components and features, like <a rel="noreferrer noopener" href="https://getbootstrap.com/docs/5.3/components/accordion/" target="_blank">Accordion</a> and <a rel="noreferrer noopener" href="https://getbootstrap.com/docs/5.3/components/offcanvas/" target="_blank">Offcanvas</a>. These may find their way into future releases via the Web framework or from one of the third-party control developers.</p>



<p>Finally, Bootstrap 5 no longer depends on jQuery and it makes use of the latest CSS features which brings us to the next section.</p>



<h3 class="wp-block-heading">Potential Migration Challenges</h3>



<p>We&#8217;ve made it so most Xojo users won&#8217;t need to make any changes to their web projects. For example, we&#8217;ve adapted the Breadcrumb control to look like Bootstrap 4 by default. Generally speaking, if you are using the default theme and you aren&#8217;t using third-party controls, you won&#8217;t need to do anything special.</p>



<p>However, if you are currently using a custom Bootstrap 4 theme that uses a custom bootstrap.min.css file, it may not work properly. If you&#8217;ve downloaded the theme from a website such as <a rel="noreferrer noopener" href="https://bootswatch.com" target="_blank">Bootswatch</a>, you can download an updated Bootstrap 5 compatible theme from the same site. Bootstrap 5 themes are actually easier to find than those for v4.</p>



<p>If you are still curious about Bootstrap 5 specifically, you can view the <a rel="noreferrer noopener" href="https://getbootstrap.com/docs/5.3/migration/" target="_blank">Bootstrap 5 Migration Guide</a> where you can find an extensive list of changes and improvements since Bootstrap 4.6.</p>



<p>If you have any questions, please feel free to ask on the <a rel="noreferrer noopener" href="https://forum.xojo.com" target="_blank">Forum</a>.</p>



<p><em>Ricardo has always been curious about how things work. Growing up surrounded by computers</em> he became interested in <em>web technologies in the dial-up connections era. Xojo has been his secret weapon and language of preference since 2018. When he’s not online, chances are he will be scuba diving … or crocheting amigurumis. Find Ricardo on Twitter <a href="https://web.archive.org/web/20220805000833/https://www.twitter.com/piradoiv" target="_blank" rel="noreferrer noopener">@piradoiv</a>.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Updates for Web Projects in Xojo 2023r2</title>
		<link>https://blog.xojo.com/2023/08/09/updates-for-web-projects-in-xojo-2023r2/</link>
		
		<dc:creator><![CDATA[Ricardo Cruz]]></dc:creator>
		<pubDate>Wed, 09 Aug 2023 13:30:00 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web SDK]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[WebListBox]]></category>
		<category><![CDATA[Xojo IDE]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=11671</guid>

					<description><![CDATA[Xojo 2023r2 comes with a lot of updates for Xojo Web. While Dark Mode and Bootstrap 5 are the main feature in this release, we've put a lot of effort into making everything better including: improved accessibility, updates to the WebListBox and WebChart and IDE performance improvements and more.]]></description>
										<content:encoded><![CDATA[
<p>Xojo 2023r2 comes with a lot of updates for Xojo Web. While Dark Mode and Bootstrap 5 are the main feature in this release, we&#8217;ve put a lot of effort into making everything better including: improved accessibility, updates to the WebListBox and WebChart, IDE performance improvements and more.</p>



<span id="more-11671"></span>



<h3 class="wp-block-heading">Dark Mode Support and Bootstrap 5</h3>



<p>You can now create web applications with Xojo that respects users&#8217; Dark Mode preference with Bootstrap 5.</p>



<p>There is a new WebSession.ColorMode property you can use. It will be set as Auto by default, meaning it will match the user&#8217;s OS appearance preference, but it can also be forced to Light or Dark. It can be changed at runtime and per session.</p>



<p>While not everyone likes Dark Mode, some of your end users will appreciate this. Due to medical circumstances, they might actually need it, so please consider adding support even if you don&#8217;t like dark interfaces.</p>



<p>If you want to enable Dark Mode in your previous projects, you will have to manually enable the setting in the Shared Build Settings section (which is turned on by default on new projects):</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="786" src="https://blog.xojo.com/wp-content/uploads/2023/07/Supports-Dark-Mode-Setting-1024x786.png" alt="" class="wp-image-11672" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/Supports-Dark-Mode-Setting-1024x786.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/07/Supports-Dark-Mode-Setting-300x230.png 300w, https://blog.xojo.com/wp-content/uploads/2023/07/Supports-Dark-Mode-Setting-768x589.png 768w, https://blog.xojo.com/wp-content/uploads/2023/07/Supports-Dark-Mode-Setting.png 1114w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><a href="https://documentation.xojo.com/api/graphics/colorgroup.html">Color Groups</a> can also be used nearly everywhere, and they will be used in the IDE preview when you toggle between Light and Dark Mode:</p>



<figure class="wp-block-video aligncenter"><video height="1680" style="aspect-ratio: 2786 / 1680;" width="2786" controls src="https://blog.xojo.com/wp-content/uploads/2023/07/ColorGroup-IDE-preview.mp4"></video></figure>



<p>In order get Dark Mode support ready for Web, we had to upgrade our internal <a rel="noreferrer noopener" href="https://getbootstrap.com" data-type="URL" data-id="https://getbootstrap.com" target="_blank">Bootstrap</a> dependency from v4.6.1 to v5.3.0, which is a huge leap by itself. Bootstrap 5 comes with a refreshed color palette, new components, modernized existing controls and bug fixes. Please check our previous <a href="https://blog.xojo.com/2023/01/26/bootstrap-5-is-coming-to-the-xojo-web-framework/" data-type="post" data-id="11198">Bootstrap 5 is Coming to the Xojo Web Framework</a> blog post.</p>



<p>If your application wasn&#8217;t using a custom Bootstrap Theme (bootstrap.min.css), everything should look more or less the same except for the subtle color palette differences and rounder buttons. Bootstrap 4 themes aren&#8217;t supported in Bootstrap 5, please replace it with a v5 theme if needed. Not every theme supports Dark Mode, but the one included in Xojo does.</p>



<p>If you are a theme builder, please check the <a rel="noreferrer noopener" href="https://getbootstrap.com/docs/5.3/customize/color-modes/" target="_blank">Bootstrap&#8217;s Color Modes documentation</a>. You can also find free Bootstrap 5 themes available at&nbsp;<a href="https://bootswatch.com" target="_blank" rel="noreferrer noopener">Bootswatch</a>.</p>



<p>We also want to send a big thank you to our third party developers for their effort adapting their Open Source and Commercial plugins and controls to Bootstrap 5. You can learn about what they offer at the Xojo <a href="https://www.xojo.com/store/#addons">Extras Store</a> and in the <a href="https://documentation.xojo.com/resources/third_party/open_source_projects.html">Open Source Projects</a> page in the Xojo Documentation.</p>



<h3 class="wp-block-heading">Accessibility</h3>



<p>Navigating and using web applications with the keyboard makes everyone&#8217;s life easier. In Xojo 2023r2 we&#8217;ve upgraded <a href="https://documentation.xojo.com/api/user_interface/web/webpagination.html#webpagination">WebPagination</a> and <a href="https://documentation.xojo.com/api/user_interface/web/webbreadcrumb.html#webbreadcrumb">WebBreadcrumb</a> controls, which are composed of more than one focusable item. Your users will be able to properly use the tab key to go through them.</p>



<figure class="wp-block-video aligncenter"><video height="998" style="aspect-ratio: 1404 / 998;" width="1404" controls src="https://blog.xojo.com/wp-content/uploads/2023/07/Tab-WebPagination-and-WebBreadcrumb.mp4"></video></figure>



<p>We plan to continue working on improving Accessibility. Please open a new <a href="https://tracker.xojo.com/xojoinc/xojo/-/issues/new" target="_blank" rel="noreferrer noopener">Issue</a> if you find anything that can help you and your end users.</p>



<h3 class="wp-block-heading">WebListBox</h3>



<p>DataTables, the internal dependency we use for bringing your tables to life, has been upgraded from v1.10.20 to v1.13.4. This recent version includes support for Bootstrap 5 and a few bug fixes that some users were facing in their web projects.</p>



<p>You can now disable your <a href="https://documentation.xojo.com/api/user_interface/web/weblistbox.html#weblistbox">WebListBox</a> by setting its Enabled property to False so your users won&#8217;t be able to interact with it. And also, if you were missing this feature that&#8217;s in the DesktopListBox, you can now add Variant tags to your columns, using the new WebListBox.ColumnTagAt.</p>



<p>Last but not least, this control comes with a visual Inline Editor, like in its Desktop counterpart:</p>



<figure class="wp-block-video aligncenter"><video height="1806" style="aspect-ratio: 2786 / 1806;" width="2786" controls src="https://blog.xojo.com/wp-content/uploads/2023/07/WebListBox-Inline-Edit.mp4"></video></figure>



<h3 class="wp-block-heading">WebChart</h3>



<p>Chart.js, the underlying library we use for <a href="https://documentation.xojo.com/api/user_interface/web/webchart.html#webchart">WebChart</a>, has been upgraded from v2.9.3 to v4.2.1. Again, we&#8217;ve done everything we could on our side so you don&#8217;t have to do anything.</p>



<p>The only exception is with the WebChart.OverrideOptions event. If you are currently using it, you&#8217;ll have to check the library documentation as the internal options JSON has changed.</p>



<p>You can expect the new DesktopChart features to be working on WebChart, like configuring how the lines look like (including the endpoints), background images or prefix and suffixes. Read <a href="https://blog.xojo.com/2023/07/19/2023r2-new-additions-to-desktopchart-mobilechart-and-webchart">New Additions to DesktopChart, MobileChart and WebChart</a> to learn more.</p>



<h3 class="wp-block-heading">Web SDK</h3>



<p>If you are using third party controls, you will notice some of them now have a custom icon in the IDE Library. But even more important, they will use less memory at runtime.</p>



<p>Are you developing Open Source or Commercial Web SDK controls? Remember there is a dedicated <a rel="noreferrer noopener" href="https://forum.xojo.com/c/sdks/web-sdk/23" target="_blank">Web SDK forum</a> where you can ask any questions you may have. </p>



<h3 class="wp-block-heading">IDE Performance and Improved CSS Support</h3>



<p>Bootstrap 5 makes use of the latest CSS features. We took the opportunity to rethink our CSS parser and improve its performance at the same time. As a result, the IDE preview looks even closer to what you see in the browser, and we render everything faster.</p>



<h3 class="wp-block-heading">Wrapping Up</h3>



<p>Over 50 bug fixes and features were included just for Xojo Web in Xojo 2023r2. Please find a full list in the <a href="https://documentation.xojo.com/resources/release_notes/2023r2.html">Release Notes</a>. read more about <a href="https://blog.xojo.com/2023/08/09/bootstrap-5-in-xojo-web-2023r2/">Bootstrap 5</a> and updates to <a href="https://blog.xojo.com/2023/08/09/new-additions-to-desktopchart-mobilechart-and-webchart/">WebChart</a> on the Xojo Programming Blog.  We are looking forward to hearing your thoughts and seeing what you&#8217;re building with Xojo! See you in the forum!</p>



<p><em>Ricardo has always been curious about how things work. Growing up surrounded by computers</em> he became interested in <em>web technologies in the dial-up connections era. Xojo has been his secret weapon and language of preference since 2018. When he’s not online, chances are he will be scuba diving … or crocheting amigurumis. Find Ricardo on Twitter <a href="https://web.archive.org/web/20220805000833/https://www.twitter.com/piradoiv" target="_blank" rel="noreferrer noopener">@piradoiv</a>.</em></p>
]]></content:encoded>
					
		
		<enclosure url="https://blog.xojo.com/wp-content/uploads/2023/07/ColorGroup-IDE-preview.mp4" length="646228" type="video/mp4" />
<enclosure url="https://blog.xojo.com/wp-content/uploads/2023/07/Tab-WebPagination-and-WebBreadcrumb.mp4" length="202785" type="video/mp4" />
<enclosure url="https://blog.xojo.com/wp-content/uploads/2023/07/WebListBox-Inline-Edit.mp4" length="737982" type="video/mp4" />

			</item>
		<item>
		<title>Bootstrap 5 is Coming to the Xojo Web Framework</title>
		<link>https://blog.xojo.com/2023/01/26/bootstrap-5-is-coming-to-the-xojo-web-framework/</link>
		
		<dc:creator><![CDATA[Ricardo Cruz]]></dc:creator>
		<pubDate>Thu, 26 Jan 2023 23:50:06 +0000</pubDate>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web SDK]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=11198</guid>

					<description><![CDATA[Bootstrap is the toolkit the Xojo Web framework uses to create the UI controls for your web projects. Bootstrap continues to improve and as a result we are working to upgrade the Web framework to the latest version. We are currently planning to ship this updated Web framework in Xojo 2023r2.]]></description>
										<content:encoded><![CDATA[
<p><a rel="noreferrer noopener" href="https://getbootstrap.com" target="_blank">Bootstrap</a> is the toolkit the Xojo Web framework uses to create the UI controls for your web projects. Bootstrap continues to improve and as a result we are working to upgrade the Web framework to the latest version. We are currently planning to ship this updated Web framework in Xojo 2023r2.</p>



<p>For most Xojo users, this update won&#8217;t require any changes at all to your existing projects. For those that create their own controls using the Web SDK, there will likely be a minor bit of work.</p>



<h2 class="wp-block-heading">Dark Mode Support</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="716" src="https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284-1024x716.png" alt="" class="wp-image-11199" srcset="https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284-1024x716.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284-300x210.png 300w, https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284-768x537.png 768w, https://blog.xojo.com/wp-content/uploads/2023/01/BeautyShot-3284.png 1237w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Eddie&#8217;s Electronics sample app running with Dark Mode support enabled.</figcaption></figure>



<p>The Web framework is currently the only Xojo framework that doesn&#8217;t support Dark Mode. Fortunately,  Bootstrap 5 does. As with Desktop targets, users of your web projects will be able to decide between the light and dark modes. We plan for this to work identically to the way it works for your Desktop projects now. There will be a Supports Dark Mode Build Setting that will be off by default for existing projects and on by default for new ones.</p>



<h2 class="wp-block-heading">More than Dark Mode</h2>



<p>Visually, Bootstrap 5 comes with some subtle changes. For example the blue color it uses is still blue… but not that blue, helping to increase the contrast of your buttons.</p>



<p>You may notice that the buttons are a little bit rounder by default, following the latest design trends.</p>



<p>The look and feel of some input controls, like checkboxes and radio buttons, will be more similar between different browsers and operating systems.</p>



<p>Bootstrap 5 also includes new components and features, like <a rel="noreferrer noopener" href="https://getbootstrap.com/docs/5.3/components/accordion/" target="_blank">Accordion</a> and <a rel="noreferrer noopener" href="https://getbootstrap.com/docs/5.3/components/offcanvas/" target="_blank">Offcanvas</a>. These may find their way into future releases via the Web framework or from one of the third-party control developers.</p>



<p>Finally, Bootstrap 5 no longer depends on jQuery and it makes use of the latest CSS features which brings us to the next section.</p>



<h2 class="wp-block-heading">Potential Migration Challenges</h2>



<p>We&#8217;ve made it so most Xojo users won&#8217;t need to make any changes to their web projects. For example, we&#8217;ve adapted the Breadcrumb control to look like Bootstrap 4 by default. Generally speaking, if you are using the default theme and you aren&#8217;t using third-party controls, you won&#8217;t need to do anything special.</p>



<p>However, if you are currently using a custom Bootstrap 4 theme that uses a custom bootstrap.min.css file, it may not work properly. If you&#8217;ve downloaded the theme from a website such as <a rel="noreferrer noopener" href="https://bootswatch.com" target="_blank">Bootswatch</a>, you can download an updated Bootstrap 5 compatible theme from the same site. Bootstrap 5 themes are actually easier to find than those for v4.</p>



<p>We are announcing this change to v5 in advance to allow third-party library developers the time to adapt their code and make use of the new Bootstrap 5 HTML and JavaScript API. If you rely upon any third-party controls for your web projects, you will need to upgrade them when new Bootstrap 5-compatible versions become available.</p>



<p>To make the migration as smooth as possible for everyone, we will continue including jQuery and provide independent betas, prior to releasing a version of Xojo with Bootstrap 5.</p>



<p>In the <a href="https://getbootstrap.com/docs/5.3/migration/" target="_blank" rel="noreferrer noopener">Bootstrap 5 Migration Guide</a> you can find an extensive list of changes and improvements since Bootstrap 4.6.</p>



<p>If you have any questions, please feel free to ask on the <a rel="noreferrer noopener" href="https://forum.xojo.com" target="_blank">Forum</a>. Users attending the <a rel="noreferrer noopener" href="https://xojo.com/xdc/london/index.html" target="_blank">Xojo Developer Conference</a> can also meet and talk in person with Xojo engineers, about this or any other topic.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Linux Joins the Dark Side</title>
		<link>https://blog.xojo.com/2022/12/13/linux-joins-the-dark-side/</link>
		
		<dc:creator><![CDATA[William Yu]]></dc:creator>
		<pubDate>Tue, 13 Dec 2022 14:33:00 +0000</pubDate>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Multi-Platform Development]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=11050</guid>

					<description><![CDATA[While we've been hard at working getting Linux ARM 64 support ready for Xojo 2022r4, released earlier today, we also updated Xojo's Linux support for Dark Mode. Color.IsDarkMode now functions properly and our Linux IDE has now officially joined the dark side.]]></description>
										<content:encoded><![CDATA[
<p>While we&#8217;ve been hard at working getting Linux ARM 64 support ready for Xojo 2022r4, released earlier today, we also updated Xojo&#8217;s Linux support for Dark Mode. Color.IsDarkMode now functions properly and our <a href="https://documentation.xojo.com/topics/user_interface/desktop/supporting_dark_mode.html#supporting-dark-mode">Linux IDE</a> has now officially joined the dark side.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="623" src="https://blog.xojo.com/wp-content/uploads/2022/12/LinuxIDEInDarkMode-1024x623.png" alt="" class="wp-image-11051" srcset="https://blog.xojo.com/wp-content/uploads/2022/12/LinuxIDEInDarkMode-1024x623.png 1024w, https://blog.xojo.com/wp-content/uploads/2022/12/LinuxIDEInDarkMode-300x182.png 300w, https://blog.xojo.com/wp-content/uploads/2022/12/LinuxIDEInDarkMode-768x467.png 768w, https://blog.xojo.com/wp-content/uploads/2022/12/LinuxIDEInDarkMode.png 1217w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Depending on your flavor of Linux (in this example we&#8217;re using Gnome on Ubuntu 20.04), you can change themes from your Settings/Appearance sidebar:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="625" src="https://blog.xojo.com/wp-content/uploads/2022/12/Settings-1024x625.png" alt="" class="wp-image-11055" srcset="https://blog.xojo.com/wp-content/uploads/2022/12/Settings-1024x625.png 1024w, https://blog.xojo.com/wp-content/uploads/2022/12/Settings-300x183.png 300w, https://blog.xojo.com/wp-content/uploads/2022/12/Settings-768x469.png 768w, https://blog.xojo.com/wp-content/uploads/2022/12/Settings.png 1216w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>And for those interested in other themes, you can also change themes at the command line:</p>



<pre class="wp-block-code"><code>gsettings set org.gnome.desktop.interface gtk-theme 'Yaru-dark'</code></pre>



<p>Xojo will be able to determine which themes are dark mode savvy.  Now you are ready to enjoy the dark side of Linux along with Xojo!</p>



<p><em><em><em>William Yu grew up in Canada learning to program BASIC on a Vic-20. He is Xojo’s resident Windows and Linux engineer, among his many other skills. Some may say he has joined the dark side here in the USA, but he will always be a Canadian at heart.</em></em></em></p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Welcome to the Dark Side of Windows</title>
		<link>https://blog.xojo.com/2021/11/18/welcome-to-the-dark-side-of-windows/</link>
		
		<dc:creator><![CDATA[William Yu]]></dc:creator>
		<pubDate>Thu, 18 Nov 2021 14:00:00 +0000</pubDate>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Multi-Platform Development]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=9602</guid>

					<description><![CDATA[Starting with Xojo 2021r3, the Windows IDE is now themed for dark mode. This is because we've added support for dark mode aware Windows apps.  But wait, how is that even possible with Win32 controls? ]]></description>
										<content:encoded><![CDATA[
<p>Starting with Xojo 2021r3, the Windows IDE is now themed for dark mode. This is because we&#8217;ve added support for dark mode aware Windows apps.  But wait, how is that even possible with Win32 controls?  Well&#8230;</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1514" height="1026" src="https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkModeInIDE.png" alt="" class="wp-image-9603" srcset="https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkModeInIDE.png 1514w, https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkModeInIDE-300x203.png 300w, https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkModeInIDE-1024x694.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkModeInIDE-768x520.png 768w" sizes="auto, (max-width: 1514px) 100vw, 1514px" /><figcaption>Windows IDE in dark mode</figcaption></figure></div>



<p>While not perfect, Microsoft has always provided enough capabilities (for the most part) to get Win32 controls themed for dark mode.  Some Win32 controls they even themed correctly from the beginning when Microsoft first introduced dark mode on Windows. However, there are a few controls that are not supported in dark mode, such as TabPanels, autocompleting ComboBoxes, and DateTimePicker.</p>



<p>To opt into dark mode, just enable it in the shared build settings (by default this is enabled).</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.xojo.com/wp-content/uploads/2021/11/SupportsDarkMode.png" alt="" class="wp-image-9604" width="292" height="192"/></figure></div>



<p>Not ready for dark mode?  Simply disable that option and your app will continue to operate in light mode as before. When you are ready for dark mode, make any necessary image adjustments and make sure to use the appropriately themed colors (for example Color.TextColor) in places that need it. For dark mode customization use the Color.IsDarkMode to check if the OS is in dark mode.  To theme colors differently between light and dark mode, add a ColorGroup and assign them to the controls that need them. Once you&#8217;re done with your tweaks, enjoy the dark side of Windows!</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkMode.png" alt="" class="wp-image-9605" width="915" height="727" srcset="https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkMode.png 1026w, https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkMode-300x239.png 300w, https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkMode-1024x814.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/11/EddiesDarkMode-768x611.png 768w" sizes="auto, (max-width: 915px) 100vw, 915px" /><figcaption>Eddies Electronics running in dark mode with one line code tweak for Color.TextColor and some toolbar image updates.</figcaption></figure></div>



<p>For additional capabilities, you can disable dark mode theming (even when you have the dark mode support enabled) in your app by setting up the XOJO_WIN32_DARKMODE_DISABLED environment variable (either set to &#8220;true&#8221; or &#8220;1&#8221;)  in your App.Opening event.</p>



<p>Learn more in the <a href="https://documentation.xojo.com/topics/user_interface/desktop/macos/supporting_macos_dark_mode.html">Xojo Documentation</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Xojo IDE Improvements: Speed, Tab Management, Menus &#038; More</title>
		<link>https://blog.xojo.com/2019/10/09/xojo-ide-improvements-speed-tab-management-menus-more/</link>
		
		<dc:creator><![CDATA[Greg O'Lone]]></dc:creator>
		<pubDate>Wed, 09 Oct 2019 10:25:41 +0000</pubDate>
				<category><![CDATA[Cross-Platform]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[2019r2]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<category><![CDATA[Xojo IDE]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=5837</guid>

					<description><![CDATA[Keeping the IDE simple to use for new users is one of our core tenets, but that doesn't mean that we can't add some much needed capabilities for our long-term users. ]]></description>
										<content:encoded><![CDATA[
<p>Keeping the IDE simple to use for new users is one of our core tenets, but that doesn&#8217;t mean that we can&#8217;t add some much needed capabilities for our long-term users. This cycle we&#8217;ve added some new exciting capabilities for managing medium to large-size projects and made some overall improvements that make the Xojo IDE a lot more satisfying to use. To be honest, the more of these things we added the less I wanted to go back to using older versions of the IDE.</p>



<p><strong>Improved Overall Speed</strong><br>One of the most obvious areas that hurt people with large projects is the speed of the IDE itself. We worked on a number of pain points to improve the overall IDE experience.  Specifically, we were looking for things which by themselves were not too bad, but in a cumulative effect they could take large chunks out of your day.</p>



<p>One such area was in saving text projects. Now you wouldn&#8217;t think that there was much room for improvement here, since it&#8217;s just File I/O right? We found an optimization point in the way we save Bookmarks and Breakpoints, which in the IDE project represents a huge savings when making lots of changes. In our case, we went from 30 seconds down to 1, and for someone who insists on saving before every run, it makes a huge difference.</p>



<p>We also optimized drawing in the Navigator, and that change resulted in huge overall speed increases in many parts of the IDE, from selecting large number of items in the Navigator itself, making changes to multiple items, to even just typing code in the code editor.</p>



<p><strong>Improved Tab Management</strong><br>Tabs have been broken in one way or another for a long time. They finally got some TLC this cycle and we think you&#8217;re going to be much happier with the way they work now. We&#8217;ve rewritten the logic surrounding how tabs are chosen when you take an action which results in a new location request and made the behavior consistent, no matter where that request comes from. Whether that&#8217;s a Go To Location request or a search or clicking on an error result. The rules are applied in the following order:</p>



<ol class="wp-block-list"><li>If there is at least one <em>locked</em> <em>tab</em> which matches the Go To target, the first one will be used (left to right).</li><li>If there is at least one <em>unlocked</em> <em>tab</em> which matches the Go To target, the first one will be replaced.</li><li>If the <em>current</em> tab is unlocked, it will be replaced with the new location.</li><li>If there are <em>any</em> unlocked tabs, the first one will be replaced.</li><li>If none of the above conditions are met, a new tab will be created for the target location.</li></ol>



<p class="has-text-color has-regular-font-size has-vivid-red-color">NOTE: Debugger Tabs are <em>never</em> eligible as a Go To target. This may seem obvious, but it wasn&#8217;t always true before. Now it is. Debugger tabs are also locked by default and cannot be unlocked.</p>



<p>The only exceptions to these rules are the Open In New Tab rules. That is, if you right-click on an item and select Open In New Tab or you double-click on an item with the &#8220;Double-click opens item in new tab&#8221; preference set, they will always open a new tab for you.</p>



<p>Once you start using the new logic, I think you&#8217;ll agree that it&#8217;s much more intuitive and you won&#8217;t feel like the IDE is constantly switching contexts on you. Personally I find that I&#8217;m using <em>fewer</em> tabs than in previous versions because I&#8217;m more confident that the objects I opened will still be there when I get back.</p>



<p><strong>MacOS Dark Mode Layout Editor Toggling</strong><br>On macOS 10.14 and above we&#8217;ve added a new toolbar button which allows you to quickly switch the Window you are editing between light and dark mode. No more switching your entire OS just to see how your app will look in the other mode.</p>



<p><strong>Navigator Contextual Menu</strong><br>We&#8217;ve done some cleanup work here to make it more obvious what you can and can&#8217;t do with objects in the Navigator. Gone are all of the disabled items that were not &#8220;in-context&#8221; for the currently selected item because, well duh, they&#8217;re not &#8220;in-context&#8221;. We&#8217;ve also enhanced the Edit Superclass and Edit Subclass menus. Edit Superclass now shows the entire superclass hierarchy, including things that you can&#8217;t edit (disabled of course) so you can track down common parentage. The Edit Subclass menu has been alphabetized so you don&#8217;t have to read the entire list just to find all of the items that begin with &#8220;c&#8221;.</p>



<p><strong>Code Editor Contextual Menu</strong><br>This menu has also gotten some love and attention. First of all, the menu has been reorganized so that the menu groups are based on the context of the thing that you&#8217;ve clicked on and the object where the code itself lives.</p>



<p>Group 1: Just like previous versions of the IDE, Cut, Copy, Paste, Delete and Select All are still at the top of the menu. They&#8217;re a common thing for mouse oriented users and we don&#8217;t want to hurt that functionality.</p>



<p>Group 2: The next group is for things that are for accessing or modifying the object that you&#8217;re currently editing. This is where you&#8217;ll find the Switch To menu for directly accessing the other code items within the current item. </p>



<p>We&#8217;ve also added two new submenus to this section that are specifically for copying the event and delegate signatures of <em>the thing you&#8217;ve clicked</em> <em>on</em>. For example if your code refers to a <strong>URLConnection</strong> object, you can now right-click on URLConnection and select <strong>Add Method</strong> &gt; <strong>From Event</strong> &gt; <strong>ContentReceived</strong> and the IDE will automatically add a method to the current object with the same signature including the object itself for use with AddHandler! In this case, you&#8217;d end up with a method that looks like this:</p>



<p><br><code>URLConnection_ContentReceived(obj As URLConnection, URL As String, HTTPStatus As Integer, content As String)</code></p>



<p>Then you could type something like:</p>



<p><br><code>AddHandler h.ContentReceived, AddressOf URLConnection_ContentReceived</code></p>



<p>Delegates work the same way, albeit without including the object reference in the method signature. No more flipping back and forth between your current code and the target object or Language Reference to copy the signatures!</p>



<p>Group 3: If it exists, this group is for things that are specific to the object or instance of the object that you clicked on in the code editor. This is where you&#8217;ll see the &#8220;Find&#8221; and &#8220;Go To&#8221; menu items for finding other uses of or going to the definition of an item, respectively. </p>



<p>Group 4: This group is for selection and code-specific tools including the <strong>Insert Color</strong> command, <strong>Standardize Format</strong> and the <strong>Wrap In</strong> menus for wrapping the current selection if an #If #EndIf or While/Wend block. This section also sports the menu for converting the current selection to a Constant or a Method.</p>



<p>Group 5: From here you can toggle Breakpoints and Bookmarks</p>



<p>Group 6: Help and Language Reference access.</p>



<p>For more information about the changes in 2019r2, read the full <a href="http://documentation.xojo.com/Resources:2019r2_Release_Notes">Release Notes</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Dealing with Pictures and Databases: AXImageCanvas</title>
		<link>https://blog.xojo.com/2019/08/28/dealing-with-pictures-and-databases-aximagecanvas/</link>
		
		<dc:creator><![CDATA[Javier Menendez]]></dc:creator>
		<pubDate>Wed, 28 Aug 2019 15:14:31 +0000</pubDate>
				<category><![CDATA[Cross-Platform]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[AprendeXojo]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Third Party]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=6004</guid>

					<description><![CDATA[How to save pictures in a database is without doubt one of the more frequent questions I&#8217;m asked about. I hear this from Xojo newcomers,&#8230;]]></description>
										<content:encoded><![CDATA[
<p><br>How to save pictures in a database is without doubt one of the more frequent questions I&#8217;m asked about. I hear this from Xojo newcomers, and not so newcomers, just as much as I do from people using other development environments. That&#8217;s why I decided to put all the frequent questions and operations related to the Canvas and Pictures on the drawing board …&nbsp;and AXImageCanvas is the result of that!</p>



<p>Things like drag and drop (from other sources and also to other sources), undoing the picture assigned, moving the control instances around the parent <strong>RectControl</strong> (or Window), reacting to <strong>DarkMode</strong> changes on macOS, and properly resizing the picture so it fits in the Canvas area while keeping its original aspect ratio are implemented in AXImageCanvas, among other features.</p>



<p>Of course, AXImageCanvas abstracts the user from everything related to the usual <strong>CRUD</strong> operations associated with a Database backend: Creating a new Record, Retrieving the Picture from a record, Updating the Picture of an existing record, and Deleting the Picture for the designated record. All of this trying to mimic the easiness of use we are used to when using the standard Xojo framework itself.</p>



<p>The user only needs to assign, paste or drop the Picture to display …&nbsp;and AXImageCanvas takes care of the rest.</p>



<p>So, for example, the binding behavior to a database is implemented in a way that tries to emulate one of the most appreciated features for Xojo users in the past: DataControl.</p>



<p>The user only needs to set the database instance they want to use (it may be a <strong>MySQL/MariaDB</strong>, <strong>PostgreSQL</strong> or <strong>SQLite</strong> database instance), the name of the table they want to use, the name of the column to store the pictures and (optionally) the name of the column to store the original path to a picture read from a <strong>FolderItem</strong>.</p>



<p>Even if there is only set the column to store the original Picture FolderItem path, then it will not save the Picture data itself, and it will recover the picture later to display based on the saved path information. This alleviates the database data overload for some use cases, when the developer of a solution prefers not to store the picture data in the database itself, just the path pointing to it.</p>



<p>The class is also smart enough to abstract the user from all the SQL queries it would have to write in function of the database engine used. It is completely transparent, as it is the navigation through the database records even if their IDs are not consecutive (this is a mandatory requirement: the table has to have an ID column).</p>



<p>The logic put in the class also gathers information about the database table itself, if for example it only has the two columns set to the instance (Picture column and Picture source path column; plus the mandatory ID column), then the Delete Record action will effectively delete the record from the assigned database table; otherwise, if the table has more columns, it will NOT delete the record, because it&#8217;s something you probably wouldn&#8217;t want to do … and it simply updates the displayed record to empty (nullify) the information for the Picture and (optionally) the Picture Path columns, keeping thus the rest of the record data intact.</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="AXImageCanvas" width="500" height="375" src="https://www.youtube.com/embed/IhbE5AdhiOE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>As for PostgreSQL database, there are two paths that can be taken regarding storing Pictures. We can say that the first one is the usual path, storing the Picture data itself in a column table (valid for data not exceeding 1 GB) and through Large Objects (<strong>pg_largeobject</strong>) via the previous acquisition of an <strong>OID</strong> value. AXImageCanvas uses the first technique.</p>



<p>In addition, it also properly deals with record navigation for all the supported databases engines even if the records IDs are not consecutive; and when the records navigation is set to the &#8220;wrap around&#8221; mode, it does it also correctly for all of the supported databases engines.</p>



<p>Another common quirk it deals with answers one of the usual questions: Database Server disconnections due to the timeout. AXImageCanvas takes care of it when the connection is lost and if it is something not transient, then properly raises the exception so it can be cached by the application logic.</p>



<p>But one of the most important things is that everything can be configurable through the properties shown in the <strong>Inspector Panel</strong> of the <strong>Xojo IDE</strong>, for the maximum simplicity in the AXImageCanvas setup; and also via code to give the maximum flexibility at runtime when the application is in use, so it can react to things like changing the database engine, or simply disabling things like moving or resizing the control among others.</p>



<h2 class="wp-block-heading">Pictures and Drawing Speed</h2>



<p>What about redrawing concerns? This is something that AXImageCanvas also takes care of. It applies several image caching techniques while keeping the set Picture at its full resolution.</p>



<p>This allows, for example, abstracting you from what you can see displayed in the AXImageCanvas control at the desired size, from what you can do with the original Picture itself: from previewing it (something you can do simply pressing the space bar when the AXImageCanvas has the focus), getting more information about the Picture and (optionally) original FolderItem (press the &#8216;I&#8217; key for that while the AXImageCanvas instance has the focus), or any other operation your app would want to do, like for example exporting the picture to other format.</p>



<p>In this sense, it also takes into consideration the operations done with the control itself during the redrawing or control size changes, minimizing the writing to the Database to the strictly necessary (always, of course, there is a database associated with the instance).</p>



<h2 class="wp-block-heading">The Goals</h2>



<p>To summarize, AXImageCanvas tries to be the simplest solution when dealing with Pictures and (optionally) its storage on databases. Just drop as many instances as you need in your layout, set the behaviour through the Inspector Panel Properties (even setting the initial picture to display) …&nbsp;and you&#8217;re done! The best part is that the behaviour will be the same for Windows, macOS and Linux deployed Desktop applications, both in 32 and 64 bits.</p>



<p>Of course, you can <a href="https://www.dropbox.com/s/4rc208njqel4o7g/AXImageCanvas%201.0.zip?dl=1">download the Xojo Project Example</a> and try it yourself! This is a fully functional demo without restrictions. I&#8217;d be glad to hear from you about suggestions or features you would want to be included for better fit your needs!</p>



<p><em>Javier Rodri­guez has been&nbsp;the Xojo Spanish&nbsp;Evangelist since 2008, he’s also a Developer, Consultant and Trainer who&nbsp;has be using&nbsp;Xojo since 1998. He manages&nbsp;<a href="http://www.aprendexojo.com">AprendeXojo.com</a> and is the developer behind the GuancheMOS plug-in for Xojo Developers, GuancheID, AXImageCanvas, Markdown Parser for Xojo, HTMLColorizer for Xojo and the Snippery app, among others.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>XojoTalk 034 &#8211; Back in Black</title>
		<link>https://blog.xojo.com/2019/06/05/xojotalk-034-back-in-black/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Wed, 05 Jun 2019 22:06:10 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[XojoTalk]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[macOS]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=5815</guid>

					<description><![CDATA[XojoTalk is back with a super-sized episode! Paul and Geoff talk about announcements from WWDC 2019 and more. Download mp3. Show Notes tvOS 13 iOS&#8230;]]></description>
										<content:encoded><![CDATA[
<p>XojoTalk is back with a super-sized episode! Paul and Geoff talk about announcements from WWDC 2019 and more.</p>



<p>Download <a href="http://files.xojo.com/Podcasts/XojoTalk-034.mp3">mp3</a>.</p>



<figure class="wp-block-audio"><audio controls src="http://files.xojo.com/Podcasts/XojoTalk-034.mp3"></audio><figcaption>XojoTalk 034</figcaption></figure>



<h2 class="wp-block-heading">Show Notes</h2>



<ul class="wp-block-list"><li><a href="https://www.apple.com/newsroom/2019/06/tvos-13-powers-the-most-personal-cinematic-experience-ever/">tvOS 13</a></li><li><a href="https://www.apple.com/ios/ios-13-preview/">iOS 13</a></li><li><a href="https://www.apple.com/ipados/ipados-preview/">iPad OS</a></li><li><a href="https://www.apple.com/mac-pro/">Mac Pro</a></li><li><a href="https://www.apple.com/macos/catalina-preview/">MacOS Catalina</a></li><li><a href="https://blog.xojo.com/2019/06/04/dark-mode-support-in-ios-13/">Xojo iOS Dark Mode Support</a></li></ul>



<p></p>
]]></content:encoded>
					
		
		<enclosure url="http://files.xojo.com/Podcasts/XojoTalk-034.mp3" length="41412568" type="audio/mpeg" />

			</item>
		<item>
		<title>Dark Mode Support in iOS 13</title>
		<link>https://blog.xojo.com/2019/06/04/dark-mode-support-in-ios-13/</link>
		
		<dc:creator><![CDATA[Geoff Perlman]]></dc:creator>
		<pubDate>Tue, 04 Jun 2019 16:44:01 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=5800</guid>

					<description><![CDATA[Every year we watch Apple&#8217;s WWDC keynote address to see what new features are coming in macOS and iOS that we&#8217;ll want or need to&#8230;]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="654" src="https://blog.xojo.com/wp-content/uploads/2019/06/IMG_2148-1024x654.jpg" alt="" class="wp-image-5801" srcset="https://blog.xojo.com/wp-content/uploads/2019/06/IMG_2148-1024x654.jpg 1024w, https://blog.xojo.com/wp-content/uploads/2019/06/IMG_2148-300x192.jpg 300w, https://blog.xojo.com/wp-content/uploads/2019/06/IMG_2148-768x491.jpg 768w, https://blog.xojo.com/wp-content/uploads/2019/06/IMG_2148.jpg 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Every year we watch Apple&#8217;s WWDC keynote address to see what new features are coming in macOS and iOS that we&#8217;ll want or need to support. Last year it was Dark Mode in macOS Mojave. We knew from the moment we saw it that we both wanted and needed to support it.</p>



<p>While at first glance it seemed easy enough, but it was a non-trivial task. Supporting it in the Xojo framework so that you could support it in your apps was fairly straightforward. Supporting it for the Xojo IDE itself, however, was another matter entirely. The IDE has a lot of graphic images that needed to be duplicated and updated so that it would look great under Dark Mode. As a result, Dark Mode ended up consuming nearly an entire release cycle.</p>



<p>When adding Dark Mode support for macOS, we planned ahead so that should it be added (or something like it) to other platforms we support, we&#8217;d be prepared. This is also part of what made Dark Mode support a far more significant job.</p>



<p>Prior to yesterday&#8217;s keynote, we were fairly certain that Dark Mode support would be announced for iOS 13. Fortunately, with all the work we have already done to support Dark Mode in the Xojo framework, adding it for our iOS framework is a trivial task. For those of you anxious to add it to your iOS apps, fear not.<br></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Join the Dark Side &#8211; Xojo 2018r3 Supports Dark Mode</title>
		<link>https://blog.xojo.com/2018/10/23/join-the-dark-side/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Tue, 23 Oct 2018 16:02:04 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[Mojave]]></category>
		<category><![CDATA[Xojo IDE]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=5012</guid>

					<description><![CDATA[With the availability of Xojo 2018 Release 3, Xojo now supports macOS Mojave's new dark mode. This means you can update your own apps to support dark mode and it also means that the Xojo IDE works in dark mode.]]></description>
										<content:encoded><![CDATA[<p>With the availability of <a href="https://www.xojo.com/download/">Xojo 2018 Release 3</a>, Xojo now supports macOS Mojave&#8217;s new dark mode. This means you can update your own apps to support dark mode and it also means that the Xojo IDE works in dark mode.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5062" src="https://blog.xojo.com/wp-content/uploads/2018/10/DarthVaderHalloween.jpg" alt="" width="960" height="720" /></p>
<p>To activate dark mode in Mojave, go to System Preferences, click General and select the &#8220;dark&#8221; appearance. The entire UI will switch to a darker, more muted color scheme which can be easier on the eyes, especially at night.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5070" src="https://blog.xojo.com/wp-content/uploads/2018/10/2018-10-16_11-56-20.png" alt="" width="276" height="84" /></p>
<p>Here is what the Xojo IDE looks like in dark mode:</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5098" src="https://blog.xojo.com/wp-content/uploads/2018/10/2018-10-25_09-39-06.png" alt="" width="1481" height="880" /></p>
<p>In order for your apps to support dark mode you&#8217;ll have to rebuild them with Xojo 2018r3 with its support for dark mode. Once you open your project in 2018r3 go to <strong>Shared Build Settings</strong> and turn on the Supports Dark Mode property:</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5068" src="https://blog.xojo.com/wp-content/uploads/2018/10/2018-10-16_11-53-56.png" alt="" width="204" height="28" /></p>
<p>Note: This property defaults to OFF for existing projects and ON for new projects.</p>
<p>This will automatically cause the Xojo built-in controls to switch to dark mode when you run your app in dark mode on Mojave. Here is Eddie&#8217;s Electronics running in dark mode:</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5069" src="https://blog.xojo.com/wp-content/uploads/2018/10/2018-10-11_12-31-29.png" alt="" width="1053" height="846" /></p>
<p>For your own graphics and custom controls you may need to update your drawing code so that you use darker colors and icons when in dark mode. There is now a new <strong>IsDarkMode</strong> global method that you can check to see if your app is running in dark mode so that you can choose a different color or image.</p>
<p>The <strong>App.AppearanceChanged</strong> event is called when the user switches between light and dark modes or when the accent color changes. You can use this to tell your UI to update or redraw as necessary.</p>
<p>Read more about this change and others coming to Xojo graphics and the IDE in <a href="https://blog.xojo.com/2018/10/24/following-the-dark-path/">this post</a>. To learn how you can update your apps to work in dark mode, refer to the <a href="https://documentation.xojo.com/topics/user_interface/desktop/macos/supporting_macos_dark_mode.html">Dark Mode topic in the documentation</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IDE changes in Xojo 2018r3 and more</title>
		<link>https://blog.xojo.com/2018/10/23/following-the-dark-path/</link>
		
		<dc:creator><![CDATA[Greg O'Lone]]></dc:creator>
		<pubDate>Tue, 23 Oct 2018 10:00:43 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[HiDPi]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Lingua]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[Remote Debugging]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Xojo Feedback]]></category>
		<category><![CDATA[Xojo IDE]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=5075</guid>

					<description><![CDATA[About three years ago, we added HiDPI/Retina support to our framework which was released to users as part of Xojo 2016r1 when we also shipped&#8230;]]></description>
										<content:encoded><![CDATA[<p>About three years ago, we added HiDPI/Retina support to our framework which was released to users as part of Xojo 2016r1 when we also shipped our first HiDPI IDE.</p>
<p>With Apple’s announcements at WWDC 2018 and the introduction of dark mode it was time to revisit our graphics and the overall appearance of the IDE again. Here are some things which contribute to the changes that have been made and ones that you will see in the coming months.</p>
<p><span id="more-5075"></span></p>
<h3><b>Dropping macOS 10.9</b></h3>
<p>Xojo 2018r3 drops support for macOS 10.9 and as the last version which had the skeuomorphic design elements all of our supported OS’s now have the flatter modern design. It’s not that this has held anything up per se, but it’s a good reminder that “it’s time”.<span class="Apple-converted-space"> </span></p>
<p>To that end, we have taken that opportunity to remove some of the graphics that make the IDE look out of place and doing so subtly lowers the memory footprint and accelerates drawing of the IDE itself across all platforms. We&#8217;re also using a variation of Apple&#8217;s image templates which has somewhat reduced the on-disk footprint of the IDE itself.</p>
<h3><b>macOS Dark Mode</b></h3>
<p>Apple’s addition of a darker variant of the visual “Aqua” theme in macOS means that we needed to do an audit and update of several of our base framework controls so that <i>your</i> apps would render correctly as well as ours.<span class="Apple-converted-space"> </span></p>
<h4>Events</h4>
<p>While it probably won’t be used very often (how often does one change themes while running a piece of software, besides the novelty of seeing it happen), we added an event to the App class named AppearanceChanged to notify you when the user changes from light to dark or changes their accent color. This is a good place to clear any graphic or color caches which contain theme specific UI graphics.<span class="Apple-converted-space"> </span></p>
<h4>Methods</h4>
<p>There is also a new global method called IsDarkMode(Boolean) which will return True if your app is running with the Dark Mode theme on macOS 10.14 or higher.<span class="Apple-converted-space"> If your app is running on 10.13 or lower or in light mode on 10.14, IsDarkMode will return False.</span></p>
<h4>Build Settings</h4>
<p>Enabling Dark Mode in your apps is as easy as flipping a switch in the Shared Build Settings. Unfortunately, because Apple made the assumption that most apps would “just work” versions of your apps compiled with older versions of Xojo will either need to be recompiled with Xojo 2018r3 or you’ll need to push out a new version with a plist entry to prevent macOS 10.14 from showing your app dark in Dark Mode.<span class="Apple-converted-space"> </span></p>
<h4>Testing</h4>
<p>When testing apps for use with Mojave&#8217;s dark mode, I seriously suggest that you test on a system that allows you to see the translucency effects of dark mode. Virtual Machines are usually really handy for testing, but in this case, Parallels Desktop 14, VirtualBox 5.2 and VMWare Fusion 11 do not show the subtleties of dark mode.</p>
<h4>Colors</h4>
<p>One of our goals at Xojo is to remove some of the headaches involved with the minutiae of each OS that you deploy for and to that end, we wanted to make drawing custom controls easier too. What this means is that the built-in global colors are largely theme aware now and will change depending on whether your app is running in light or dark mode on macOS. This affects things like TextColor, FillColor, FrameColor, HighlightColor, etc, so if you use those methods when drawing in pictures and canvases, you will want to audit that code. If you want a specific color, you should use a color constant. For instance, use &amp;c000000 if you want black because TextColor will now return white in Dark Mode.<span class="Apple-converted-space"> </span></p>
<p>In terms of the framework controls themselves, we are taking this opportunity to make some changes to make your apps appear better in the macOS 10.10+ ecosystem. Ever notice that a Label control and the text portion of a CheckBox or RadioButton control are not exactly the same color? Going forward, the default colors of controls which <i>should</i> automatically change between Light and Dark modes <i>will</i> do that. So if you have a Label using the default color of &amp;c00000000 (Black with Transparency = 0), the color that is actually used is what Apple calls labelColor. It’s still black, but is a tiny bit translucent. TextFields and TextAreas will automatically change text, placeholder, selection and background colors to match the Apple prescribed colors for automatic Light/Dark compatibly. We think you’ll find that building your apps with 2018r3 will largely make them just behave and appear the way you expected them to.</p>
<p>IMPORTANT NOTE: These color and framework changes affect how your apps draw on <i>all</i> versions of macOS, so make sure you try them out on your 10.10 through 10.14 VMs before shipping!</p>
<h4>Eating our own dog food</h4>
<p>One thing we hear from users every so often is the desire for Xojo to use our own products for building apps. As most of you know the IDE itself is written in Xojo, but we also have several other apps (big and small) that are written in Xojo.</p>
<ul>
<li>Feedback &#8211; Our bug reporting system</li>
<li>Xorders &#8211; Our internal order system</li>
<li>Lingua &#8211; The Xojo localization app</li>
<li>Remote Debugger &#8211; The remote debugger stubs for desktop and console</li>
</ul>
<p>While the 2018r3 cycle was in progress, all four of these projects got updated for Mojave&#8217;s Dark Mode and definitely helped us find framework rendering bugs early on in the pre-release process.</p>
<h4><b>What about Windows and Linux?</b></h4>
<p>The TL;DR version is that we’re still looking into it.<span class="Apple-converted-space"> </span></p>
<p>Currently there are several different ways to change Windows 7, 8 and 10 to use a dark interface, not all of which are compatible with the Xojo Framework controls and the Windows 10 2018 Fall Update promised yet another way but that ended up only being for UWP. We are looking into which method gets you the most “bang for the buck” so to speak.<span class="Apple-converted-space"> </span></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
