<?xml version="1.0"?>
<rss version="2.0"><channel><title>Support Latest Topics</title><link>https://community.ugfx.io/forum/9-support/</link><description>Support Latest Topics</description><language>en</language><item><title>Wizz Air Headquarters: Supporting Global Aviation Excellence</title><link>https://community.ugfx.io/topic/5607-wizz-air-headquarters-supporting-global-aviation-excellence/</link><description><![CDATA[<h3>
	 
</h3>

<p>
	The <strong><a href="https://flyofficedesk.com/wizz-air/wizz-air-head-office/" rel="external nofollow">Wizz Air Headquarters</a></strong> is an important part of the airline’s success and expansion within the aviation industry. As the central administrative office, it oversees operational planning, route development, customer experience initiatives, and corporate management. The headquarters is instrumental in maintaining service quality while supporting the airline’s mission of providing affordable travel options. Passengers often look for information about the headquarters when seeking details regarding corporate services, policies, and airline operations. Through effective leadership and strategic planning, the office contributes significantly to the airline’s growth and efficiency. Its role in coordinating various departments ensures a streamlined approach to delivering dependable and accessible air travel services.
</p>
]]></description><guid isPermaLink="false">5607</guid><pubDate>Mon, 15 Jun 2026 04:47:23 +0000</pubDate></item><item><title>Selective Custom Fonts</title><link>https://community.ugfx.io/topic/5605-selective-custom-fonts/</link><description><![CDATA[<p>
	Hi Joel,
</p>

<p>
	it's been awhile now since I have used uGFX so can you refresh my memory as to whether one can pick inividual characters rather than a range using Font Converter?
</p>

<p>
	I thought it was possible once upon a time but my memory isn't that good these days!
</p>

<p>
	It's a shame that uGFX Studio isn't generally available either as it used to save so much time designing a screen layout for text!
</p>
]]></description><guid isPermaLink="false">5605</guid><pubDate>Sun, 10 May 2026 16:30:09 +0000</pubDate></item><item><title>Link to Git repo returns 503</title><link>https://community.ugfx.io/topic/5568-link-to-git-repo-returns-503/</link><description><![CDATA[<p>
	It seems like the Git repo is down and when trying to clone from <a href="https://git.ugfx.io/ugfx/ugfx.git" rel="external nofollow">https://git.ugfx.io/ugfx/ugfx.git</a> I just get a 503 error. This has been happening for at least 2 weeks now. Is there a new location or is it actually down right now?
</p>
]]></description><guid isPermaLink="false">5568</guid><pubDate>Thu, 16 Oct 2025 16:20:28 +0000</pubDate></item><item><title>STM32H7 with LTDC</title><link>https://community.ugfx.io/topic/4407-stm32h7-with-ltdc/</link><description><![CDATA[<p>
	Dear community,
</p>

<p>
	we are using a LTDC graphics driver on STM32H7 microcontroller and use configuration and initialization in the attached.
</p>

<p>
	We are using RGB565 mode.
</p>

<p>
	We find the display is working properly.
</p>

<p>
	However, we would like to try using graphics accelerations, particularly those provided by the fillarea() function
</p>

<p>
	<br />
	However, it is not clear to us at the configuration level how to enable them.
</p>

<p>
	Trying to trace back to the whole definition level it seems to us that this define is the one that can enable hardware accelerations but adding it to the configuration returns us error.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">#define GDISP_DRIVER_LIST GDISPVMT_STM32LTDC</span></pre>

<p>
	Can you give us any guidance on this?
</p>

<p>
	Best regards
</p>

<p>
	 
</p>

<p>
	F.
</p>
<p>
<a class="ipsAttachLink" href="https://community.ugfx.io/applications/core/interface/file/attachment.php?id=1309&amp;key=41e95fa960cacfa44210c726300b0fe1" data-fileExt='ZIP' data-fileid='1309' data-filekey='41e95fa960cacfa44210c726300b0fe1'>STM32LTDC.ZIP</a> 
<a class="ipsAttachLink" href="https://community.ugfx.io/applications/core/interface/file/attachment.php?id=1310&amp;key=227d0d0120904a433370634c5e4be333" data-fileExt='h' data-fileid='1310' data-filekey='227d0d0120904a433370634c5e4be333'>gfxconf.h</a></p>]]></description><guid isPermaLink="false">4407</guid><pubDate>Fri, 13 Sep 2024 09:18:21 +0000</pubDate></item><item><title>UGFX on AM64x baremetal</title><link>https://community.ugfx.io/topic/5569-ugfx-on-am64x-baremetal/</link><description><![CDATA[<p>
	Dear Team,
</p>

<p>
	How can i use the UGFX library on AM64x without any OS (baremetal)?
</p>

<p>
	Thanks 
</p>

<p>
	Shankar
</p>
]]></description><guid isPermaLink="false">5569</guid><pubDate>Tue, 21 Oct 2025 14:37:47 +0000</pubDate></item><item><title>uGFX on ESP-IDF</title><link>https://community.ugfx.io/topic/5559-ugfx-on-esp-idf/</link><description><![CDATA[<p>
	I want to use uGFX as a graphics library for drawing things like lines and rectangles on my ESP32.
</p>

<p>
	I have tried to follow everything in this thread: <a href="https://community.ugfx.io/topic/4345-ugfx-port-for-esp32-and-esp-idf" rel="">https://community.ugfx.io/topic/4345-ugfx-port-for-esp32-and-esp-idf</a>
</p>

<p>
	 
</p>

<p>
	But no matter what I try, I always get compilation errors about header files not being found or things being undefined.
</p>

<p>
	I would appreciate if there was an example project or a wiki somewhere about running this on ESP32 microcontrollers.
</p>

<p>
	Thanks!
</p>
]]></description><guid isPermaLink="false">5559</guid><pubDate>Sun, 05 Oct 2025 10:47:26 +0000</pubDate></item><item><title>Why is the resulting circle defective?</title><link>https://community.ugfx.io/topic/5197-why-is-the-resulting-circle-defective/</link><description><![CDATA[<p>
	<span style="background-color:#f7f7f7;color:#111111;font-size:28px;">Here's my code: gdispGFillCircle(g, 120, 120, 30, HTML2COLOR(0xFF8D1A));</span>
</p>

<p>
	<span style="background-color:#f7f7f7;color:#111111;font-size:28px;">And Anti-aliasing is turned on.    #define GDISP_NEED_ANTIALIAS                     GFXON</span>
</p>

<p>
	 
</p>

