<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="115311" data-post-id="115311">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-Nerves-Core-Team" data-username="ConnorRigby" data-post="11" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/connorrigby/48/5964_2.png" class="avatar"> ConnorRigby:</div>
<blockquote>
<p>These “configuration files” you are looking for don’t exist like you think they do. OS specific UI data isn’t stored in a config file. Its baked into the OS, and requires integration via C/C++ bindings usually.</p>
</blockquote>
</aside>
<p>Are you 100% sure? Of course there are lots of ways to save information about themes. I’m almost sure that without <code>C/C++/C#</code> or similar you will not be able to extract icons from <code>*.dll</code> files, but it’s not like that all things are written in <code>*.so</code> or binary files …</p>
<p>Take a look at this fragment:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">[Colors:Button]
BackgroundAlternate=77,77,77
BackgroundNormal=49,54,59
DecorationFocus=61,174,233
DecorationHover=61,174,233
ForegroundActive=61,174,233
ForegroundInactive=189,195,199
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=239,240,241
ForegroundPositive=39,174,96
ForegroundVisited=127,140,141
</code></pre>
<p>I found it in: <code>~/.kde4/share/apps/color-schemes/Breeze\ Dark.colors</code>. Also in <code>KDE/Plasma</code> and <code>GTK+</code> icons are not even in zip files, for example:<br>
<code>/usr/share/icons/breeze-dark/actions/32/window-close.svg</code></p>
<p>Looks like that <code>GTK+</code> have theme information in <code>CSS</code> files … well … there could be simpler option, but it’s not also that hard to parse it … At least there is no <code>NIF</code> needed:<br>
<code>/usr/share/themes/Breeze-Dark/gtk-3.20/gtk.css</code></p>
<p>I’m not sure how it looks like in <code>MacOS</code> and in <code>Windows</code> (in details) - it’s why I want someone to take literally <strong>full research</strong> - i.e. collect all information about vm and app theme files - their format, how to parse them, if <code>NIF</code> is required etc.</p>
<aside class="quote group-Nerves-Core-Team quote-modified" data-username="ConnorRigby" data-post="11" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/connorrigby/48/5964_2.png" class="avatar"> ConnorRigby:</div>
<blockquote>
<blockquote>
<p>Which now is done by <code>scenic</code> . In same way <code>scenic</code> is drawing in <code>OpenGL</code> button I want to have “advanced” button i.e. just more them options.</p>
</blockquote>
<p>This is what Scenic calls <code>primitives</code> . More can be added relatively easily to the Scenic source, but not externally via another lib.</p>
</blockquote>
</aside>
<p>If we are talking about button in this case it’s component:</p><aside class="onebox allowlistedgeneric" data-onebox-src="https://scenic.hexdocs.pm/Scenic.Component.Button.html">
  <header class="source">

      <a href="https://scenic.hexdocs.pm/Scenic.Component.Button.html" target="_blank" rel="noopener nofollow ugc">scenic.hexdocs.pm</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://scenic.hexdocs.pm/Scenic.Component.Button.html" target="_blank" rel="noopener nofollow ugc">Scenic.Component.Button — Scenic v0.11.2</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>Yeah, it could be hard to do it from 3rd-party library, so I would like to see <a class="mention" href="/u/boydm" rel="nofollow">@boydm</a> opinion on this. At end we can write a fork. I would strongly don’t like to, but it’s not like that all of what I have in mind is extremely hard to implement (just look about theme files - unlike what you said it’s pretty easy to use them without even need any <code>NIF</code>).</p>
