/**
   * Draws text at the top of the VGField
   *
   * @param vg The object that will be used to render the text
   */
  public void drawText(final VG11 vg) {
    vg.vgSeti(VG10.VG_MATRIX_MODE, VG10.VG_MATRIX_IMAGE_USER_TO_SURFACE);

    // Load a clean identity matrix
    vg.vgLoadIdentity();

    // Translate to the next drawing location
    vg.vgTranslate(0.0f, _displayHeight - TEXT_OFFSET);

    // Draw the text on the display
    vg.vgDrawImage(_textImage);
  }
  /** @see net.rim.device.api.openvg.VGField#render(VG) */
  protected void render(final VG g) {
    final VG11 vg = (VG11) g;

    // Clear the display
    vg.vgClear(0, 0, getWidth(), getHeight());

    vg.vgSeti(VG10.VG_MATRIX_MODE, VG10.VG_MATRIX_IMAGE_USER_TO_SURFACE);

    // Shifting bits by >> 1 is equivalent to division by 2
    final float halfIconWidth = ICON_WIDTH >> 1;

    // Go through all the images and rotate them
    // around the center of the screen.
    for (int i = 0; i < _imageHandles.length; i++) {
      // Load clean Identity matrix
      vg.vgLoadIdentity();

      // Translate to the center of the display
      vg.vgTranslate(_xScreenCenter, _yScreenCenter);

      // Rotate the image
      vg.vgRotate(_mainRotation.getFloat() + ROTATE * i);

      // Translate the image half of the icon's width
      vg.vgTranslate(-halfIconWidth, RADIUS);

      // Draw the rotated, translated image
      vg.vgDrawImage(_imageHandles[i]);
    }

    // Draw the text image on this field
    drawText(vg);
  }
  /** @see net.rim.device.api.openvg.VGField#initialize(VG) */
  protected void initialize(final VG g) {
    final VG11 vg = (VG11) g;
    vg.vgSetfv(VG10.VG_CLEAR_COLOR, 4, MY_CLEAR_COLOR, 0);

    final XYRect rect = new XYRect();

    // Create the bitmap from bundled resource "icons.png"
    final Bitmap bitmap = Bitmap.getBitmapResource("icons.png");

    // Create the image for all the icons
    for (int i = 0; i < _imageHandles.length; i++) {
      // Update the XYRect in which the image will be displayed
      updateRect(rect, i);

      _imageHandles[i] =
          VGUtils.vgCreateImage(vg, bitmap, true, VG10.VG_IMAGE_QUALITY_BETTER, rect);
    }

    // Get the default font and its FontSpec
    final Font font = Font.getDefault();
    final FontSpec fontSpec = font.getFontSpec();

    // Create text image
    _textImage =
        VGUtils.vgCreateTextAsImage(vg, fontSpec, "Tap or click to swap screens", null, null);

    // Set up the animation. The animation will animate a scalar float value
    // (_mainRotation) from 360 to 0 over 3 seconds and will repeat
    // indefinitely.
    _animator = new Animator(0);
    final Animation animation =
        _animator.addAnimationFromTo(
            _mainRotation,
            AnimatedScalar.ANIMATION_PROPERTY_SCALAR,
            360.0f,
            0.0f,
            Animation.EASINGCURVE_LINEAR,
            3000L);
    animation.setRepeatCount(Animation.REPEAT_COUNT_INDEFINITE);

    _animator.begin(0L);
  }