<p><a href="https://community.ugfx.io/uploads/monthly_2025_06/_20250603161940.jpg.09b5fdf043e98f47e80f42fa8c9000a5.jpg" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="1331" src="https://community.ugfx.io/uploads/monthly_2025_06/_20250603161940.thumb.jpg.6475f1b7b4194c057d799b50c18108b8.jpg" data-ratio="133.21" width="563" class="ipsImage ipsImage_thumbnailed" alt="微信图片_20250603161940.jpg"></a></p>]]></description><guid isPermaLink="false">5197</guid><pubDate>Tue, 03 Jun 2025 08:25:39 +0000</pubDate></item><item><title>Problems with PNG image display</title><link>https://community.ugfx.io/topic/5227-problems-with-png-image-display/</link><description><![CDATA[<p>
	<span style="background-color:#f7f7f7;color:#111111;font-size:18px;">I want to display an 18*18 png image, but I can't display it, and when I debug, I found that I need to apply 36k heap memory to decode using the png decoder, where sizesizeof(PNG_decode) requires 35k, and my image data only needs 154 bytes of memory. This situation makes my MCU unable to display png images, how can I fix it?</span>
</p>

<p><a href="https://community.ugfx.io/uploads/monthly_2025_06/5F88B720-5539-4221-A333-5BC7B7EEF37D.png.ec27de4ffdb0ae27e4f13127bcce43ed.png" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="1334" src="https://community.ugfx.io/uploads/monthly_2025_06/5F88B720-5539-4221-A333-5BC7B7EEF37D.thumb.png.a2288f2825264e5a3ea1809398008165.png" data-ratio="41.8" width="1000" class="ipsImage ipsImage_thumbnailed" alt="5F88B720-5539-4221-A333-5BC7B7EEF37D.png"></a></p>]]></description><guid isPermaLink="false">5227</guid><pubDate>Fri, 06 Jun 2025 10:14:22 +0000</pubDate></item><item><title>Compiling problem with Pixelmap on CubeIDE</title><link>https://community.ugfx.io/topic/5064-compiling-problem-with-pixelmap-on-cubeide/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	we are using version 2.9 of the uGFX library compiled with single file inclusion in STM32's CubeIDE.
</p>

<p>
	We would like to use <a href="https://wiki.ugfx.io/index.php/Pixmaps" rel="external nofollow">Pixelmap</a>. As stated in the wiki, the inclusion of this library does not work in ‘<a href="https://wiki.ugfx.io/index.php/Pixmaps" rel="external nofollow">single file inclusion</a>’ which is the mode we have been using.
</p>

<p>
	Is there a clear procedure explaining how to use the Makefile with our IDE, or is there an uGFX update available that solves this problem?
</p>

<p>
	Alternatively, I would like to ask if there is a method to implement the use of a virtual frame buffer, as I understand that the Pixelmap serves to this purpose.
</p>

<p>
	Thank you
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">5064</guid><pubDate>Tue, 13 May 2025 12:06:43 +0000</pubDate></item><item><title>The screen is redrawn more than once</title><link>https://community.ugfx.io/topic/4782-the-screen-is-redrawn-more-than-once/</link><description><![CDATA[<p>
	Hello!<br />
	I recorded a video The screen is redrawn more than once. I did not find the reason for this phenomenon quickly. I need help.<br />
	When uGFX is initialized, screen elements are formed in the usual way, nothing extra.<br />
	At the beginning, when you press the button, the screen with the button is hidden and a function is called that makes the screen with TabSet visible.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">    case GEVENT_GWIN_BUTTON:            ///(GEVENT_GWIN_CTRL_FIRST+0)
        if (((GEventGWinButton*)pe)-&gt;gwin == mainProductButton) {
            gwinHide(mainContainer);
            _ghActiveScreen = productScreenShow();
        }</span></pre>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">GHandle productScreenShow(void)
{
    productScreenUpdate();
    gwinShow(prodTabset);
    return prodTabset;
}</span></pre>

<p>
	Clicking on tabs only causes one screen repaint. See video.
</p>

<p>
	When returning to the previous screen, it is redrawn twice.
</p>

<p>
	I set a breakpoint on the gwinTabsetDraw_Std function and got this call stack:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="1325" data-ratio="87.56" width="201" alt="image.png.4fcc421d17f145a7122542e16d7013f8.png" src="https://community.ugfx.io/uploads/monthly_2025_03/image.png.4fcc421d17f145a7122542e16d7013f8.png" />
</p>

<p>
	What should be done to make the screen redrawn once?
</p>

<video controls class="ipsEmbeddedVideo" data-fileid="1324" data-controller="core.global.core.embeddedvideo">
	<source src="https://community.ugfx.io/uploads/monthly_2025_03/Thescreenisredrawnmorethanonce.mp4.23d4f3986242b47d3c3e7c34a42bb867.mp4" type="video/mp4">
	<a class="ipsAttachLink" href="//community.ugfx.io/applications/core/interface/file/attachment.php?id=1324&amp;key=ec3a1f39938e838cd3178a755da12921">The screen is redrawn more than once.mp4</a>
</video>]]></description><guid isPermaLink="false">4782</guid><pubDate>Mon, 10 Mar 2025 12:55:41 +0000</pubDate></item><item><title>Screen not rendering properly - stmH7 + ChibiOS + LTDC</title><link>https://community.ugfx.io/topic/4951-screen-not-rendering-properly-stmh7-chibios-ltdc/</link><description><![CDATA[<p>
	Hello,
</p>

<p>
	I'm currently implementing uGFX on a STM32H743iit6 with an 1024x600 screen via LTDC (rgb565). I'm running in some problems where the code from below doesn't render properly.
</p>

<p>
	What could be the cause?
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">#include "ch.h"
#include "hal.h"
#include "gfx.h"
#include "gfx_thread.h"

GListener glistener;

static THD_WORKING_AREA(waGUI, 512);
static THD_FUNCTION(GUIThread, arg) {
    (void)arg;
    gfxInit();
    geventListenerInit(&amp;glistener);
    gwinAttachListener(&amp;glistener);

    const font_t font = gdispOpenFont("DEJAVUSANS10");
    GDisplay * g = gdispGetDisplay(0);
    gCoord width, height;
    width = 512;
    height = 300;

    while (true) {
        chThdSleepMilliseconds(1500);
        gdispClear(Black);
        gdispDrawString(10, 10, "Hello, uGFX with ChibiOS!", font, White);
        chThdSleepMilliseconds(1500);
        gdispDrawCircle(g, (width, height), 150, Yellow);
    }
}