<aside class="quote group-Nerves-Core-Team" data-username="ConnorRigby" data-post="11" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/connorrigby/48/5964_2.png" class="avatar"> ConnorRigby:</div>
<blockquote>
<p>again possible does not mean reasonable. This is why projects like GTK, WX, QT etc exist. You get the same behaviour on every platform, but not using native components.</p>
</blockquote>
</aside>
<p>Sorry, but I don’t want to wait for Windows 20 for such simple thing like <code>Alt</code> + mouse buttons to move/resize window quickly. If it’s possible to do awesome things which could work in any OS then it’s definitely reasonable - at least for me. I believe that <a class="mention" href="/u/overminddl1" rel="nofollow">@OvermindDL1</a> would agree as well.</p>
<aside class="quote group-Nerves-Core-Team" data-username="ConnorRigby" data-post="11" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/connorrigby/48/5964_2.png" class="avatar"> ConnorRigby:</div>
<blockquote>
<p>There is no such thing as “theme files” like you are describing. You must build an application that uses the native components as they were designed. IE <code>red-cross-right-corner.png</code> isn’t a thing that can just be looked up somewhere. You need to be in the framework it was designed in.</p>
</blockquote>
</aside>
<p>Well … maybe in some specific cases, but not on those I was looking for (<code>KDE/Plasma</code> and <code>GTK+</code>  as already described). Sometimes we have even <code>SVG</code> files with could be useful as well.</p>
<p>Also it’s not like that you need to understand all frameworks in the world. Sometimes you would need to write some <code>NIF</code>s, but it’s not like that whole world is build with binary blobs. <img src="https://forum.elixirforum.com/uploads/default/original/2X/2/20c9c52366de24191270f0b11311379ce60ac82d.gif?v=15" title=":077:" class="emoji emoji-custom" alt=":077:" loading="lazy" width="20" height="20"></p>
<p>Of course it’s not “5 min” easy work (it’s why I created this topic), but it would definitely give us a lot of flexibility which is always good if it’s not overcomplicated.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115311" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-115311" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115311"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="115312" data-post-id="115312">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ConnorRigby" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ConnorRigby/120/5964_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ConnorRigby
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Nerves Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Right, so you just want to reuse the static assets used to make up a UI framework, but code the logic in Elixir/Scenic? There’s no reason you couldn’t do that with Scenic how it is right now, although it would be way too much work in my opinion. You would basically be re-implementing all of a desktop environment’s native components at this point i feel like.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115312" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-115312" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115312"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="115313" data-post-id="115313">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>For sure I don’t want to re-implement each component from each desktop environment (loop in loop). Instead I want to standardize it i.e. without <code>GTKButton</code>, <code>KDE4Button</code>, <code>Plasma5Button</code>, <code>WindowsXPButton</code> etc. just use one <code>Button</code> and based on specified configuration fetch theme information about it and convert them to <code>Button</code> style.</p>
<ol>
<li>We start from <code>Component</code> or app setting</li>
<li>We are going to use (let’s call it) <code>ThemeManager</code> to apply its style</li>
<li><code>ThemeManager</code> is using <code>ThemeFetcher</code>
<ul>
<li>current theme - fetch info about current DE, its current theme and information about them</li>
<li>local theme (if available)</li>
<li>theme from repository (like <code>CD</code>/<code>DVD</code>/<code>USB</code> or <code>FTP/HTTP</code>)</li>
</ul>
</li>
<li><code>ThemeManager</code> is using <code>ThemeConverter</code></li>
<li><code>ThemeManager</code> returns style for <code>Component</code></li>
</ol>
<p>In extremely simplified (“5 min” example):</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">theme_raw = ThemeFetcher.from_from_repository(@url, "theme-name")
theme_data = ThemeConvert.to_scenic_styles(:gtk3, theme_raw)
button_style = ThemeManager.button_style([:default, :visited])

