
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_awt_AlphaComposite__
#define __java_awt_AlphaComposite__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class AlphaComposite;
        class CompositeContext;
        class RenderingHints;
      namespace image
      {
          class ColorModel;
      }
    }
  }
}

class java::awt::AlphaComposite : public ::java::lang::Object
{

  AlphaComposite(jint, jfloat);
public:
  static ::java::awt::AlphaComposite * getInstance(jint);
  static ::java::awt::AlphaComposite * getInstance(jint, jfloat);
  ::java::awt::CompositeContext * createContext(::java::awt::image::ColorModel *, ::java::awt::image::ColorModel *, ::java::awt::RenderingHints *);
  ::java::awt::AlphaComposite * derive(jint);
  ::java::awt::AlphaComposite * derive(jfloat);
  jfloat getAlpha();
  jint getRule();
  jint hashCode();
  jboolean equals(::java::lang::Object *);
private:
  static ::java::util::LinkedHashMap * cache;
public:
  static const jint CLEAR = 1;
  static const jint SRC = 2;
  static const jint DST = 9;
  static const jint SRC_OVER = 3;
  static const jint DST_OVER = 4;
  static const jint SRC_IN = 5;
  static const jint DST_IN = 6;
  static const jint SRC_OUT = 7;
  static const jint DST_OUT = 8;
  static const jint SRC_ATOP = 10;
  static const jint DST_ATOP = 11;
  static const jint XOR = 12;
  static ::java::awt::AlphaComposite * Clear;
  static ::java::awt::AlphaComposite * Src;
  static ::java::awt::AlphaComposite * Dst;
  static ::java::awt::AlphaComposite * SrcOver;
  static ::java::awt::AlphaComposite * DstOver;
  static ::java::awt::AlphaComposite * SrcIn;
  static ::java::awt::AlphaComposite * DstIn;
  static ::java::awt::AlphaComposite * SrcOut;
  static ::java::awt::AlphaComposite * DstOut;
  static ::java::awt::AlphaComposite * SrcAtop;
  static ::java::awt::AlphaComposite * DstAtop;
  static ::java::awt::AlphaComposite * Xor;
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) rule;
  jfloat alpha;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_AlphaComposite__