void startGFX(void)
{
    chThdCreateStatic(waGUI, sizeof(waGUI), NORMALPRIO, GUIThread, NULL);
}</span></pre>

<p>
	Like seen in the picture the font is disorted and the circle isn't drawn in the center of the screen, however the Y axis seems to be ok?
</p>

<p>
	 
</p>

<p><a href="https://community.ugfx.io/uploads/monthly_2025_04/IMG20250407191606.jpg.a1fdeb53bc806b3d8ac0679801dd171f.jpg" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="1326" src="https://community.ugfx.io/uploads/monthly_2025_04/IMG20250407191606.thumb.jpg.d5328dd238e86c039aaf9f49e7f41d61.jpg" data-ratio="133.21" width="563" class="ipsImage ipsImage_thumbnailed" alt="IMG20250407191606.jpg"></a></p>]]></description><guid isPermaLink="false">4951</guid><pubDate>Mon, 07 Apr 2025 17:24:16 +0000</pubDate></item><item><title>Problem redrawing parent containers</title><link>https://community.ugfx.io/topic/4430-problem-redrawing-parent-containers/</link><description><![CDATA[<p>
	 Hello,
</p>

<p>
	I am experiencing an anomaly involving containers and I wanted to understand if it is an intentional thing or it happens due to my settings/programming.
</p>

<p>
	I have a menu cotainer declared as follow:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">	
void createWidgetsMenuTST(GDisplay* _display1)
{

GWidgetInit wi;
gwinWidgetClearInit(&amp;wi);

wi.g.show = FALSE;
wi.g.width = 800;
wi.g.height = 480;
wi.g.y = 0;
wi.g.x = 0;
wi.customStyle = &amp;MyCustomStyleContainerTST;
ghContainerTST = gwinGContainerCreate(_display1 , 0,&amp;wi,0);</span></pre>

<p>
	 
</p>

<p>
	<span lang="en-us" xml:lang="en-us">I have a second container that contains buttons, like it was a keyboard and I want to make the keyboard and all the buttons in it disappear/appear.</span>
</p>

<p>
	<span lang="en-us" xml:lang="en-us">To do this I use the gwinHide and gwinShow methods</span>
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">void createWidgetsKeyboard(GDisplay* _displayToUse)
{

GWidgetInit wi;

gwinWidgetClearInit(&amp;wi);

wi.g.show = FALSE;
wi.g.width = 799;
wi.g.height = 279;
wi.g.y = 200;
wi.g.x = 0;
wi.g.parent = ghContainerTST;
wi.customStyle = 0;
wi.customDraw = ContainerCustomDrawKeyboard;

ghContainerNumericKeyboard = gwinGContainerCreate(_displayToUse , 0,&amp;wi,0);


gwinWidgetClearInit(&amp;wi);


wi.g.show = TRUE;
wi.g.width = 124;
wi.g.height = 124;
wi.g.y = 11; 
wi.g.x = 15;
wi.text = "1";

wi.g.parent = ghContainerNumericKeyboard;

wi.customParam = 1;

wi.customDraw = gwinButtonKeyboardDraw_Rounded;

ghButtonKey[0] = gwinButtonCreate(NULL, &amp;wi);


gwinWidgetClearInit(&amp;wi);</span></pre>

<p>
	 
</p>

<p>
	<span lang="en-us" xml:lang="en-us">What happens to me is that when I call the gwinHide functions and specify ghContainerNumericKeyboard as parameter i get that also the main container (ghContainerTST) is alswo redraw. </span>
</p>

<p>
	<span lang="en-us" xml:lang="en-us">  I think the problem is in function <b>void</b> <b>WM_Redraw</b>(GHandle gh) inside "gwin_wm.c" </span>
</p>

<p>
	<span lang="en-us" xml:lang="en-us">  In particular i think that the redraw is done by gdispGFillArea function called on the "else" statement. </span>
</p>

<p>
	<span lang="en-us" xml:lang="en-us">  I don't quite understand if it is avoidable this thing of redrawing containers of containers for example by editing the configuration file or if there are other ways to avoid it </span>
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">static void WM_Redraw(GHandle gh) {

gU32 flags;


flags = gh-&gt;flags;

gh-&gt;flags &amp;= ~(GWIN_FLG_NEEDREDRAW|GWIN_FLG_BGREDRAW|GWIN_FLG_PARENTREVEAL);


#if GWIN_NEED_CONTAINERS

redo_redraw:

#endif

if ((flags &amp; GWIN_FLG_SYSVISIBLE)) {

if (gh-&gt;vmt-&gt;Redraw)

gh-&gt;vmt-&gt;Redraw(gh);

else if ((flags &amp; GWIN_FLG_BGREDRAW)) {

// We can't redraw but we want full coverage so just clear the area

gdispGFillArea(gh-&gt;display, gh-&gt;x, gh-&gt;y, gh-&gt;width, gh-&gt;height, gh-&gt;bgcolor);


// Only do an after clear if this is not a parent reveal

if (!(flags &amp; GWIN_FLG_PARENTREVEAL) &amp;&amp; gh-&gt;vmt-&gt;AfterClear)

gh-&gt;vmt-&gt;AfterClear(gh);

}


#if GWIN_NEED_CONTAINERS

// If this is container but not a parent reveal, mark any visible children for redraw

// We redraw our children here as we have overwritten them in redrawing the parent

// as GDISP/GWIN doesn't support complex clipping regions.

if ((flags &amp; (GWIN_FLG_CONTAINER|GWIN_FLG_PARENTREVEAL)) == GWIN_FLG_CONTAINER) {


// Container redraw is done


for(gh = gwinGetFirstChild(gh); gh; gh = gwinGetSibling(gh))

_gwinUpdate(gh);

return;

}

#endif


} else {

if ((flags &amp; GWIN_FLG_BGREDRAW)) {

GHandle gx;


#if GWIN_NEED_CONTAINERS

if (gh-&gt;parent) {

// Child redraw is done


// Get the parent to redraw the area

gh = gh-&gt;parent;


// The parent is already marked for redraw - don't do it now.

if ((gh-&gt;flags &amp; GWIN_FLG_NEEDREDRAW))

return;


// Use the existing clipping region and redraw now

gh-&gt;flags |= (GWIN_FLG_BGREDRAW|GWIN_FLG_PARENTREVEAL);

goto redo_redraw;

}

#endif


// Clear the area to the background color

gdispGFillArea(gh-&gt;display, gh-&gt;x, gh-&gt;y, gh-&gt;width, gh-&gt;height, gwinGetDefaultBgColor());


// Now loop over all windows looking for overlaps. Redraw them if they overlap the newly exposed area.

for(gx = gwinGetNextWindow(0); gx; gx = gwinGetNextWindow(gx)) {

if ((gx-&gt;flags &amp; GWIN_FLG_SYSVISIBLE)

&amp;&amp; gx-&gt;display == gh-&gt;display

&amp;&amp; gx-&gt;x &lt; gh-&gt;x+gh-&gt;width &amp;&amp; gx-&gt;y &lt; gh-&gt;y+gh-&gt;height &amp;&amp; gx-&gt;x+gx-&gt;width &gt;= gh-&gt;x &amp;&amp; gx-&gt;y+gx-&gt;height &gt;= gh-&gt;y) {

if (gx-&gt;vmt-&gt;Redraw)

gx-&gt;vmt-&gt;Redraw(gx);

else

// We can't redraw this window but we want full coverage so just clear the area

gdispGFillArea(gx-&gt;display, gx-&gt;x, gx-&gt;y, gx-&gt;width, gx-&gt;height, gx-&gt;bgcolor);

}

}


}

}

}

			 </span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">4430</guid><pubDate>Tue, 05 Nov 2024 11:54:05 +0000</pubDate></item><item><title>Change the on-screen keyboard language from English to some other language</title><link>https://community.ugfx.io/topic/4449-change-the-on-screen-keyboard-language-from-english-to-some-other-language/</link><description><![CDATA[<p>
	I would like to know if there is such an option to change the on-screen keyboard layout language? I would like to change it to my own language. If so, do I need to change the library files? Could you please tell me how to do it?
</p>
]]></description><guid isPermaLink="false">4449</guid><pubDate>Mon, 16 Dec 2024 12:00:55 +0000</pubDate></item><item><title>Pin configuration for ILI9341 on Arduino</title><link>https://community.ugfx.io/topic/4645-pin-configuration-for-ili9341-on-arduino/</link><description><![CDATA[<p>
	Hello there!