@graph_with_button Components.button(graph, style: button_style)
</code></pre>
<aside class="quote group-Nerves-Core-Team quote-modified" data-username="ConnorRigby" data-post="13" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/connorrigby/48/5964_2.png" class="avatar"> ConnorRigby:</div>
<blockquote>
<p>There’s no reason you couldn’t do that with Scenic how it is right now, (…)</p>
</blockquote>
</aside>
<p>I’m almost sure that <code>scenic</code> builtin style information is way too limited for now.</p>
<aside class="quote group-Nerves-Core-Team" data-username="ConnorRigby" data-post="13" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/connorrigby/48/5964_2.png" class="avatar"> ConnorRigby:</div>
<blockquote>
<p>although it would be way too much work in my opinion.</p>
</blockquote>
</aside>
<p>Yeah, it’s why I started to think about crowdfunding and place some job offers in order to split whole work. I’m sure that in such way we can change a lot. It’s just a matter of how much people is going to help.</p>
<aside class="quote group-Nerves-Core-Team" data-username="ConnorRigby" data-post="13" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/connorrigby/48/5964_2.png" class="avatar"> ConnorRigby:</div>
<blockquote>
<p>You would basically be re-implementing all of a desktop environment’s native components at this point i feel like.</p>
</blockquote>
</aside>
<p>Well … in <code>scenic</code> we are doing same, so it’s not a really big lose.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115313" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-115313" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115313"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="115525" data-post-id="115525">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="boydm" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/boydm/120/582_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  boydm
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Scenic</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hey guys. Sorry I’m late to the thread. I have GOT to remember to check this site more often.</p>
<p>Scenic is very strongly aimed at stand-alone devices and, as such, makes no attempt to fit into the stand OS component models. That is a conscious choice.</p>
<p>That doesn’t mean you couldn’t build a OS out of it, and that is effectively what you are doing when you use it in a stand-alone device. I’ve also got research code on compositing the UI from multiple apps together into a single screen, but that isn’t ready yet.</p>
<p>If any one wants to chat about this over the phone/video or whatever, ping me. I tend to pay more attention to twitter…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115525" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-115525" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115525"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="115540" data-post-id="115540">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="massimo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/120/5555_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  massimo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Eiji" data-post="14" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>For sure I don’t want to re-implement each component from each desktop environment (loop in loop). Instead I want to standardize it i.e. without <code>GTKButton</code> , <code>KDE4Button</code> , <code>Plasma5Button</code> , <code>WindowsXPButton</code> etc. just use one <code>Button</code> and based on specified configuration fetch theme information about it and convert them to <code>Button</code> style.</p>
</blockquote>
</aside>
<p>Take a look at <a href="http://erlang.org/doc/apps/wx/" rel="nofollow"><code>wx</code></a> bindings.</p>
<p>What you’re trying to achieve is a lot of work (with a very big <em>lot</em>) that could easily take years and cost a fortune, for no real benefit</p>
<p>I’ve done some research work on Scenic and am working on a series of posts (and maybe videos) on using it for game development.<br>
Simply keeping the layout coherent when resolution changes is close to a nightmare.</p>
<p>What Scenic brings to the table is a sane model for designing GUI applications that’s very natural in Elixir/Erlang development flow, but I think the effort of building a platform agnostic GUI framework with native looks is so big that would discourage the most passionate developer around.</p>
<p>Even though <a href="https://stumpwm.github.io/" rel="noopener nofollow ugc">things like this exist</a>…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115540" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-115540" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115540"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="115568" data-post-id="115568">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/boydm" rel="nofollow">@boydm</a> Basically I want to write some <code>scenic</code>-independent libraries which are looking for OS themes and rules (like <code>&lt;Alt&gt;</code> + mouse) and add support for them in <code>scenic</code>. So for example <code>Scenic.Component.Button</code> would accept map with much more than 3 fields in it. I have ~everything prepared in my mind. I just need someone to research in order to design correct structs which matches all cases (each OS/distribution/desktop environment features).</p>
<p>Except themes I would like to see some other changes (which at least I did not found in documentation) in <code>scenic</code> like <code>terminate/2</code> callback for <code>Scenic.Scene</code> (cleanup work - just like in <code>GenServer</code>) or state support (also like in <code>GenServer</code>). Other things would be new components like <code>Form</code> which by default would group inputs and save their values (using default <code>filter_event</code> implementation).</p>
<p>If you want I’m almost always available here and on <code>Slack</code>. As said I can describe everything in details on forum if somebody is interested.</p>
<aside class="quote no-group" data-username="massimo" data-post="16" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>Take a look at <code>wx</code> bindings.</p>
</blockquote>
</aside>
<p>Nope, it’s not good.</p>
<ol>
<li>I did not found any Erlang/Elixir code for tray icon support</li>
<li>I did not found any Erlang/Elixir code for OS notification support</li>
<li>Predefined components in all GUI libraries are not enough</li>
</ol>
<p>Just for example:</p><aside class="onebox stackexchange" data-onebox-src="https://stackoverflow.com/questions/27954830/c-gtkmm-3-headerbar-and-notebook-with-autohide-animation">
  <header class="source">

      <a href="https://stackoverflow.com/questions/27954830/c-gtkmm-3-headerbar-and-notebook-with-autohide-animation" target="_blank" rel="noopener nofollow ugc">stackoverflow.com</a>
  </header>

  <article class="onebox-body">
      <a href="https://stackoverflow.com/users/4455465/eiji" target="_blank" rel="noopener nofollow ugc">
    <img alt="Eiji" src="https://www.gravatar.com/avatar/a893453ed7716ac46f74490e39e751b3?s=256&amp;d=identicon&amp;r=PG&amp;f=y&amp;so-version=2" class="thumbnail onebox-avatar" width="256" height="256">
  </a>

