This discussion is archived
4 Replies Latest reply: Feb 9, 2010 2:10 AM by 843851 RSS

HScene repaint sequence

843851 Newbie
Currently Being Moderated

I'm developing an mhp application that has to render an animation.
I have tested it on xLetView and on the ADB Stb developer version
getting the same behavior.

On an applet when I call a repaint(), internally the system calls
the update(Graphics g) method... the default implementation
clears the screen and then calls paint. Often I override this method
in this way
public void update(Graphics g) { paint(g); }
so that no screen clearing is done (this is very useful when you have
a still image on a background and you don't want to rewrite it every time).

Going to my xLet... it's a simple snake game. When I call repaint the screen is cleared to the background color every time. So I have overridden the update method... but this method is never called
(I placed a System.out.println in it and so I'm sure is never called).

So I looked at the HScene specification... here there is a method
that tells the HScene not to clear the screen every time... but seems
to not have any effect...

so... I can't tell to my xLet to not clear the screen every time... and the update method seems that is never called.

Anyone can help me? I really don't understand who is clearing the screen every time and how I can avoid this.

p.s. another little question. If I place the image on the Background device I can solve the problem since the Image isn't rendered by the paint method every time... is it correct? I have good performance improvements in this way? On some documents I read that the background image is managed by the video decoder and so the cpu-processing can avoid to deal with it... if it's true, this technique can be used on every decoder or are there decoders not supporting background images?


  • 1. Re: HScene repaint sequence
    843851 Newbie
    Currently Being Moderated
    Here is a very short example showing my problem.

    In xLetView I have a red square moving left to right... but I don't want to have a background clear... so I would expect to have a growing red rectangle from left to right...

    What's wrong with this code?

    * Test: simple xLet showing background clear problems
    * Author: Ignazio Locatelli - DotLand srl - (C) 2005

    package giochi.snake;

    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import org.havi.ui.*;
    import org.havi.ui.event.*;
    import org.dvb.ui.*;

    public class Test extends HComponent implements Xlet, Runnable {

    // xLet context
    private XletContext context;

    // reference to main thread
    private Thread testThread;

    private HScene scene;

    // square x Position
    int xPos = 0;

    public Test() {}

    public void initXlet( context) throws {
    this.context = context;

    public void startXlet() throws {
    testThread = new Thread(this);

    public void run() {
    while (true) {
    if (xPos > 300) xPos = 0;
    try {
    } catch(Exception e) {}

    public void getResources() {
         HSceneFactory factory = HSceneFactory.getInstance();
         HSceneTemplate hst = new HSceneTemplate();
              new org.havi.ui.HScreenDimension(1,1),
              new org.havi.ui.HScreenPoint(0,0),

         scene = factory.getBestScene(hst);


    Rectangle rect = scene.getBounds();


         // do focus al component

    /** NEVER CALLED!!! WHY? */
    public void update(Graphics g) { paint(g); }

    public void paint(Graphics g) {

    System.out.println("fill mode: " + scene.getBackgroundMode() + " mode fill = " + scene.BACKGROUND_FILL);
    g.setColor(new Color(200,0,0));

    public void pauseXlet() {

    public void destroyXlet(boolean unconditional) throws {
         if (unconditional) {
         } else {
         throw new XletStateChangeException("May I stay alive?");

    public void doPause() {

    public void doDestroy() {
         scene = null;

  • 2. Re: HScene repaint sequence
    843851 Newbie
    Currently Being Moderated
    Surfing the web I realized that update isn't called on lightweight components...

    And the xLet is an extension of a simple Component (or HComponent) and so it's a lightweight component.

    So... ok... update isn't called. But why my component background is cleared everytime? maybe is the HScene to which the component is added to perform a background clear?
  • 3. Re: HScene repaint sequence
    843851 Newbie
    Currently Being Moderated
    try to use:


    insted of repaint.
  • 4. Re: HScene repaint sequence
    843851 Newbie
    Currently Being Moderated
    Thank you, your answer help me so much.