</p>

<p>
	I am fairly new to uGFX and would like to prototype on my Arduino Portenta H7 (or other arduino variants). However I am having trouble with how to define the pin layout for my external ILI9341 display. 
</p>

<p>
	According to the github project example (<a href="https://github.com/crteensy/ugfx-arduino" rel="external nofollow">GitHub - crteensy/ugfx-arduino: How to use ugfx in arduino. Libraries and example sketch</a>), there is a .cpp file which defines the pins for the SSD1351. should I also do this for my project, or can I just define them within the INO script. obviously here I am using Arduino IDE. 
</p>

<p>
	I am aware that the Portenta H7 runs MBedOS, which cuurently isn't supported by uGFX, so I am happy to switch to another board if needed, I just need to get these Pins working! 
</p>

<p>
	Kind Regards
</p>

<p>
	FT
</p>
]]></description><guid isPermaLink="false">4645</guid><pubDate>Fri, 14 Feb 2025 11:50:18 +0000</pubDate></item><item><title>optimizing gdisp_lld_ILI9341 for STM32 SPI DMA</title><link>https://community.ugfx.io/topic/1095-optimizing-gdisp_lld_ili9341-for-stm32-spi-dma/</link><description><![CDATA[<p>
	I tried uGfx but its to slow. I started to optimize the ili9341 lld. i switched spi to 16bit, wrote functions for Hardware clear, fill &amp; bitfills with DMA. Speed is fine now.
</p>

<p>
	Had a hard time to initialize the lcd with 16bit spi. Now i init the lcd with 8bit spi and switch to 16bit after init is done.
</p>

<p>
	Now i want to try to read back from display, how can i test? What else could be done to speed things up?
</p>

<p>
	Thanks for your uGFX.
</p>
]]></description><guid isPermaLink="false">1095</guid><pubDate>Thu, 22 Nov 2018 19:07:08 +0000</pubDate></item><item><title>Test routine "PushButton". Need help...</title><link>https://community.ugfx.io/topic/4447-test-routine-pushbutton-need-help/</link><description><![CDATA[<p>
	Good day to all!!
</p>

<p>
	I am continuing my study of uGFX very slowly. Next stuff - widgets...
</p>

<p>
	To understand the work, I took an example from \ugfx_2.9\demos\modules\gwin\button. I added the missing, in my opinion, function calls: ginputCalibrateMouse(),  geventAttachSource(); Now the code looks like this:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted"><span class="com">#include</span><span class="pln"> </span><span class="str">"gfx.h"</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;string.h&gt;</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;stm32f10x.h&gt;</span><span class="pln">

</span><span class="com">#include</span><span class="pln"> </span><span class="str">"uGFX/gdriver/gdriver.h"</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">"uGFX/ginput/ginput_driver_mouse.h"</span><span class="pln">

</span><span class="kwd">static</span><span class="pln"> </span><span class="typ">GListener</span><span class="pln"> gl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">static</span><span class="pln"> </span><span class="typ">GHandle</span><span class="pln">   ghButton1</span><span class="pun">;</span><span class="pln">
 