<h4>
  <a href="https://stackoverflow.com/questions/27954830/c-gtkmm-3-headerbar-and-notebook-with-autohide-animation" target="_blank" rel="noopener nofollow ugc">C++ gtkmm 3 HeaderBar and Notebook with autohide animation</a>
</h4>

<div class="tags">
  <strong>c++, gtk, gtkmm</strong>
</div>

<div class="date">
  asked by
  
  <a href="https://stackoverflow.com/users/4455465/eiji" target="_blank" rel="noopener nofollow ugc">
    Eiji
  </a>
  on <a href="https://stackoverflow.com/questions/27954830/c-gtkmm-3-headerbar-and-notebook-with-autohide-animation" target="_blank" rel="noopener nofollow ugc">12:13AM - 15 Jan 15 UTC</a>
</div>

  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
<p>
Without custom <code>OpenGL</code> code everything is too limited for what I would like to have.</p>
<p>Even except those edge cases <code>wx</code> has nothing to my custom theme plans. I have asked about <code>scenic</code> just because it looks much better for me. Basically I would like to let end-user to decide which OS/distribution/desktop environment themes and behaviours he would like to have. It’s extremely important for example in <code>Windows</code> which adds <code>Linux</code>-like features after 20 years … Probably <code>&lt;Alt&gt;</code> + mouse would be there in <code>Windows 20</code>.</p>
<aside class="quote no-group" data-username="massimo" data-post="16" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>What you’re trying to achieve is a lot of work (with a very big <em>lot</em> ) that could easily take years and cost a fortune, for no real benefit</p>
</blockquote>
</aside>
<p>Time and money? Yes, same goes to <code>scenic</code> itself, but this not stops developers from doing new things, right? Well … we could forgot about designing any UI, because it takes too long, but I don’t see it like that.</p>
<p>Also maybe you like <code>Chrome</code> and system default settings and accept everything even in worst form just because someone else decides to have it working like that. Lots of people are really looking for lots of customization ways in OS/apps. It has a big value. Maybe not for everyone, but it has definitely benefits.</p>
<p>I saw lots of topics in other languages for all UI libraries which asks about drawing custom titlebar or similar things. Do you really want to force every developer to do it alone? That would be even more time and money lose.</p>
<aside class="quote no-group" data-username="massimo" data-post="16" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>I’ve done some research work on Scenic and am working on a series of posts (and maybe videos) on using it for game development.<br>
Simply keeping the layout coherent when resolution changes is close to a nightmare.</p>
</blockquote>
</aside>
<p>Well … <code>scenic</code> is not even in <code>1.0.0</code> version. We should not require from it everything. Sure there are lots of things to change, lots of new components to implement. It’s why I want to change that.</p>
<aside class="quote no-group" data-username="massimo" data-post="16" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>What Scenic brings to the table is a sane model for designing GUI applications that’s very natural in Elixir/Erlang development flow</p>
</blockquote>
</aside>
<p>Yeah and it’s why I prefer to do what I want in it rather than in <code>:wx</code>.</p>
<aside class="quote no-group" data-username="massimo" data-post="16" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>but I think the effort of building a platform agnostic GUI framework with native looks is so big that would discourage the most passionate developer around.</p>
</blockquote>
</aside>
<p>Nice to hear that I’m special at least in this case. <img src="https://forum.elixirforum.com/uploads/default/original/2X/2/20c9c52366de24191270f0b11311379ce60ac82d.gif?v=15" title=":077:" class="emoji emoji-custom" alt=":077:" loading="lazy" width="20" height="20"> It’s why I would like to place some job offers to not make too many work on one developer. I have even show a level of some example job offers I have in mind, so as you can see there is something for everyone which would definitely help.</p>
<aside class="quote no-group" data-username="massimo" data-post="16" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>Even though <code>things like this exist</code> …</p>
</blockquote>
</aside>
<p>Oh no … more themes and behaviours to scrape. <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115568" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-115568" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115568"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="115570" data-post-id="115570">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="massimo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/120/5555_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  massimo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Eiji" data-post="17" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Nope, it’s not good.</p>
</blockquote>
</aside>
<p>That was the point.</p>
<p>Despite the effort, the number of people involved and 27 years of non stop development, it still lacks some details, because they are really hard to get right.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115570" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-115570" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115570"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="115576" data-post-id="115576">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="massimo" data-post="18" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>That was the point.</p>
<p>Despite the effort, the number of people involved and 27 years of non stop development, it still lacks some details, because they are really hard to get right.</p>
</blockquote>
</aside>
<p>Nope, I mean something else. Every GUI library is creating its own themes. Some of them allow to change them (if I remember correctly GTK+ apps could do that), but it has nothing to do with current OS theme and themes in different GUI library. It’s not like that in 27 years nobody worked on it - it’s like nobody even think about that.</p>
<p>Look what happens on <code>Windows</code> - everyone just assume that there is no way for easy custom themes and antivirus developers just draw them on their own. It’s because there is no easy option to (for example) add tabs to titlebar. There are lots of apps which are forced to write their own UI engines just because there is no such API. Again take a look at antiviruses, most popular browsers and much more apps. After that say that nobody would use that.</p>
<p>This is something like politics … everyone wants to have good politics, but also everyone know that there are no good politics, so nobody even think about good ones.</p>
<p>The solution here is to introduce something to change that rather than leave all developers alone and force them to work on <code>OpenGL</code> on their own.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115576" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-115576" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115576"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="115580" data-post-id="115580">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="massimo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/120/5555_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  massimo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Eiji" data-post="19" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>The solution here is to introduce something to change that</p>
</blockquote>
</aside>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/0/0b054978132920c4e37a85eff9e416c22919600f.png" data-download-href="https://forum.elixirforum.com/uploads/default/0b054978132920c4e37a85eff9e416c22919600f" title="image" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/0/0b054978132920c4e37a85eff9e416c22919600f.png" alt="image" data-base62-sha1="1zuzVzZpNUCS1imEAaJeGts395J" width="500" height="283"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">image</span><span class="informations">500×283 22.6 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<p>besides, Elixir developers are a small fraction of the total.<br>
Not being able to expose the library to C (or C++) won’t take you very far.<br>
It is already possible to call OpenGL in those systems, it’s been for years.</p>
<p>Have you seen <a href="https://github.com/wjakob/nanogui" rel="noopener nofollow ugc">nanogui</a> for example?</p>
<p>But it could be interesting to have a set of components for Scenic to use in custom GUIs on embedded devices.<br>
I would start from scrollable content panels, for example.<br>
Or texboxes that automatically wrap text.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115580" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-115580" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115580"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="115586" data-post-id="115586">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/massimo" rel="nofollow">@massimo</a> I 100% agree with this image. However the world is not written in just one rule. There are always lots of edge cases and I believe we are already in such situation.</p>
<p>First of all we have 2 good UI libraries in Erlang/Elixir I know (<code>:wx</code> and <code>scenic</code>). We already quoted why <code>scenic</code> is better. In first place I would like to extend <code>scenic</code> and do fork only if <a class="mention" href="/u/boydm" rel="nofollow">@boydm</a> would say something like:</p>
<blockquote>
<p>I see what you want to do, but it’s not how scenic would be developed.</p>
</blockquote>
<p>With is 2nd type of edge case for this image.</p>
<p>Secondly “standards” here are themes. I don’t want to write one more standard for them (like different config file with different properties). Instead I want to allow <code>scenic</code> (actually developed standard - not new one) look like other standards. Please notice that I do not want to add feature like:</p>
<blockquote>
<p>new standard keyboard shorcut for <code>scenic</code>-based apps</p>
</blockquote>
<p>I just want to read how other standards are configured and make existing (again <code>scenic</code>) standard use them.</p>
<p>This means that instead: <code>~/.local/share/scenic/themes/theme-name</code> I want to have <code>~/.my_app/ui_config</code> with example content:</p>
<pre><code class="lang-plaintext">[UI]
Local=true
Name=oxygen-gtk
Path=/path/to/theme
Type=gtk3

# or
[UI]
Local=false
Name=oxygen-gtk
Path=(ftp|http|https)://domain.name:port/path
Type=gtk3
</code></pre>
<aside class="quote no-group" data-username="massimo" data-post="20" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>besides, Elixir developers are a small fraction of the total.</p>
</blockquote>
</aside>
<p>Yup, but not all works as good as <code>scenic</code> in <code>Elixir</code>, so other libraries does not matters for us.</p>
<aside class="quote no-group" data-username="massimo" data-post="20" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>Not being able to expose the library to C (or C++) won’t take you very far.</p>
</blockquote>
</aside>
<p>I don’t want to. I’m Elixir developer and I don’t have any benefit with exporting library API to any other language. The only discussion here could be support for other <code>BEAM</code> languages. I just want to write well configurable apps in <code>Elixir</code> - I was never talking about other languages. I tried to do similar things (like custom titlebar) in other languages and GUI libraries.</p>
<aside class="quote no-group" data-username="massimo" data-post="20" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>Have you seen <a href="https://github.com/wjakob/nanogui" rel="noopener nofollow ugc">nanogui</a> for example?</p>
</blockquote>
</aside>
<p>Great, another standard to scrape theme <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"><br>
It’s written in <code>C++</code>, so it’s not what I’m looking for. Again I would like to extend <code>scenic</code> library.</p>
<aside class="quote no-group" data-username="massimo" data-post="20" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>But it could be interesting to have a set of components for Scenic to use in custom GUIs on embedded devices.</p>
</blockquote>
</aside>
<p>On embedded devices there is only matter of themes and components. Look that desktop app have usually more features like global shortcuts. I don’t see full desktop-like GUI with mouse support on small displays, but most probably somebody already made it. <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="massimo" data-post="20" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>I would start from scrollable content panels, for example.</p>
</blockquote>
</aside>
<p>Yeah, I’m thinking about it too as part of this topic.</p>
<aside class="quote no-group" data-username="massimo" data-post="20" data-topic="19983">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>Or texboxes that automatically wrap text.</p>
</blockquote>
</aside>
<p>Definitely, it’s one of components I would personally require for apps I want to write.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="115586" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/how-about-crowdfunding-for-scenic-based-libraries-projects/19983/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-115586" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="115586"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/19983/load_more?page=3">Load more posts (24 remaining)</a>
</div></template></turbo-stream>