</span><span class="kwd">static</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> createWidgets</span><span class="pun">(</span><span class="kwd">void</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
	</span><span class="typ">GWidgetInit</span><span class="pln">	wi</span><span class="pun">;</span><span class="pln">
 
	</span><span class="com">// Apply some default values for GWIN</span><span class="pln">
	gwinWidgetClearInit</span><span class="pun">(&amp;</span><span class="pln">wi</span><span class="pun">);</span><span class="pln">
	wi</span><span class="pun">.</span><span class="pln">g</span><span class="pun">.</span><span class="pln">show </span><span class="pun">=</span><span class="pln"> TRUE</span><span class="pun">;</span><span class="pln">
 
	</span><span class="com">// Apply the button parameters	</span><span class="pln">
	wi</span><span class="pun">.</span><span class="pln">g</span><span class="pun">.</span><span class="pln">width </span><span class="pun">=</span><span class="pln"> </span><span class="lit">100</span><span class="pun">;</span><span class="pln">
	wi</span><span class="pun">.</span><span class="pln">g</span><span class="pun">.</span><span class="pln">height </span><span class="pun">=</span><span class="pln"> </span><span class="lit">30</span><span class="pun">;</span><span class="pln">
	wi</span><span class="pun">.</span><span class="pln">g</span><span class="pun">.</span><span class="pln">y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">100</span><span class="pun">;</span><span class="pln">
	wi</span><span class="pun">.</span><span class="pln">g</span><span class="pun">.</span><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">100</span><span class="pun">;</span><span class="pln">
	wi</span><span class="pun">.</span><span class="pln">text </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Push Button"</span><span class="pun">;</span><span class="pln">
 
	</span><span class="com">// Create the actual button</span><span class="pln">
	ghButton1 </span><span class="pun">=</span><span class="pln"> gwinButtonCreate</span><span class="pun">(</span><span class="pln">NULL</span><span class="pun">,</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln">wi</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">


</span><span class="typ">int</span><span class="pln"> main</span><span class="pun">(</span><span class="kwd">void</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
	</span><span class="typ">GEvent</span><span class="pun">*</span><span class="pln"> pe</span><span class="pun">;</span><span class="pln">
        </span><span class="typ">GMouse</span><span class="pln"> </span><span class="pun">*</span><span class="pln">			m</span><span class="pun">;</span><span class="pln">
        </span><span class="typ">GSourceHandle</span><span class="pln">			gs</span><span class="pun">;</span><span class="pln">
</span><span class="com">// =========== Timer setup block ==================</span><span class="pln">
  </span><span class="typ">SystemCoreClockUpdate</span><span class="pun">();</span><span class="pln">
  </span><span class="typ">SysTick_Config</span><span class="pun">(</span><span class="typ">SystemCoreClock</span><span class="pln"> </span><span class="pun">/</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
</span><span class="com">//=================================================</span><span class="pln">
	</span><span class="com">// Initialize the display</span><span class="pln">
	gfxInit</span><span class="pun">();</span><span class="pln">
 
        m </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="typ">GMouse</span><span class="pln"> </span><span class="pun">*)</span><span class="pln">gdriverGetInstance</span><span class="pun">(</span><span class="pln">GDRIVER_TYPE_MOUSE</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  </span><span class="com">// === Added by me ======</span><span class="pln">
       		 ginputCalibrateMouse</span><span class="pun">(</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  </span><span class="com">// ======================</span><span class="pln">
        gs </span><span class="pun">=</span><span class="pln"> ginputGetMouse</span><span class="pun">(</span><span class="lit">0</span><span class="pun">);</span><span class="pln">

        </span><span class="com">// Set the widget defaults</span><span class="pln">
	gwinSetDefaultFont</span><span class="pun">(</span><span class="pln">gdispOpenFont</span><span class="pun">(</span><span class="str">"UI2"</span><span class="pun">));</span><span class="pln">
	gwinSetDefaultStyle</span><span class="pun">(&amp;</span><span class="typ">WhiteWidgetStyle</span><span class="pun">,</span><span class="pln"> FALSE</span><span class="pun">);</span><span class="pln">
	gdispClear</span><span class="pun">(</span><span class="typ">White</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// create the widget</span><span class="pln">
	createWidgets</span><span class="pun">();</span><span class="pln">
	
 
	</span><span class="com">// We want to listen for widget events</span><span class="pln">
	geventListenerInit</span><span class="pun">(&amp;</span><span class="pln">gl</span><span class="pun">);</span><span class="pln">
   </span><span class="com">// === Added by me ======</span><span class="pln">
        geventAttachSource</span><span class="pun">(&amp;</span><span class="pln">gl</span><span class="pun">,</span><span class="pln"> gs</span><span class="pun">,</span><span class="pln"> GLISTEN_MOUSEMETA </span><span class="pun">|</span><span class="pln"> GLISTEN_TOUCHMETA</span><span class="pun">);</span><span class="pln">
   </span><span class="com">// ======================</span><span class="pln">
	gwinAttachListener</span><span class="pun">(&amp;</span><span class="pln">gl</span><span class="pun">);</span><span class="pln">
 
	</span><span class="kwd">while</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
		</span><span class="com">// Get an Event</span><span class="pln">
		pe </span><span class="pun">=</span><span class="pln"> geventEventWait</span><span class="pun">(&amp;</span><span class="pln">gl</span><span class="pun">,</span><span class="pln"> TIME_INFINITE</span><span class="pun">);</span><span class="pln">
 
		</span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">pe</span><span class="pun">-&gt;</span><span class="pln">type</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
			</span><span class="kwd">case</span><span class="pln"> GEVENT_GWIN_BUTTON</span><span class="pun">:</span><span class="pln">
				</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(((</span><span class="typ">GEventGWinButton</span><span class="pun">*)</span><span class="pln">pe</span><span class="pun">)-&gt;</span><span class="pln">gwin </span><span class="pun">==</span><span class="pln"> ghButton1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
					</span><span class="com">// Our button has been pressed</span><span class="pln">
					printf</span><span class="pun">(</span><span class="str">"Button clicked\r\n"</span><span class="pun">);</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
				</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
 
			</span><span class="kwd">default</span><span class="pun">:</span><span class="pln">
				</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
 
	</span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	There is no response to touching the button. What am I doing wrong? ginputCalibrateMouse() is executed, the driver ADS7843 works correctly...
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">4447</guid><pubDate>Sat, 07 Dec 2024 11:29:50 +0000</pubDate></item><item><title>FillString flicker</title><link>https://community.ugfx.io/topic/4408-fillstring-flicker/</link><description><![CDATA[<p>
	These two functions cause a lot of flickering:
</p>

<p>
	gdispGFillString()<br />
	gdispGFillStringBox()
</p>

<p>
	The root cause of the flicker is that they start by doing a background fill, and then render the text on top of that.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">// background fill
g-&gt;p.color = bgcolor;
fillarea(g);</span></pre>

<p>
	Is there not a better way to do it? Looking at the font rendering code, it seems to call function "skip_pixels()" for all pixels which has alpha=0.
</p>

<p>
	Would it not be possible to modify "skip_pixels()", so that it draws background color to the screen for all alpha=0 pixels when gdispGFillString() / gdispGFillStringBox() are used?
</p>

<p>
	That way the initial fillarea(g) could be removed, and the flickering should be gone. Without the need for any double buffering.
</p>

<p>
	 
</p>

<p>
	Performance bonuses:
</p>

<p>
	* This change alone will improve rendering performance by significantly reducing the total number of bytes written to the display.
</p>

<p>
	* Further performance improvement would be possible by avoiding the gdisp_lld_write_start() + gdisp_lld_write_color() + gdisp_lld_write_stop() sequence which the font rendering is currently doing for almost every pixel, and do pixel streaming instead.
</p>

<p>
	 
</p>

<p>
	There is possibly a small caveat: With kerning enabled, it might be necessary to keep track of the right-most rendered pixel on each line. To avoid having skip_pixels() overwrite parts of the previous character. But that too should be perfectly doable.
</p>
]]></description><guid isPermaLink="false">4408</guid><pubDate>Fri, 13 Sep 2024 10:10:39 +0000</pubDate></item><item><title>Overlapping windows and widgets</title><link>https://community.ugfx.io/topic/4411-overlapping-windows-and-widgets/</link><description><![CDATA[<p>
	I have encountered such a problem. A table is displayed on the screen, in which a row is updated. On command from the button, a frame window with a console is displayed, which overlaps the table. However, the updated part of the table overlaps the window with the console and spoils the view. How to solve this problem?
</p>

<p>
	Photos shows this problem.
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://community.ugfx.io/uploads/monthly_2024_09/Right.jpg.7092cd32cb8f7f06735bdbf3e7e1948a.jpg" data-fileid="1316" data-fileext="jpg" rel=""><img alt="Right.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="1316" data-ratio="168.16" width="446" src="https://community.ugfx.io/uploads/monthly_2024_09/Right.thumb.jpg.557e61bb33bb6293f0fe7298e72d1561.jpg" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://community.ugfx.io/uploads/monthly_2024_09/Wrong.jpg.5c16838284712260d50a9c6691f7e423.jpg" data-fileid="1317" data-fileext="jpg" rel=""><img alt="Wrong.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="1317" data-ratio="168.16" width="446" src="https://community.ugfx.io/uploads/monthly_2024_09/Wrong.thumb.jpg.b46fd0f2ae7b35fd5218c082d4639c9e.jpg" /></a>
</p>
]]></description><guid isPermaLink="false">4411</guid><pubDate>Tue, 24 Sep 2024 07:07:05 +0000</pubDate></item><item><title>Table widget</title><link>https://community.ugfx.io/topic/4397-table-widget/</link><description><![CDATA[<p>
	Hello Joel!<br />
	I have a project that includes an STM32L476 and a display with an LT7381 video controller and a touch GT911. I initially tried using LVGL, but had to give up. The library required an unacceptably large amount of memory. That's why I turned my attention to uGFX. I really liked your library because it takes 10 times less memory than LVGL. For example, a project with LVGL takes up [ 230'184 bytes of readonly code memory; 134'912 bytes of readonly data memory; 86'600 bytes of readwrite data memory]. The same project with uGFX takes [33'700 bytes of readonly code memory; 3'027 bytes of readonly data memory; 33'159 bytes of readwrite data memory]. Additionally, I wrote touchscreen drivers using the Shape Drawing Engine. LVGL does not allow this feature.<br />
	In my project I plan to use Table widget. I found a similar Table widget on this forum. Very nice widget.
</p>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="1473" data-embedcontent="" data-embedid="embed222070070" src="https://community.ugfx.io/topic/484-table-widget/?do=embed" style="height:393px;max-width:502px;"></iframe>

<p>
	<br />
	Unfortunately, the link to the Table widget archive is not active. How can I access the link?
</p>

<p>
	Thanks for the answer!
</p>
]]></description><guid isPermaLink="false">4397</guid><pubDate>Wed, 22 May 2024 05:59:09 +0000</pubDate></item><item><title>RA8875 on Cube IDE</title><link>https://community.ugfx.io/topic/4409-ra8875-on-cube-ide/</link><description><![CDATA[<p>
	I have a stm32f4 disco and i want to use the ra8875 driver with spi in my project. I have never worked with TFT before, so im kinda new to this. I use Cube Ide and there is no guide how to include the library into the project.
</p>
]]></description><guid isPermaLink="false">4409</guid><pubDate>Mon, 16 Sep 2024 13:24:17 +0000</pubDate></item><item><title>Pressed and unpressed Buttons</title><link>https://community.ugfx.io/topic/4406-pressed-and-unpressed-buttons/</link><description><![CDATA[<p>
	Hi, Joel!
</p>

<p>
	I have been observing the effect associated with the button for a long time, as shown in the video. I fought it by switching the button or container to the hide or unvisible state. But perhaps this is wrong. This effect occurs when any button is pressed. As I understand it, the rendering sequence looks like this. 1. The "External connection" button is pressed and the pressed state is rendered. 2. The button is released and the released button is rendered (more precisely, it is queued for rendering). 3. The released button event is processed. Here, the function for creating a container with the OK button is called, which, when pressed, must be destroyed. 4. The container and its button are rendered. 5. Pressing the OK button first renders the "External connection" button, and then renders the OK button. Is the queue being "pushed"? 6. The container is destroyed. 7. The container with the "External connection" button is rendered.
</p>

<p>
	How can I prevent this effect from occurring?
</p>

<p>
	What am I doing wrong?
</p>

<p>
	Main Window
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">#include "Screens.h"

#include </span><span class="tag">&lt;stdio.h&gt;</span><span class="pln">
#include </span><span class="tag">&lt;stdlib.h&gt;</span><span class="pln">
#include </span><span class="tag">&lt;errno.h&gt;</span><span class="pln">
#include </span><span class="tag">&lt;ctype.h&gt;</span><span class="pln">
#include </span><span class="tag">&lt;limits.h&gt;</span><span class="pln">
#include </span><span class="tag">&lt;float.h&gt;</span><span class="pln">

#include "LT7381-HAL.h"
#include "WidgetStyles.h"
#include "StringsTableIDs.h"

#define Gray_80_			HTML2COLOR(0x808080)

extern GListener    glistener;
extern GHandle      _ghStatusbar, ActiveScreen;
extern font_t       dejavu_sans_con12,dejavu_sans_con16,dejavu_sans_con18,dejavu_sans_con20,dejavu_sans_con22,dejavu_sans_con24,dejavu_sans_con28, dejavu_sans_con36, dejavu_sans_con72;
static GHandle      mainAttestatButton, mainProductButton, mainExtConnectButton, mainSettingsButton, mainTitleLabel;
static GHandle      mainContainer;
gFont mainFont2x;
extern font_t dejavu_sans_12,dejavu_sans_16,dejavu_sans_18,dejavu_sans_20,dejavu_sans_22,dejavu_sans_24,dejavu_sans_32;

static gBool mainScreenIsCreated = gFalse;
GButtonObject *mainExtConnectButtonObj;

void MainScreenCreate(void)
{
	GWidgetInit	wi;
    gwinWidgetClearInit(&amp;wi);
    wi.g.show = TRUE;

	wi.g.width = gdispGetWidth(); wi.g.height = gdispGetHeight() - _ghStatusbar-&gt;height; wi.g.x = 0, wi.g.y =0;
    wi.text = "mainContainer";
    mainContainer = gwinContainerCreate(0, &amp;wi, GWIN_CONTAINER_BORDER);
	wi.g.parent = mainContainer;

	wi.g.width = 600;
	wi.g.height =  gdispGetFontMetric(dejavu_sans_con72, gFontHeight);
	wi.g.x = 260;
	wi.g.y = 0;
	wi.text = GSByID(SID_OperMode);
    mainTitleLabel = gwinLabelCreate(0, &amp;wi);
    gwinSetFont(mainTitleLabel, dejavu_sans_con72);

    wi.g.y += wi.g.height + 10;
    wi.g.height = 100;
    wi.customDraw = gwinButtonDraw_Rounded;
    wi.text = GSByID(SID_Product);
    mainProductButton = gwinButtonCreate(0, &amp;wi);
    gwinSetFont(mainProductButton, dejavu_sans_con36);
    
    wi.g.y += wi.g.height + 20;
    wi.text = GSByID(SID_ExConnect);
    mainExtConnectButton = gwinButtonCreate(0, &amp;wi);
    gwinSetFont(mainExtConnectButton, dejavu_sans_con36);

    wi.g.y += wi.g.height + 20;
    wi.text = GSByID(SID_Attestat);
    mainAttestatButton = gwinButtonCreate(0, &amp;wi);
    gwinSetFont(mainAttestatButton, dejavu_sans_con36);
    
    wi.g.y += wi.g.height + 20;
    wi.text = GSByID(SID_Settings);
    mainSettingsButton = gwinButtonCreate(0, &amp;wi);
    gwinSetFont(mainSettingsButton, dejavu_sans_con36);
    
    mainScreenIsCreated = gTrue;
    ActiveScreen = mainContainer;
    
    mainExtConnectButtonObj = (GButtonObject *)mainExtConnectButton;
}

void mainScreenDestroy(void)
{
    gwinDestroy(mainContainer);
    mainScreenIsCreated = gFalse;
}

void mainScreenShow(void)
{
    gwinSetText(mainTitleLabel, GSByID(SID_OperMode), gFalse);
    gwinSetText(mainProductButton, GSByID(SID_Product), gFalse);
    gwinSetText(mainExtConnectButton, GSByID(SID_ExConnect), gFalse);
    gwinSetText(mainAttestatButton, GSByID(SID_Attestat), gFalse);
    gwinSetText(mainSettingsButton, GSByID(SID_Settings), gFalse);
    gwinShow(mainContainer);
}

void MainScreenEv(GEvent *pe)
{

//    if (!mainScreenIsCreated) return;
    switch(pe-&gt;type) {
    case GEVENT_GWIN_BUTTON:            ///(GEVENT_GWIN_CTRL_FIRST+0)
        if (((GEventGWinButton*)pe)-&gt;gwin == mainProductButton) {
            DummyScreenCreate(0);
        }
        if (((GEventGWinButton*)pe)-&gt;gwin == mainExtConnectButton) {
//            DummyScreenCreate(0);
            ManualScreenCreate(0);
        }
        if (((GEventGWinButton*)pe)-&gt;gwin == mainAttestatButton) {
            AttScreenCreate(0);
        }
        if (((GEventGWinButton*)pe)-&gt;gwin == mainSettingsButton) {
            SettingsScreenCreate();
        }
        break;
    }
}
</span></pre>

<p>
	Under Construction Window
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">#include "Screens.h"
#include "StringsTableIDs.h"

extern GHandle      _ghStatusbar, ActiveScreen;
extern GListener  glistener;
extern font_t       dejavu_sans_con12,dejavu_sans_con16,dejavu_sans_con18,dejavu_sans_con20,dejavu_sans_con22,dejavu_sans_con24,dejavu_sans_con28, dejavu_sans_con36, dejavu_sans_con72;

static GHandle dummyContainer = NULL, dummyTitleLabel = NULL, dummyCloseButton = NULL;
static gBool dummyScreenIsCreated = gFalse;
static retFunc_t dummyRetFunc = NULL;

void DummyScreenCreate(retFunc_t func)
{
    dummyRetFunc = func;

	GWidgetInit	wi;
    gwinWidgetClearInit(&amp;wi);
    wi.g.show = TRUE;
	// Create the Container
	wi.g.width = gdispGetWidth(); wi.g.height = gdispGetHeight() - _ghStatusbar-&gt;height; wi.g.x = 0, wi.g.y =0;

    wi.text = "dummyContainer";
    dummyContainer = gwinContainerCreate(0, &amp;wi, GWIN_CONTAINER_BORDER);
	wi.g.parent = dummyContainer;

	wi.g.width = 700;
	wi.g.height =  gdispGetFontMetric(dejavu_sans_con72, gFontHeight);
	wi.g.x = 175;
	wi.g.y = 200;
	wi.text = GSByID(SID_UnderConstraction);
    dummyTitleLabel = gwinLabelCreate(0, &amp;wi);
    gwinSetFont(dummyTitleLabel, dejavu_sans_con72);

    wi.g.y = 450;
    wi.g.width = 500;
    wi.g.height = 100;
	wi.g.x = 260;
    wi.customDraw = gwinButtonDraw_Rounded;
    wi.text = GSByID(SID_Close);
    dummyCloseButton = gwinButtonCreate(0, &amp;wi);
    gwinSetFont(dummyCloseButton, dejavu_sans_con36);

    dummyScreenIsCreated = gTrue;
    ActiveScreen = dummyContainer;
}

void DummyScreenDestroy(void)
{
    gwinDestroy(dummyContainer);
    dummyScreenIsCreated = gFalse;
}


void DummyScreenEv(GEvent *pe)
{
    if (!dummyScreenIsCreated) return;
    switch(pe-&gt;type) {
    case GEVENT_GWIN_BUTTON:            ///(GEVENT_GWIN_CTRL_FIRST+0)
        if (((GEventGWinButton*)pe)-&gt;gwin == dummyCloseButton) {
            DummyScreenDestroy();
        }
        break;
    }
}</span></pre>

<p>
	Thak you for answer!
</p>
<p>
<a class="ipsAttachLink" href="https://community.ugfx.io/applications/core/interface/file/attachment.php?id=1308&amp;key=2e10e5535739fade7ac234c56ed3319a" data-fileExt='zip' data-fileid='1308' data-filekey='2e10e5535739fade7ac234c56ed3319a'>Buttons.zip</a></p>]]></description><guid isPermaLink="false">4406</guid><pubDate>Sat, 07 Sep 2024 06:17:26 +0000</pubDate></item><item><title>LT7381 with Geometric Drawing Engine</title><link>https://community.ugfx.io/topic/4399-lt7381-with-geometric-drawing-engine/</link><description><![CDATA[<p>
	<span style="background-color:#ffffff;color:#353c41;font-size:14px;">Hi folks!</span>
</p>

<p>
	<span style="background-color:#ffffff;color:#353c41;font-size:14px;">I use </span>High Performance TFT-LCD Graphics Controller <span style="background-color:#ffffff;color:#353c41;font-size:14px;">LT7381 with Geometric Drawing Engine and I want to use hardware functions of drawing Circles, Ellipses, Boxes, Rounded Boxes and etc. I found how to draw lines and fill a rectangle using GDISP_HARDWARE_LINES and GDISP_HARDWARE_FILLS. For example, for GDISP_HARDWARE_CIRCLE I did not find the corresponding code. How to do it right without interfering with the uGFX library?</span>
</p>

<p>
	<span style="background-color:#ffffff;color:#353c41;font-size:14px;">Thanks!</span>
</p>
]]></description><guid isPermaLink="false">4399</guid><pubDate>Wed, 19 Jun 2024 13:50:08 +0000</pubDate></item><item><title>Test ADS7843 touch driver not working.....</title><link>https://community.ugfx.io/topic/4396-test-ads7843-touch-driver-not-working/</link><description><![CDATA[<p>
	Hi, all!!!
</p>

<p>
	Use RAW32....
</p>

<p>
	To check the functionality of the touchscreen driver, I used the file \ugfx\demos\tools\touch_raw_readings. I previously implemented the necessary functions inside gmouse_lld_ADS7843_board.h by adding debugging output to the static GFXINLINE gU16 read_value(GMouse* m, gU16 port) procedure. In the debugger terminal I see that data is being read from the touchscreen controller and it is within the required limits (0-4096), but nothing is displayed on the device screen.  I am attaching photos of the IDE screen and the device display. Where am I going wrong and what am I doing wrong?
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">while(1) {
		pem = (GEventMouse *)geventEventWait(&amp;gl, gDelayForever); //!!!!never get out from this function
		gwinPrintf(ghc, "%u, %u z=%u b=0x%04x\n", pem-&gt;x, pem-&gt;y, pem-&gt;z, pem-&gt;buttons &amp; ~GINPUT_MISSED_MOUSE_EVENT); 

		// Always sleep a bit first to enable other events. We actually don't mind missing events.
		gfxSleepMilliseconds(100);
	}</span></pre>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://community.ugfx.io/uploads/monthly_2024_05/IDE_Debug_Terminal.jpg.4ceeacc0e1e47b7c2cf66065a3627610.jpg" data-fileid="1302" data-fileext="jpg" rel=""><img alt="IDE_Debug_Terminal.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="1302" data-ratio="75.1" width="1000" src="https://community.ugfx.io/uploads/monthly_2024_05/IDE_Debug_Terminal.thumb.jpg.42844908f0d43d4a0554d355572d91a2.jpg" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://community.ugfx.io/uploads/monthly_2024_05/IMG_20240505_130837.jpg.9bf5a7c5d4479abddaacb48fcc93d982.jpg" data-fileid="1303" data-fileext="jpg" rel=""><img alt="IMG_20240505_130837.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="1303" data-ratio="75.1" width="1000" src="https://community.ugfx.io/uploads/monthly_2024_05/IMG_20240505_130837.thumb.jpg.11621f44d960c2f69f1ddeb0d18d0a97.jpg" /></a>
</p>
]]></description><guid isPermaLink="false">4396</guid><pubDate>Sun, 05 May 2024 10:11:08 +0000</pubDate></item><item><title>mouseEvent not captured by widget</title><link>https://community.ugfx.io/topic/4393-mouseevent-not-captured-by-widget/</link><description><![CDATA[<p>
	uGFX 2.9
</p>

<p>
	STM32F746G Discovery
</p>

<p>
	ChibiOS
</p>

<p>
	Running the button demo...
</p>

<p>
	Hello,
</p>

<p>
	Touch is detected and arrives in gwidgetEvent() but the flags are not matched to run the MouseUp() function.
</p>

<p>
	h-&gt;flags = 0x011f00
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="1300" data-ratio="14.07" width="924" alt="image.png.010f3582704f17f7750fbb5516111678.png" src="https://community.ugfx.io/uploads/monthly_2024_03/image.png.010f3582704f17f7750fbb5516111678.png" />
</p>

<p>
	Any suggestions? 
</p>

<p>
	Thanks
</p>

<p>
	Lemmy
</p>

<div style="background-color:#ffffff;">
	<div style="background-color:#ffffff;color:#000000;font-size:11pt;">
		<p style="background-color:#e8f2fe;">
			 
		</p>
	</div>
</div>
]]></description><guid isPermaLink="false">4393</guid><pubDate>Fri, 22 Mar 2024 21:19:07 +0000</pubDate></item><item><title>does not linking with the driver ILI9488.</title><link>https://community.ugfx.io/topic/4381-does-not-linking-with-the-driver-ili9488/</link><description><![CDATA[<p>
	Мой английский очень посредственен. Поэтому вначале на русском потом google translate....
</p>

<p>
	Пытаюсь собрать проект RAW32 ILI9488. Получаю ошибку линковки: undefined symbol gdisp_lld_draw_pixel referenced by symbol GDISPVMT_OnlyOne (section .rodata.GDISPVMT_OnlyOne in file gdisp_lld_ILI9488.o) Сборка с тестовым драйвером ("TestStub") завершается успешно. Не могу понять где я ошибаюсь, на какой стадии.
</p>

<p>
	My English is very mediocre. Therefore, first in Russian then Google translate....
</p>

<p>
	I'm trying to build a RAW32 ILI9488 project. I get a linking error: undefined symbol gdisp_lld_draw_pixel referenced by symbol GDISPVMT_OnlyOne (section .rodata.GDISPVMT_OnlyOne in file gdisp_lld_ILI9488.o) The build with the test driver (“TestStub”) completes successfully. I can’t understand where I’m wrong, at what stage.
</p>
]]></description><guid isPermaLink="false">4381</guid><pubDate>Sun, 11 Feb 2024 10:34:17 +0000</pubDate></item></channel></rss>
