From e09fd9e819c23dc90bca68375645e15544861330 Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Wed, 17 Dec 2008 18:05:43 -0800 Subject: [PATCH] Code drop from //branches/cupcake/...@124589 --- awt/java/awt/AWTEvent.java | 637 +-- awt/java/awt/AWTException.java | 18 +- awt/java/awt/AWTKeyStroke.java | 502 ++- awt/java/awt/AWTPermission.java | 23 +- awt/java/awt/ActiveEvent.java | 13 +- awt/java/awt/Adjustable.java | 54 +- awt/java/awt/AlphaComposite.java | 277 +- awt/java/awt/BasicStroke.java | 1499 ++++--- awt/java/awt/BufferCapabilities.java | 88 +- awt/java/awt/Color.java | 647 +-- awt/java/awt/Component.java | 3896 ++++++++--------- awt/java/awt/ComponentBehavior.java | 2 +- awt/java/awt/ComponentOrientation.java | 74 +- awt/java/awt/Composite.java | 30 +- awt/java/awt/CompositeContext.java | 23 +- awt/java/awt/Cursor.java | 217 +- awt/java/awt/Dimension.java | 76 +- awt/java/awt/DisplayMode.java | 88 +- awt/java/awt/Event.java | 421 +- awt/java/awt/EventQueue.java | 178 +- awt/java/awt/Font.java | 879 ++-- awt/java/awt/FontFormatException.java | 16 +- awt/java/awt/FontMetrics.java | 382 +- awt/java/awt/GradientPaint.java | 180 +- awt/java/awt/Graphics.java | 923 ++-- awt/java/awt/Graphics2D.java | 385 +- awt/java/awt/GraphicsConfiguration.java | 163 +- awt/java/awt/GraphicsDevice.java | 165 +- awt/java/awt/GraphicsEnvironment.java | 109 +- awt/java/awt/HeadlessException.java | 18 +- awt/java/awt/HeadlessGraphicsEnvironment.java | 31 +- awt/java/awt/HeadlessToolkit.java | 249 +- .../awt/IllegalComponentStateException.java | 24 +- awt/java/awt/Image.java | 144 +- awt/java/awt/ImageCapabilities.java | 32 +- awt/java/awt/Insets.java | 98 +- awt/java/awt/ItemSelectable.java | 20 +- awt/java/awt/MenuComponent.java | 854 ++-- awt/java/awt/MenuContainer.java | 15 +- awt/java/awt/Paint.java | 41 +- awt/java/awt/PaintContext.java | 41 +- awt/java/awt/Point.java | 92 +- awt/java/awt/Polygon.java | 337 +- awt/java/awt/Rectangle.java | 469 +- awt/java/awt/RenderingHints.java | 359 +- awt/java/awt/Shape.java | 156 +- awt/java/awt/Stroke.java | 31 +- awt/java/awt/Toolkit.java | 834 ++-- awt/java/awt/Transparency.java | 24 +- awt/java/awt/color/CMMException.java | 12 +- awt/java/awt/color/ColorSpace.java | 242 +- awt/java/awt/color/ICC_ColorSpace.java | 165 +- awt/java/awt/color/ICC_Profile.java | 892 ++-- awt/java/awt/color/ICC_ProfileGray.java | 24 +- awt/java/awt/color/ICC_ProfileRGB.java | 58 +- awt/java/awt/color/ProfileDataException.java | 13 +- awt/java/awt/color/package.html | 8 + awt/java/awt/event/AWTEventListener.java | 6 + awt/java/awt/event/AWTEventListenerProxy.java | 6 + awt/java/awt/event/ActionEvent.java | 6 + awt/java/awt/event/ActionListener.java | 6 + awt/java/awt/event/AdjustmentEvent.java | 6 + awt/java/awt/event/AdjustmentListener.java | 6 + awt/java/awt/event/ComponentAdapter.java | 6 + awt/java/awt/event/ComponentEvent.java | 6 + awt/java/awt/event/ComponentListener.java | 6 + awt/java/awt/event/ContainerAdapter.java | 6 + awt/java/awt/event/ContainerEvent.java | 6 + awt/java/awt/event/ContainerListener.java | 6 + awt/java/awt/event/FocusAdapter.java | 6 + awt/java/awt/event/FocusEvent.java | 6 + awt/java/awt/event/FocusListener.java | 6 + .../awt/event/HierarchyBoundsAdapter.java | 6 + .../awt/event/HierarchyBoundsListener.java | 6 + awt/java/awt/event/HierarchyEvent.java | 6 + awt/java/awt/event/HierarchyListener.java | 6 + awt/java/awt/event/InputEvent.java | 6 + awt/java/awt/event/InputMethodEvent.java | 6 + awt/java/awt/event/InputMethodListener.java | 6 + awt/java/awt/event/InvocationEvent.java | 6 + awt/java/awt/event/ItemEvent.java | 6 + awt/java/awt/event/ItemListener.java | 6 + awt/java/awt/event/KeyAdapter.java | 6 + awt/java/awt/event/KeyEvent.java | 6 + awt/java/awt/event/KeyListener.java | 6 + awt/java/awt/event/MouseAdapter.java | 6 + awt/java/awt/event/MouseEvent.java | 6 + awt/java/awt/event/MouseListener.java | 6 + awt/java/awt/event/MouseMotionAdapter.java | 6 + awt/java/awt/event/MouseMotionListener.java | 6 + awt/java/awt/event/MouseWheelEvent.java | 6 + awt/java/awt/event/MouseWheelListener.java | 6 + awt/java/awt/event/PaintEvent.java | 6 + awt/java/awt/event/TextEvent.java | 6 + awt/java/awt/event/TextListener.java | 6 + awt/java/awt/event/WindowAdapter.java | 6 + awt/java/awt/event/WindowEvent.java | 6 + awt/java/awt/event/WindowFocusListener.java | 6 + awt/java/awt/event/WindowListener.java | 6 + awt/java/awt/event/WindowStateListener.java | 6 + awt/java/awt/font/FontRenderContext.java | 66 +- awt/java/awt/font/GlyphJustificationInfo.java | 142 +- awt/java/awt/font/GlyphMetrics.java | 116 +- awt/java/awt/font/GlyphVector.java | 297 +- awt/java/awt/font/GraphicAttribute.java | 131 +- awt/java/awt/font/ImageGraphicAttribute.java | 80 +- awt/java/awt/font/LineBreakMeasurer.java | 175 +- awt/java/awt/font/LineMetrics.java | 33 +- awt/java/awt/font/MultipleMaster.java | 47 +- awt/java/awt/font/OpenType.java | 390 +- awt/java/awt/font/ShapeGraphicAttribute.java | 103 +- awt/java/awt/font/TextHitInfo.java | 153 +- awt/java/awt/font/TextLayout.java | 583 +-- awt/java/awt/font/TextMeasurer.java | 117 +- awt/java/awt/font/TransformAttribute.java | 28 +- awt/java/awt/font/package.html | 8 + awt/java/awt/geom/AffineTransform.java | 987 +++-- awt/java/awt/geom/Arc2D.java | 653 +-- awt/java/awt/geom/Area.java | 123 +- awt/java/awt/geom/CubicCurve2D.java | 704 +-- awt/java/awt/geom/Dimension2D.java | 29 +- awt/java/awt/geom/Ellipse2D.java | 201 +- awt/java/awt/geom/FlatteningPathIterator.java | 348 +- awt/java/awt/geom/GeneralPath.java | 384 +- .../awt/geom/IllegalPathStateException.java | 21 +- awt/java/awt/geom/Line2D.java | 629 +-- .../geom/NoninvertibleTransformException.java | 19 +- awt/java/awt/geom/PathIterator.java | 156 +- awt/java/awt/geom/Point2D.java | 153 +- awt/java/awt/geom/QuadCurve2D.java | 630 +-- awt/java/awt/geom/Rectangle2D.java | 527 ++- awt/java/awt/geom/RectangularShape.java | 111 +- awt/java/awt/geom/RoundRectangle2D.java | 365 +- awt/java/awt/geom/package.html | 8 + awt/java/awt/im/InputContext.java | 6 + awt/java/awt/im/InputMethodHighlight.java | 6 + awt/java/awt/im/InputMethodRequests.java | 6 + awt/java/awt/im/InputSubset.java | 6 + awt/java/awt/im/spi/InputMethod.java | 6 + awt/java/awt/im/spi/InputMethodContext.java | 6 + .../awt/im/spi/InputMethodDescriptor.java | 6 + awt/java/awt/image/AffineTransformOp.java | 321 +- .../awt/image/AreaAveragingScaleFilter.java | 191 +- .../image/AwtImageBackdoorAccessorImpl.java | 35 +- awt/java/awt/image/BandCombineOp.java | 466 +- awt/java/awt/image/BandedSampleModel.java | 327 +- awt/java/awt/image/BufferStrategy.java | 28 +- awt/java/awt/image/BufferedImage.java | 787 ++-- awt/java/awt/image/BufferedImageFilter.java | 164 +- awt/java/awt/image/BufferedImageOp.java | 50 +- awt/java/awt/image/ByteLookupTable.java | 70 +- awt/java/awt/image/ColorConvertOp.java | 543 ++- awt/java/awt/image/ColorModel.java | 649 +-- awt/java/awt/image/ComponentColorModel.java | 1597 +++---- awt/java/awt/image/ComponentSampleModel.java | 433 +- awt/java/awt/image/ConvolveOp.java | 348 +- awt/java/awt/image/CropImageFilter.java | 111 +- awt/java/awt/image/DataBuffer.java | 371 +- awt/java/awt/image/DataBufferByte.java | 88 +- awt/java/awt/image/DataBufferDouble.java | 94 +- awt/java/awt/image/DataBufferFloat.java | 92 +- awt/java/awt/image/DataBufferInt.java | 88 +- awt/java/awt/image/DataBufferShort.java | 89 +- awt/java/awt/image/DataBufferUShort.java | 99 +- awt/java/awt/image/DirectColorModel.java | 701 +-- awt/java/awt/image/FilteredImageSource.java | 42 +- awt/java/awt/image/ImageConsumer.java | 160 +- awt/java/awt/image/ImageFilter.java | 37 +- awt/java/awt/image/ImageObserver.java | 82 +- awt/java/awt/image/ImageProducer.java | 43 +- awt/java/awt/image/ImagingOpException.java | 17 +- awt/java/awt/image/IndexColorModel.java | 596 +-- awt/java/awt/image/Kernel.java | 63 +- awt/java/awt/image/LookupOp.java | 418 +- awt/java/awt/image/LookupTable.java | 48 +- awt/java/awt/image/MemoryImageSource.java | 557 ++- .../image/MultiPixelPackedSampleModel.java | 299 +- awt/java/awt/image/PackedColorModel.java | 201 +- .../image/PixelInterleavedSampleModel.java | 50 +- awt/java/awt/image/RGBImageFilter.java | 159 +- awt/java/awt/image/Raster.java | 1243 +++--- awt/java/awt/image/RasterFormatException.java | 21 +- awt/java/awt/image/RasterOp.java | 45 +- awt/java/awt/image/RenderedImage.java | 54 +- awt/java/awt/image/ReplicateScaleFilter.java | 124 +- awt/java/awt/image/RescaleOp.java | 346 +- awt/java/awt/image/SampleModel.java | 1055 +++-- awt/java/awt/image/ShortLookupTable.java | 69 +- .../image/SinglePixelPackedSampleModel.java | 251 +- awt/java/awt/image/TileObserver.java | 31 +- awt/java/awt/image/VolatileImage.java | 58 +- awt/java/awt/image/WritableRaster.java | 566 +-- awt/java/awt/image/WritableRenderedImage.java | 62 +- awt/java/awt/image/package.html | 8 + .../ContextualRenderedImageFactory.java | 58 +- .../awt/image/renderable/ParameterBlock.java | 376 +- .../awt/image/renderable/RenderContext.java | 110 +- .../awt/image/renderable/RenderableImage.java | 78 +- .../image/renderable/RenderableImageOp.java | 79 +- .../renderable/RenderableImageProducer.java | 56 +- .../renderable/RenderedImageFactory.java | 17 +- awt/java/awt/image/renderable/package.html | 8 + awt/java/awt/package.html | 8 + .../beans/IndexedPropertyChangeEvent.java | 66 - awt/java/beans/PropertyChangeEvent.java | 62 - awt/java/beans/PropertyChangeListener.java | 25 - .../beans/PropertyChangeListenerProxy.java | 41 - awt/java/beans/PropertyChangeSupport.java | 351 -- awt/javax/imageio/IIOException.java | 16 +- awt/javax/imageio/IIOImage.java | 99 +- awt/javax/imageio/IIOParam.java | 170 +- awt/javax/imageio/IIOParamController.java | 14 +- awt/javax/imageio/ImageIO.java | 419 +- awt/javax/imageio/ImageReadParam.java | 106 +- awt/javax/imageio/ImageReader.java | 910 ++-- awt/javax/imageio/ImageTranscoder.java | 43 +- awt/javax/imageio/ImageTypeSpecifier.java | 254 +- awt/javax/imageio/ImageWriteParam.java | 291 +- awt/javax/imageio/ImageWriter.java | 640 +-- .../event/IIOReadProgressListener.java | 84 +- .../imageio/event/IIOReadUpdateListener.java | 200 +- .../imageio/event/IIOReadWarningListener.java | 17 +- .../event/IIOWriteProgressListener.java | 67 +- .../event/IIOWriteWarningListener.java | 20 +- awt/javax/imageio/event/package.html | 8 + .../metadata/IIOInvalidTreeException.java | 37 +- awt/javax/imageio/metadata/IIOMetadata.java | 174 +- .../metadata/IIOMetadataController.java | 17 +- .../imageio/metadata/IIOMetadataFormat.java | 391 +- .../metadata/IIOMetadataFormatImpl.java | 661 +-- .../imageio/metadata/IIOMetadataNode.java | 523 ++- .../metadata/IIOStandardMetadataFormat.java | 85 +- awt/javax/imageio/metadata/package.html | 8 + awt/javax/imageio/package.html | 8 + .../plugins/bmp/BMPImageWriteParam.java | 34 +- awt/javax/imageio/plugins/bmp/package.html | 8 + .../plugins/jpeg/JPEGHuffmanTable.java | 171 +- .../plugins/jpeg/JPEGImageReadParam.java | 49 +- .../plugins/jpeg/JPEGImageWriteParam.java | 96 +- .../imageio/plugins/jpeg/JPEGQTable.java | 121 +- awt/javax/imageio/plugins/jpeg/package.html | 8 + awt/javax/imageio/spi/IIORegistry.java | 47 +- awt/javax/imageio/spi/IIOServiceProvider.java | 32 +- .../imageio/spi/ImageInputStreamSpi.java | 93 +- .../imageio/spi/ImageOutputStreamSpi.java | 92 +- awt/javax/imageio/spi/ImageReaderSpi.java | 186 +- .../imageio/spi/ImageReaderWriterSpi.java | 317 +- awt/javax/imageio/spi/ImageTranscoderSpi.java | 34 +- awt/javax/imageio/spi/ImageWriterSpi.java | 200 +- .../imageio/spi/RegisterableService.java | 36 +- awt/javax/imageio/spi/ServiceRegistry.java | 320 +- awt/javax/imageio/spi/package.html | 8 + .../stream/FileCacheImageInputStream.java | 46 +- .../stream/FileCacheImageOutputStream.java | 56 +- .../imageio/stream/FileImageInputStream.java | 35 +- .../imageio/stream/FileImageOutputStream.java | 35 +- awt/javax/imageio/stream/IIOByteBuffer.java | 53 +- .../imageio/stream/ImageInputStream.java | 427 +- .../imageio/stream/ImageInputStreamImpl.java | 130 +- .../imageio/stream/ImageOutputStream.java | 289 +- .../imageio/stream/ImageOutputStreamImpl.java | 49 +- .../stream/MemoryCacheImageInputStream.java | 28 +- .../stream/MemoryCacheImageOutputStream.java | 29 +- awt/javax/imageio/stream/package.html | 8 + .../harmony/awt/internal/nls/Messages.java | 8 + .../harmony/beans/internal/nls/Messages.java | 31 +- .../harmony/beans/internal/nls/MsgHelp.java | 86 + .../beans/internals}/nls/messages.properties | 0 camera/libcameraservice/Android.mk | 11 +- camera/libcameraservice/CameraService.cpp | 135 +- camera/libcameraservice/CameraService.h | 26 +- im/java/android/im/BrandingResourceIDs.java | 52 + im/java/android/im/IImPlugin.aidl | 69 + im/java/android/im/ImPluginConsts.java | 27 + include/GLES/eglnatives.h | 3 +- include/private/opengles/gl_context.h | 7 + include/ui/BlitHardware.h | 143 - include/ui/Camera.h | 61 +- include/ui/CameraHardwareInterface.h | 72 +- include/ui/EGLDisplaySurface.h | 5 +- include/ui/ICamera.h | 14 +- include/ui/IOverlay.h | 55 + include/ui/ISurface.h | 4 + include/ui/ISurfaceFlingerClient.h | 1 - include/ui/KeycodeLabels.h | 18 +- include/ui/Overlay.h | 88 + include/ui/PixelFormat.h | 1 + include/ui/Region.h | 4 +- include/ui/Surface.h | 21 +- include/utils/IPCThreadState.h | 3 + include/utils/MemoryHeapPmem.h | 25 +- include/utils/ResourceTypes.h | 49 +- include/utils/TimeUtils.h | 5 +- include/utils/string_array.h | 13 + libs/audioflinger/A2dpAudioInterface.cpp | 186 + libs/audioflinger/A2dpAudioInterface.h | 107 + libs/audioflinger/Android.mk | 7 +- libs/audioflinger/AudioDumpInterface.cpp | 49 +- libs/audioflinger/AudioDumpInterface.h | 53 +- libs/audioflinger/AudioFlinger.cpp | 710 +-- libs/audioflinger/AudioFlinger.h | 101 +- libs/audioflinger/AudioHardwareGeneric.cpp | 46 +- libs/audioflinger/AudioHardwareGeneric.h | 30 +- libs/audioflinger/AudioHardwareInterface.cpp | 59 +- libs/audioflinger/AudioHardwareStub.cpp | 36 +- libs/audioflinger/AudioHardwareStub.h | 28 +- libs/audioflinger/AudioMixer.cpp | 278 +- libs/audioflinger/AudioMixer.h | 18 +- libs/audioflinger/AudioResampler.cpp | 350 +- libs/audioflinger/AudioResamplerCubic.cpp | 18 +- libs/audioflinger/AudioResamplerSinc.cpp | 292 +- libs/audioflinger/AudioResamplerSinc.h | 23 +- libs/surfaceflinger/Android.mk | 1 + .../DisplayHardware/DisplayHardware.cpp | 46 +- .../DisplayHardware/DisplayHardware.h | 10 +- .../DisplayHardware/DisplayHardwareBase.cpp | 20 +- .../GPUHardware/GPUHardware.cpp | 608 +-- libs/surfaceflinger/GPUHardware/GPUHardware.h | 77 +- libs/surfaceflinger/Layer.cpp | 33 +- libs/surfaceflinger/LayerBase.cpp | 37 +- libs/surfaceflinger/LayerBase.h | 14 +- libs/surfaceflinger/LayerBlur.cpp | 10 +- libs/surfaceflinger/LayerBuffer.cpp | 52 +- libs/surfaceflinger/LayerBuffer.h | 6 +- libs/surfaceflinger/LayerDim.cpp | 4 +- libs/surfaceflinger/SurfaceFlinger.cpp | 79 +- libs/surfaceflinger/SurfaceFlinger.h | 9 +- libs/surfaceflinger/VRamHeap.cpp | 81 +- libs/surfaceflinger/VRamHeap.h | 22 +- libs/ui/Android.mk | 3 +- libs/ui/BlitHardware.cpp | 446 -- libs/ui/Camera.cpp | 119 +- libs/ui/EGLDisplaySurface.cpp | 35 +- libs/ui/EGLNativeWindowSurface.cpp | 7 +- libs/ui/EventHub.cpp | 13 +- libs/ui/ICamera.cpp | 82 +- libs/ui/ICameraClient.cpp | 16 +- libs/ui/IOverlay.cpp | 87 + libs/ui/ISurface.cpp | 22 + libs/ui/ISurfaceFlingerClient.cpp | 4 +- libs/ui/Overlay.cpp | 145 + libs/ui/Surface.cpp | 7 +- libs/ui/Time.cpp | 4 +- libs/utils/Android.mk | 8 + libs/utils/CallStack.cpp | 58 +- libs/utils/IPCThreadState.cpp | 27 +- libs/utils/LogSocket.cpp | 2 +- libs/utils/MemoryDealer.cpp | 22 +- libs/utils/MemoryHeapPmem.cpp | 54 +- libs/utils/ResourceTypes.cpp | 41 +- libs/utils/futex_synchro.c | 6 +- opengl/libGLES_CM/gl_wrapper.cpp | 125 +- opengl/libagl/TextureObjectManager.cpp | 4 +- opengl/libagl/array.cpp | 4 +- opengl/libagl/egl.cpp | 197 +- opengl/libagl/light.cpp | 8 +- opengl/libagl/matrix.cpp | 5 +- opengl/libagl/primitives.cpp | 92 +- opengl/libagl/vertex.cpp | 2 +- opengl/tests/Android.mk | 1 + opengl/tests/angeles/Android.mk | 17 + .../tests/angeles/MODULE_LICENSE_BSD_OR_LGPL | 0 opengl/tests/angeles/README.txt | 77 + opengl/tests/angeles/app-linux.c | 222 + opengl/tests/angeles/app.h | 56 + opengl/tests/angeles/cams.h | 65 + opengl/tests/angeles/demo.c | 792 ++++ opengl/tests/angeles/gpustate.c | 39 + opengl/tests/angeles/include/GLES/egl.h | 229 + opengl/tests/angeles/include/GLES/egltypes.h | 20 + opengl/tests/angeles/include/GLES/gl.h | 584 +++ opengl/tests/angeles/license-BSD.txt | 34 + opengl/tests/angeles/license-LGPL.txt | 504 +++ opengl/tests/angeles/license.txt | 19 + opengl/tests/angeles/shapes.h | 59 + opengl/tests/filter/Android.mk | 16 + opengl/tests/filter/filter.c | 125 + opengl/tests/finish/Android.mk | 16 + opengl/tests/finish/finish.c | 221 + opengl/tests/sfsim/Android.mk | 15 + opengl/tests/sfsim/egl_surface.cpp | 346 ++ opengl/tests/sfsim/egl_surface.h | 113 + opengl/tests/sfsim/sfsim.c | 112 + opengl/tests/textures/Android.mk | 16 + opengl/tests/textures/textures.c | 107 + opengl/tests/tritex/Android.mk | 16 + opengl/tests/tritex/tritex.c | 271 ++ opengl/tools/glgen/gen | 99 + opengl/tools/glgen/glspec-1.0 | 106 + opengl/tools/glgen/glspec-1.0ext | 1 + opengl/tools/glgen/glspec-1.1 | 42 + opengl/tools/glgen/glspec-1.1ext | 16 + opengl/tools/glgen/glspec-1.1extpack | 38 + opengl/tools/glgen/glspec-checks | 59 + opengl/tools/glgen/src/CFunc.java | 155 + opengl/tools/glgen/src/CType.java | 85 + opengl/tools/glgen/src/CodeEmitter.java | 8 + opengl/tools/glgen/src/GenerateGL.java | 164 + opengl/tools/glgen/src/JFunc.java | 148 + opengl/tools/glgen/src/JType.java | 139 + opengl/tools/glgen/src/JniCodeEmitter.java | 1086 +++++ opengl/tools/glgen/src/ParameterChecker.java | 28 + .../tools/glgen/stubs/GL10ExtHeader.java-if | 22 + opengl/tools/glgen/stubs/GL10Header.java-if | 259 ++ .../tools/glgen/stubs/GL11ExtHeader.java-if | 40 + .../stubs/GL11ExtensionPackHeader.java-if | 108 + opengl/tools/glgen/stubs/GL11Header.java-if | 145 + .../glgen/stubs/GL11ImplHeader.java-impl | 30 + opengl/tools/glgen/stubs/GLCHeader.cpp | 129 + opengl/tools/glgen/stubs/GLHeader.java-if | 22 + .../tools/glgen/stubs/GLImplHeader.java-impl | 48 + opengl/tools/glgen/stubs/glGetString.cpp | 10 + .../tools/glgen/stubs/glGetString.java-10-if | 4 + opengl/tools/glgen/stubs/glGetString.java-if | 4 + .../tools/glgen/stubs/glGetString.java-impl | 16 + .../tools/glgen/stubs/glGetString.nativeReg | 1 + 416 files changed, 38215 insertions(+), 25217 deletions(-) create mode 100644 awt/java/awt/color/package.html create mode 100644 awt/java/awt/font/package.html create mode 100644 awt/java/awt/geom/package.html create mode 100644 awt/java/awt/image/package.html create mode 100644 awt/java/awt/image/renderable/package.html create mode 100644 awt/java/awt/package.html delete mode 100644 awt/java/beans/IndexedPropertyChangeEvent.java delete mode 100644 awt/java/beans/PropertyChangeEvent.java delete mode 100644 awt/java/beans/PropertyChangeListener.java delete mode 100644 awt/java/beans/PropertyChangeListenerProxy.java delete mode 100644 awt/java/beans/PropertyChangeSupport.java create mode 100644 awt/javax/imageio/event/package.html create mode 100644 awt/javax/imageio/metadata/package.html create mode 100644 awt/javax/imageio/package.html create mode 100644 awt/javax/imageio/plugins/bmp/package.html create mode 100644 awt/javax/imageio/plugins/jpeg/package.html create mode 100644 awt/javax/imageio/spi/package.html create mode 100644 awt/javax/imageio/stream/package.html create mode 100644 awt/org/apache/harmony/beans/internal/nls/MsgHelp.java rename awt/{org/apache/harmony/beans/internal => resources/org/apache/harmony/beans/internals}/nls/messages.properties (100%) create mode 100644 im/java/android/im/BrandingResourceIDs.java create mode 100644 im/java/android/im/IImPlugin.aidl create mode 100644 im/java/android/im/ImPluginConsts.java delete mode 100644 include/ui/BlitHardware.h create mode 100644 include/ui/IOverlay.h create mode 100644 include/ui/Overlay.h create mode 100644 libs/audioflinger/A2dpAudioInterface.cpp create mode 100644 libs/audioflinger/A2dpAudioInterface.h delete mode 100644 libs/ui/BlitHardware.cpp create mode 100644 libs/ui/IOverlay.cpp create mode 100644 libs/ui/Overlay.cpp create mode 100644 opengl/tests/Android.mk create mode 100644 opengl/tests/angeles/Android.mk create mode 100644 opengl/tests/angeles/MODULE_LICENSE_BSD_OR_LGPL create mode 100644 opengl/tests/angeles/README.txt create mode 100644 opengl/tests/angeles/app-linux.c create mode 100644 opengl/tests/angeles/app.h create mode 100644 opengl/tests/angeles/cams.h create mode 100644 opengl/tests/angeles/demo.c create mode 100644 opengl/tests/angeles/gpustate.c create mode 100644 opengl/tests/angeles/include/GLES/egl.h create mode 100644 opengl/tests/angeles/include/GLES/egltypes.h create mode 100644 opengl/tests/angeles/include/GLES/gl.h create mode 100644 opengl/tests/angeles/license-BSD.txt create mode 100644 opengl/tests/angeles/license-LGPL.txt create mode 100644 opengl/tests/angeles/license.txt create mode 100644 opengl/tests/angeles/shapes.h create mode 100644 opengl/tests/filter/Android.mk create mode 100644 opengl/tests/filter/filter.c create mode 100644 opengl/tests/finish/Android.mk create mode 100644 opengl/tests/finish/finish.c create mode 100644 opengl/tests/sfsim/Android.mk create mode 100644 opengl/tests/sfsim/egl_surface.cpp create mode 100644 opengl/tests/sfsim/egl_surface.h create mode 100644 opengl/tests/sfsim/sfsim.c create mode 100644 opengl/tests/textures/Android.mk create mode 100644 opengl/tests/textures/textures.c create mode 100644 opengl/tests/tritex/Android.mk create mode 100644 opengl/tests/tritex/tritex.c create mode 100755 opengl/tools/glgen/gen create mode 100644 opengl/tools/glgen/glspec-1.0 create mode 100644 opengl/tools/glgen/glspec-1.0ext create mode 100644 opengl/tools/glgen/glspec-1.1 create mode 100644 opengl/tools/glgen/glspec-1.1ext create mode 100644 opengl/tools/glgen/glspec-1.1extpack create mode 100644 opengl/tools/glgen/glspec-checks create mode 100644 opengl/tools/glgen/src/CFunc.java create mode 100644 opengl/tools/glgen/src/CType.java create mode 100644 opengl/tools/glgen/src/CodeEmitter.java create mode 100644 opengl/tools/glgen/src/GenerateGL.java create mode 100644 opengl/tools/glgen/src/JFunc.java create mode 100644 opengl/tools/glgen/src/JType.java create mode 100644 opengl/tools/glgen/src/JniCodeEmitter.java create mode 100644 opengl/tools/glgen/src/ParameterChecker.java create mode 100644 opengl/tools/glgen/stubs/GL10ExtHeader.java-if create mode 100644 opengl/tools/glgen/stubs/GL10Header.java-if create mode 100644 opengl/tools/glgen/stubs/GL11ExtHeader.java-if create mode 100644 opengl/tools/glgen/stubs/GL11ExtensionPackHeader.java-if create mode 100644 opengl/tools/glgen/stubs/GL11Header.java-if create mode 100644 opengl/tools/glgen/stubs/GL11ImplHeader.java-impl create mode 100644 opengl/tools/glgen/stubs/GLCHeader.cpp create mode 100644 opengl/tools/glgen/stubs/GLHeader.java-if create mode 100644 opengl/tools/glgen/stubs/GLImplHeader.java-impl create mode 100644 opengl/tools/glgen/stubs/glGetString.cpp create mode 100644 opengl/tools/glgen/stubs/glGetString.java-10-if create mode 100644 opengl/tools/glgen/stubs/glGetString.java-if create mode 100644 opengl/tools/glgen/stubs/glGetString.java-impl create mode 100644 opengl/tools/glgen/stubs/glGetString.nativeReg diff --git a/awt/java/awt/AWTEvent.java b/awt/java/awt/AWTEvent.java index 1ed9a374fa..a8dc83aafe 100644 --- a/awt/java/awt/AWTEvent.java +++ b/awt/java/awt/AWTEvent.java @@ -18,6 +18,7 @@ * @author Dmitry A. Durnev, Michael Danilov * @version $Revision$ */ + package java.awt; import java.util.EventObject; @@ -27,190 +28,252 @@ import java.util.EventListener; import java.awt.event.*; /** - * The abstract AWT events is base class for all AWT events. - * This class and its subclasses supercede the original java.awt.Event class. + * The abstract class AWTEvent is the base class for all AWT events. This class + * and its subclasses supersede the original java.awt.Event class. + * + * @since Android 1.0 */ public abstract class AWTEvent extends EventObject { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -1825314779160409405L; - /** The Constant COMPONENT_EVENT_MASK indicates the event relates to a component. */ + /** + * The Constant COMPONENT_EVENT_MASK indicates the event relates to a + * component. + */ public static final long COMPONENT_EVENT_MASK = 1; - /** The Constant CONTAINER_EVENT_MASK indicates the event relates to a container. */ + /** + * The Constant CONTAINER_EVENT_MASK indicates the event relates to a + * container. + */ public static final long CONTAINER_EVENT_MASK = 2; - /** The Constant FOCUS_EVENT_MASK indicates the event relates to the focus. */ + /** + * The Constant FOCUS_EVENT_MASK indicates the event relates to the focus. + */ public static final long FOCUS_EVENT_MASK = 4; - /** The Constant KEY_EVENT_MASK indicates the event relates to a key. */ + /** + * The Constant KEY_EVENT_MASK indicates the event relates to a key. + */ public static final long KEY_EVENT_MASK = 8; - /** The Constant MOUSE_EVENT_MASK indicates the event relates to the mouse. */ + /** + * The Constant MOUSE_EVENT_MASK indicates the event relates to the mouse. + */ public static final long MOUSE_EVENT_MASK = 16; - /** The Constant MOUSE_MOTION_EVENT_MASK indicates the event relates to a mouse motion. */ + /** + * The Constant MOUSE_MOTION_EVENT_MASK indicates the event relates to a + * mouse motion. + */ public static final long MOUSE_MOTION_EVENT_MASK = 32; - /** The Constant WINDOW_EVENT_MASK indicates the event relates to a window. */ + /** + * The Constant WINDOW_EVENT_MASK indicates the event relates to a window. + */ public static final long WINDOW_EVENT_MASK = 64; - /** The Constant ACTION_EVENT_MASK indicates the event relates to an action. */ + /** + * The Constant ACTION_EVENT_MASK indicates the event relates to an action. + */ public static final long ACTION_EVENT_MASK = 128; - /** The Constant ADJUSTMENT_EVENT_MASK indicates the event relates to an adjustment. */ + /** + * The Constant ADJUSTMENT_EVENT_MASK indicates the event relates to an + * adjustment. + */ public static final long ADJUSTMENT_EVENT_MASK = 256; - /** The Constant ITEM_EVENT_MASK indicates the event relates to an item. */ + /** + * The Constant ITEM_EVENT_MASK indicates the event relates to an item. + */ public static final long ITEM_EVENT_MASK = 512; - /** The Constant TEXT_EVENT_MASK indicates the event relates to text. */ + /** + * The Constant TEXT_EVENT_MASK indicates the event relates to text. + */ public static final long TEXT_EVENT_MASK = 1024; - /** The Constant INPUT_METHOD_EVENT_MASK indicates the event relates to an input method. */ + /** + * The Constant INPUT_METHOD_EVENT_MASK indicates the event relates to an + * input method. + */ public static final long INPUT_METHOD_EVENT_MASK = 2048; - /** The Constant PAINT_EVENT_MASK indicates the event relates to a paint method. */ + /** + * The Constant PAINT_EVENT_MASK indicates the event relates to a paint + * method. + */ public static final long PAINT_EVENT_MASK = 8192; - /** The Constant INVOCATION_EVENT_MASK indicates the event relates to a method invocation. */ + /** + * The Constant INVOCATION_EVENT_MASK indicates the event relates to a + * method invocation. + */ public static final long INVOCATION_EVENT_MASK = 16384; - /** The Constant HIERARCHY_EVENT_MASK indicates the event relates to a hierarchy. */ + /** + * The Constant HIERARCHY_EVENT_MASK indicates the event relates to a + * hierarchy. + */ public static final long HIERARCHY_EVENT_MASK = 32768; - /** - * The Constant HIERARCHY_BOUNDS_EVENT_MASK indicates the event relates to hierarchy bounds. + /** + * The Constant HIERARCHY_BOUNDS_EVENT_MASK indicates the event relates to + * hierarchy bounds. */ public static final long HIERARCHY_BOUNDS_EVENT_MASK = 65536; - /** The Constant MOUSE_WHEEL_EVENT_MASK indicates the event relates to the mouse wheel. */ + /** + * The Constant MOUSE_WHEEL_EVENT_MASK indicates the event relates to the + * mouse wheel. + */ public static final long MOUSE_WHEEL_EVENT_MASK = 131072; - /** The Constant WINDOW_STATE_EVENT_MASK indicates the event relates to a window state. */ + /** + * The Constant WINDOW_STATE_EVENT_MASK indicates the event relates to a + * window state. + */ public static final long WINDOW_STATE_EVENT_MASK = 262144; - /** The Constant WINDOW_FOCUS_EVENT_MASK indicates the event relates to a window focus. */ + /** + * The Constant WINDOW_FOCUS_EVENT_MASK indicates the event relates to a + * window focus. + */ public static final long WINDOW_FOCUS_EVENT_MASK = 524288; - /** The Constant RESERVED_ID_MAX indicates the maximum value for reserved - * AWT event IDs. + /** + * The Constant RESERVED_ID_MAX indicates the maximum value for reserved AWT + * event IDs. */ public static final int RESERVED_ID_MAX = 1999; - /** The Constant eventsMap. */ + /** + * The Constant eventsMap. + */ private static final Hashtable eventsMap = new Hashtable(); - /** The converter. */ + /** + * The converter. + */ private static EventConverter converter; - /** The ID of the event. */ + /** + * The ID of the event. + */ protected int id; - /** - * The consumed indicates whether or not the event is sent back down to - * the peer once the source has processed it (false means it's sent to the peer, + /** + * The consumed indicates whether or not the event is sent back down to the + * peer once the source has processed it (false means it's sent to the peer, * true means it's not). - */ + */ protected boolean consumed; - /** The dispatched by kfm. */ + /** + * The dispatched by kfm. + */ boolean dispatchedByKFM; - - /** The is posted. */ + + /** + * The is posted. + */ transient boolean isPosted; static { - eventsMap.put(new Integer(KeyEvent.KEY_TYPED), - new EventDescriptor(KEY_EVENT_MASK, KeyListener.class)); - eventsMap.put(new Integer(KeyEvent.KEY_PRESSED), - new EventDescriptor(KEY_EVENT_MASK, KeyListener.class)); - eventsMap.put(new Integer(KeyEvent.KEY_RELEASED), - new EventDescriptor(KEY_EVENT_MASK, KeyListener.class)); - eventsMap.put(new Integer(MouseEvent.MOUSE_CLICKED), - new EventDescriptor(MOUSE_EVENT_MASK, MouseListener.class)); - eventsMap.put(new Integer(MouseEvent.MOUSE_PRESSED), - new EventDescriptor(MOUSE_EVENT_MASK, MouseListener.class)); - eventsMap.put(new Integer(MouseEvent.MOUSE_RELEASED), - new EventDescriptor(MOUSE_EVENT_MASK, MouseListener.class)); - eventsMap.put(new Integer(MouseEvent.MOUSE_MOVED), - new EventDescriptor(MOUSE_MOTION_EVENT_MASK, MouseMotionListener.class)); - eventsMap.put(new Integer(MouseEvent.MOUSE_ENTERED), - new EventDescriptor(MOUSE_EVENT_MASK, MouseListener.class)); - eventsMap.put(new Integer(MouseEvent.MOUSE_EXITED), - new EventDescriptor(MOUSE_EVENT_MASK, MouseListener.class)); - eventsMap.put(new Integer(MouseEvent.MOUSE_DRAGGED), - new EventDescriptor(MOUSE_MOTION_EVENT_MASK, MouseMotionListener.class)); - eventsMap.put(new Integer(MouseEvent.MOUSE_WHEEL), - new EventDescriptor(MOUSE_WHEEL_EVENT_MASK, MouseWheelListener.class)); - eventsMap.put(new Integer(ComponentEvent.COMPONENT_MOVED), - new EventDescriptor(COMPONENT_EVENT_MASK, ComponentListener.class)); - eventsMap.put(new Integer(ComponentEvent.COMPONENT_RESIZED), - new EventDescriptor(COMPONENT_EVENT_MASK, ComponentListener.class)); - eventsMap.put(new Integer(ComponentEvent.COMPONENT_SHOWN), - new EventDescriptor(COMPONENT_EVENT_MASK, ComponentListener.class)); - eventsMap.put(new Integer(ComponentEvent.COMPONENT_HIDDEN), - new EventDescriptor(COMPONENT_EVENT_MASK, ComponentListener.class)); - eventsMap.put(new Integer(FocusEvent.FOCUS_GAINED), - new EventDescriptor(FOCUS_EVENT_MASK, FocusListener.class)); - eventsMap.put(new Integer(FocusEvent.FOCUS_LOST), - new EventDescriptor(FOCUS_EVENT_MASK, FocusListener.class)); - eventsMap.put(new Integer(PaintEvent.PAINT), - new EventDescriptor(PAINT_EVENT_MASK, null)); - eventsMap.put(new Integer(PaintEvent.UPDATE), - new EventDescriptor(PAINT_EVENT_MASK, null)); - eventsMap.put(new Integer(WindowEvent.WINDOW_OPENED), - new EventDescriptor(WINDOW_EVENT_MASK, WindowListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_CLOSING), - new EventDescriptor(WINDOW_EVENT_MASK, WindowListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_CLOSED), - new EventDescriptor(WINDOW_EVENT_MASK, WindowListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_DEICONIFIED), - new EventDescriptor(WINDOW_EVENT_MASK, WindowListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_ICONIFIED), - new EventDescriptor(WINDOW_EVENT_MASK, WindowListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_STATE_CHANGED), - new EventDescriptor(WINDOW_STATE_EVENT_MASK, WindowStateListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_LOST_FOCUS), - new EventDescriptor(WINDOW_FOCUS_EVENT_MASK, WindowFocusListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_GAINED_FOCUS), - new EventDescriptor(WINDOW_FOCUS_EVENT_MASK, WindowFocusListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_DEACTIVATED), - new EventDescriptor(WINDOW_EVENT_MASK, WindowListener.class)); - eventsMap.put(new Integer(WindowEvent.WINDOW_ACTIVATED), - new EventDescriptor(WINDOW_EVENT_MASK, WindowListener.class)); - eventsMap.put(new Integer(HierarchyEvent.HIERARCHY_CHANGED), - new EventDescriptor(HIERARCHY_EVENT_MASK, HierarchyListener.class)); - eventsMap.put(new Integer(HierarchyEvent.ANCESTOR_MOVED), - new EventDescriptor(HIERARCHY_BOUNDS_EVENT_MASK, HierarchyBoundsListener.class)); - eventsMap.put(new Integer(HierarchyEvent.ANCESTOR_RESIZED), - new EventDescriptor(HIERARCHY_BOUNDS_EVENT_MASK, HierarchyBoundsListener.class)); - eventsMap.put(new Integer(ContainerEvent.COMPONENT_ADDED), - new EventDescriptor(CONTAINER_EVENT_MASK, ContainerListener.class)); - eventsMap.put(new Integer(ContainerEvent.COMPONENT_REMOVED), - new EventDescriptor(CONTAINER_EVENT_MASK, ContainerListener.class)); - eventsMap.put(new Integer(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED), - new EventDescriptor(INPUT_METHOD_EVENT_MASK, InputMethodListener.class)); - eventsMap.put(new Integer(InputMethodEvent.CARET_POSITION_CHANGED), - new EventDescriptor(INPUT_METHOD_EVENT_MASK, InputMethodListener.class)); - eventsMap.put(new Integer(InvocationEvent.INVOCATION_DEFAULT), - new EventDescriptor(INVOCATION_EVENT_MASK, null)); - eventsMap.put(new Integer(ItemEvent.ITEM_STATE_CHANGED), - new EventDescriptor(ITEM_EVENT_MASK, ItemListener.class)); - eventsMap.put(new Integer(TextEvent.TEXT_VALUE_CHANGED), - new EventDescriptor(TEXT_EVENT_MASK, TextListener.class)); - eventsMap.put(new Integer(ActionEvent.ACTION_PERFORMED), - new EventDescriptor(ACTION_EVENT_MASK, ActionListener.class)); - eventsMap.put(new Integer(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED), - new EventDescriptor(ADJUSTMENT_EVENT_MASK, AdjustmentListener.class)); + eventsMap.put(new Integer(KeyEvent.KEY_TYPED), new EventDescriptor(KEY_EVENT_MASK, + KeyListener.class)); + eventsMap.put(new Integer(KeyEvent.KEY_PRESSED), new EventDescriptor(KEY_EVENT_MASK, + KeyListener.class)); + eventsMap.put(new Integer(KeyEvent.KEY_RELEASED), new EventDescriptor(KEY_EVENT_MASK, + KeyListener.class)); + eventsMap.put(new Integer(MouseEvent.MOUSE_CLICKED), new EventDescriptor(MOUSE_EVENT_MASK, + MouseListener.class)); + eventsMap.put(new Integer(MouseEvent.MOUSE_PRESSED), new EventDescriptor(MOUSE_EVENT_MASK, + MouseListener.class)); + eventsMap.put(new Integer(MouseEvent.MOUSE_RELEASED), new EventDescriptor(MOUSE_EVENT_MASK, + MouseListener.class)); + eventsMap.put(new Integer(MouseEvent.MOUSE_MOVED), new EventDescriptor( + MOUSE_MOTION_EVENT_MASK, MouseMotionListener.class)); + eventsMap.put(new Integer(MouseEvent.MOUSE_ENTERED), new EventDescriptor(MOUSE_EVENT_MASK, + MouseListener.class)); + eventsMap.put(new Integer(MouseEvent.MOUSE_EXITED), new EventDescriptor(MOUSE_EVENT_MASK, + MouseListener.class)); + eventsMap.put(new Integer(MouseEvent.MOUSE_DRAGGED), new EventDescriptor( + MOUSE_MOTION_EVENT_MASK, MouseMotionListener.class)); + eventsMap.put(new Integer(MouseEvent.MOUSE_WHEEL), new EventDescriptor( + MOUSE_WHEEL_EVENT_MASK, MouseWheelListener.class)); + eventsMap.put(new Integer(ComponentEvent.COMPONENT_MOVED), new EventDescriptor( + COMPONENT_EVENT_MASK, ComponentListener.class)); + eventsMap.put(new Integer(ComponentEvent.COMPONENT_RESIZED), new EventDescriptor( + COMPONENT_EVENT_MASK, ComponentListener.class)); + eventsMap.put(new Integer(ComponentEvent.COMPONENT_SHOWN), new EventDescriptor( + COMPONENT_EVENT_MASK, ComponentListener.class)); + eventsMap.put(new Integer(ComponentEvent.COMPONENT_HIDDEN), new EventDescriptor( + COMPONENT_EVENT_MASK, ComponentListener.class)); + eventsMap.put(new Integer(FocusEvent.FOCUS_GAINED), new EventDescriptor(FOCUS_EVENT_MASK, + FocusListener.class)); + eventsMap.put(new Integer(FocusEvent.FOCUS_LOST), new EventDescriptor(FOCUS_EVENT_MASK, + FocusListener.class)); + eventsMap.put(new Integer(PaintEvent.PAINT), new EventDescriptor(PAINT_EVENT_MASK, null)); + eventsMap.put(new Integer(PaintEvent.UPDATE), new EventDescriptor(PAINT_EVENT_MASK, null)); + eventsMap.put(new Integer(WindowEvent.WINDOW_OPENED), new EventDescriptor( + WINDOW_EVENT_MASK, WindowListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_CLOSING), new EventDescriptor( + WINDOW_EVENT_MASK, WindowListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_CLOSED), new EventDescriptor( + WINDOW_EVENT_MASK, WindowListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_DEICONIFIED), new EventDescriptor( + WINDOW_EVENT_MASK, WindowListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_ICONIFIED), new EventDescriptor( + WINDOW_EVENT_MASK, WindowListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_STATE_CHANGED), new EventDescriptor( + WINDOW_STATE_EVENT_MASK, WindowStateListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_LOST_FOCUS), new EventDescriptor( + WINDOW_FOCUS_EVENT_MASK, WindowFocusListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_GAINED_FOCUS), new EventDescriptor( + WINDOW_FOCUS_EVENT_MASK, WindowFocusListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_DEACTIVATED), new EventDescriptor( + WINDOW_EVENT_MASK, WindowListener.class)); + eventsMap.put(new Integer(WindowEvent.WINDOW_ACTIVATED), new EventDescriptor( + WINDOW_EVENT_MASK, WindowListener.class)); + eventsMap.put(new Integer(HierarchyEvent.HIERARCHY_CHANGED), new EventDescriptor( + HIERARCHY_EVENT_MASK, HierarchyListener.class)); + eventsMap.put(new Integer(HierarchyEvent.ANCESTOR_MOVED), new EventDescriptor( + HIERARCHY_BOUNDS_EVENT_MASK, HierarchyBoundsListener.class)); + eventsMap.put(new Integer(HierarchyEvent.ANCESTOR_RESIZED), new EventDescriptor( + HIERARCHY_BOUNDS_EVENT_MASK, HierarchyBoundsListener.class)); + eventsMap.put(new Integer(ContainerEvent.COMPONENT_ADDED), new EventDescriptor( + CONTAINER_EVENT_MASK, ContainerListener.class)); + eventsMap.put(new Integer(ContainerEvent.COMPONENT_REMOVED), new EventDescriptor( + CONTAINER_EVENT_MASK, ContainerListener.class)); + eventsMap.put(new Integer(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED), new EventDescriptor( + INPUT_METHOD_EVENT_MASK, InputMethodListener.class)); + eventsMap.put(new Integer(InputMethodEvent.CARET_POSITION_CHANGED), new EventDescriptor( + INPUT_METHOD_EVENT_MASK, InputMethodListener.class)); + eventsMap.put(new Integer(InvocationEvent.INVOCATION_DEFAULT), new EventDescriptor( + INVOCATION_EVENT_MASK, null)); + eventsMap.put(new Integer(ItemEvent.ITEM_STATE_CHANGED), new EventDescriptor( + ITEM_EVENT_MASK, ItemListener.class)); + eventsMap.put(new Integer(TextEvent.TEXT_VALUE_CHANGED), new EventDescriptor( + TEXT_EVENT_MASK, TextListener.class)); + eventsMap.put(new Integer(ActionEvent.ACTION_PERFORMED), new EventDescriptor( + ACTION_EVENT_MASK, ActionListener.class)); + eventsMap.put(new Integer(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED), new EventDescriptor( + ADJUSTMENT_EVENT_MASK, AdjustmentListener.class)); converter = new EventConverter(); } - + /** * Instantiates a new AWT event from the specified Event object. * - * @param event the Event object. + * @param event + * the Event object. */ public AWTEvent(Event event) { this(event.target, event.id); @@ -219,8 +282,10 @@ public abstract class AWTEvent extends EventObject { /** * Instantiates a new AWT event with the specified object and type. * - * @param source the source Object. - * @param id the event's type. + * @param source + * the source Object. + * @param id + * the event's type. */ public AWTEvent(Object source, int id) { super(source); @@ -240,7 +305,8 @@ public abstract class AWTEvent extends EventObject { /** * Sets a new source for the AWTEvent. * - * @param newSource the new source Object for the AWTEvent. + * @param newSource + * the new source Object for the AWTEvent. */ public void setSource(Object newSource) { source = newSource; @@ -253,33 +319,32 @@ public abstract class AWTEvent extends EventObject { */ @Override public String toString() { - /* The format is based on 1.5 release behavior - * which can be revealed by the following code: - * - * AWTEvent event = new AWTEvent(new Component(){}, 1){}; - * System.out.println(event); + /* + * The format is based on 1.5 release behavior which can be revealed by + * the following code: AWTEvent event = new AWTEvent(new Component(){}, + * 1){}; System.out.println(event); */ String name = ""; //$NON-NLS-1$ - + if (source instanceof Component && (source != null)) { - Component comp = (Component) getSource(); + Component comp = (Component)getSource(); name = comp.getName(); if (name == null) { name = ""; //$NON-NLS-1$ } } - + return (getClass().getName() + "[" + paramString() + "]" //$NON-NLS-1$ //$NON-NLS-2$ + " on " + (name.length() > 0 ? name : source)); //$NON-NLS-1$ } /** - * Returns a string representation of the AWTEvent state. - * + * Returns a string representation of the AWTEvent state. + * * @return a string representation of the AWTEvent state. */ public String paramString() { - //nothing to implement: all event types must override this method + // nothing to implement: all event types must override this method return ""; //$NON-NLS-1$ } @@ -296,73 +361,77 @@ public abstract class AWTEvent extends EventObject { * Consumes the AWTEvent. */ protected void consume() { - consumed = true; + consumed = true; } /** * Convert AWTEvent object to a corresponding (deprecated) Event object. * - * @return new Event object which is a converted AWTEvent object or null - * if the conversion is not possible + * @return new Event object which is a converted AWTEvent object or null if + * the conversion is not possible */ Event getEvent() { - + if (id == ActionEvent.ACTION_PERFORMED) { - ActionEvent ae = (ActionEvent) this; + ActionEvent ae = (ActionEvent)this; return converter.convertActionEvent(ae); } else if (id == AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED) { - AdjustmentEvent ae = (AdjustmentEvent) this; + AdjustmentEvent ae = (AdjustmentEvent)this; return converter.convertAdjustmentEvent(ae); -//???AWT -// } else if (id == ComponentEvent.COMPONENT_MOVED -// && source instanceof Window) { -// //the only type of Component events is COMPONENT_MOVED on window -// ComponentEvent ce = (ComponentEvent) this; -// return converter.convertComponentEvent(ce); + // ???AWT + // } else if (id == ComponentEvent.COMPONENT_MOVED + // && source instanceof Window) { + // //the only type of Component events is COMPONENT_MOVED on window + // ComponentEvent ce = (ComponentEvent) this; + // return converter.convertComponentEvent(ce); } else if (id >= FocusEvent.FOCUS_FIRST && id <= FocusEvent.FOCUS_LAST) { - //nothing to convert + // nothing to convert -//???AWT -// } else if (id == ItemEvent.ITEM_STATE_CHANGED) { -// ItemEvent ie = (ItemEvent) this; -// return converter.convertItemEvent(ie); + // ???AWT + // } else if (id == ItemEvent.ITEM_STATE_CHANGED) { + // ItemEvent ie = (ItemEvent) this; + // return converter.convertItemEvent(ie); } else if (id == KeyEvent.KEY_PRESSED || id == KeyEvent.KEY_RELEASED) { - KeyEvent ke = (KeyEvent) this; + KeyEvent ke = (KeyEvent)this; return converter.convertKeyEvent(ke); } else if (id >= MouseEvent.MOUSE_FIRST && id <= MouseEvent.MOUSE_LAST) { - MouseEvent me = (MouseEvent) this; + MouseEvent me = (MouseEvent)this; return converter.convertMouseEvent(me); - } else if (id == WindowEvent.WINDOW_CLOSING - || id == WindowEvent.WINDOW_ICONIFIED + } else if (id == WindowEvent.WINDOW_CLOSING || id == WindowEvent.WINDOW_ICONIFIED || id == WindowEvent.WINDOW_DEICONIFIED) { - //nothing to convert + // nothing to convert } else { return null; } return new Event(source, id, null); } - /** - * The Class EventDescriptor. + * The class EventDescriptor. */ static final class EventDescriptor { - /** The event mask. */ + /** + * The event mask. + */ final long eventMask; - /** The listener type. */ + /** + * The listener type. + */ final Class listenerType; /** * Instantiates a new event descriptor. * - * @param eventMask the event mask - * @param listenerType the listener type + * @param eventMask + * the event mask. + * @param listenerType + * the listener type. */ EventDescriptor(long eventMask, Class listenerType) { this.eventMask = eventMask; @@ -370,24 +439,28 @@ public abstract class AWTEvent extends EventObject { } } - + /** - * The Class EventTypeLookup. + * The class EventTypeLookup. */ static final class EventTypeLookup { - - /** The last event. */ + + /** + * The last event. + */ private AWTEvent lastEvent = null; - - /** The last event descriptor. */ + + /** + * The last event descriptor. + */ private EventDescriptor lastEventDescriptor = null; /** * Gets the event descriptor. * - * @param event the event - * - * @return the event descriptor + * @param event + * the event. + * @return the event descriptor. */ EventDescriptor getEventDescriptor(AWTEvent event) { synchronized (this) { @@ -403,9 +476,9 @@ public abstract class AWTEvent extends EventObject { /** * Gets the event mask. * - * @param event the event - * - * @return the event mask + * @param event + * the event. + * @return the event mask. */ long getEventMask(AWTEvent event) { final EventDescriptor ed = getEventDescriptor(event); @@ -414,65 +487,62 @@ public abstract class AWTEvent extends EventObject { } /** - * The Class EventConverter. + * The class EventConverter. */ static final class EventConverter { - - /** The Constant OLD_MOD_MASK. */ - static final int OLD_MOD_MASK = Event.ALT_MASK | Event.CTRL_MASK - | Event.META_MASK | Event.SHIFT_MASK; + + /** + * The constant OLD_MOD_MASK. + */ + static final int OLD_MOD_MASK = Event.ALT_MASK | Event.CTRL_MASK | Event.META_MASK + | Event.SHIFT_MASK; /** * Convert action event. * - * @param ae the ae - * - * @return the event + * @param ae + * the ae. + * @return the event. */ Event convertActionEvent(ActionEvent ae) { Event evt = new Event(ae.getSource(), ae.getID(), ae.getActionCommand()); evt.when = ae.getWhen(); evt.modifiers = ae.getModifiers() & OLD_MOD_MASK; - /* if (source instanceof Button) { - arg = ((Button) source).getLabel(); - } else if (source instanceof Checkbox) { - arg = new Boolean(((Checkbox) source).getState()); - } else if (source instanceof CheckboxMenuItem) { - arg = ((CheckboxMenuItem) source).getLabel(); - } else if (source instanceof Choice) { - arg = ((Choice) source).getSelectedItem(); - } else if (source instanceof List) { - arg = ((List) source).getSelectedItem(); - } else if (source instanceof MenuItem) { - arg = ((MenuItem) source).getLabel(); - } else if (source instanceof TextField) { - arg = ((TextField) source).getText(); - } -*/ + /* + * if (source instanceof Button) { arg = ((Button) + * source).getLabel(); } else if (source instanceof Checkbox) { arg + * = new Boolean(((Checkbox) source).getState()); } else if (source + * instanceof CheckboxMenuItem) { arg = ((CheckboxMenuItem) + * source).getLabel(); } else if (source instanceof Choice) { arg = + * ((Choice) source).getSelectedItem(); } else if (source instanceof + * List) { arg = ((List) source).getSelectedItem(); } else if + * (source instanceof MenuItem) { arg = ((MenuItem) + * source).getLabel(); } else if (source instanceof TextField) { arg + * = ((TextField) source).getText(); } + */ return evt; } - /** * Convert adjustment event. * - * @param ae the ae - * - * @return the event + * @param ae + * the ae. + * @return the event. */ Event convertAdjustmentEvent(AdjustmentEvent ae) { - //TODO: Event.SCROLL_BEGIN/SCROLL_END - return new Event(ae.source, ae.id + ae.getAdjustmentType() - 1, - new Integer(ae.getValue())); + // TODO: Event.SCROLL_BEGIN/SCROLL_END + return new Event(ae.source, ae.id + ae.getAdjustmentType() - 1, new Integer(ae + .getValue())); } /** * Convert component event. * - * @param ce the ce - * - * @return the event + * @param ce + * the ce. + * @return the event. */ Event convertComponentEvent(ComponentEvent ce) { Component comp = ce.getComponent(); @@ -482,35 +552,27 @@ public abstract class AWTEvent extends EventObject { return evt; } - //???AWT + // ???AWT /* - Event convertItemEvent(ItemEvent ie) { - int oldId = ie.id + ie.getStateChange() - 1; - Object source = ie.source; - int idx = -1; - if (source instanceof List) { - List list = (List) source; - idx = list.getSelectedIndex(); - } - else if (source instanceof Choice) { - Choice choice = (Choice) source; - idx = choice.getSelectedIndex(); - } - Object arg = idx >= 0 ? new Integer(idx) : null; - return new Event(source, oldId, arg); - } - */ - + * Event convertItemEvent(ItemEvent ie) { int oldId = ie.id + + * ie.getStateChange() - 1; Object source = ie.source; int idx = -1; if + * (source instanceof List) { List list = (List) source; idx = + * list.getSelectedIndex(); } else if (source instanceof Choice) { + * Choice choice = (Choice) source; idx = choice.getSelectedIndex(); } + * Object arg = idx >= 0 ? new Integer(idx) : null; return new + * Event(source, oldId, arg); } + */ + /** * Convert key event. * - * @param ke the ke - * - * @return the event + * @param ke + * the ke. + * @return the event. */ Event convertKeyEvent(KeyEvent ke) { int oldId = ke.id; - //leave only old Event's modifiers + // leave only old Event's modifiers int mod = ke.getModifiers() & OLD_MOD_MASK; Component comp = ke.getComponent(); @@ -518,7 +580,7 @@ public abstract class AWTEvent extends EventObject { int keyCode = ke.getKeyCode(); int key = convertKey(keyChar, keyCode); if (key >= Event.HOME && key <= Event.INSERT) { - oldId += 2; //non-ASCII key -> action key + oldId += 2; // non-ASCII key -> action key } return new Event(comp, ke.getWhen(), oldId, 0, 0, key, mod); } @@ -526,9 +588,9 @@ public abstract class AWTEvent extends EventObject { /** * Convert mouse event. * - * @param me the me - * - * @return the event + * @param me + * the me. + * @return the event. */ Event convertMouseEvent(MouseEvent me) { int id = me.id; @@ -537,7 +599,7 @@ public abstract class AWTEvent extends EventObject { evt.x = me.getX(); evt.y = me.getY(); int mod = me.getModifiers(); - //in Event modifiers mean button number for mouse events: + // in Event modifiers mean button number for mouse events: evt.modifiers = mod & (Event.ALT_MASK | Event.META_MASK); if (id == MouseEvent.MOUSE_PRESSED) { evt.clickCount = me.getClickCount(); @@ -546,68 +608,69 @@ public abstract class AWTEvent extends EventObject { } return null; } - + /** * Convert key. * - * @param keyChar the key char - * @param keyCode the key code - * - * @return the int + * @param keyChar + * the key char. + * @param keyCode + * the key code. + * @return the int. */ int convertKey(char keyChar, int keyCode) { int key; - //F1 - F12 + // F1 - F12 if (keyCode >= KeyEvent.VK_F1 && keyCode <= KeyEvent.VK_F12) { key = Event.F1 + keyCode - KeyEvent.VK_F1; } else { switch (keyCode) { - default: //non-action key - key = keyChar; - break; - //action keys: - case KeyEvent.VK_HOME: - key = Event.HOME; - break; - case KeyEvent.VK_END: - key = Event.END; - break; - case KeyEvent.VK_PAGE_UP: - key = Event.PGUP; - break; - case KeyEvent.VK_PAGE_DOWN: - key = Event.PGDN; - break; - case KeyEvent.VK_UP: - key = Event.UP; - break; - case KeyEvent.VK_DOWN: - key = Event.DOWN; - break; - case KeyEvent.VK_LEFT: - key = Event.LEFT; - break; - case KeyEvent.VK_RIGHT: - key = Event.RIGHT; - break; - case KeyEvent.VK_PRINTSCREEN: - key = Event.PRINT_SCREEN; - break; - case KeyEvent.VK_SCROLL_LOCK: - key = Event.SCROLL_LOCK; - break; - case KeyEvent.VK_CAPS_LOCK: - key = Event.CAPS_LOCK; - break; - case KeyEvent.VK_NUM_LOCK: - key = Event.NUM_LOCK; - break; - case KeyEvent.VK_PAUSE: - key = Event.PAUSE; - break; - case KeyEvent.VK_INSERT: - key = Event.INSERT; - break; + default: // non-action key + key = keyChar; + break; + // action keys: + case KeyEvent.VK_HOME: + key = Event.HOME; + break; + case KeyEvent.VK_END: + key = Event.END; + break; + case KeyEvent.VK_PAGE_UP: + key = Event.PGUP; + break; + case KeyEvent.VK_PAGE_DOWN: + key = Event.PGDN; + break; + case KeyEvent.VK_UP: + key = Event.UP; + break; + case KeyEvent.VK_DOWN: + key = Event.DOWN; + break; + case KeyEvent.VK_LEFT: + key = Event.LEFT; + break; + case KeyEvent.VK_RIGHT: + key = Event.RIGHT; + break; + case KeyEvent.VK_PRINTSCREEN: + key = Event.PRINT_SCREEN; + break; + case KeyEvent.VK_SCROLL_LOCK: + key = Event.SCROLL_LOCK; + break; + case KeyEvent.VK_CAPS_LOCK: + key = Event.CAPS_LOCK; + break; + case KeyEvent.VK_NUM_LOCK: + key = Event.NUM_LOCK; + break; + case KeyEvent.VK_PAUSE: + key = Event.PAUSE; + break; + case KeyEvent.VK_INSERT: + key = Event.INSERT; + break; } } return key; diff --git a/awt/java/awt/AWTException.java b/awt/java/awt/AWTException.java index 70ce6e175d..6590b73d1d 100644 --- a/awt/java/awt/AWTException.java +++ b/awt/java/awt/AWTException.java @@ -18,26 +18,30 @@ * @author Michael Danilov * @version $Revision$ */ -package java.awt; +package java.awt; /** - * The AWTException class is used to provide notification and information - * about AWT errors. + * The AWTException class is used to provide notification and information about + * AWT errors. + * + * @since Android 1.0 */ public class AWTException extends Exception { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -1900414231151323879L; /** * Instantiates a new AWT exception with the specified message. * - * @param msg the specific message for current exception. + * @param msg + * the specific message for current exception. */ public AWTException(String msg) { super(msg); } } - diff --git a/awt/java/awt/AWTKeyStroke.java b/awt/java/awt/AWTKeyStroke.java index 5e7de4e3fc..f01f6f00ec 100644 --- a/awt/java/awt/AWTKeyStroke.java +++ b/awt/java/awt/AWTKeyStroke.java @@ -18,7 +18,9 @@ * @author Dmitry A. Durnev * @version $Revision$ */ + package java.awt; + import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.ObjectStreamException; @@ -36,7 +38,7 @@ import org.apache.harmony.awt.internal.nls.Messages; * The AWTKeyStroke holds all of the information for the complete act of * typing a character. This includes the events that are generated when * the key is pressed, released, or typed (pressed and released generating - * a unicode character result) which are associated with the event + * a Unicode character result) which are associated with the event * objects KeyEvent.KEY_PRESSED, KeyEvent.KEY_RELEASED, or KeyEvent.KEY_TYPED. * It also holds information about which modifiers (such as control or * shift) were used in conjunction with the keystroke. The following masks @@ -57,19 +59,41 @@ import org.apache.harmony.awt.internal.nls.Messages; * The AWTKeyStroke is unique, and applications should not create their own * instances of AWTKeyStroke. All applications should use getAWTKeyStroke * methods for obtaining instances of AWTKeyStroke. + * + * @since Android 1.0 */ public class AWTKeyStroke implements Serializable { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -6430539691155161871L; - /** The Constant cache. */ - private static final Map cache = new HashMap(); //Map - - /** The Constant keyEventTypesMap. */ - private static final Map keyEventTypesMap = new HashMap(); //Map + /** + * The Constant cache. + */ + private static final Map cache = new HashMap(); // Map - private static Constructor subConstructor; + // < + // AWTKeyStroke + // , + // ? + // extends + // AWTKeyStroke + // > + + /** + * The Constant keyEventTypesMap. + */ + private static final Map keyEventTypesMap = new HashMap(); // Map + + // < + // int + // , + // String + // > + + private static Constructor subConstructor; static { keyEventTypesMap.put(new Integer(KeyEvent.KEY_PRESSED), "pressed"); //$NON-NLS-1$ @@ -77,53 +101,66 @@ public class AWTKeyStroke implements Serializable { keyEventTypesMap.put(new Integer(KeyEvent.KEY_TYPED), "typed"); //$NON-NLS-1$ } - /** The key char. */ + /** + * The key char. + */ private char keyChar; - - /** The key code. */ + + /** + * The key code. + */ private int keyCode; - - /** The modifiers. */ + + /** + * The modifiers. + */ private int modifiers; - - /** The on key release. */ + + /** + * The on key release. + */ private boolean onKeyRelease; - + /** - * Instantiates a new AWTKeyStroke. - * getAWTKeyStroke method should be used by applications code. - * - * @param keyChar the key char - * @param keyCode the key code - * @param modifiers the modifiers - * @param onKeyRelease true if AWTKeyStroke is for a key release, overwise false. - */ - protected AWTKeyStroke(char keyChar, int keyCode, int modifiers, - boolean onKeyRelease) - { - setAWTKeyStroke(keyChar, keyCode, modifiers, onKeyRelease); + * Instantiates a new AWTKeyStroke. getAWTKeyStroke method should be used by + * applications code. + * + * @param keyChar + * the key char. + * @param keyCode + * the key code. + * @param modifiers + * the modifiers. + * @param onKeyRelease + * true if AWTKeyStroke is for a key release, false otherwise. + */ + protected AWTKeyStroke(char keyChar, int keyCode, int modifiers, boolean onKeyRelease) { + setAWTKeyStroke(keyChar, keyCode, modifiers, onKeyRelease); } - /** Sets the awt key stroke. - * - * @param keyChar the key char - * @param keyCode the key code - * @param modifiers the modifiers - * @param onKeyRelease the on key release - */ - private void setAWTKeyStroke( char keyChar, int keyCode, int modifiers, - boolean onKeyRelease) - { + /** + * Sets the AWT key stroke. + * + * @param keyChar + * the key char. + * @param keyCode + * the key code. + * @param modifiers + * the modifiers. + * @param onKeyRelease + * the on key release. + */ + private void setAWTKeyStroke(char keyChar, int keyCode, int modifiers, boolean onKeyRelease) { this.keyChar = keyChar; this.keyCode = keyCode; this.modifiers = modifiers; this.onKeyRelease = onKeyRelease; } - + /** * Instantiates a new AWTKeyStroke with default parameters: - * KeyEvent.CHAR_UNDEFINED key char, KeyEvent.VK_UNDEFINED key code, - * without modifiers and false key realised value. + * KeyEvent.CHAR_UNDEFINED key char, KeyEvent.VK_UNDEFINED key code, without + * modifiers and false key realized value. */ protected AWTKeyStroke() { this(KeyEvent.CHAR_UNDEFINED, KeyEvent.VK_UNDEFINED, 0, false); @@ -132,42 +169,44 @@ public class AWTKeyStroke implements Serializable { /** * Returns the unique number value for AWTKeyStroke object. * - * @return the int unique value of the AWTKeyStroke object. + * @return the integer unique value of the AWTKeyStroke object. */ @Override public int hashCode() { - return modifiers + ( keyCode != KeyEvent.VK_UNDEFINED ? - keyCode : keyChar) + (onKeyRelease ? -1 : 0); + return modifiers + (keyCode != KeyEvent.VK_UNDEFINED ? keyCode : keyChar) + + (onKeyRelease ? -1 : 0); } /** * Gets the set of modifiers for the AWTKeyStroke object. * - * @return the int value which contains modifiers. + * @return the integer value which contains modifiers. */ public final int getModifiers() { return modifiers; } /** - * Compares the AWTKeyStroke object to the specified object. + * Compares this AWTKeyStroke object to the specified object. * - * @return true, if objects are identical, overwise false. + * @param anObject + * the specified AWTKeyStroke object to compare with this + * instance. + * @return true if objects are identical, false otherwise. */ @Override public final boolean equals(Object anObject) { if (anObject instanceof AWTKeyStroke) { AWTKeyStroke key = (AWTKeyStroke)anObject; - return ((key.keyCode == keyCode) && (key.keyChar == keyChar) && - (key.modifiers == modifiers) && - (key.onKeyRelease == onKeyRelease)); + return ((key.keyCode == keyCode) && (key.keyChar == keyChar) + && (key.modifiers == modifiers) && (key.onKeyRelease == onKeyRelease)); } return false; } /** - * Returns the string representation of the AWTKeyStroke. - * This string should contain key stroke properties. + * Returns the string representation of the AWTKeyStroke. This string should + * contain key stroke properties. * * @return the string representation of the AWTKeyStroke. */ @@ -175,9 +214,10 @@ public class AWTKeyStroke implements Serializable { public String toString() { int type = getKeyEventType(); return InputEvent.getModifiersExText(getModifiers()) + " " + //$NON-NLS-1$ - keyEventTypesMap.get(new Integer(type)) + " " + //$NON-NLS-1$ - (type == KeyEvent.KEY_TYPED ? new String(new char[] {keyChar}) : - KeyEvent.getKeyText(keyCode)); + keyEventTypesMap.get(new Integer(type)) + " " + //$NON-NLS-1$ + (type == KeyEvent.KEY_TYPED ? new String(new char[] { + keyChar + }) : KeyEvent.getKeyText(keyCode)); } /** @@ -201,16 +241,18 @@ public class AWTKeyStroke implements Serializable { /** * Gets the AWT key stroke. * - * @param keyChar the key char - * @param keyCode the key code - * @param modifiers the modifiers - * @param onKeyRelease the on key release - * - * @return the AWT key stroke + * @param keyChar + * the key char. + * @param keyCode + * the key code. + * @param modifiers + * the modifiers. + * @param onKeyRelease + * the on key release. + * @return the AWT key stroke. */ - private static AWTKeyStroke getAWTKeyStroke(char keyChar, int keyCode, - int modifiers, - boolean onKeyRelease) { + private static AWTKeyStroke getAWTKeyStroke(char keyChar, int keyCode, int modifiers, + boolean onKeyRelease) { AWTKeyStroke key = newInstance(keyChar, keyCode, modifiers, onKeyRelease); AWTKeyStroke value = cache.get(key); @@ -224,28 +266,30 @@ public class AWTKeyStroke implements Serializable { /** * New instance. * - * @param keyChar the key char - * @param keyCode the key code - * @param modifiers the modifiers - * @param onKeyRelease the on key release - * - * @return the AWT key stroke + * @param keyChar + * the key char. + * @param keyCode + * the key code. + * @param modifiers + * the modifiers. + * @param onKeyRelease + * the on key release. + * @return the AWT key stroke. */ - private static AWTKeyStroke newInstance(char keyChar, int keyCode, - int modifiers, - boolean onKeyRelease) { + private static AWTKeyStroke newInstance(char keyChar, int keyCode, int modifiers, + boolean onKeyRelease) { AWTKeyStroke key; - //???AWT -// if (subConstructor == null) { - key = new AWTKeyStroke(); - //???AWT -// } else { -// try { -// key = (AWTKeyStroke) subConstructor.newInstance(); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } + // ???AWT + // if (subConstructor == null) { + key = new AWTKeyStroke(); + // ???AWT + // } else { + // try { + // key = (AWTKeyStroke) subConstructor.newInstance(); + // } catch (Exception e) { + // throw new RuntimeException(e); + // } + // } int allModifiers = getAllModifiers(modifiers); key.setAWTKeyStroke(keyChar, keyCode, allModifiers, onKeyRelease); return key; @@ -254,21 +298,22 @@ public class AWTKeyStroke implements Serializable { /** * Adds the mask. * - * @param mod the mod - * @param mask the mask - * - * @return the int + * @param mod + * the mod. + * @param mask + * the mask. + * @return the int. */ private static int addMask(int mod, int mask) { return ((mod & mask) != 0) ? (mod | mask) : mod; } /** - * return all (old & new) modifiers corresponding to. - * - * @param mod old or new modifiers + * Return all (old & new) modifiers corresponding to. * - * @return old and new modifiers together + * @param mod + * old or new modifiers. + * @return old and new modifiers together. */ static int getAllModifiers(int mod) { int allMod = mod; @@ -289,27 +334,23 @@ public class AWTKeyStroke implements Serializable { } /** - * Returns an instance of AWTKeyStroke for parsed string. - * - * The string must have the following syntax: + * Returns an instance of AWTKeyStroke for parsed string. The string must + * have the following syntax: *

* <modifiers>* (<typedID> | <pressedReleasedID>) *

- * modifiers := shift | control | ctrl | meta | alt | altGraph - *
- * typedID := typed - *
- * typedKey := string of length 1 giving the Unicode character. - *
- * pressedReleasedID := (pressed | released) - *
+ * modifiers := shift | control | ctrl | meta | alt | altGraph
+ * typedID := typed
+ * typedKey := string of length 1 giving the Unicode character.
+ * pressedReleasedID := (pressed | released)
* key := KeyEvent key code name, i.e. the name following "VK_". *

- * @param s the String which contains key stroke parameters. * + * @param s + * the String which contains key stroke parameters. * @return the AWTKeyStroke for string. - * - * @throws IllegalArgumentException if string has incorrect format or null. + * @throws IllegalArgumentException + * if string has incorrect format or null. */ public static AWTKeyStroke getAWTKeyStroke(String s) { if (s == null) { @@ -351,16 +392,15 @@ public class AWTKeyStroke implements Serializable { throw new IllegalArgumentException(Messages.getString("awt.66")); //$NON-NLS-1$ } - return getAWTKeyStroke(keyChar, keyCode, modifiers, - release == Boolean.TRUE); + return getAWTKeyStroke(keyChar, keyCode, modifiers, release == Boolean.TRUE); } /** * Gets the next token. * - * @param tokenizer the tokenizer - * - * @return the next token + * @param tokenizer + * the tokenizer. + * @return the next token. */ private static String getNextToken(StringTokenizer tokenizer) { try { @@ -374,9 +414,9 @@ public class AWTKeyStroke implements Serializable { /** * Gets the key code. * - * @param s the s - * - * @return the key code + * @param s + * the s. + * @return the key code. */ static int getKeyCode(String s) { try { @@ -394,8 +434,8 @@ public class AWTKeyStroke implements Serializable { /** * Gets an instance of the AWTKeyStroke for specified character. * - * @param keyChar the keyboard character value. - * + * @param keyChar + * the keyboard character value. * @return a AWTKeyStroke for specified character. */ public static AWTKeyStroke getAWTKeyStroke(char keyChar) { @@ -403,120 +443,121 @@ public class AWTKeyStroke implements Serializable { } /** - * Returns an instance of AWTKeyStroke for a given key code, set - * of modifiers, and specified key released flag value. - * The key codes are defined in java.awt.event.KeyEvent class. - * The set of modifiers is given as a bitwise combination - * of masks taken from the following list: + * Returns an instance of AWTKeyStroke for a given key code, set of + * modifiers, and specified key released flag value. The key codes are + * defined in java.awt.event.KeyEvent class. The set of modifiers is given + * as a bitwise combination of masks taken from the following list: *

    - *
  • java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.ALT_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.CTRL_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.META_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.SHIFT_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.ALT_GRAPH_MASK
  • - *
  • java.awt.event.InputEvent.ALT_MASK
  • - *
  • java.awt.event.InputEvent.CTRL_MASK
  • - *
  • java.awt.event.InputEvent.META_MASK
  • - *
  • java.awt.event.InputEvent.SHIFT_MASK
  • + *
  • java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK
  • + * java.awt.event.InputEvent.ALT_DOWN_MASK
  • + * java.awt.event.InputEvent.CTRL_DOWN_MASK
  • + * java.awt.event.InputEvent.META_DOWN_MASK
  • + * java.awt.event.InputEvent.SHIFT_DOWN_MASK
  • + * java.awt.event.InputEvent.ALT_GRAPH_MASK
  • + * java.awt.event.InputEvent.ALT_MASK
  • + * java.awt.event.InputEvent.CTRL_MASK
  • + * java.awt.event.InputEvent.META_MASK
  • + * java.awt.event.InputEvent.SHIFT_MASK
  • *
- *
- * - * @param keyCode the specified key code of keyboard. - * @param modifiers the bit set of modifiers. + *
* + * @param keyCode + * the specified key code of keyboard. + * @param modifiers + * the bit set of modifiers. + * @param onKeyRelease + * the value which represents whether this AWTKeyStroke shall + * represents a key release. * @return the AWTKeyStroke. */ - public static AWTKeyStroke getAWTKeyStroke(int keyCode, int modifiers, - boolean onKeyRelease) { - return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, keyCode, modifiers, - onKeyRelease); + public static AWTKeyStroke getAWTKeyStroke(int keyCode, int modifiers, boolean onKeyRelease) { + return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, keyCode, modifiers, onKeyRelease); } /** - * Returns AWTKeyStroke for a specified character and set of modifiers. - * The set of modifiers is given as a bitwise combination - * of masks taken from the following list: + * Returns AWTKeyStroke for a specified character and set of modifiers. The + * set of modifiers is given as a bitwise combination of masks taken from + * the following list: *
    - *
  • java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.ALT_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.CTRL_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.META_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.SHIFT_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.ALT_GRAPH_MASK
  • - *
  • java.awt.event.InputEvent.ALT_MASK
  • - *
  • java.awt.event.InputEvent.CTRL_MASK
  • - *
  • java.awt.event.InputEvent.META_MASK
  • - *
  • java.awt.event.InputEvent.SHIFT_MASK
  • + *
  • java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK
  • + * java.awt.event.InputEvent.ALT_DOWN_MASK
  • + * java.awt.event.InputEvent.CTRL_DOWN_MASK
  • + * java.awt.event.InputEvent.META_DOWN_MASK
  • + * java.awt.event.InputEvent.SHIFT_DOWN_MASK
  • + * java.awt.event.InputEvent.ALT_GRAPH_MASK
  • + * java.awt.event.InputEvent.ALT_MASK
  • + * java.awt.event.InputEvent.CTRL_MASK
  • + * java.awt.event.InputEvent.META_MASK
  • + * java.awt.event.InputEvent.SHIFT_MASK
  • *
* - * @param keyChar the Character object which represents keyboard character value. - * @param modifiers the bit set of modifiers. - * + * @param keyChar + * the Character object which represents keyboard character + * value. + * @param modifiers + * the bit set of modifiers. * @return the AWTKeyStroke object. - * - * @throws IllegalArgumentException if keyChar value is null. + * @throws IllegalArgumentException + * if keyChar value is null. */ public static AWTKeyStroke getAWTKeyStroke(Character keyChar, int modifiers) { if (keyChar == null) { // awt.01='{0}' parameter is null throw new IllegalArgumentException(Messages.getString("awt.01", "keyChar")); //$NON-NLS-1$ //$NON-NLS-2$ } - return getAWTKeyStroke(keyChar.charValue(), KeyEvent.VK_UNDEFINED, - modifiers, false); + return getAWTKeyStroke(keyChar.charValue(), KeyEvent.VK_UNDEFINED, modifiers, false); } /** - * Returns an instance of AWTKeyStroke for a specified key code and - * set of modifiers. - * The key codes are defined in java.awt.event.KeyEvent class. - * The set of modifiers is given as a bitwise combination - * of masks taken from the following list: + * Returns an instance of AWTKeyStroke for a specified key code and set of + * modifiers. The key codes are defined in java.awt.event.KeyEvent class. + * The set of modifiers is given as a bitwise combination of masks taken + * from the following list: *
    - *
  • java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.ALT_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.CTRL_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.META_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.SHIFT_DOWN_MASK
  • - *
  • java.awt.event.InputEvent.ALT_GRAPH_MASK
  • - *
  • java.awt.event.InputEvent.ALT_MASK
  • - *
  • java.awt.event.InputEvent.CTRL_MASK
  • - *
  • java.awt.event.InputEvent.META_MASK
  • - *
  • java.awt.event.InputEvent.SHIFT_MASK
  • + *
  • java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK
  • + * java.awt.event.InputEvent.ALT_DOWN_MASK
  • + * java.awt.event.InputEvent.CTRL_DOWN_MASK
  • + * java.awt.event.InputEvent.META_DOWN_MASK
  • + * java.awt.event.InputEvent.SHIFT_DOWN_MASK
  • + * java.awt.event.InputEvent.ALT_GRAPH_MASK
  • + * java.awt.event.InputEvent.ALT_MASK
  • + * java.awt.event.InputEvent.CTRL_MASK
  • + * java.awt.event.InputEvent.META_MASK
  • + * java.awt.event.InputEvent.SHIFT_MASK
  • *
- * - * @param keyCode the specified key code of keyboard. - * @param modifiers the bit set of modifiers. * - * @return the AWTKeyStroke + * @param keyCode + * the specified key code of keyboard. + * @param modifiers + * the bit set of modifiers. + * @return the AWTKeyStroke. */ public static AWTKeyStroke getAWTKeyStroke(int keyCode, int modifiers) { return getAWTKeyStroke(keyCode, modifiers, false); } /** - * Gets the AWTKeyStroke for a key event. This method obtains the key char + * Gets the AWTKeyStroke for a key event. This method obtains the key char * and key code from the specified key event. * - * @param anEvent the key event which identifies the desired AWTKeyStroke. - * + * @param anEvent + * the key event which identifies the desired AWTKeyStroke. * @return the AWTKeyStroke for the key event. */ public static AWTKeyStroke getAWTKeyStrokeForEvent(KeyEvent anEvent) { int id = anEvent.getID(); char undef = KeyEvent.CHAR_UNDEFINED; - char keyChar = (id == KeyEvent.KEY_TYPED ? anEvent.getKeyChar() : - undef); - int keyCode = (keyChar == undef ? anEvent.getKeyCode() : - KeyEvent.VK_UNDEFINED); + char keyChar = (id == KeyEvent.KEY_TYPED ? anEvent.getKeyChar() : undef); + int keyCode = (keyChar == undef ? anEvent.getKeyCode() : KeyEvent.VK_UNDEFINED); return getAWTKeyStroke(keyChar, keyCode, anEvent.getModifiersEx(), - id == KeyEvent.KEY_RELEASED); + id == KeyEvent.KEY_RELEASED); } /** * Gets the key event type for the AWTKeyStroke object. * - * @return the key event type: KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED, or KeyEvent.KEY_RELEASED + * @return the key event type: KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED, or + * KeyEvent.KEY_RELEASED. */ public final int getKeyEventType() { if (keyCode == KeyEvent.VK_UNDEFINED) { @@ -526,11 +567,11 @@ public class AWTKeyStroke implements Serializable { } /** - * Retuns true if the key event is associated with the AWTKeyStroke is - * KEY_RELEASED, overwise false. + * Returns true if the key event is associated with the AWTKeyStroke is + * KEY_RELEASED, false otherwise. * - * @return true, if if the key event associated with the AWTKeyStroke is - * KEY_RELEASED, overwise false. + * @return true, if if the key event associated with the AWTKeyStroke is + * KEY_RELEASED, false otherwise. */ public final boolean isOnKeyRelease() { return onKeyRelease; @@ -539,50 +580,44 @@ public class AWTKeyStroke implements Serializable { /** * Read resolve. * - * @return the object - * - * @throws ObjectStreamException the object stream exception + * @return the object. + * @throws ObjectStreamException + * the object stream exception. */ protected Object readResolve() throws ObjectStreamException { - return getAWTKeyStroke(this.keyChar, this.keyCode, - this.modifiers, this.onKeyRelease); + return getAWTKeyStroke(this.keyChar, this.keyCode, this.modifiers, this.onKeyRelease); } /** * Register subclass. * - * @param subclass the subclass + * @param subclass + * the subclass. */ protected static void registerSubclass(Class subclass) { - //???AWT + // ???AWT /* - if (subclass == null) { - // awt.01='{0}' parameter is null - throw new IllegalArgumentException(Messages.getString("awt.01", "subclass")); //$NON-NLS-1$ //$NON-NLS-2$ - } - if (! AWTKeyStroke.class.isAssignableFrom(subclass)) { - // awt.67=subclass is not derived from AWTKeyStroke - throw new ClassCastException(Messages.getString("awt.67")); //$NON-NLS-1$ - } - try { - subConstructor = subclass.getDeclaredConstructor(); - subConstructor.setAccessible(true); - } catch (SecurityException e) { - throw new RuntimeException(e); - } catch (NoSuchMethodException e) { - // awt.68=subclass could not be instantiated - throw new IllegalArgumentException(Messages.getString("awt.68")); //$NON-NLS-1$ - } - cache.clear(); //flush the cache - */ + * if (subclass == null) { // awt.01='{0}' parameter is null throw new + * IllegalArgumentException(Messages.getString("awt.01", "subclass")); + * //$NON-NLS-1$ //$NON-NLS-2$ } if (! + * AWTKeyStroke.class.isAssignableFrom(subclass)) { // awt.67=subclass + * is not derived from AWTKeyStroke throw new + * ClassCastException(Messages.getString("awt.67")); //$NON-NLS-1$ } try + * { subConstructor = subclass.getDeclaredConstructor(); + * subConstructor.setAccessible(true); } catch (SecurityException e) { + * throw new RuntimeException(e); } catch (NoSuchMethodException e) { // + * awt.68=subclass could not be instantiated throw new + * IllegalArgumentException(Messages.getString("awt.68")); //$NON-NLS-1$ + * } cache.clear(); //flush the cache + */ } /** * Parses the modifier. * - * @param strMod the str mod - * - * @return the long + * @param strMod + * the str mod. + * @return the long. */ private static long parseModifier(String strMod) { long modifiers = 0l; @@ -609,9 +644,9 @@ public class AWTKeyStroke implements Serializable { /** * Parses the typed id. * - * @param strTyped the str typed - * - * @return true, if successful + * @param strTyped + * the str typed. + * @return true, if successful. */ private static boolean parseTypedID(String strTyped) { if (strTyped.equals("typed")) { //$NON-NLS-1$ @@ -624,9 +659,9 @@ public class AWTKeyStroke implements Serializable { /** * Parses the typed key. * - * @param strChar the str char - * - * @return the char + * @param strChar + * the str char. + * @return the char. */ private static char parseTypedKey(String strChar) { char keyChar = KeyEvent.CHAR_UNDEFINED; @@ -642,9 +677,9 @@ public class AWTKeyStroke implements Serializable { /** * Parses the pressed released id. * - * @param str the str - * - * @return the boolean + * @param str + * the str. + * @return the boolean. */ private static Boolean parsePressedReleasedID(String str) { @@ -659,9 +694,9 @@ public class AWTKeyStroke implements Serializable { /** * Parses the key. * - * @param strCode the str code - * - * @return the int + * @param strCode + * the str code. + * @return the int. */ private static int parseKey(String strCode) { int keyCode = KeyEvent.VK_UNDEFINED; @@ -675,4 +710,3 @@ public class AWTKeyStroke implements Serializable { return keyCode; } } - diff --git a/awt/java/awt/AWTPermission.java b/awt/java/awt/AWTPermission.java index 25326abb1a..4bd835777d 100644 --- a/awt/java/awt/AWTPermission.java +++ b/awt/java/awt/AWTPermission.java @@ -18,24 +18,31 @@ * @author Pavel Dolgov * @version $Revision$ */ + package java.awt; import java.security.BasicPermission; /** - * The AWTPermission specifies the name of the permission and the - * corresponding action list. + * The AWTPermission specifies the name of the permission and the corresponding + * action list. + * + * @since Android 1.0 */ public final class AWTPermission extends BasicPermission { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 8890392402588814465L; /** * Instantiates a new AWTPermission with defined name and actions. * - * @param name the name of a new AWTPermission. - * @param actions the actions of a new AWTPermission. + * @param name + * the name of a new AWTPermission. + * @param actions + * the actions of a new AWTPermission. */ public AWTPermission(String name, String actions) { super(name, actions); @@ -44,11 +51,11 @@ public final class AWTPermission extends BasicPermission { /** * Instantiates a new AWT permission with the defined name. * - * @param name the name of a new AWTPermission. + * @param name + * the name of a new AWTPermission. */ public AWTPermission(String name) { super(name); } } - diff --git a/awt/java/awt/ActiveEvent.java b/awt/java/awt/ActiveEvent.java index 41337524a6..704462390a 100644 --- a/awt/java/awt/ActiveEvent.java +++ b/awt/java/awt/ActiveEvent.java @@ -18,18 +18,21 @@ * @author Michael Danilov * @version $Revision$ */ + package java.awt; /** - * This interface defines events that know how to dispatch themselves. - * Such event can be placed upon the event queue and its dispatch method - * will be called when the event is dispatched. + * This interface defines events that know how to dispatch themselves. Such + * event can be placed upon the event queue and its dispatch method will be + * called when the event is dispatched. + * + * @since Android 1.0 */ public interface ActiveEvent { /** - * Dispatches the event to the listeners of the event's source, - * or does whatever it is this event is supposed to do. + * Dispatches the event to the listeners of the event's source, or does + * whatever it is this event is supposed to do. */ public void dispatch(); diff --git a/awt/java/awt/Adjustable.java b/awt/java/awt/Adjustable.java index 3241cad1db..baf80f7c7c 100644 --- a/awt/java/awt/Adjustable.java +++ b/awt/java/awt/Adjustable.java @@ -18,32 +18,35 @@ * @author Pavel Dolgov * @version $Revision$ */ + package java.awt; import java.awt.event.AdjustmentListener; /** - * The Adjustable interface represents an adjustable numeric value - * contained within a bounded range of values, such as the current - * location in scrollable region or the value of a gauge. + * The Adjustable interface represents an adjustable numeric value contained + * within a bounded range of values, such as the current location in scrollable + * region or the value of a gauge. + * + * @since Android 1.0 */ public interface Adjustable { - /** - * The Constant HORIZONTAL indicates that the Adjustable's orientation - * is horizontal. + /** + * The Constant HORIZONTAL indicates that the Adjustable's orientation is + * horizontal. */ public static final int HORIZONTAL = 0; - /** - * The Constant VERTICAL indicates that the Adjustable's orientation - * is vertical. + /** + * The Constant VERTICAL indicates that the Adjustable's orientation is + * vertical. */ public static final int VERTICAL = 1; - /** - * The Constant NO_ORIENTATION indicates that the Adjustable - * has no orientation. + /** + * The Constant NO_ORIENTATION indicates that the Adjustable has no + * orientation. */ public static final int NO_ORIENTATION = 2; @@ -57,14 +60,16 @@ public interface Adjustable { /** * Sets the value to the Adjustable object. * - * @param a0 the new value of the Adjustable object. + * @param a0 + * the new value of the Adjustable object. */ public void setValue(int a0); /** * Adds the AdjustmentListener to current Adjustment. * - * @param a0 the AdjustmentListener object. + * @param a0 + * the AdjustmentListener object. */ public void addAdjustmentListener(AdjustmentListener a0); @@ -85,7 +90,7 @@ public interface Adjustable { /** * Gets the minimum value of the Adjustable. * - * @return the minimum value of the Adjustable. + * @return the minimum value of the Adjustable. */ public int getMinimum(); @@ -113,44 +118,49 @@ public interface Adjustable { /** * Removes the adjustment listener of the Adjustable. * - * @param a0 the specified AdjustmentListener to be removed. + * @param a0 + * the specified AdjustmentListener to be removed. */ public void removeAdjustmentListener(AdjustmentListener a0); /** * Sets the block increment for the Adjustable. * - * @param a0 the new block increment. + * @param a0 + * the new block increment. */ public void setBlockIncrement(int a0); /** * Sets the maximum value of the Adjustable. * - * @param a0 the new maximum of the Adjustable. + * @param a0 + * the new maximum of the Adjustable. */ public void setMaximum(int a0); /** * Sets the minimum value of the Adjustable. * - * @param a0 the new minimum of the Adjustable. + * @param a0 + * the new minimum of the Adjustable. */ public void setMinimum(int a0); /** * Sets the unit increment of the Adjustable. * - * @param a0 the new unit increment of the Adjustable. + * @param a0 + * the new unit increment of the Adjustable. */ public void setUnitIncrement(int a0); /** * Sets the visible amount of the Adjustable. * - * @param a0 the new visible amount of the Adjustable. + * @param a0 + * the new visible amount of the Adjustable. */ public void setVisibleAmount(int a0); } - diff --git a/awt/java/awt/AlphaComposite.java b/awt/java/awt/AlphaComposite.java index d26753c316..8389eb4621 100644 --- a/awt/java/awt/AlphaComposite.java +++ b/awt/java/awt/AlphaComposite.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt; import java.awt.Composite; @@ -28,148 +29,181 @@ import java.awt.image.ColorModel; import org.apache.harmony.awt.gl.ICompositeContext; import org.apache.harmony.awt.internal.nls.Messages; - /** - * The AlphaComposite class defines a basic alpha compositing rules for - * combining source and destination colors to achieve blending and - * transparency effects with graphics and images. + * The AlphaComposite class defines a basic alpha compositing rules for + * combining source and destination colors to achieve blending and transparency + * effects with graphics and images. + * + * @since Android 1.0 */ public final class AlphaComposite implements Composite { - /** - * The Constant CLEAR indicates that both the color and the alpha of - * the destination are cleared (Porter-Duff Clear rule). + /** + * The Constant CLEAR indicates that both the color and the alpha of the + * destination are cleared (Porter-Duff Clear rule). */ public static final int CLEAR = 1; - /** - * The Constant SRC indicates that the source is copied to the destination + /** + * The Constant SRC indicates that the source is copied to the destination * (Porter-Duff Source rule). */ public static final int SRC = 2; - /** The Constant DST indicates that the destination is left untouched + /** + * The Constant DST indicates that the destination is left untouched * (Porter-Duff Destination rule). */ public static final int DST = 9; - /** - * The Constant SRC_OVER indicates that the source is composited over - * the destination (Porter-Duff Source Over Destination rule). + /** + * The Constant SRC_OVER indicates that the source is composited over the + * destination (Porter-Duff Source Over Destination rule). */ public static final int SRC_OVER = 3; /** - * The Constant DST_OVER indicates that The destination is composited over - * the source and the result replaces the destination - * (Porter-Duff Destination Over Source rule). + * The Constant DST_OVER indicates that The destination is composited over + * the source and the result replaces the destination (Porter-Duff + * Destination Over Source rule). */ public static final int DST_OVER = 4; /** - * The Constant SRC_IN indicates that the part of the source lying - * inside of the destination replaces the destination (Porter-Duff - * Source In Destination rule). + * The Constant SRC_IN indicates that the part of the source lying inside of + * the destination replaces the destination (Porter-Duff Source In + * Destination rule). */ public static final int SRC_IN = 5; - /** - * The Constant DST_IN indicates that the part of the destination - * lying inside of the source replaces the destination - * (Porter-Duff Destination In Source rule). + /** + * The Constant DST_IN indicates that the part of the destination lying + * inside of the source replaces the destination (Porter-Duff Destination In + * Source rule). */ public static final int DST_IN = 6; /** - * The Constant SRC_OUT indicates that the part of the source lying - * outside of the destination replaces the destination (Porter-Duff - * Source Held Out By Destination rule). + * The Constant SRC_OUT indicates that the part of the source lying outside + * of the destination replaces the destination (Porter-Duff Source Held Out + * By Destination rule). */ public static final int SRC_OUT = 7; - /** - * The Constant DST_OUT indicates that the part of the destination - * lying outside of the source replaces the destination (Porter-Duff - * Destination Held Out By Source rule). + /** + * The Constant DST_OUT indicates that the part of the destination lying + * outside of the source replaces the destination (Porter-Duff Destination + * Held Out By Source rule). */ public static final int DST_OUT = 8; - /** - * The Constant SRC_ATOP indicates that the part of the source lying - * inside of the destination is composited onto the destination - * (Porter-Duff Source Atop Destination rule). + /** + * The Constant SRC_ATOP indicates that the part of the source lying inside + * of the destination is composited onto the destination (Porter-Duff Source + * Atop Destination rule). */ public static final int SRC_ATOP = 10; - /** - * The Constant DST_ATOP indicates that the part of the destination - * lying inside of the source is composited over the source and replaces - * the destination (Porter-Duff Destination Atop Source rule). + /** + * The Constant DST_ATOP indicates that the part of the destination lying + * inside of the source is composited over the source and replaces the + * destination (Porter-Duff Destination Atop Source rule). */ public static final int DST_ATOP = 11; /** - * The Constant XOR indicates that the part of the source that lies - * outside of the destination is combined with the part of the destination - * that lies outside of the source (Porter-Duff Source Xor Destination rule). + * The Constant XOR indicates that the part of the source that lies outside + * of the destination is combined with the part of the destination that lies + * outside of the source (Porter-Duff Source Xor Destination rule). */ public static final int XOR = 12; - /** AlphaComposite object with the opaque CLEAR rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque CLEAR rule and an alpha of 1.0f. + */ public static final AlphaComposite Clear = new AlphaComposite(CLEAR); - /** AlphaComposite object with the opaque SRC rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque SRC rule and an alpha of 1.0f. + */ public static final AlphaComposite Src = new AlphaComposite(SRC); - /** AlphaComposite object with the opaque DST rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque DST rule and an alpha of 1.0f. + */ public static final AlphaComposite Dst = new AlphaComposite(DST); - /** AlphaComposite object with the opaque SRC_OVER rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque SRC_OVER rule and an alpha of 1.0f. + */ public static final AlphaComposite SrcOver = new AlphaComposite(SRC_OVER); - /** AlphaComposite object with the opaque DST_OVER rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque DST_OVER rule and an alpha of 1.0f. + */ public static final AlphaComposite DstOver = new AlphaComposite(DST_OVER); - /** AlphaComposite object with the opaque SRC_IN rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque SRC_IN rule and an alpha of 1.0f. + */ public static final AlphaComposite SrcIn = new AlphaComposite(SRC_IN); - /** AlphaComposite object with the opaque DST_IN rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque DST_IN rule and an alpha of 1.0f. + */ public static final AlphaComposite DstIn = new AlphaComposite(DST_IN); - /** AlphaComposite object with the opaque SRC_OUT rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque SRC_OUT rule and an alpha of 1.0f. + */ public static final AlphaComposite SrcOut = new AlphaComposite(SRC_OUT); - /** AlphaComposite object with the opaque DST_OUT rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque DST_OUT rule and an alpha of 1.0f. + */ public static final AlphaComposite DstOut = new AlphaComposite(DST_OUT); - /** AlphaComposite object with the opaque SRC_ATOP rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque SRC_ATOP rule and an alpha of 1.0f. + */ public static final AlphaComposite SrcAtop = new AlphaComposite(SRC_ATOP); - /** AlphaComposite object with the opaque DST_ATOP rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque DST_ATOP rule and an alpha of 1.0f. + */ public static final AlphaComposite DstAtop = new AlphaComposite(DST_ATOP); - /** AlphaComposite object with the opaque XOR rule and an alpha of 1.0f. */ + /** + * AlphaComposite object with the opaque XOR rule and an alpha of 1.0f. + */ public static final AlphaComposite Xor = new AlphaComposite(XOR); - /** The rule. */ + /** + * The rule. + */ private int rule; - - /** The alpha. */ + + /** + * The alpha. + */ private float alpha; /** - * Instantiates a new alpha composite. - * Creates a context for the compositing operation. The context contains state that is used in performing the compositing operation. + * Instantiates a new alpha composite. Creates a context for the compositing + * operation. The context contains state that is used in performing the + * compositing operation. * - * @param rule the rule - * @param alpha the alpha + * @param rule + * the rule. + * @param alpha + * the alpha. */ - private AlphaComposite(int rule, float alpha){ - if(rule < CLEAR || rule > XOR) { + private AlphaComposite(int rule, float alpha) { + if (rule < CLEAR || rule > XOR) { // awt.11D=Unknown rule throw new IllegalArgumentException(Messages.getString("awt.11D")); //$NON-NLS-1$ } - if(alpha < 0.0f || alpha > 1.0f) { + if (alpha < 0.0f || alpha > 1.0f) { // awt.11E=Wrong alpha value throw new IllegalArgumentException(Messages.getString("awt.11E")); //$NON-NLS-1$ } @@ -181,41 +215,44 @@ public final class AlphaComposite implements Composite { /** * Instantiates a new alpha composite. * - * @param rule the rule + * @param rule + * the rule. */ - private AlphaComposite(int rule){ + private AlphaComposite(int rule) { this(rule, 1.0f); } /** * Creates a CompositeContext object with the specified source ColorModel, - * destination ColorModel and RenderingHints parameters for a composing + * destination ColorModel and RenderingHints parameters for a composing * operation. * - * @param srcColorModel the source's ColorModel. - * @param dstColorModel the destination's ColorModel. - * @param hints the RenderingHints object. - * - * @return the CompositeContext object. - * - * @see java.awt.Composite#createContext(java.awt.image.ColorModel, java.awt.image.ColorModel, java.awt.RenderingHints) + * @param srcColorModel + * the source's ColorModel. + * @param dstColorModel + * the destination's ColorModel. + * @param hints + * the RenderingHints object. + * @return the CompositeContext object. + * @see java.awt.Composite#createContext(java.awt.image.ColorModel, + * java.awt.image.ColorModel, java.awt.RenderingHints) */ - public CompositeContext createContext(ColorModel srcColorModel, - ColorModel dstColorModel, RenderingHints hints) { + public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, + RenderingHints hints) { return new ICompositeContext(this, srcColorModel, dstColorModel); } /** * Compares the AlphaComposite object with the specified object. * - * @param obj the Object to be compared. - * + * @param obj + * the Object to be compared. * @return true, if the AlphaComposite object is equal to the specified - * object. + * object. */ @Override public boolean equals(Object obj) { - if(!(obj instanceof AlphaComposite)) { + if (!(obj instanceof AlphaComposite)) { return false; } AlphaComposite other = (AlphaComposite)obj; @@ -247,11 +284,11 @@ public final class AlphaComposite implements Composite { } /** - * Gets the alpha value of this AlphaComposite object; returns 1.0 if - * this AlphaComposite object doesn't have alpha value. + * Gets the alpha value of this AlphaComposite object; returns 1.0 if this + * AlphaComposite object doesn't have alpha value. * - * @return the alpha value of this AlphaComposite object or 1.0 if - * this AlphaComposite object doesn't have alpha value. + * @return the alpha value of this AlphaComposite object or 1.0 if this + * AlphaComposite object doesn't have alpha value. */ public float getAlpha() { return alpha; @@ -260,13 +297,14 @@ public final class AlphaComposite implements Composite { /** * Gets the AlphaComposite instance with the specified rule and alpha value. * - * @param rule the compositing rule. - * @param alpha the alpha value. - * - * @return AlphaComposite instance. + * @param rule + * the compositing rule. + * @param alpha + * the alpha value. + * @return the AlphaComposite instance. */ public static AlphaComposite getInstance(int rule, float alpha) { - if(alpha == 1.0f) { + if (alpha == 1.0f) { return getInstance(rule); } return new AlphaComposite(rule, alpha); @@ -275,41 +313,40 @@ public final class AlphaComposite implements Composite { /** * Gets the AlphaComposite instance with the specified rule. * - * @param rule the compositing rule. - * - * @return AlphaComposite instance. + * @param rule + * the compositing rule. + * @return the AlphaComposite instance. */ public static AlphaComposite getInstance(int rule) { - switch(rule){ - case CLEAR: - return Clear; - case SRC: - return Src; - case DST: - return Dst; - case SRC_OVER: - return SrcOver; - case DST_OVER: - return DstOver; - case SRC_IN: - return SrcIn; - case DST_IN: - return DstIn; - case SRC_OUT: - return SrcOut; - case DST_OUT: - return DstOut; - case SRC_ATOP: - return SrcAtop; - case DST_ATOP: - return DstAtop; - case XOR: - return Xor; - default: - // awt.11D=Unknown rule - throw new IllegalArgumentException(Messages.getString("awt.11D")); //$NON-NLS-1$ + switch (rule) { + case CLEAR: + return Clear; + case SRC: + return Src; + case DST: + return Dst; + case SRC_OVER: + return SrcOver; + case DST_OVER: + return DstOver; + case SRC_IN: + return SrcIn; + case DST_IN: + return DstIn; + case SRC_OUT: + return SrcOut; + case DST_OUT: + return DstOut; + case SRC_ATOP: + return SrcAtop; + case DST_ATOP: + return DstAtop; + case XOR: + return Xor; + default: + // awt.11D=Unknown rule + throw new IllegalArgumentException(Messages.getString("awt.11D")); //$NON-NLS-1$ } } } - diff --git a/awt/java/awt/BasicStroke.java b/awt/java/awt/BasicStroke.java index 955dc6b333..245781570a 100644 --- a/awt/java/awt/BasicStroke.java +++ b/awt/java/awt/BasicStroke.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt; import java.awt.geom.GeneralPath; @@ -27,139 +28,188 @@ import org.apache.harmony.awt.internal.nls.Messages; import org.apache.harmony.misc.HashCode; /** - * The BasicStroke class specifies a set of rendering attributes for the outlines - * of graphics primitives. The BasicStroke attributes describe the shape of the - * pen which draws the outline of a Shape and the decorations applied at the ends - * and joins of path segments of the Shape. The BasicStroke has the following - * rendering attributes: + * The BasicStroke class specifies a set of rendering attributes for the + * outlines of graphics primitives. The BasicStroke attributes describe the + * shape of the pen which draws the outline of a Shape and the decorations + * applied at the ends and joins of path segments of the Shape. The BasicStroke + * has the following rendering attributes: *

*

    - *
  • line width -the pen width which draws the outlines.
  • - *
  • end caps - indicates the decoration applied to the ends of unclosed - * subpaths and dash segments. The BasicStroke defines three different decorations: - * CAP_BUTT, CAP_ROUND, and CAP_SQUARE.
  • - *
  • line joins - indicates the decoration applied at the intersection of - * two path segments and at the intersection of the endpoints of a subpath. - * The BasicStroke defines three decorations: JOIN_BEVEL, JOIN_MITER, - * and JOIN_ROUND.
  • - *
  • miter limit - the limit to trim a line join that has a JOIN_MITER + *
  • line width -the pen width which draws the outlines.
  • + *
  • end caps - indicates the decoration applied to the ends of unclosed + * subpaths and dash segments. The BasicStroke defines three different + * decorations: CAP_BUTT, CAP_ROUND, and CAP_SQUARE.
  • + *
  • line joins - indicates the decoration applied at the intersection of two + * path segments and at the intersection of the endpoints of a subpath. The + * BasicStroke defines three decorations: JOIN_BEVEL, JOIN_MITER, and + * JOIN_ROUND.
  • + *
  • miter limit - the limit to trim a line join that has a JOIN_MITER * decoration.
  • - *
  • dash attributes - the definition of how to make a dash pattern by - * alternating between opaque and transparent sections
  • + *
  • dash attributes - the definition of how to make a dash pattern by + * alternating between opaque and transparent sections
  • *
+ *

+ * + * @since Android 1.0 */ public class BasicStroke implements Stroke { - /** - * The Constant CAP_BUTT indicates the ends of unclosed subpaths - * and dash segments have no added decoration. + /** + * The Constant CAP_BUTT indicates the ends of unclosed subpaths and dash + * segments have no added decoration. */ public static final int CAP_BUTT = 0; - - /** - * The Constant CAP_ROUND indicates the ends of unclosed subpaths - * and dash segments have a round decoration. + + /** + * The Constant CAP_ROUND indicates the ends of unclosed subpaths and dash + * segments have a round decoration. */ public static final int CAP_ROUND = 1; - - /** - * The Constant CAP_SQUARE indicates the ends of unclosed subpaths - * and dash segments have a square projection. + + /** + * The Constant CAP_SQUARE indicates the ends of unclosed subpaths and dash + * segments have a square projection. */ public static final int CAP_SQUARE = 2; - /** - * The Constant JOIN_MITER indicates that path segments are joined by + /** + * The Constant JOIN_MITER indicates that path segments are joined by * extending their outside edges until they meet. */ public static final int JOIN_MITER = 0; - - /** - * The Constant JOIN_ROUND indicates that path segments are joined by + + /** + * The Constant JOIN_ROUND indicates that path segments are joined by * rounding off the corner at a radius of half the line width. */ public static final int JOIN_ROUND = 1; - - /** - * The Constant JOIN_BEVEL indicates that path segments are joined by - * connecting the outer corners of their wide outlines with - * a straight segment. + + /** + * The Constant JOIN_BEVEL indicates that path segments are joined by + * connecting the outer corners of their wide outlines with a straight + * segment. */ public static final int JOIN_BEVEL = 2; - - /** Constants for calculating. */ - static final int MAX_LEVEL = 20; // Maximal deepness of curve subdivision - - /** The Constant CURVE_DELTA. */ - static final double CURVE_DELTA = 2.0; // Width tolerance - - /** The Constant CORNER_ANGLE. */ + + /** + * Constants for calculating. + */ + static final int MAX_LEVEL = 20; // Maximal deepness of curve subdivision + + /** + * The Constant CURVE_DELTA. + */ + static final double CURVE_DELTA = 2.0; // Width tolerance + + /** + * The Constant CORNER_ANGLE. + */ static final double CORNER_ANGLE = 4.0; // Minimum corner angle - - /** The Constant CORNER_ZERO. */ + + /** + * The Constant CORNER_ZERO. + */ static final double CORNER_ZERO = 0.01; // Zero angle - - /** The Constant CUBIC_ARC. */ + + /** + * The Constant CUBIC_ARC. + */ static final double CUBIC_ARC = 4.0 / 3.0 * (Math.sqrt(2.0) - 1); - /** Stroke width. */ + /** + * Stroke width. + */ float width; - - /** Stroke cap type. */ + + /** + * Stroke cap type. + */ int cap; - - /** Stroke join type. */ + + /** + * Stroke join type. + */ int join; - - /** Stroke miter limit. */ + + /** + * Stroke miter limit. + */ float miterLimit; - - /** Stroke dashes array. */ + + /** + * Stroke dashes array. + */ float dash[]; - - /** Stroke dash phase. */ + + /** + * Stroke dash phase. + */ float dashPhase; - /** The temporary pre-calculated values. */ + /** + * The temporary pre-calculated values. + */ double curveDelta; - - /** The corner delta. */ + + /** + * The corner delta. + */ double cornerDelta; - - /** The zero delta. */ + + /** + * The zero delta. + */ double zeroDelta; - /** The w2. */ + /** + * The w2. + */ double w2; - - /** The fmy. */ + + /** + * The fmy. + */ double fmx, fmy; - - /** The smy. */ + + /** + * The smy. + */ double scx, scy, smx, smy; - - /** The cy. */ + + /** + * The cy. + */ double mx, my, cx, cy; - /** The temporary indicators. */ + /** + * The temporary indicators. + */ boolean isMove; - - /** The is first. */ + + /** + * The is first. + */ boolean isFirst; - - /** The check move. */ + + /** + * The check move. + */ boolean checkMove; - - /** The temporary and destination work paths. */ + + /** + * The temporary and destination work paths. + */ BufferedPath dst, lp, rp, sp; - - /** Stroke dasher class. */ + + /** + * Stroke dasher class. + */ Dasher dasher; /** - * Instantiates a new BasicStroke with default width, cap, join, limit, - * dash attributes parameters. The default parameters are a solid line of - * width 1.0, CAP_SQUARE, JOIN_MITER, a miter limit of 10.0, null dash attributes, + * Instantiates a new BasicStroke with default width, cap, join, limit, dash + * attributes parameters. The default parameters are a solid line of width + * 1.0, CAP_SQUARE, JOIN_MITER, a miter limit of 10.0, null dash attributes, * and a dash phase of 0.0f. */ public BasicStroke() { @@ -167,17 +217,24 @@ public class BasicStroke implements Stroke { } /** - * Instantiates a new BasicStroke with the specified width, - * caps, joins, limit, dash attributes, dash phase parameters. + * Instantiates a new BasicStroke with the specified width, caps, joins, + * limit, dash attributes, dash phase parameters. * - * @param width the width of BasikStroke. - * @param cap the end decoration of BasikStroke. - * @param join the join segments decoration. - * @param miterLimit the limit to trim the miter join. - * @param dash the array with the dashing pattern. - * @param dashPhase the offset to start the dashing pattern. - */ - public BasicStroke(float width, int cap, int join, float miterLimit, float[] dash, float dashPhase) { + * @param width + * the width of BasikStroke. + * @param cap + * the end decoration of BasikStroke. + * @param join + * the join segments decoration. + * @param miterLimit + * the limit to trim the miter join. + * @param dash + * the array with the dashing pattern. + * @param dashPhase + * the offset to start the dashing pattern. + */ + public BasicStroke(float width, int cap, int join, float miterLimit, float[] dash, + float dashPhase) { if (width < 0.0f) { // awt.133=Negative width throw new IllegalArgumentException(Messages.getString("awt.133")); //$NON-NLS-1$ @@ -204,7 +261,7 @@ public class BasicStroke implements Stroke { throw new IllegalArgumentException(Messages.getString("awt.138")); //$NON-NLS-1$ } ZERO: { - for(int i = 0; i < dash.length; i++) { + for (int i = 0; i < dash.length; i++) { if (dash[i] < 0.0) { // awt.139=Negative dash[{0}] throw new IllegalArgumentException(Messages.getString("awt.139", i)); //$NON-NLS-1$ @@ -226,35 +283,43 @@ public class BasicStroke implements Stroke { } /** - * Instantiates a new BasicStroke with specified width, cap, join, limit - * and default dash attributes parameters. + * Instantiates a new BasicStroke with specified width, cap, join, limit and + * default dash attributes parameters. * - * @param width the width of BasikStroke. - * @param cap the end decoration of BasikStroke. - * @param join the join segments decoration. - * @param miterLimit the limit to trim the miter join. + * @param width + * the width of BasikStroke. + * @param cap + * the end decoration of BasikStroke. + * @param join + * the join segments decoration. + * @param miterLimit + * the limit to trim the miter join. */ public BasicStroke(float width, int cap, int join, float miterLimit) { this(width, cap, join, miterLimit, null, 0.0f); } /** - * Instantiates a new BasicStroke with specified width, cap, join - * and default limit and dash attributes parameters. + * Instantiates a new BasicStroke with specified width, cap, join and + * default limit and dash attributes parameters. * - * @param width the width of BasikStroke. - * @param cap the end decoration of BasikStroke. - * @param join the join segments decoration. + * @param width + * the width of BasikStroke. + * @param cap + * the end decoration of BasikStroke. + * @param join + * the join segments decoration. */ public BasicStroke(float width, int cap, int join) { this(width, cap, join, 10.0f, null, 0.0f); } /** - * Instantiates a new BasicStroke with specified width and default cap, join, - * limit, dash attributes parameters. + * Instantiates a new BasicStroke with specified width and default cap, + * join, limit, dash attributes parameters. * - * @param width the width of BasicStroke. + * @param width + * the width of BasicStroke. */ public BasicStroke(float width) { this(width, CAP_SQUARE, JOIN_MITER, 10.0f, null, 0.0f); @@ -288,7 +353,8 @@ public class BasicStroke implements Stroke { } /** - * Gets the miter limit of the BasicStroke (the limit to trim the miter join). + * Gets the miter limit of the BasicStroke (the limit to trim the miter + * join). * * @return the miter limit of the BasicStroke. */ @@ -338,10 +404,10 @@ public class BasicStroke implements Stroke { /** * Compares this BasicStroke object with the specified Object. * - * @param obj the Object to be compared. - * - * @return true, if the Object is a BasicStroke with the same data - * values as this BasicStroke; false otherwise. + * @param obj + * the Object to be compared. + * @return true, if the Object is a BasicStroke with the same data values as + * this BasicStroke; false otherwise. */ @Override public boolean equals(Object obj) { @@ -350,13 +416,9 @@ public class BasicStroke implements Stroke { } if (obj instanceof BasicStroke) { BasicStroke bs = (BasicStroke)obj; - return - bs.width == width && - bs.cap == cap && - bs.join == join && - bs.miterLimit == miterLimit && - bs.dashPhase == dashPhase && - java.util.Arrays.equals(bs.dash, dash); + return bs.width == width && bs.cap == cap && bs.join == join + && bs.miterLimit == miterLimit && bs.dashPhase == dashPhase + && java.util.Arrays.equals(bs.dash, dash); } return false; } @@ -364,9 +426,9 @@ public class BasicStroke implements Stroke { /** * Calculates allowable curve derivation. * - * @param width the width - * - * @return the curve delta + * @param width + * the width. + * @return the curve delta. */ double getCurveDelta(double width) { double a = width + CURVE_DELTA; @@ -378,9 +440,9 @@ public class BasicStroke implements Stroke { /** * Calculates the value to detect a small angle. * - * @param width the width - * - * @return the corner delta + * @param width + * the width. + * @return the corner delta. */ double getCornerDelta(double width) { return width * width * Math.sin(Math.PI * CORNER_ANGLE / 180.0); @@ -389,22 +451,21 @@ public class BasicStroke implements Stroke { /** * Calculates value to detect a zero angle. * - * @param width the width - * - * @return the zero delta + * @param width + * the width. + * @return the zero delta. */ double getZeroDelta(double width) { return width * width * Math.sin(Math.PI * CORNER_ZERO / 180.0); } /** - * Creates a Shape from the outline of the specified shape - * drawn with this BasicStroke. - * - * @param s the specified Shape to be stroked. + * Creates a Shape from the outline of the specified shape drawn with this + * BasicStroke. * + * @param s + * the specified Shape to be stroked. * @return the Shape of the stroked outline. - * * @see java.awt.Stroke#createStrokedShape(java.awt.Shape) */ public Shape createStrokedShape(Shape s) { @@ -429,7 +490,8 @@ public class BasicStroke implements Stroke { /** * Generates a shape with a solid (not dashed) outline. * - * @param p - the PathIterator of source shape + * @param p + * the PathIterator of source shape. */ void createSolidShape(PathIterator p) { double coords[] = new double[6]; @@ -439,36 +501,37 @@ public class BasicStroke implements Stroke { checkMove = true; boolean isClosed = true; - while(!p.isDone()) { - switch(p.currentSegment(coords)) { - case PathIterator.SEG_MOVETO: - if (!isClosed) { - closeSolidShape(); - } - rp.clean(); - mx = cx = coords[0]; - my = cy = coords[1]; - isMove = true; - isClosed = false; - break; - case PathIterator.SEG_LINETO: - addLine(cx, cy, cx = coords[0], cy = coords[1], true); - break; - case PathIterator.SEG_QUADTO: - addQuad(cx, cy, coords[0], coords[1], cx = coords[2], cy = coords[3]); - break; - case PathIterator.SEG_CUBICTO: - addCubic(cx, cy, coords[0], coords[1], coords[2], coords[3], cx = coords[4], cy = coords[5]); - break; - case PathIterator.SEG_CLOSE: - addLine(cx, cy, mx, my, false); - addJoin(lp, mx, my, lp.xMove, lp.yMove, true); - addJoin(rp, mx, my, rp.xMove, rp.yMove, false); - lp.closePath(); - rp.closePath(); - lp.appendReverse(rp); - isClosed = true; - break; + while (!p.isDone()) { + switch (p.currentSegment(coords)) { + case PathIterator.SEG_MOVETO: + if (!isClosed) { + closeSolidShape(); + } + rp.clean(); + mx = cx = coords[0]; + my = cy = coords[1]; + isMove = true; + isClosed = false; + break; + case PathIterator.SEG_LINETO: + addLine(cx, cy, cx = coords[0], cy = coords[1], true); + break; + case PathIterator.SEG_QUADTO: + addQuad(cx, cy, coords[0], coords[1], cx = coords[2], cy = coords[3]); + break; + case PathIterator.SEG_CUBICTO: + addCubic(cx, cy, coords[0], coords[1], coords[2], coords[3], cx = coords[4], + cy = coords[5]); + break; + case PathIterator.SEG_CLOSE: + addLine(cx, cy, mx, my, false); + addJoin(lp, mx, my, lp.xMove, lp.yMove, true); + addJoin(rp, mx, my, rp.xMove, rp.yMove, false); + lp.closePath(); + rp.closePath(); + lp.appendReverse(rp); + isClosed = true; + break; } p.next(); } @@ -492,7 +555,8 @@ public class BasicStroke implements Stroke { /** * Generates dashed stroked shape. * - * @param p - the PathIterator of source shape + * @param p + * the PathIterator of source shape. */ void createDashedShape(PathIterator p) { double coords[] = new double[6]; @@ -502,52 +566,53 @@ public class BasicStroke implements Stroke { checkMove = false; boolean isClosed = true; - while(!p.isDone()) { - switch(p.currentSegment(coords)) { - case PathIterator.SEG_MOVETO: + while (!p.isDone()) { + switch (p.currentSegment(coords)) { + case PathIterator.SEG_MOVETO: - if (!isClosed) { - closeDashedShape(); - } + if (!isClosed) { + closeDashedShape(); + } - dasher = new Dasher(dash, dashPhase); - lp.clean(); - rp.clean(); - sp = null; - isFirst = true; - isMove = true; - isClosed = false; - mx = cx = coords[0]; - my = cy = coords[1]; - break; - case PathIterator.SEG_LINETO: - addDashLine(cx, cy, cx = coords[0], cy = coords[1]); - break; - case PathIterator.SEG_QUADTO: - addDashQuad(cx, cy, coords[0], coords[1], cx = coords[2], cy = coords[3]); - break; - case PathIterator.SEG_CUBICTO: - addDashCubic(cx, cy, coords[0], coords[1], coords[2], coords[3], cx = coords[4], cy = coords[5]); - break; - case PathIterator.SEG_CLOSE: - addDashLine(cx, cy, cx = mx, cy = my); - - if (dasher.isConnected()) { - // Connect current and head segments - addJoin(lp, fmx, fmy, sp.xMove, sp.yMove, true); - lp.join(sp); - addJoin(lp, fmx, fmy, rp.xLast, rp.yLast, true); - lp.combine(rp); - addCap(lp, smx, smy, lp.xMove, lp.yMove); - lp.closePath(); - dst.append(lp); + dasher = new Dasher(dash, dashPhase); + lp.clean(); + rp.clean(); sp = null; - } else { - closeDashedShape(); - } + isFirst = true; + isMove = true; + isClosed = false; + mx = cx = coords[0]; + my = cy = coords[1]; + break; + case PathIterator.SEG_LINETO: + addDashLine(cx, cy, cx = coords[0], cy = coords[1]); + break; + case PathIterator.SEG_QUADTO: + addDashQuad(cx, cy, coords[0], coords[1], cx = coords[2], cy = coords[3]); + break; + case PathIterator.SEG_CUBICTO: + addDashCubic(cx, cy, coords[0], coords[1], coords[2], coords[3], + cx = coords[4], cy = coords[5]); + break; + case PathIterator.SEG_CLOSE: + addDashLine(cx, cy, cx = mx, cy = my); - isClosed = true; - break; + if (dasher.isConnected()) { + // Connect current and head segments + addJoin(lp, fmx, fmy, sp.xMove, sp.yMove, true); + lp.join(sp); + addJoin(lp, fmx, fmy, rp.xLast, rp.yLast, true); + lp.combine(rp); + addCap(lp, smx, smy, lp.xMove, lp.yMove); + lp.closePath(); + dst.append(lp); + sp = null; + } else { + closeDashedShape(); + } + + isClosed = true; + break; } p.next(); } @@ -583,11 +648,16 @@ public class BasicStroke implements Stroke { /** * Adds cap to the work path. * - * @param p - the BufferedPath object of work path - * @param x0 - the x coordinate of the source path - * @param y0 - the y coordinate on the source path - * @param x2 - the x coordinate of the next point on the work path - * @param y2 - the y coordinate of the next point on the work path + * @param p + * the BufferedPath object of work path. + * @param x0 + * the x coordinate of the source path. + * @param y0 + * the y coordinate on the source path. + * @param x2 + * the x coordinate of the next point on the work path. + * @param y2 + * the y coordinate of the next point on the work path. */ void addCap(BufferedPath p, double x0, double y0, double x2, double y2) { double x1 = p.xLast; @@ -597,42 +667,49 @@ public class BasicStroke implements Stroke { double x20 = x2 - x0; double y20 = y2 - y0; - switch(cap) { - case CAP_BUTT: - p.lineTo(x2, y2); - break; - case CAP_ROUND: - double mx = x10 * CUBIC_ARC; - double my = y10 * CUBIC_ARC; - - double x3 = x0 + y10; - double y3 = y0 - x10; - - x10 *= CUBIC_ARC; - y10 *= CUBIC_ARC; - x20 *= CUBIC_ARC; - y20 *= CUBIC_ARC; - - p.cubicTo(x1 + y10, y1 - x10, x3 + mx, y3 + my, x3, y3); - p.cubicTo(x3 - mx, y3 - my, x2 - y20, y2 + x20, x2, y2); - break; - case CAP_SQUARE: - p.lineTo(x1 + y10, y1 - x10); - p.lineTo(x2 - y20, y2 + x20); - p.lineTo(x2, y2); - break; + switch (cap) { + case CAP_BUTT: + p.lineTo(x2, y2); + break; + case CAP_ROUND: + double mx = x10 * CUBIC_ARC; + double my = y10 * CUBIC_ARC; + + double x3 = x0 + y10; + double y3 = y0 - x10; + + x10 *= CUBIC_ARC; + y10 *= CUBIC_ARC; + x20 *= CUBIC_ARC; + y20 *= CUBIC_ARC; + + p.cubicTo(x1 + y10, y1 - x10, x3 + mx, y3 + my, x3, y3); + p.cubicTo(x3 - mx, y3 - my, x2 - y20, y2 + x20, x2, y2); + break; + case CAP_SQUARE: + p.lineTo(x1 + y10, y1 - x10); + p.lineTo(x2 - y20, y2 + x20); + p.lineTo(x2, y2); + break; } } /** * Adds bevel and miter join to the work path. * - * @param p - the BufferedPath object of work path - * @param x0 - the x coordinate of the source path - * @param y0 - the y coordinate on the source path - * @param x2 - the x coordinate of the next point on the work path - * @param y2 - the y coordinate of the next point on the work path - * @param isLeft - the orientation of work path, true if work path lies to the left from source path, false otherwise + * @param p + * the BufferedPath object of work path. + * @param x0 + * the x coordinate of the source path. + * @param y0 + * the y coordinate on the source path. + * @param x2 + * the x coordinate of the next point on the work path. + * @param y2 + * the y coordinate of the next point on the work path. + * @param isLeft + * the orientation of work path, true if work path lies to the + * left from source path, false otherwise. */ void addJoin(BufferedPath p, double x0, double y0, double x2, double y2, boolean isLeft) { double x1 = p.xLast; @@ -667,26 +744,26 @@ public class BasicStroke implements Stroke { p.lineTo(x0, y0); p.lineTo(x2, y2); } else { - switch(join) { - case JOIN_BEVEL: - p.lineTo(x2, y2); - break; - case JOIN_MITER: - double s1 = x1 * x10 + y1 * y10; - double s2 = x2 * x20 + y2 * y20; - double x3 = (s1 * y20 - s2 * y10) / sin0; - double y3 = (s2 * x10 - s1 * x20) / sin0; - double x30 = x3 - x0; - double y30 = y3 - y0; - double miterLength = Math.sqrt(x30 * x30 + y30 * y30); - if (miterLength < miterLimit * w2) { - p.lineTo(x3, y3); - } - p.lineTo(x2, y2); - break; - case JOIN_ROUND: - addRoundJoin(p, x0, y0, x2, y2, isLeft); - break; + switch (join) { + case JOIN_BEVEL: + p.lineTo(x2, y2); + break; + case JOIN_MITER: + double s1 = x1 * x10 + y1 * y10; + double s2 = x2 * x20 + y2 * y20; + double x3 = (s1 * y20 - s2 * y10) / sin0; + double y3 = (s2 * x10 - s1 * x20) / sin0; + double x30 = x3 - x0; + double y30 = y3 - y0; + double miterLength = Math.sqrt(x30 * x30 + y30 * y30); + if (miterLength < miterLimit * w2) { + p.lineTo(x3, y3); + } + p.lineTo(x2, y2); + break; + case JOIN_ROUND: + addRoundJoin(p, x0, y0, x2, y2, isLeft); + break; } } } @@ -694,12 +771,19 @@ public class BasicStroke implements Stroke { /** * Adds round join to the work path. * - * @param p - the BufferedPath object of work path - * @param x0 - the x coordinate of the source path - * @param y0 - the y coordinate on the source path - * @param x2 - the x coordinate of the next point on the work path - * @param y2 - the y coordinate of the next point on the work path - * @param isLeft - the orientation of work path, true if work path lies to the left from source path, false otherwise + * @param p + * the BufferedPath object of work path. + * @param x0 + * the x coordinate of the source path. + * @param y0 + * the y coordinate on the source path. + * @param x2 + * the x coordinate of the next point on the work path. + * @param y2 + * the y coordinate of the next point on the work path. + * @param isLeft + * the orientation of work path, true if work path lies to the + * left from source path, false otherwise. */ void addRoundJoin(BufferedPath p, double x0, double y0, double x2, double y2, boolean isLeft) { double x1 = p.xLast; @@ -763,11 +847,16 @@ public class BasicStroke implements Stroke { /** * Adds solid line segment to the work path. * - * @param x1 - the x coordinate of the start line point - * @param y1 - the y coordinate of the start line point - * @param x2 - the x coordinate of the end line point - * @param y2 - the y coordinate of the end line point - * @param zero - if true it's allowable to add zero length line segment + * @param x1 + * the x coordinate of the start line point. + * @param y1 + * the y coordinate of the start line point. + * @param x2 + * the x coordinate of the end line point. + * @param y2 + * the y coordinate of the end line point. + * @param zero + * if true it's allowable to add zero length line segment. */ void addLine(double x1, double y1, double x2, double y2, boolean zero) { double dx = x2 - x1; @@ -808,12 +897,18 @@ public class BasicStroke implements Stroke { /** * Adds solid quad segment to the work path. * - * @param x1 - the x coordinate of the first control point - * @param y1 - the y coordinate of the first control point - * @param x2 - the x coordinate of the second control point - * @param y2 - the y coordinate of the second control point - * @param x3 - the x coordinate of the third control point - * @param y3 - the y coordinate of the third control point + * @param x1 + * the x coordinate of the first control point. + * @param y1 + * the y coordinate of the first control point. + * @param x2 + * the x coordinate of the second control point. + * @param y2 + * the y coordinate of the second control point. + * @param x3 + * the x coordinate of the third control point. + * @param y3 + * the y coordinate of the third control point. */ void addQuad(double x1, double y1, double x2, double y2, double x3, double y3) { double x21 = x2 - x1; @@ -841,11 +936,11 @@ public class BasicStroke implements Stroke { double w; w = w2 / l21; - double mx1 = - y21 * w; - double my1 = x21 * w; + double mx1 = -y21 * w; + double my1 = x21 * w; w = w2 / l23; - double mx3 = y23 * w; - double my3 = - x23 * w; + double mx3 = y23 * w; + double my3 = -x23 * w; double lx1 = x1 + mx1; double ly1 = y1 + my1; @@ -903,15 +998,23 @@ public class BasicStroke implements Stroke { } /** - * Subdivides solid quad curve to make outline for source quad segment and adds it to work path. + * Subdivides solid quad curve to make outline for source quad segment and + * adds it to work path. * - * @param x1 - the x coordinate of the first control point - * @param y1 - the y coordinate of the first control point - * @param x2 - the x coordinate of the second control point - * @param y2 - the y coordinate of the second control point - * @param x3 - the x coordinate of the third control point - * @param y3 - the y coordinate of the third control point - * @param level - the maximum level of subdivision deepness + * @param x1 + * the x coordinate of the first control point. + * @param y1 + * the y coordinate of the first control point. + * @param x2 + * the x coordinate of the second control point. + * @param y2 + * the y coordinate of the second control point. + * @param x3 + * the x coordinate of the third control point. + * @param y3 + * the y coordinate of the third control point. + * @param level + * the maximum level of subdivision deepness. */ void addSubQuad(double x1, double y1, double x2, double y2, double x3, double y3, int level) { double x21 = x2 - x1; @@ -939,8 +1042,8 @@ public class BasicStroke implements Stroke { double mx2 = (x21 * l23 + x23 * l21) * w; double my2 = (y21 * l23 + y23 * l21) * w; w = w2 / l23; - double mx3 = y23 * w; - double my3 = - x23 * w; + double mx3 = y23 * w; + double my3 = -x23 * w; lp.quadTo(x2 + mx2, y2 + my2, x3 + mx3, y3 + my3); rp.quadTo(x2 - mx2, y2 - my2, x3 - mx3, y3 - my3); } @@ -949,16 +1052,25 @@ public class BasicStroke implements Stroke { /** * Adds solid cubic segment to the work path. * - * @param x1 - the x coordinate of the first control point - * @param y1 - the y coordinate of the first control point - * @param x2 - the x coordinate of the second control point - * @param y2 - the y coordinate of the second control point - * @param x3 - the x coordinate of the third control point - * @param y3 - the y coordinate of the third control point - * @param x4 - the x coordinate of the fours control point - * @param y4 - the y coordinate of the fours control point - */ - void addCubic(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { + * @param x1 + * the x coordinate of the first control point. + * @param y1 + * the y coordinate of the first control point. + * @param x2 + * the x coordinate of the second control point. + * @param y2 + * the y coordinate of the second control point. + * @param x3 + * the x coordinate of the third control point. + * @param y3 + * the y coordinate of the third control point. + * @param x4 + * the x coordinate of the fours control point. + * @param y4 + * the y coordinate of the fours control point. + */ + void addCubic(double x1, double y1, double x2, double y2, double x3, double y3, double x4, + double y4) { double x12 = x1 - x2; double y12 = y1 - y2; double x23 = x2 - x3; @@ -997,35 +1109,32 @@ public class BasicStroke implements Stroke { if (l12 == 0.0) { w = w2 / l23; - mx1 = y23 * w; - my1 = - x23 * w; + mx1 = y23 * w; + my1 = -x23 * w; w = w2 / l34; - mx4 = y34 * w; - my4 = - x34 * w; - onLine = - x23 * y34 + y23 * x34 == 0.0; // sin3 - } else - if (l34 == 0.0) { + mx4 = y34 * w; + my4 = -x34 * w; + onLine = -x23 * y34 + y23 * x34 == 0.0; // sin3 + } else if (l34 == 0.0) { w = w2 / l12; - mx1 = y12 * w; - my1 = - x12 * w; + mx1 = y12 * w; + my1 = -x12 * w; w = w2 / l23; - mx4 = y23 * w; - my4 = - x23 * w; - onLine = - x12 * y23 + y12 * x23 == 0.0; // sin2 + mx4 = y23 * w; + my4 = -x23 * w; + onLine = -x12 * y23 + y12 * x23 == 0.0; // sin2 } else { w = w2 / l12; - mx1 = y12 * w; - my1 = - x12 * w; + mx1 = y12 * w; + my1 = -x12 * w; w = w2 / l34; - mx4 = y34 * w; - my4 = - x34 * w; + mx4 = y34 * w; + my4 = -x34 * w; if (l23 == 0.0) { - onLine = - x12 * y34 + y12 * x34 == 0.0; + onLine = -x12 * y34 + y12 * x34 == 0.0; } else { - onLine = - - x12 * y34 + y12 * x34 == 0.0 && - - x12 * y23 + y12 * x23 == 0.0 && // sin2 - - x23 * y34 + y23 * x34 == 0.0; // sin3 + onLine = -x12 * y34 + y12 * x34 == 0.0 && -x12 * y23 + y12 * x23 == 0.0 && // sin2 + -x23 * y34 + y23 * x34 == 0.0; // sin3 } } @@ -1063,8 +1172,7 @@ public class BasicStroke implements Stroke { if (0.0 < t && t < 1.0) { roots[rc++] = t; } - } else - if (d > 0.0) { + } else if (d > 0.0) { d = Math.sqrt(d); double z = l12 + l34 - l23 - l23; double t; @@ -1087,15 +1195,15 @@ public class BasicStroke implements Stroke { } roots[rc++] = 1.0; - double ax = - x34 - x12 + x23 + x23; - double ay = - y34 - y12 + y23 + y23; - double bx = 3.0 * (- x23 + x12); - double by = 3.0 * (- y23 + y12); - double cx = 3.0 * (- x12); - double cy = 3.0 * (- y12); + double ax = -x34 - x12 + x23 + x23; + double ay = -y34 - y12 + y23 + y23; + double bx = 3.0 * (-x23 + x12); + double by = 3.0 * (-y23 + y12); + double cx = 3.0 * (-x12); + double cy = 3.0 * (-y12); double xPrev = x1; double yPrev = y1; - for(int i = 0; i < rc; i++) { + for (int i = 0; i < rc; i++) { double t = roots[i]; double px = t * (t * (t * ax + bx) + cx) + x1; double py = t * (t * (t * ay + by) + cy) + y1; @@ -1109,8 +1217,8 @@ public class BasicStroke implements Stroke { } xPrev = px; yPrev = py; - mx1 = - mx1; - my1 = - my1; + mx1 = -mx1; + my1 = -my1; } } else { lp.cubicTo(x2 + mx1, y2 + my1, x3 + mx4, y3 + my4, x4 + mx4, y4 + my4); @@ -1122,19 +1230,30 @@ public class BasicStroke implements Stroke { } /** - * Subdivides solid cubic curve to make outline for source quad segment and adds it to work path. + * Subdivides solid cubic curve to make outline for source quad segment and + * adds it to work path. * - * @param x1 - the x coordinate of the first control point - * @param y1 - the y coordinate of the first control point - * @param x2 - the x coordinate of the second control point - * @param y2 - the y coordinate of the second control point - * @param x3 - the x coordinate of the third control point - * @param y3 - the y coordinate of the third control point - * @param x4 - the x coordinate of the fours control point - * @param y4 - the y coordinate of the fours control point - * @param level - the maximum level of subdivision deepness - */ - void addSubCubic(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, int level) { + * @param x1 + * the x coordinate of the first control point. + * @param y1 + * the y coordinate of the first control point. + * @param x2 + * the x coordinate of the second control point. + * @param y2 + * the y coordinate of the second control point. + * @param x3 + * the x coordinate of the third control point. + * @param y3 + * the y coordinate of the third control point. + * @param x4 + * the x coordinate of the fours control point. + * @param y4 + * the y coordinate of the fours control point. + * @param level + * the maximum level of subdivision deepness. + */ + void addSubCubic(double x1, double y1, double x2, double y2, double x3, double y3, double x4, + double y4, int level) { double x12 = x1 - x2; double y12 = y1 - y2; double x23 = x2 - x3; @@ -1142,19 +1261,18 @@ public class BasicStroke implements Stroke { double x34 = x3 - x4; double y34 = y3 - y4; - double cos2 = - x12 * x23 - y12 * y23; - double cos3 = - x23 * x34 - y23 * y34; - double sin2 = - x12 * y23 + y12 * x23; - double sin3 = - x23 * y34 + y23 * x34; - double sin0 = - x12 * y34 + y12 * x34; - double cos0 = - x12 * x34 - y12 * y34; - - if (level < MAX_LEVEL && (sin2 != 0.0 || sin3 != 0.0 || sin0 != 0.0) && - (cos2 >= 0.0 || cos3 >= 0.0 || cos0 >= 0.0 || - (Math.abs(sin2 / cos2) > curveDelta) || - (Math.abs(sin3 / cos3) > curveDelta) || - (Math.abs(sin0 / cos0) > curveDelta))) - { + double cos2 = -x12 * x23 - y12 * y23; + double cos3 = -x23 * x34 - y23 * y34; + double sin2 = -x12 * y23 + y12 * x23; + double sin3 = -x23 * y34 + y23 * x34; + double sin0 = -x12 * y34 + y12 * x34; + double cos0 = -x12 * x34 - y12 * y34; + + if (level < MAX_LEVEL + && (sin2 != 0.0 || sin3 != 0.0 || sin0 != 0.0) + && (cos2 >= 0.0 || cos3 >= 0.0 || cos0 >= 0.0 + || (Math.abs(sin2 / cos2) > curveDelta) + || (Math.abs(sin3 / cos3) > curveDelta) || (Math.abs(sin0 / cos0) > curveDelta))) { double cx = (x2 + x3) / 2.0; double cy = (y2 + y3) / 2.0; double lx2 = (x2 + x1) / 2.0; @@ -1177,27 +1295,26 @@ public class BasicStroke implements Stroke { if (l12 == 0.0) { w = w2 / l23; - mx1 = y23 * w; - my1 = - x23 * w; + mx1 = y23 * w; + my1 = -x23 * w; w = w2 / l34; - mx4 = y34 * w; - my4 = - x34 * w; - } else - if (l34 == 0.0) { + mx4 = y34 * w; + my4 = -x34 * w; + } else if (l34 == 0.0) { w = w2 / l12; - mx1 = y12 * w; - my1 = - x12 * w; + mx1 = y12 * w; + my1 = -x12 * w; w = w2 / l23; - mx4 = y23 * w; - my4 = - x23 * w; + mx4 = y23 * w; + my4 = -x23 * w; } else { // Common case w = w2 / l12; - mx1 = y12 * w; - my1 = - x12 * w; + mx1 = y12 * w; + my1 = -x12 * w; w = w2 / l34; - mx4 = y34 * w; - my4 = - x34 * w; + mx4 = y34 * w; + my4 = -x34 * w; } if (sin2 == 0.0) { @@ -1225,10 +1342,14 @@ public class BasicStroke implements Stroke { /** * Adds dashed line segment to the work path. * - * @param x1 - the x coordinate of the start line point - * @param y1 - the y coordinate of the start line point - * @param x2 - the x coordinate of the end line point - * @param y2 - the y coordinate of the end line point + * @param x1 + * the x coordinate of the start line point. + * @param y1 + * the y coordinate of the start line point. + * @param x2 + * the x coordinate of the end line point. + * @param y2 + * the y coordinate of the end line point. */ void addDashLine(double x1, double y1, double x2, double y2) { double x21 = x2 - x1; @@ -1243,12 +1364,12 @@ public class BasicStroke implements Stroke { double px1, py1; px1 = py1 = 0.0; double w = w2 / l21; - double mx = - y21 * w; - double my = x21 * w; + double mx = -y21 * w; + double my = x21 * w; dasher.init(new DashIterator.Line(l21)); - while(!dasher.eof()) { + while (!dasher.eof()) { double t = dasher.getValue(); scx = x1 + t * x21; scy = y1 + t * y21; @@ -1271,28 +1392,27 @@ public class BasicStroke implements Stroke { addJoin(lp, x1, y1, lx1, ly1, true); addJoin(rp, x1, y1, rx1, ry1, false); } - } else - if (dasher.isContinue()) { - double px2 = scx; - double py2 = scy; - lp.lineTo(px2 + mx, py2 + my); - rp.lineTo(px2 - mx, py2 - my); - if (dasher.close) { - addCap(lp, px2, py2, rp.xLast, rp.yLast); - lp.combine(rp); - if (isFirst) { - isFirst = false; - fmx = smx; - fmy = smy; - sp = lp; - lp = new BufferedPath(); - } else { - addCap(lp, smx, smy, lp.xMove, lp.yMove); - lp.closePath(); - } - isMove = true; + } else if (dasher.isContinue()) { + double px2 = scx; + double py2 = scy; + lp.lineTo(px2 + mx, py2 + my); + rp.lineTo(px2 - mx, py2 - my); + if (dasher.close) { + addCap(lp, px2, py2, rp.xLast, rp.yLast); + lp.combine(rp); + if (isFirst) { + isFirst = false; + fmx = smx; + fmy = smy; + sp = lp; + lp = new BufferedPath(); + } else { + addCap(lp, smx, smy, lp.xMove, lp.yMove); + lp.closePath(); } + isMove = true; } + } dasher.next(); } @@ -1301,12 +1421,18 @@ public class BasicStroke implements Stroke { /** * Adds dashed quad segment to the work path. * - * @param x1 - the x coordinate of the first control point - * @param y1 - the y coordinate of the first control point - * @param x2 - the x coordinate of the second control point - * @param y2 - the y coordinate of the second control point - * @param x3 - the x coordinate of the third control point - * @param y3 - the y coordinate of the third control point + * @param x1 + * the x coordinate of the first control point. + * @param y1 + * the y coordinate of the first control point. + * @param x2 + * the x coordinate of the second control point. + * @param y2 + * the y coordinate of the second control point. + * @param x3 + * the x coordinate of the third control point. + * @param y3 + * the y coordinate of the third control point. */ void addDashQuad(double x1, double y1, double x2, double y2, double x3, double y3) { @@ -1345,7 +1471,7 @@ public class BasicStroke implements Stroke { dasher.init(new DashIterator.Quad(x1, y1, x2, y2, x3, y3)); - while(!dasher.eof()) { + while (!dasher.eof()) { double t = dasher.getValue(); double dx = t * ax + bx; double dy = t * ay + by; @@ -1357,8 +1483,8 @@ public class BasicStroke implements Stroke { dx1 = dx; dy1 = dy; double w = w2 / Math.sqrt(dx1 * dx1 + dy1 * dy1); - double mx1 = - dy1 * w; - double my1 = dx1 * w; + double mx1 = -dy1 * w; + double my1 = dx1 * w; double lx1 = px1 + mx1; double ly1 = py1 + my1; double rx1 = px1 - mx1; @@ -1374,33 +1500,32 @@ public class BasicStroke implements Stroke { addJoin(lp, x1, y1, lx1, ly1, true); addJoin(rp, x1, y1, rx1, ry1, false); } - } else - if (dasher.isContinue()) { - double px3 = scx; - double py3 = scy; - double sx = x2 - x23 * prev; - double sy = y2 - y23 * prev; - double t2 = (t - prev) / (1 - prev); - double px2 = px1 + (sx - px1) * t2; - double py2 = py1 + (sy - py1) * t2; - - addQuad(px1, py1, px2, py2, px3, py3); - if (dasher.isClosed()) { - addCap(lp, px3, py3, rp.xLast, rp.yLast); - lp.combine(rp); - if (isFirst) { - isFirst = false; - fmx = smx; - fmy = smy; - sp = lp; - lp = new BufferedPath(); - } else { - addCap(lp, smx, smy, lp.xMove, lp.yMove); - lp.closePath(); - } - isMove = true; + } else if (dasher.isContinue()) { + double px3 = scx; + double py3 = scy; + double sx = x2 - x23 * prev; + double sy = y2 - y23 * prev; + double t2 = (t - prev) / (1 - prev); + double px2 = px1 + (sx - px1) * t2; + double py2 = py1 + (sy - py1) * t2; + + addQuad(px1, py1, px2, py2, px3, py3); + if (dasher.isClosed()) { + addCap(lp, px3, py3, rp.xLast, rp.yLast); + lp.combine(rp); + if (isFirst) { + isFirst = false; + fmx = smx; + fmy = smy; + sp = lp; + lp = new BufferedPath(); + } else { + addCap(lp, smx, smy, lp.xMove, lp.yMove); + lp.closePath(); } + isMove = true; } + } prev = t; dasher.next(); @@ -1410,16 +1535,25 @@ public class BasicStroke implements Stroke { /** * Adds dashed cubic segment to the work path. * - * @param x1 - the x coordinate of the first control point - * @param y1 - the y coordinate of the first control point - * @param x2 - the x coordinate of the second control point - * @param y2 - the y coordinate of the second control point - * @param x3 - the x coordinate of the third control point - * @param y3 - the y coordinate of the third control point - * @param x4 - the x coordinate of the fours control point - * @param y4 - the y coordinate of the fours control point + * @param x1 + * the x coordinate of the first control point. + * @param y1 + * the y coordinate of the first control point. + * @param x2 + * the x coordinate of the second control point. + * @param y2 + * the y coordinate of the second control point. + * @param x3 + * the x coordinate of the third control point. + * @param y3 + * the y coordinate of the third control point. + * @param x4 + * the x coordinate of the fours control point. + * @param y4 + * the y coordinate of the fours control point. */ - void addDashCubic(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { + void addDashCubic(double x1, double y1, double x2, double y2, double x3, double y3, double x4, + double y4) { double x12 = x1 - x2; double y12 = y1 - y2; @@ -1469,7 +1603,7 @@ public class BasicStroke implements Stroke { dasher.init(new DashIterator.Cubic(x1, y1, x2, y2, x3, y3, x4, y4)); - while(!dasher.eof()) { + while (!dasher.eof()) { double t = dasher.getValue(); scx = t * (t * (t * ax + bx) + cx) + dx; @@ -1480,8 +1614,8 @@ public class BasicStroke implements Stroke { double dx1 = t * (t * (ax + ax + ax) + bx + bx) + cx; double dy1 = t * (t * (ay + ay + ay) + by + by) + cy; double w = w2 / Math.sqrt(dx1 * dx1 + dy1 * dy1); - double mx1 = - dy1 * w; - double my1 = dx1 * w; + double mx1 = -dy1 * w; + double my1 = dx1 * w; double lx1 = px1 + mx1; double ly1 = py1 + my1; double rx1 = px1 - mx1; @@ -1497,42 +1631,41 @@ public class BasicStroke implements Stroke { addJoin(lp, x1, y1, lx1, ly1, true); addJoin(rp, x1, y1, rx1, ry1, false); } - } else - if (dasher.isContinue()) { - double sx1 = x2 - x23 * prev; - double sy1 = y2 - y23 * prev; - double sx2 = x3 - x34 * prev; - double sy2 = y3 - y34 * prev; - double sx3 = sx1 + (sx2 - sx1) * prev; - double sy3 = sy1 + (sy2 - sy1) * prev; - double t2 = (t - prev) / (1 - prev); - double sx4 = sx3 + (sx2 - sx3) * t2; - double sy4 = sy3 + (sy2 - sy3) * t2; - - double px4 = scx; - double py4 = scy; - double px2 = px1 + (sx3 - px1) * t2; - double py2 = py1 + (sy3 - py1) * t2; - double px3 = px2 + (sx4 - px2) * t2; - double py3 = py2 + (sy4 - py2) * t2; - - addCubic(px1, py1, px2, py2, px3, py3, px4, py4); - if (dasher.isClosed()) { - addCap(lp, px4, py4, rp.xLast, rp.yLast); - lp.combine(rp); - if (isFirst) { - isFirst = false; - fmx = smx; - fmy = smy; - sp = lp; - lp = new BufferedPath(); - } else { - addCap(lp, smx, smy, lp.xMove, lp.yMove); - lp.closePath(); - } - isMove = true; + } else if (dasher.isContinue()) { + double sx1 = x2 - x23 * prev; + double sy1 = y2 - y23 * prev; + double sx2 = x3 - x34 * prev; + double sy2 = y3 - y34 * prev; + double sx3 = sx1 + (sx2 - sx1) * prev; + double sy3 = sy1 + (sy2 - sy1) * prev; + double t2 = (t - prev) / (1 - prev); + double sx4 = sx3 + (sx2 - sx3) * t2; + double sy4 = sy3 + (sy2 - sy3) * t2; + + double px4 = scx; + double py4 = scy; + double px2 = px1 + (sx3 - px1) * t2; + double py2 = py1 + (sy3 - py1) * t2; + double px3 = px2 + (sx4 - px2) * t2; + double py3 = py2 + (sy4 - py2) * t2; + + addCubic(px1, py1, px2, py2, px3, py3, px4, py4); + if (dasher.isClosed()) { + addCap(lp, px4, py4, rp.xLast, rp.yLast); + lp.combine(rp); + if (isFirst) { + isFirst = false; + fmx = smx; + fmy = smy; + sp = lp; + lp = new BufferedPath(); + } else { + addCap(lp, smx, smy, lp.xMove, lp.yMove); + lp.closePath(); } + isMove = true; } + } prev = t; dasher.next(); @@ -1543,30 +1676,44 @@ public class BasicStroke implements Stroke { * Dasher class provides dashing for particular dash style. */ class Dasher { - - /** The pos. */ + + /** + * The pos. + */ double pos; - - /** The first. */ + + /** + * The first. + */ boolean close, visible, first; - - /** The dash. */ + + /** + * The dash. + */ float dash[]; - - /** The phase. */ + + /** + * The phase. + */ float phase; - - /** The index. */ + + /** + * The index. + */ int index; - - /** The iter. */ + + /** + * The iter. + */ DashIterator iter; - + /** * Instantiates a new dasher. * - * @param dash the dash - * @param phase the phase + * @param dash + * the dash. + * @param phase + * the phase. */ Dasher(float dash[], float phase) { this.dash = dash; @@ -1578,52 +1725,53 @@ public class BasicStroke implements Stroke { visible = !visible; pos -= dash[index]; index = (index + 1) % dash.length; - } + } pos = -pos; first = visible; } - + /** * Inits the. * - * @param iter the iter + * @param iter + * the iter. */ void init(DashIterator iter) { this.iter = iter; close = true; } - + /** * Checks if is open. * - * @return true, if is open + * @return true, if is open. */ boolean isOpen() { return visible && pos < iter.length; } - + /** * Checks if is continue. * - * @return true, if is continue + * @return true, if is continue. */ boolean isContinue() { return !visible && pos > 0; } - + /** * Checks if is closed. * - * @return true, if is closed + * @return true, if is closed. */ boolean isClosed() { return close; } - + /** * Checks if is connected. * - * @return true, if is connected + * @return true, if is connected. */ boolean isConnected() { return first && !close; @@ -1632,7 +1780,7 @@ public class BasicStroke implements Stroke { /** * Eof. * - * @return true, if successful + * @return true, if successful. */ boolean eof() { if (!close) { @@ -1648,7 +1796,7 @@ public class BasicStroke implements Stroke { } return false; } - + /** * Next. */ @@ -1663,17 +1811,17 @@ public class BasicStroke implements Stroke { } visible = !visible; } - + /** * Gets the value. * - * @return the value + * @return the value. */ double getValue() { double t = iter.getNext(pos); return t < 0 ? 0 : (t > 1 ? 1 : t); } - + } /** @@ -1681,7 +1829,9 @@ public class BasicStroke implements Stroke { */ static abstract class DashIterator { - /** The Constant FLATNESS. */ + /** + * The Constant FLATNESS. + */ static final double FLATNESS = 1.0; /** @@ -1692,7 +1842,8 @@ public class BasicStroke implements Stroke { /** * Instantiates a new line. * - * @param len the len + * @param len + * the len. */ Line(double len) { length = len; @@ -1710,36 +1861,56 @@ public class BasicStroke implements Stroke { */ static class Quad extends DashIterator { - /** The val size. */ + /** + * The val size. + */ int valSize; - - /** The val pos. */ + + /** + * The val pos. + */ int valPos; - - /** The cur len. */ + + /** + * The cur len. + */ double curLen; - - /** The prev len. */ + + /** + * The prev len. + */ double prevLen; - - /** The last len. */ + + /** + * The last len. + */ double lastLen; - - /** The values. */ + + /** + * The values. + */ double[] values; - - /** The step. */ + + /** + * The step. + */ double step; /** * Instantiates a new quad. * - * @param x1 the x1 - * @param y1 the y1 - * @param x2 the x2 - * @param y2 the y2 - * @param x3 the x3 - * @param y3 the y3 + * @param x1 + * the x1. + * @param y1 + * the y1. + * @param x2 + * the x2. + * @param y2 + * the y2. + * @param x3 + * the x3. + * @param y3 + * the y3. */ Quad(double x1, double y1, double x2, double y2, double x3, double y3) { @@ -1766,7 +1937,7 @@ public class BasicStroke implements Stroke { double pvx = vx; double pvy = vy; length = 0.0; - for(int i = 0; i < n; i++) { + for (int i = 0; i < n; i++) { vx += dx1; vy += dy1; dx1 += dx2; @@ -1804,40 +1975,63 @@ public class BasicStroke implements Stroke { */ static class Cubic extends DashIterator { - /** The val size. */ + /** + * The val size. + */ int valSize; - - /** The val pos. */ + + /** + * The val pos. + */ int valPos; - - /** The cur len. */ + + /** + * The cur len. + */ double curLen; - - /** The prev len. */ + + /** + * The prev len. + */ double prevLen; - - /** The last len. */ + + /** + * The last len. + */ double lastLen; - - /** The values. */ + + /** + * The values. + */ double[] values; - - /** The step. */ + + /** + * The step. + */ double step; /** * Instantiates a new cubic. * - * @param x1 the x1 - * @param y1 the y1 - * @param x2 the x2 - * @param y2 the y2 - * @param x3 the x3 - * @param y3 the y3 - * @param x4 the x4 - * @param y4 the y4 + * @param x1 + * the x1. + * @param y1 + * the y1. + * @param x2 + * the x2. + * @param y2 + * the y2. + * @param x3 + * the x3. + * @param y3 + * the y3. + * @param x4 + * the x4. + * @param y4 + * the y4. */ - Cubic(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { + Cubic(double x1, double y1, double x2, double y2, double x3, double y3, double x4, + double y4) { double nx1 = x1 + x3 - x2 - x2; double ny1 = y1 + y3 - y2 - y2; @@ -1869,7 +2063,7 @@ public class BasicStroke implements Stroke { double pvx = vx; double pvy = vy; length = 0.0; - for(int i = 0; i < n; i++) { + for (int i = 0; i < n; i++) { vx += dx1; vy += dy1; dx1 += dx2; @@ -1904,15 +2098,17 @@ public class BasicStroke implements Stroke { } - /** The length. */ + /** + * The length. + */ double length; /** * Gets the next. * - * @param dashPos the dash pos - * - * @return the next + * @param dashPos + * the dash pos. + * @return the next. */ abstract double getNext(double dashPos); @@ -1923,39 +2119,60 @@ public class BasicStroke implements Stroke { */ static class BufferedPath { - /** The Constant bufCapacity. */ + /** + * The Constant bufCapacity. + */ private static final int bufCapacity = 10; - /** The point shift. */ + /** + * The point shift. + */ static int pointShift[] = { - 2, // MOVETO - 2, // LINETO - 4, // QUADTO - 6, // CUBICTO - 0}; // CLOSE + 2, // MOVETO + 2, // LINETO + 4, // QUADTO + 6, // CUBICTO + 0 + }; // CLOSE - /** The types. */ + /** + * The types. + */ byte[] types; - - /** The points. */ + + /** + * The points. + */ float[] points; - - /** The type size. */ + + /** + * The type size. + */ int typeSize; - - /** The point size. */ + + /** + * The point size. + */ int pointSize; - /** The x last. */ + /** + * The x last. + */ float xLast; - - /** The y last. */ + + /** + * The y last. + */ float yLast; - - /** The x move. */ + + /** + * The x move. + */ float xMove; - - /** The y move. */ + + /** + * The y move. + */ float yMove; /** @@ -1969,8 +2186,10 @@ public class BasicStroke implements Stroke { /** * Check buf. * - * @param typeCount the type count - * @param pointCount the point count + * @param typeCount + * the type count. + * @param pointCount + * the point count. */ void checkBuf(int typeCount, int pointCount) { if (typeSize + typeCount > types.length) { @@ -1988,7 +2207,7 @@ public class BasicStroke implements Stroke { /** * Checks if is empty. * - * @return true, if is empty + * @return true, if is empty. */ boolean isEmpty() { return typeSize == 0; @@ -2005,8 +2224,10 @@ public class BasicStroke implements Stroke { /** * Move to. * - * @param x the x - * @param y the y + * @param x + * the x. + * @param y + * the y. */ void moveTo(double x, double y) { checkBuf(1, 2); @@ -2018,8 +2239,10 @@ public class BasicStroke implements Stroke { /** * Line to. * - * @param x the x - * @param y the y + * @param x + * the x. + * @param y + * the y. */ void lineTo(double x, double y) { checkBuf(1, 2); @@ -2031,10 +2254,14 @@ public class BasicStroke implements Stroke { /** * Quad to. * - * @param x1 the x1 - * @param y1 the y1 - * @param x2 the x2 - * @param y2 the y2 + * @param x1 + * the x1. + * @param y1 + * the y1. + * @param x2 + * the x2. + * @param y2 + * the y2. */ void quadTo(double x1, double y1, double x2, double y2) { checkBuf(1, 4); @@ -2048,12 +2275,18 @@ public class BasicStroke implements Stroke { /** * Cubic to. * - * @param x1 the x1 - * @param y1 the y1 - * @param x2 the x2 - * @param y2 the y2 - * @param x3 the x3 - * @param y3 the y3 + * @param x1 + * the x1. + * @param y1 + * the y1. + * @param x2 + * the x2. + * @param y2 + * the y2. + * @param x3 + * the x3. + * @param y3 + * the y3. */ void cubicTo(double x1, double y1, double x2, double y2, double x3, double y3) { checkBuf(1, 6); @@ -2077,8 +2310,10 @@ public class BasicStroke implements Stroke { /** * Sets the last. * - * @param x the x - * @param y the y + * @param x + * the x. + * @param y + * the y. */ void setLast(double x, double y) { points[pointSize - 2] = xLast = (float)x; @@ -2088,7 +2323,8 @@ public class BasicStroke implements Stroke { /** * Append. * - * @param p the p + * @param p + * the p. */ void append(BufferedPath p) { checkBuf(p.typeSize, p.pointSize); @@ -2103,18 +2339,19 @@ public class BasicStroke implements Stroke { /** * Append reverse. * - * @param p the p + * @param p + * the p. */ void appendReverse(BufferedPath p) { checkBuf(p.typeSize, p.pointSize); // Skip last point, beacause it's the first point of the second path - for(int i = p.pointSize - 2; i >= 0; i -= 2) { + for (int i = p.pointSize - 2; i >= 0; i -= 2) { points[pointSize++] = p.points[i + 0]; points[pointSize++] = p.points[i + 1]; } // Skip first type, beacuse it's always MOVETO int closeIndex = 0; - for(int i = p.typeSize - 1; i >= 0; i--) { + for (int i = p.typeSize - 1; i >= 0; i--) { byte type = p.types[i]; if (type == PathIterator.SEG_MOVETO) { types[closeIndex] = PathIterator.SEG_MOVETO; @@ -2133,7 +2370,8 @@ public class BasicStroke implements Stroke { /** * Join. * - * @param p the p + * @param p + * the p. */ void join(BufferedPath p) { // Skip MOVETO @@ -2149,17 +2387,18 @@ public class BasicStroke implements Stroke { /** * Combine. * - * @param p the p + * @param p + * the p. */ void combine(BufferedPath p) { checkBuf(p.typeSize - 1, p.pointSize - 2); // Skip last point, beacause it's the first point of the second path - for(int i = p.pointSize - 4; i >= 0; i -= 2) { + for (int i = p.pointSize - 4; i >= 0; i -= 2) { points[pointSize++] = p.points[i + 0]; points[pointSize++] = p.points[i + 1]; } // Skip first type, beacuse it's always MOVETO - for(int i = p.typeSize - 1; i >= 1; i--) { + for (int i = p.typeSize - 1; i >= 1; i--) { types[typeSize++] = p.types[i]; } xLast = points[pointSize - 2]; @@ -2169,29 +2408,30 @@ public class BasicStroke implements Stroke { /** * Creates the general path. * - * @return the general path + * @return the general path. */ GeneralPath createGeneralPath() { GeneralPath p = new GeneralPath(); int j = 0; - for(int i = 0; i < typeSize; i++) { + for (int i = 0; i < typeSize; i++) { int type = types[i]; - switch(type){ - case PathIterator.SEG_MOVETO: - p.moveTo(points[j], points[j + 1]); - break; - case PathIterator.SEG_LINETO: - p.lineTo(points[j], points[j + 1]); - break; - case PathIterator.SEG_QUADTO: - p.quadTo(points[j], points[j + 1], points[j + 2], points[j + 3]); - break; - case PathIterator.SEG_CUBICTO: - p.curveTo(points[j], points[j + 1], points[j + 2], points[j + 3], points[j + 4], points[j + 5]); - break; - case PathIterator.SEG_CLOSE: - p.closePath(); - break; + switch (type) { + case PathIterator.SEG_MOVETO: + p.moveTo(points[j], points[j + 1]); + break; + case PathIterator.SEG_LINETO: + p.lineTo(points[j], points[j + 1]); + break; + case PathIterator.SEG_QUADTO: + p.quadTo(points[j], points[j + 1], points[j + 2], points[j + 3]); + break; + case PathIterator.SEG_CUBICTO: + p.curveTo(points[j], points[j + 1], points[j + 2], points[j + 3], + points[j + 4], points[j + 5]); + break; + case PathIterator.SEG_CLOSE: + p.closePath(); + break; } j += pointShift[type]; } @@ -2201,4 +2441,3 @@ public class BasicStroke implements Stroke { } } - diff --git a/awt/java/awt/BufferCapabilities.java b/awt/java/awt/BufferCapabilities.java index 80e8add53f..cd5fe7b1c7 100644 --- a/awt/java/awt/BufferCapabilities.java +++ b/awt/java/awt/BufferCapabilities.java @@ -18,35 +18,45 @@ * @author Alexey A. Petrenko * @version $Revision$ */ -package java.awt; +package java.awt; /** - * The BufferCapabilities class represents the capabilities - * and other properties of the image buffers. + * The BufferCapabilities class represents the capabilities and other properties + * of the image buffers. + * + * @since Android 1.0 */ public class BufferCapabilities implements Cloneable { - - /** The front buffer capabilities. */ + + /** + * The front buffer capabilities. + */ private final ImageCapabilities frontBufferCapabilities; - - /** The back buffer capabilities. */ + + /** + * The back buffer capabilities. + */ private final ImageCapabilities backBufferCapabilities; - - /** The flip contents. */ + + /** + * The flip contents. + */ private final FlipContents flipContents; /** * Instantiates a new BufferCapabilities object. * - * @param frontBufferCapabilities the front buffer capabilities, - * can not be null. - * @param backBufferCapabilities the the back and intermediate - * buffers capabilities, can not be null. - * @param flipContents the back buffer contents after page flipping, - * null if page flipping is not used. + * @param frontBufferCapabilities + * the front buffer capabilities, can not be null. + * @param backBufferCapabilities + * the the back and intermediate buffers capabilities, can not be + * null. + * @param flipContents + * the back buffer contents after page flipping, null if page + * flipping is not used. */ - public BufferCapabilities(ImageCapabilities frontBufferCapabilities, + public BufferCapabilities(ImageCapabilities frontBufferCapabilities, ImageCapabilities backBufferCapabilities, FlipContents flipContents) { if (frontBufferCapabilities == null || backBufferCapabilities == null) { throw new IllegalArgumentException(); @@ -70,8 +80,8 @@ public class BufferCapabilities implements Cloneable { /** * Gets the image capabilities of the front buffer. * - * @return the ImageCapabilities object represented capabilities - * of the front buffer. + * @return the ImageCapabilities object represented capabilities of the + * front buffer. */ public ImageCapabilities getFrontBufferCapabilities() { return frontBufferCapabilities; @@ -80,15 +90,15 @@ public class BufferCapabilities implements Cloneable { /** * Gets the image capabilities of the back buffer. * - * @return the ImageCapabilities object represented capabilities - * of the back buffer. + * @return the ImageCapabilities object represented capabilities of the back + * buffer. */ public ImageCapabilities getBackBufferCapabilities() { return backBufferCapabilities; } /** - * Gets the flip contents of the back buffer after page-flipping. + * Gets the flip contents of the back buffer after page-flipping. * * @return the FlipContents of the back buffer after page-flipping. */ @@ -99,8 +109,7 @@ public class BufferCapabilities implements Cloneable { /** * Checks if the buffer strategy uses page flipping. * - * @return true, if the buffer strategy uses page flipping, - * false otherwise. + * @return true, if the buffer strategy uses page flipping, false otherwise. */ public boolean isPageFlipping() { return flipContents != null; @@ -110,7 +119,7 @@ public class BufferCapabilities implements Cloneable { * Checks if page flipping is only available in full-screen mode. * * @return true, if page flipping is only available in full-screen mode, - * false otherwise. + * false otherwise. */ public boolean isFullScreenRequired() { return false; @@ -119,39 +128,40 @@ public class BufferCapabilities implements Cloneable { /** * Checks if page flipping can be performed using more than two buffers. * - * @return true, if page flipping can be performed using more than two buffers, - * false otherwise. + * @return true, if page flipping can be performed using more than two + * buffers, false otherwise. */ public boolean isMultiBufferAvailable() { return false; } /** - * The FlipContents class represents a set of possible back buffer contents + * The FlipContents class represents a set of possible back buffer contents * after page-flipping. + * + * @since Android 1.0 */ public static final class FlipContents { - + /** - * The back buffered contents are cleared with the background color + * The back buffered contents are cleared with the background color * after flipping. */ public static final FlipContents BACKGROUND = new FlipContents(); - - /** - * The back buffered contents are copied to the front buffer before + + /** + * The back buffered contents are copied to the front buffer before * flipping. */ public static final FlipContents COPIED = new FlipContents(); - - /** - * The back buffer contents are the prior contents of the - * front buffer. + + /** + * The back buffer contents are the prior contents of the front buffer. */ public static final FlipContents PRIOR = new FlipContents(); - - /** - * The back buffer contents are undefined after flipping + + /** + * The back buffer contents are undefined after flipping */ public static final FlipContents UNDEFINED = new FlipContents(); diff --git a/awt/java/awt/Color.java b/awt/java/awt/Color.java index e1e4178e99..93c532d784 100644 --- a/awt/java/awt/Color.java +++ b/awt/java/awt/Color.java @@ -18,6 +18,7 @@ * @author Oleg V. Khaschansky * @version $Revision$ */ + package java.awt; import java.awt.color.ColorSpace; @@ -33,155 +34,230 @@ import java.util.Arrays; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Color class defines colors in the default sRGB color - * space or in the specified ColorSpace. Every Color contains alpha value. - * The alpha value defines the transparency of a color and can be represented - * by a float value in the range 0.0 - 1.0 or 0 - 255. - */ + * The Color class defines colors in the default sRGB color space or in the + * specified ColorSpace. Every Color contains alpha value. The alpha value + * defines the transparency of a color and can be represented by a float value + * in the range 0.0 - 1.0 or 0 - 255. + * + * @since Android 1.0 + */ public class Color implements Paint, Serializable { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 118526816881161077L; /* - * The values of the following colors are based on 1.5 release behavior which - * can be revealed using the following or similar code: - * Color c = Color.white; - * System.out.println(c); + * The values of the following colors are based on 1.5 release behavior + * which can be revealed using the following or similar code: Color c = + * Color.white; System.out.println(c); */ - /** The color white. */ + /** + * The color white. + */ public static final Color white = new Color(255, 255, 255); - /** The color white. */ + /** + * The color white. + */ public static final Color WHITE = white; - /** The color light gray. */ + /** + * The color light gray. + */ public static final Color lightGray = new Color(192, 192, 192); - /** The color light gray. */ + /** + * The color light gray. + */ public static final Color LIGHT_GRAY = lightGray; - /** The color gray. */ + /** + * The color gray. + */ public static final Color gray = new Color(128, 128, 128); - /** The color gray. */ + /** + * The color gray. + */ public static final Color GRAY = gray; - /** The color dark gray. */ + /** + * The color dark gray. + */ public static final Color darkGray = new Color(64, 64, 64); - /** The color dark gray. */ + /** + * The color dark gray. + */ public static final Color DARK_GRAY = darkGray; - /** The color black. */ + /** + * The color black. + */ public static final Color black = new Color(0, 0, 0); - /** The color black. */ + /** + * The color black. + */ public static final Color BLACK = black; - /** The color red. */ + /** + * The color red. + */ public static final Color red = new Color(255, 0, 0); - /** The color red. */ + /** + * The color red. + */ public static final Color RED = red; - /** The color pink. */ + /** + * The color pink. + */ public static final Color pink = new Color(255, 175, 175); - /** The color pink. */ + /** + * The color pink. + */ public static final Color PINK = pink; - /** The color orange. */ + /** + * The color orange. + */ public static final Color orange = new Color(255, 200, 0); - /** The color orange. */ + /** + * The color orange. + */ public static final Color ORANGE = orange; - /** The color yellow. */ + /** + * The color yellow. + */ public static final Color yellow = new Color(255, 255, 0); - /** The color yellow. */ + /** + * The color yellow. + */ public static final Color YELLOW = yellow; - /** The color green. */ + /** + * The color green. + */ public static final Color green = new Color(0, 255, 0); - /** The color green. */ + /** + * The color green. + */ public static final Color GREEN = green; - /** The color magenta. */ + /** + * The color magenta. + */ public static final Color magenta = new Color(255, 0, 255); - /** The color magenta. */ + /** + * The color magenta. + */ public static final Color MAGENTA = magenta; - /** The color cyan. */ + /** + * The color cyan. + */ public static final Color cyan = new Color(0, 255, 255); - /** The color cyan. */ + /** + * The color cyan. + */ public static final Color CYAN = cyan; - /** The color blue. */ + /** + * The color blue. + */ public static final Color blue = new Color(0, 0, 255); - /** The color blue. */ + /** + * The color blue. + */ public static final Color BLUE = blue; - /** integer RGB value. */ + /** + * integer RGB value. + */ int value; - /** Float sRGB value. */ + /** + * Float sRGB value. + */ private float[] frgbvalue; - /** Color in an arbitrary color space with float components. If null, other value should be used. */ + /** + * Color in an arbitrary color space with float components. If + * null, other value should be used. + */ private float fvalue[]; - /** Float alpha value. If frgbvalue is null, this is not valid data. */ + /** + * Float alpha value. If frgbvalue is null, this is not valid data. + */ private float falpha; - /** The color's color space if applicable. */ + /** + * The color's color space if applicable. + */ private ColorSpace cs; /* - * The value of the SCALE_FACTOR is based on 1.5 release behavior which - * can be revealed using the following code: - * Color c = new Color(100, 100, 100); - * Color bc = c.brighter(); - * System.out.println("Brighter factor: " + ((float)c.getRed())/((float)bc.getRed())); - * Color dc = c.darker(); - * System.out.println("Darker factor: " + ((float)dc.getRed())/((float)c.getRed())); - * The result is the same for brighter and darker methods, so we need only - * one scale factor for both. - */ - /** The Constant SCALE_FACTOR. */ + * The value of the SCALE_FACTOR is based on 1.5 release behavior which can + * be revealed using the following code: Color c = new Color(100, 100, 100); + * Color bc = c.brighter(); System.out.println("Brighter factor: " + + * ((float)c.getRed())/((float)bc.getRed())); Color dc = c.darker(); + * System.out.println("Darker factor: " + + * ((float)dc.getRed())/((float)c.getRed())); The result is the same for + * brighter and darker methods, so we need only one scale factor for both. + */ + /** + * The Constant SCALE_FACTOR. + */ private static final double SCALE_FACTOR = 0.7; - /** The Constant MIN_SCALABLE. */ - private static final int MIN_SCALABLE = 3; // should increase when multiplied by SCALE_FACTOR + /** + * The Constant MIN_SCALABLE. + */ + private static final int MIN_SCALABLE = 3; // should increase when + + // multiplied by SCALE_FACTOR - /** The current paint context. */ + /** + * The current paint context. + */ transient private PaintContext currentPaintContext; /** - * Creates a color in the specified ColorSpace, the specified color - * components and the specified alpha. + * Creates a color in the specified ColorSpace, the specified color + * components and the specified alpha. * - * @param cspace the ColorSpace to be used to define the components. - * @param components the components. - * @param alpha the alpha. + * @param cspace + * the ColorSpace to be used to define the components. + * @param components + * the components. + * @param alpha + * the alpha. */ public Color(ColorSpace cspace, float[] components, float alpha) { int nComps = cspace.getNumComponents(); float comp; fvalue = new float[nComps]; - for(int i=0 ; i 1.0f) { - // awt.107=Color parameter outside of expected range: component {0}. - throw new IllegalArgumentException( - Messages.getString("awt.107", i)); //$NON-NLS-1$ + if (comp < 0.0f || comp > 1.0f) { + // awt.107=Color parameter outside of expected range: component + // {0}. + throw new IllegalArgumentException(Messages.getString("awt.107", i)); //$NON-NLS-1$ } fvalue[i] = components[i]; } @@ -196,22 +272,22 @@ public class Color implements Paint, Serializable { frgbvalue = cs.toRGB(fvalue); - value = ((int)(frgbvalue[2]*255 + 0.5)) | - (((int)(frgbvalue[1]*255 + 0.5)) << 8 ) | - (((int)(frgbvalue[0]*255 + 0.5)) << 16 ) | - (((int)(falpha*255 + 0.5)) << 24 ); + value = ((int)(frgbvalue[2] * 255 + 0.5)) | (((int)(frgbvalue[1] * 255 + 0.5)) << 8) + | (((int)(frgbvalue[0] * 255 + 0.5)) << 16) | (((int)(falpha * 255 + 0.5)) << 24); } /** - * Instantiates a new sRGB color with the specified combined - * RGBA value consisting of the alpha component in bits 24-31, - * the red component in bits 16-23, the green component in bits 8-15, - * and the blue component in bits 0-7. If the hasalpha argument is - * false, the alpha has default value - 255. + * Instantiates a new sRGB color with the specified combined RGBA value + * consisting of the alpha component in bits 24-31, the red component in + * bits 16-23, the green component in bits 8-15, and the blue component in + * bits 0-7. If the hasalpha argument is false, the alpha has default value + * - 255. * - * @param rgba the RGBA components. - * @param hasAlpha alpha parameter is true if alpha bits are valid, - * false otherwise. + * @param rgba + * the RGBA components. + * @param hasAlpha + * the alpha parameter is true if alpha bits are valid, false + * otherwise. */ public Color(int rgba, boolean hasAlpha) { if (!hasAlpha) { @@ -222,13 +298,17 @@ public class Color implements Paint, Serializable { } /** - * Instantiates a new color with the specified red, green, blue and alpha + * Instantiates a new color with the specified red, green, blue and alpha * components. * - * @param r the red component. - * @param g the green component. - * @param b the blue component. - * @param a the alpha component. + * @param r + * the red component. + * @param g + * the green component. + * @param b + * the blue component. + * @param a + * the alpha component. */ public Color(int r, int g, int b, int a) { if ((r & 0xFF) != r || (g & 0xFF) != g || (b & 0xFF) != b || (a & 0xFF) != a) { @@ -239,12 +319,15 @@ public class Color implements Paint, Serializable { } /** - * Instantiates a new opaque sRGB color with the specified red, green, - * and blue values. The Alpha component is set to the default - 1.0. + * Instantiates a new opaque sRGB color with the specified red, green, and + * blue values. The Alpha component is set to the default - 1.0. * - * @param r the red component. - * @param g the green component. - * @param b the blue component. + * @param r + * the red component. + * @param g + * the green component. + * @param b + * the blue component. */ public Color(int r, int g, int b) { if ((r & 0xFF) != r || (g & 0xFF) != g || (b & 0xFF) != b) { @@ -256,31 +339,32 @@ public class Color implements Paint, Serializable { } /** - * Instantiates a new sRGB color with the specified - * RGB value consisting of the red component in bits 16-23, - * the green component in bits 8-15, and the blue component - * in bits 0-7. Alpha has default value - 255. + * Instantiates a new sRGB color with the specified RGB value consisting of + * the red component in bits 16-23, the green component in bits 8-15, and + * the blue component in bits 0-7. Alpha has default value - 255. * - * @param rgb the RGB components. + * @param rgb + * the RGB components. */ public Color(int rgb) { value = rgb | 0xFF000000; } /** - * Instantiates a new color with the specified red, green, blue and alpha + * Instantiates a new color with the specified red, green, blue and alpha * components. * - * @param r the red component. - * @param g the green component. - * @param b the blue component. - * @param a the alpha component. + * @param r + * the red component. + * @param g + * the green component. + * @param b + * the blue component. + * @param a + * the alpha component. */ public Color(float r, float g, float b, float a) { - this((int)(r*255+0.5), - (int)(g*255+0.5), - (int)(b*255+0.5), - (int)(a*255+0.5)); + this((int)(r * 255 + 0.5), (int)(g * 255 + 0.5), (int)(b * 255 + 0.5), (int)(a * 255 + 0.5)); falpha = a; fvalue = new float[3]; fvalue[0] = r; @@ -290,25 +374,23 @@ public class Color implements Paint, Serializable { } /** - * Instantiates a new color with the specified red, green, and blue - * components and default alfa value - 1.0. + * Instantiates a new color with the specified red, green, and blue + * components and default alpha value - 1.0. * - * @param r the red component. - * @param g the green component. - * @param b the blue component. + * @param r + * the red component. + * @param g + * the green component. + * @param b + * the blue component. */ public Color(float r, float g, float b) { this(r, g, b, 1.0f); } - public PaintContext createContext( - ColorModel cm, - Rectangle r, - Rectangle2D r2d, - AffineTransform xform, - RenderingHints rhs - ) { - if(currentPaintContext != null) { + public PaintContext createContext(ColorModel cm, Rectangle r, Rectangle2D r2d, + AffineTransform xform, RenderingHints rhs) { + if (currentPaintContext != null) { return currentPaintContext; } currentPaintContext = new Color.ColorPaintContext(value); @@ -323,15 +405,12 @@ public class Color implements Paint, Serializable { @Override public String toString() { /* - The format of the string is based on 1.5 release behavior which - can be revealed using the following code: - - Color c = new Color(1, 2, 3); - System.out.println(c); - */ - - return getClass().getName() + - "[r=" + getRed() + //$NON-NLS-1$ + * The format of the string is based on 1.5 release behavior which can + * be revealed using the following code: Color c = new Color(1, 2, 3); + * System.out.println(c); + */ + + return getClass().getName() + "[r=" + getRed() + //$NON-NLS-1$ ",g=" + getGreen() + //$NON-NLS-1$ ",b=" + getBlue() + //$NON-NLS-1$ "]"; //$NON-NLS-1$ @@ -340,65 +419,67 @@ public class Color implements Paint, Serializable { /** * Compares the specified Object to the Color. * - * @param obj the Object to be compared. - * - * @return true, if the specified Object is a Color whose - * value is equal to this Color, false otherwise. + * @param obj + * the Object to be compared. + * @return true, if the specified Object is a Color whose value is equal to + * this Color, false otherwise. */ @Override public boolean equals(Object obj) { - if(obj instanceof Color) { + if (obj instanceof Color) { return ((Color)obj).value == this.value; } return false; } /** - * Returns a float array containing the color and alpha components of - * the Color in the specified ColorSpace. - * - * @param colorSpace the specified ColorSpace. - * @param components the results of this method will be written to - * this float array. If null, a float array will be created. + * Returns a float array containing the color and alpha components of the + * Color in the specified ColorSpace. * + * @param colorSpace + * the specified ColorSpace. + * @param components + * the results of this method will be written to this float + * array. If null, a float array will be created. * @return the color and alpha components in a float array. */ public float[] getComponents(ColorSpace colorSpace, float[] components) { int nComps = colorSpace.getNumComponents(); - if(components == null) { - components = new float[nComps+1]; + if (components == null) { + components = new float[nComps + 1]; } getColorComponents(colorSpace, components); - if(frgbvalue != null) { + if (frgbvalue != null) { components[nComps] = falpha; } else { - components[nComps] = getAlpha()/255f; + components[nComps] = getAlpha() / 255f; } return components; } /** - * Returns a float array containing the color components of - * the Color in the specified ColorSpace. - * - * @param colorSpace the specified ColorSpace. - * @param components the results of this method will be written to - * this float array. If null, a float array will be created. + * Returns a float array containing the color components of the Color in the + * specified ColorSpace. * + * @param colorSpace + * the specified ColorSpace. + * @param components + * the results of this method will be written to this float + * array. If null, a float array will be created. * @return the color components in a float array. */ public float[] getColorComponents(ColorSpace colorSpace, float[] components) { float[] cieXYZComponents = getColorSpace().toCIEXYZ(getColorComponents(null)); float[] csComponents = colorSpace.fromCIEXYZ(cieXYZComponents); - if(components == null) { + if (components == null) { return csComponents; } - for(int i=0; i 255) ? 255 : r; } - if(b < MIN_SCALABLE && b != 0) { + if (b < MIN_SCALABLE && b != 0) { b = MIN_SCALABLE; } else { - b = (int) (b/SCALE_FACTOR); + b = (int)(b / SCALE_FACTOR); b = (b > 255) ? 255 : b; } - if(g < MIN_SCALABLE && g != 0) { + if (g < MIN_SCALABLE && g != 0) { g = MIN_SCALABLE; } else { - g = (int) (g/SCALE_FACTOR); + g = (int)(g / SCALE_FACTOR); g = (g > 255) ? 255 : g; } @@ -471,24 +550,24 @@ public class Color implements Paint, Serializable { } /** - * Returns a float array containing the color and alpha components of - * the Color in the default sRGB color space. - * - * @param components the results of this method will be written to - * this float array. A new float array will be created if this - * argument is null. + * Returns a float array containing the color and alpha components of the + * Color in the default sRGB color space. * + * @param components + * the results of this method will be written to this float + * array. A new float array will be created if this argument is + * null. * @return the RGB color and alpha components in a float array. */ public float[] getRGBComponents(float[] components) { - if(components == null) { + if (components == null) { components = new float[4]; } - if(frgbvalue != null) { + if (frgbvalue != null) { components[3] = falpha; } else { - components[3] = getAlpha()/255f; + components[3] = getAlpha() / 255f; } getRGBColorComponents(components); @@ -497,52 +576,52 @@ public class Color implements Paint, Serializable { } /** - * Returns a float array containing the color components of - * the Color in the default sRGB color space. - * - * @param components the results of this method will be written to - * this float array. A new float array will be created if this - * argument is null. + * Returns a float array containing the color components of the Color in the + * default sRGB color space. * + * @param components + * the results of this method will be written to this float + * array. A new float array will be created if this argument is + * null. * @return the RGB color components in a float array. */ public float[] getRGBColorComponents(float[] components) { - if(components == null) { + if (components == null) { components = new float[3]; } - if(frgbvalue != null) { + if (frgbvalue != null) { components[2] = frgbvalue[2]; components[1] = frgbvalue[1]; components[0] = frgbvalue[0]; } else { - components[2] = getBlue()/255f; - components[1] = getGreen()/255f; - components[0] = getRed()/255f; + components[2] = getBlue() / 255f; + components[1] = getGreen() / 255f; + components[0] = getRed() / 255f; } return components; } /** - * Returns a float array which contains the color and alpha components of + * Returns a float array which contains the color and alpha components of * the Color in the ColorSpace of the Color. * - * @param components the results of this method will be written to - * this float array. A new float array will be created if this - * argument is null. - * + * @param components + * the results of this method will be written to this float + * array. A new float array will be created if this argument is + * null. * @return the color and alpha components in a float array. */ public float[] getComponents(float[] components) { - if(fvalue == null) { + if (fvalue == null) { return getRGBComponents(components); } int nColorComps = fvalue.length; - if(components == null) { - components = new float[nColorComps+1]; + if (components == null) { + components = new float[nColorComps + 1]; } getColorComponents(components); @@ -553,25 +632,25 @@ public class Color implements Paint, Serializable { } /** - * Returns a float array which contains the color components of - * the Color in the ColorSpace of the Color. - * - * @param components the results of this method will be written to - * this float array. A new float array will be created if this - * argument is null. + * Returns a float array which contains the color components of the Color in + * the ColorSpace of the Color. * + * @param components + * the results of this method will be written to this float + * array. A new float array will be created if this argument is + * null. * @return the color components in a float array. */ public float[] getColorComponents(float[] components) { - if(fvalue == null) { + if (fvalue == null) { return getRGBColorComponents(components); } - if(components == null) { + if (components == null) { components = new float[fvalue.length]; } - for(int i=0; i, Boolean> childClassesFlags = new Hashtable, Boolean>(); - /** The Constant peer. */ + /** + * The Constant peer. + */ private static final ComponentPeer peer = new ComponentPeer() { }; - /** The Constant incrementalImageUpdate. */ + /** + * The Constant incrementalImageUpdate. + */ private static final boolean incrementalImageUpdate; - /** The toolkit. */ + /** + * The toolkit. + */ final transient Toolkit toolkit = Toolkit.getDefaultToolkit(); - //???AWT + // ???AWT /* - protected abstract class AccessibleAWTComponent extends AccessibleContext implements - Serializable, AccessibleComponent { - private static final long serialVersionUID = 642321655757800191L; - - protected class AccessibleAWTComponentHandler implements ComponentListener { - protected AccessibleAWTComponentHandler() { - } - - public void componentHidden(ComponentEvent e) { - if (behaviour.isLightweight()) { - return; - } - firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, - AccessibleState.VISIBLE, null); - } - - public void componentMoved(ComponentEvent e) { - } - - public void componentResized(ComponentEvent e) { - } - - public void componentShown(ComponentEvent e) { - if (behaviour.isLightweight()) { - return; - } - firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null, - AccessibleState.VISIBLE); - } - } - - protected class AccessibleAWTFocusHandler implements FocusListener { - public void focusGained(FocusEvent e) { - if (behaviour.isLightweight()) { - return; - } - firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null, - AccessibleState.FOCUSED); - } - - public void focusLost(FocusEvent e) { - if (behaviour.isLightweight()) { - return; - } - firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, - AccessibleState.FOCUSED, null); - } - } - - protected ComponentListener accessibleAWTComponentHandler; - - protected FocusListener accessibleAWTFocusHandler; - */ - /* - * Number of registered property change listeners. - */ - /* - int listenersCount; - - public void addFocusListener(FocusListener l) { - Component.this.addFocusListener(l); - } - - @Override - public void addPropertyChangeListener(PropertyChangeListener listener) { - toolkit.lockAWT(); - try { - super.addPropertyChangeListener(listener); - listenersCount++; - if (accessibleAWTComponentHandler == null) { - accessibleAWTComponentHandler = new AccessibleAWTComponentHandler(); - Component.this.addComponentListener(accessibleAWTComponentHandler); - } - if (accessibleAWTFocusHandler == null) { - accessibleAWTFocusHandler = new AccessibleAWTFocusHandler(); - Component.this.addFocusListener(accessibleAWTFocusHandler); - } - } finally { - toolkit.unlockAWT(); - } - } - - public boolean contains(Point p) { - toolkit.lockAWT(); - try { - return Component.this.contains(p); - } finally { - toolkit.unlockAWT(); - } - } - - public Accessible getAccessibleAt(Point arg0) { - toolkit.lockAWT(); - try { - return null; - } finally { - toolkit.unlockAWT(); - } - } - - public Color getBackground() { - toolkit.lockAWT(); - try { - return Component.this.getBackground(); - } finally { - toolkit.unlockAWT(); - } - } - - public Rectangle getBounds() { - toolkit.lockAWT(); - try { - return Component.this.getBounds(); - } finally { - toolkit.unlockAWT(); - } - } - - public Cursor getCursor() { - toolkit.lockAWT(); - try { - return Component.this.getCursor(); - } finally { - toolkit.unlockAWT(); - } - } - - public Font getFont() { - toolkit.lockAWT(); - try { - return Component.this.getFont(); - } finally { - toolkit.unlockAWT(); - } - } - - public FontMetrics getFontMetrics(Font f) { - toolkit.lockAWT(); - try { - return Component.this.getFontMetrics(f); - } finally { - toolkit.unlockAWT(); - } - } - - public Color getForeground() { - toolkit.lockAWT(); - try { - return Component.this.getForeground(); - } finally { - toolkit.unlockAWT(); - } - } - - public Point getLocation() { - toolkit.lockAWT(); - try { - return Component.this.getLocation(); - } finally { - toolkit.unlockAWT(); - } - } - - public Point getLocationOnScreen() { - toolkit.lockAWT(); - try { - return Component.this.getLocationOnScreen(); - } finally { - toolkit.unlockAWT(); - } - } - - public Dimension getSize() { - toolkit.lockAWT(); - try { - return Component.this.getSize(); - } finally { - toolkit.unlockAWT(); - } - } - - public boolean isEnabled() { - toolkit.lockAWT(); - try { - return Component.this.isEnabled(); - } finally { - toolkit.unlockAWT(); - } - } - - public boolean isFocusTraversable() { - toolkit.lockAWT(); - try { - return Component.this.isFocusTraversable(); - } finally { - toolkit.unlockAWT(); - } - } - - public boolean isShowing() { - toolkit.lockAWT(); - try { - return Component.this.isShowing(); - } finally { - toolkit.unlockAWT(); - } - } - - public boolean isVisible() { - toolkit.lockAWT(); - try { - return Component.this.isVisible(); - } finally { - toolkit.unlockAWT(); - } - } - - public void removeFocusListener(FocusListener l) { - Component.this.removeFocusListener(l); - } - - @Override - public void removePropertyChangeListener(PropertyChangeListener listener) { - toolkit.lockAWT(); - try { - super.removePropertyChangeListener(listener); - listenersCount--; - if (listenersCount > 0) { - return; - } - // if there are no more listeners, remove handlers: - Component.this.removeFocusListener(accessibleAWTFocusHandler); - Component.this.removeComponentListener(accessibleAWTComponentHandler); - accessibleAWTComponentHandler = null; - accessibleAWTFocusHandler = null; - } finally { - toolkit.unlockAWT(); - } - } - - public void requestFocus() { - toolkit.lockAWT(); - try { - Component.this.requestFocus(); - } finally { - toolkit.unlockAWT(); - } - } - - public void setBackground(Color color) { - toolkit.lockAWT(); - try { - Component.this.setBackground(color); - } finally { - toolkit.unlockAWT(); - } - } - - public void setBounds(Rectangle r) { - toolkit.lockAWT(); - try { - Component.this.setBounds(r); - } finally { - toolkit.unlockAWT(); - } - } - - public void setCursor(Cursor cursor) { - toolkit.lockAWT(); - try { - Component.this.setCursor(cursor); - } finally { - toolkit.unlockAWT(); - } - } - - public void setEnabled(boolean enabled) { - toolkit.lockAWT(); - try { - Component.this.setEnabled(enabled); - } finally { - toolkit.unlockAWT(); - } - } - - public void setFont(Font f) { - toolkit.lockAWT(); - try { - Component.this.setFont(f); - } finally { - toolkit.unlockAWT(); - } - } - - public void setForeground(Color color) { - toolkit.lockAWT(); - try { - Component.this.setForeground(color); - } finally { - toolkit.unlockAWT(); - } - } - - public void setLocation(Point p) { - toolkit.lockAWT(); - try { - Component.this.setLocation(p); - } finally { - toolkit.unlockAWT(); - } - } - - public void setSize(Dimension size) { - toolkit.lockAWT(); - try { - Component.this.setSize(size); - } finally { - toolkit.unlockAWT(); - } - } - - public void setVisible(boolean visible) { - toolkit.lockAWT(); - try { - Component.this.setVisible(visible); - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public Accessible getAccessibleParent() { - toolkit.lockAWT(); - try { - Accessible aParent = super.getAccessibleParent(); - if (aParent != null) { - return aParent; - } - Container parent = getParent(); - return (parent instanceof Accessible ? (Accessible) parent : null); - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public Accessible getAccessibleChild(int i) { - toolkit.lockAWT(); - try { - return null; - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public int getAccessibleChildrenCount() { - toolkit.lockAWT(); - try { - return 0; - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public AccessibleComponent getAccessibleComponent() { - return this; - } - - @Override - public String getAccessibleDescription() { - return super.getAccessibleDescription(); // why override? - } - - @Override - public int getAccessibleIndexInParent() { - toolkit.lockAWT(); - try { - if (getAccessibleParent() == null) { - return -1; - } - int count = 0; - Container parent = getParent(); - for (int i = 0; i < parent.getComponentCount(); i++) { - Component aComp = parent.getComponent(i); - if (aComp instanceof Accessible) { - if (aComp == Component.this) { - return count; - } - ++count; - } - } - return -1; - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public AccessibleRole getAccessibleRole() { - toolkit.lockAWT(); - try { - return AccessibleRole.AWT_COMPONENT; - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public AccessibleStateSet getAccessibleStateSet() { - toolkit.lockAWT(); - try { - AccessibleStateSet set = new AccessibleStateSet(); - if (isEnabled()) { - set.add(AccessibleState.ENABLED); - } - if (isFocusable()) { - set.add(AccessibleState.FOCUSABLE); - } - if (hasFocus()) { - set.add(AccessibleState.FOCUSED); - } - if (isOpaque()) { - set.add(AccessibleState.OPAQUE); - } - if (isShowing()) { - set.add(AccessibleState.SHOWING); - } - if (isVisible()) { - set.add(AccessibleState.VISIBLE); - } - return set; - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public Locale getLocale() throws IllegalComponentStateException { - toolkit.lockAWT(); - try { - return Component.this.getLocale(); - } finally { - toolkit.unlockAWT(); - } - } - } - */ - /** - * The BltBufferStrategy class provides opportunity of blitting - * offscreen surfaces to a component. For more information on - * blitting, see Bit blit. + * protected abstract class AccessibleAWTComponent extends AccessibleContext + * implements Serializable, AccessibleComponent { private static final long + * serialVersionUID = 642321655757800191L; protected class + * AccessibleAWTComponentHandler implements ComponentListener { protected + * AccessibleAWTComponentHandler() { } public void + * componentHidden(ComponentEvent e) { if (behaviour.isLightweight()) { + * return; } firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, + * AccessibleState.VISIBLE, null); } public void + * componentMoved(ComponentEvent e) { } public void + * componentResized(ComponentEvent e) { } public void + * componentShown(ComponentEvent e) { if (behaviour.isLightweight()) { + * return; } firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, + * null, AccessibleState.VISIBLE); } } protected class + * AccessibleAWTFocusHandler implements FocusListener { public void + * focusGained(FocusEvent e) { if (behaviour.isLightweight()) { return; } + * firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null, + * AccessibleState.FOCUSED); } public void focusLost(FocusEvent e) { if + * (behaviour.isLightweight()) { return; } + * firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, + * AccessibleState.FOCUSED, null); } } protected ComponentListener + * accessibleAWTComponentHandler; protected FocusListener + * accessibleAWTFocusHandler; + */ + /* + * Number of registered property change listeners. + */ + /* + * int listenersCount; public void addFocusListener(FocusListener l) { + * Component.this.addFocusListener(l); } + * @Override public void addPropertyChangeListener(PropertyChangeListener + * listener) { toolkit.lockAWT(); try { + * super.addPropertyChangeListener(listener); listenersCount++; if + * (accessibleAWTComponentHandler == null) { accessibleAWTComponentHandler = + * new AccessibleAWTComponentHandler(); + * Component.this.addComponentListener(accessibleAWTComponentHandler); } if + * (accessibleAWTFocusHandler == null) { accessibleAWTFocusHandler = new + * AccessibleAWTFocusHandler(); + * Component.this.addFocusListener(accessibleAWTFocusHandler); } } finally { + * toolkit.unlockAWT(); } } public boolean contains(Point p) { + * toolkit.lockAWT(); try { return Component.this.contains(p); } finally { + * toolkit.unlockAWT(); } } public Accessible getAccessibleAt(Point arg0) { + * toolkit.lockAWT(); try { return null; } finally { toolkit.unlockAWT(); } + * } public Color getBackground() { toolkit.lockAWT(); try { return + * Component.this.getBackground(); } finally { toolkit.unlockAWT(); } } + * public Rectangle getBounds() { toolkit.lockAWT(); try { return + * Component.this.getBounds(); } finally { toolkit.unlockAWT(); } } public + * Cursor getCursor() { toolkit.lockAWT(); try { return + * Component.this.getCursor(); } finally { toolkit.unlockAWT(); } } public + * Font getFont() { toolkit.lockAWT(); try { return + * Component.this.getFont(); } finally { toolkit.unlockAWT(); } } public + * FontMetrics getFontMetrics(Font f) { toolkit.lockAWT(); try { return + * Component.this.getFontMetrics(f); } finally { toolkit.unlockAWT(); } } + * public Color getForeground() { toolkit.lockAWT(); try { return + * Component.this.getForeground(); } finally { toolkit.unlockAWT(); } } + * public Point getLocation() { toolkit.lockAWT(); try { return + * Component.this.getLocation(); } finally { toolkit.unlockAWT(); } } public + * Point getLocationOnScreen() { toolkit.lockAWT(); try { return + * Component.this.getLocationOnScreen(); } finally { toolkit.unlockAWT(); } + * } public Dimension getSize() { toolkit.lockAWT(); try { return + * Component.this.getSize(); } finally { toolkit.unlockAWT(); } } public + * boolean isEnabled() { toolkit.lockAWT(); try { return + * Component.this.isEnabled(); } finally { toolkit.unlockAWT(); } } public + * boolean isFocusTraversable() { toolkit.lockAWT(); try { return + * Component.this.isFocusTraversable(); } finally { toolkit.unlockAWT(); } } + * public boolean isShowing() { toolkit.lockAWT(); try { return + * Component.this.isShowing(); } finally { toolkit.unlockAWT(); } } public + * boolean isVisible() { toolkit.lockAWT(); try { return + * Component.this.isVisible(); } finally { toolkit.unlockAWT(); } } public + * void removeFocusListener(FocusListener l) { + * Component.this.removeFocusListener(l); } + * @Override public void removePropertyChangeListener(PropertyChangeListener + * listener) { toolkit.lockAWT(); try { + * super.removePropertyChangeListener(listener); listenersCount--; if + * (listenersCount > 0) { return; } // if there are no more listeners, + * remove handlers: + * Component.this.removeFocusListener(accessibleAWTFocusHandler); + * Component.this.removeComponentListener(accessibleAWTComponentHandler); + * accessibleAWTComponentHandler = null; accessibleAWTFocusHandler = null; } + * finally { toolkit.unlockAWT(); } } public void requestFocus() { + * toolkit.lockAWT(); try { Component.this.requestFocus(); } finally { + * toolkit.unlockAWT(); } } public void setBackground(Color color) { + * toolkit.lockAWT(); try { Component.this.setBackground(color); } finally { + * toolkit.unlockAWT(); } } public void setBounds(Rectangle r) { + * toolkit.lockAWT(); try { Component.this.setBounds(r); } finally { + * toolkit.unlockAWT(); } } public void setCursor(Cursor cursor) { + * toolkit.lockAWT(); try { Component.this.setCursor(cursor); } finally { + * toolkit.unlockAWT(); } } public void setEnabled(boolean enabled) { + * toolkit.lockAWT(); try { Component.this.setEnabled(enabled); } finally { + * toolkit.unlockAWT(); } } public void setFont(Font f) { toolkit.lockAWT(); + * try { Component.this.setFont(f); } finally { toolkit.unlockAWT(); } } + * public void setForeground(Color color) { toolkit.lockAWT(); try { + * Component.this.setForeground(color); } finally { toolkit.unlockAWT(); } } + * public void setLocation(Point p) { toolkit.lockAWT(); try { + * Component.this.setLocation(p); } finally { toolkit.unlockAWT(); } } + * public void setSize(Dimension size) { toolkit.lockAWT(); try { + * Component.this.setSize(size); } finally { toolkit.unlockAWT(); } } public + * void setVisible(boolean visible) { toolkit.lockAWT(); try { + * Component.this.setVisible(visible); } finally { toolkit.unlockAWT(); } } + * @Override public Accessible getAccessibleParent() { toolkit.lockAWT(); + * try { Accessible aParent = super.getAccessibleParent(); if (aParent != + * null) { return aParent; } Container parent = getParent(); return (parent + * instanceof Accessible ? (Accessible) parent : null); } finally { + * toolkit.unlockAWT(); } } + * @Override public Accessible getAccessibleChild(int i) { + * toolkit.lockAWT(); try { return null; } finally { toolkit.unlockAWT(); } + * } + * @Override public int getAccessibleChildrenCount() { toolkit.lockAWT(); + * try { return 0; } finally { toolkit.unlockAWT(); } } + * @Override public AccessibleComponent getAccessibleComponent() { return + * this; } + * @Override public String getAccessibleDescription() { return + * super.getAccessibleDescription(); // why override? } + * @Override public int getAccessibleIndexInParent() { toolkit.lockAWT(); + * try { if (getAccessibleParent() == null) { return -1; } int count = 0; + * Container parent = getParent(); for (int i = 0; i < + * parent.getComponentCount(); i++) { Component aComp = + * parent.getComponent(i); if (aComp instanceof Accessible) { if (aComp == + * Component.this) { return count; } ++count; } } return -1; } finally { + * toolkit.unlockAWT(); } } + * @Override public AccessibleRole getAccessibleRole() { toolkit.lockAWT(); + * try { return AccessibleRole.AWT_COMPONENT; } finally { + * toolkit.unlockAWT(); } } + * @Override public AccessibleStateSet getAccessibleStateSet() { + * toolkit.lockAWT(); try { AccessibleStateSet set = new + * AccessibleStateSet(); if (isEnabled()) { + * set.add(AccessibleState.ENABLED); } if (isFocusable()) { + * set.add(AccessibleState.FOCUSABLE); } if (hasFocus()) { + * set.add(AccessibleState.FOCUSED); } if (isOpaque()) { + * set.add(AccessibleState.OPAQUE); } if (isShowing()) { + * set.add(AccessibleState.SHOWING); } if (isVisible()) { + * set.add(AccessibleState.VISIBLE); } return set; } finally { + * toolkit.unlockAWT(); } } + * @Override public Locale getLocale() throws IllegalComponentStateException + * { toolkit.lockAWT(); try { return Component.this.getLocale(); } finally { + * toolkit.unlockAWT(); } } } + */ + /** + * The BltBufferStrategy class provides opportunity of blitting offscreen + * surfaces to a component. For more information on blitting, see Bit blit. + * + * @since Android 1.0 */ protected class BltBufferStrategy extends BufferStrategy { - - /** The back buffers. */ + + /** + * The back buffers. + */ protected VolatileImage[] backBuffers; - /** The caps. */ + /** + * The caps. + */ protected BufferCapabilities caps; - /** The width. */ + /** + * The width. + */ protected int width; - /** The height. */ + /** + * The height. + */ protected int height; - /** The validated contents. */ + /** + * The validated contents. + */ protected boolean validatedContents; /** * Instantiates a new BltBufferStrategy buffer strategy. * - * @param numBuffers the number of buffers. - * @param caps the BufferCapabilities. - * - * @throws NotImplementedException the not implemented exception. + * @param numBuffers + * the number of buffers. + * @param caps + * the BufferCapabilities. + * @throws NotImplementedException + * the not implemented exception. */ - protected BltBufferStrategy(int numBuffers, BufferCapabilities caps) throws org.apache.harmony.luni.util.NotImplementedException { + protected BltBufferStrategy(int numBuffers, BufferCapabilities caps) + throws org.apache.harmony.luni.util.NotImplementedException { if (true) { throw new RuntimeException("Method is not implemented"); //$NON-NLS-1$ } } /** - * Returns true if the drawing buffer has been lost since the last call - * to getDrawGraphics. + * Returns true if the drawing buffer has been lost since the last call + * to getDrawGraphics. * - * @return true if the drawing buffer has been lost since the last call - * to getDrawGraphics, false otherwise. - * + * @return true if the drawing buffer has been lost since the last call + * to getDrawGraphics, false otherwise. * @see java.awt.image.BufferStrategy#contentsLost() */ @Override @@ -634,9 +360,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * state and reinitialized to the default background color. * * @return true if the drawing buffer has been restored from a lost - * state and reinitialized to the default background color, - * false otherwise. - * + * state and reinitialized to the default background color, + * false otherwise. * @see java.awt.image.BufferStrategy#contentsRestored() */ @Override @@ -650,7 +375,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Creates the back buffers. * - * @param numBuffers the number of buffers. + * @param numBuffers + * the number of buffers. */ protected void createBackBuffers(int numBuffers) { if (true) { @@ -662,19 +388,17 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Returns the BufferCapabilities of the buffer strategy. * * @return the BufferCapabilities. - * * @see java.awt.image.BufferStrategy#getCapabilities() */ @Override public BufferCapabilities getCapabilities() { - return (BufferCapabilities) caps.clone(); + return (BufferCapabilities)caps.clone(); } /** * Gets Graphics of current buffer strategy. * * @return the Graphics of current buffer strategy. - * * @see java.awt.image.BufferStrategy#getDrawGraphics() */ @Override @@ -708,56 +432,68 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * The FlipBufferStrategy class is for flipping buffers on a component. + * The FlipBufferStrategy class is for flipping buffers on a component. + * + * @since Android 1.0 */ protected class FlipBufferStrategy extends BufferStrategy { - - /** The Buffer Capabilities. */ + + /** + * The Buffer Capabilities. + */ protected BufferCapabilities caps; - /** The drawing buffer. */ + /** + * The drawing buffer. + */ protected Image drawBuffer; - /** The drawing VolatileImage buffer. */ + /** + * The drawing VolatileImage buffer. + */ protected VolatileImage drawVBuffer; - /** The number of buffers. */ + /** + * The number of buffers. + */ protected int numBuffers; - /** The validated contents indicates if the drawing buffer is restored from - * lost state. */ + /** + * The validated contents indicates if the drawing buffer is restored + * from lost state. + */ protected boolean validatedContents; /** * Instantiates a new flip buffer strategy. * - * @param numBuffers the number of buffers. - * @param caps the BufferCapabilities. - * - * @throws AWTException if the capabilities supplied could not - * be supported or met. + * @param numBuffers + * the number of buffers. + * @param caps + * the BufferCapabilities. + * @throws AWTException + * if the capabilities supplied could not be supported or + * met. */ - protected FlipBufferStrategy(int numBuffers, BufferCapabilities caps) - throws AWTException { - //???AWT + protected FlipBufferStrategy(int numBuffers, BufferCapabilities caps) throws AWTException { + // ???AWT /* - if (!(Component.this instanceof Window) && !(Component.this instanceof Canvas)) { - // awt.14B=Only Canvas or Window is allowed - throw new ClassCastException(Messages.getString("awt.14B")); //$NON-NLS-1$ - } - */ + * if (!(Component.this instanceof Window) && !(Component.this + * instanceof Canvas)) { // awt.14B=Only Canvas or Window is allowed + * throw new ClassCastException(Messages.getString("awt.14B")); + * //$NON-NLS-1$ } + */ // TODO: throw new AWTException("Capabilities are not supported"); this.numBuffers = numBuffers; - this.caps = (BufferCapabilities) caps.clone(); + this.caps = (BufferCapabilities)caps.clone(); } /** - * Returns true if the drawing buffer has been lost since the last call - * to getDrawGraphics. - * - * @return true if the drawing buffer has been lost since the last call - * to getDrawGraphics, false otherwise. + * Returns true if the drawing buffer has been lost since the last call + * to getDrawGraphics. * + * @return true if the drawing buffer has been lost since the last call + * to getDrawGraphics, false otherwise. * @see java.awt.image.BufferStrategy#contentsLost() */ @Override @@ -773,9 +509,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * state and reinitialized to the default background color. * * @return true if the drawing buffer has been restored from a lost - * state and reinitialized to the default background color, - * false otherwise. - * + * state and reinitialized to the default background color, + * false otherwise. * @see java.awt.image.BufferStrategy#contentsRestored() */ @Override @@ -789,14 +524,14 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Creates flipping buffers with the specified buffer capabilities. * - * @param numBuffers the number of buffers. - * @param caps the BufferCapabilities. - * - * @throws AWTException if the capabilities could not be - * supported or met. + * @param numBuffers + * the number of buffers. + * @param caps + * the BufferCapabilities. + * @throws AWTException + * if the capabilities could not be supported or met. */ - protected void createBuffers(int numBuffers, BufferCapabilities caps) - throws AWTException { + protected void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException { if (numBuffers < 2) { // awt.14C=Number of buffers must be greater than one throw new IllegalArgumentException(Messages.getString("awt.14C")); //$NON-NLS-1$ @@ -827,7 +562,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Flips the contents of the back buffer to the front buffer. * - * @param flipAction the flip action. + * @param flipAction + * the flip action. */ protected void flip(BufferCapabilities.FlipContents flipAction) { if (true) { @@ -851,19 +587,17 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Returns the BufferCapabilities of the buffer strategy. * * @return the BufferCapabilities. - * * @see java.awt.image.BufferStrategy#getCapabilities() */ @Override public BufferCapabilities getCapabilities() { - return (BufferCapabilities) caps.clone(); + return (BufferCapabilities)caps.clone(); } /** * Gets Graphics of current buffer strategy. * * @return the Graphics of current buffer strategy. - * * @see java.awt.image.BufferStrategy#getDrawGraphics() */ @Override @@ -900,14 +634,16 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * The internal component's state utilized by the visual theme. */ class ComponentState implements State { - - /** The default minimum size. */ + + /** + * The default minimum size. + */ private Dimension defaultMinimumSize = new Dimension(); /** * Checks if the component is enabled. * - * @return true, if the component is enabled + * @return true, if the component is enabled. */ public boolean isEnabled() { return enabled; @@ -916,7 +652,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if the component is visible. * - * @return true, if the component is visible + * @return true, if the component is visible. */ public boolean isVisible() { return visible; @@ -925,17 +661,17 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if is focused. * - * @return true, if is focused + * @return true, if is focused. */ public boolean isFocused() { - //???AWT: return isFocusOwner(); + // ???AWT: return isFocusOwner(); return false; } /** * Gets the font. * - * @return the font + * @return the font. */ public Font getFont() { return Component.this.getFont(); @@ -944,7 +680,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if the font has been set. * - * @return true, if the font has been set + * @return true, if the font has been set. */ public boolean isFontSet() { return font != null; @@ -953,7 +689,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the background color. * - * @return the background color + * @return the background color. */ public Color getBackground() { Color c = Component.this.getBackground(); @@ -963,7 +699,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if the background is set. * - * @return true, if the background is set + * @return true, if the background is set. */ public boolean isBackgroundSet() { return backColor != null; @@ -972,7 +708,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the text color. * - * @return the text color + * @return the text color. */ public Color getTextColor() { Color c = getForeground(); @@ -982,7 +718,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if the text color is set. * - * @return true, if the text color is set + * @return true, if the text color is set. */ public boolean isTextColorSet() { return foreColor != null; @@ -991,7 +727,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the font metrics. * - * @return the font metrics + * @return the font metrics. */ @SuppressWarnings("deprecation") public FontMetrics getFontMetrics() { @@ -1001,7 +737,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the bounding rectangle. * - * @return the bounding rectangle + * @return the bounding rectangle. */ public Rectangle getBounds() { return new Rectangle(x, y, w, h); @@ -1010,7 +746,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the size of the bounding rectangle. * - * @return the size of the bounding rectangle + * @return the size of the bounding rectangle. */ public Dimension getSize() { return new Dimension(w, h); @@ -1019,7 +755,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the window id. * - * @return the window id + * @return the window id. */ public long getWindowId() { NativeWindow win = getNativeWindow(); @@ -1029,7 +765,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the default minimum size. * - * @return the default minimum size + * @return the default minimum size. */ public Dimension getDefaultMinimumSize() { if (defaultMinimumSize == null) { @@ -1041,7 +777,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the default minimum size. * - * @param size the new default minimum size + * @param size + * the new default minimum size. */ public void setDefaultMinimumSize(Dimension size) { defaultMinimumSize = size; @@ -1062,179 +799,283 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT: private transient AccessibleContext accessibleContext; + // ???AWT: private transient AccessibleContext accessibleContext; - /** The behaviour. */ + /** + * The behaviour. + */ final transient ComponentBehavior behaviour; - //???AWT: Container parent; + // ???AWT: Container parent; - /** The name. */ + /** + * The name. + */ private String name; - /** The auto name. */ + /** + * The auto name. + */ private boolean autoName = true; - /** The font. */ + /** + * The font. + */ private Font font; - /** The back color. */ + /** + * The back color. + */ private Color backColor; - /** The fore color. */ + /** + * The fore color. + */ private Color foreColor; - /** The deprecated event handler. */ + /** + * The deprecated event handler. + */ boolean deprecatedEventHandler = true; - /** The enabled events. */ + /** + * The enabled events. + */ private long enabledEvents; - /** The enabled awt events. */ + /** + * The enabled AWT events. + */ private long enabledAWTEvents; - /** The component listeners. */ + /** + * The component listeners. + */ private final AWTListenerList componentListeners = new AWTListenerList( this); - /** The focus listeners. */ + /** + * The focus listeners. + */ private final AWTListenerList focusListeners = new AWTListenerList( this); - /** The hierarchy listeners. */ + /** + * The hierarchy listeners. + */ private final AWTListenerList hierarchyListeners = new AWTListenerList( this); - /** The hierarchy bounds listeners. */ + /** + * The hierarchy bounds listeners. + */ private final AWTListenerList hierarchyBoundsListeners = new AWTListenerList( this); - /** The key listeners. */ - private final AWTListenerList keyListeners = new AWTListenerList( - this); + /** + * The key listeners. + */ + private final AWTListenerList keyListeners = new AWTListenerList(this); - /** The mouse listeners. */ + /** + * The mouse listeners. + */ private final AWTListenerList mouseListeners = new AWTListenerList( this); - /** The mouse motion listeners. */ + /** + * The mouse motion listeners. + */ private final AWTListenerList mouseMotionListeners = new AWTListenerList( this); - /** The mouse wheel listeners. */ + /** + * The mouse wheel listeners. + */ private final AWTListenerList mouseWheelListeners = new AWTListenerList( this); - /** The input method listeners. */ + /** + * The input method listeners. + */ private final AWTListenerList inputMethodListeners = new AWTListenerList( this); - /** The x. */ + /** + * The x. + */ int x; - /** The y. */ + /** + * The y. + */ int y; - /** The w. */ + /** + * The w. + */ int w; - /** The h. */ + /** + * The h. + */ int h; - /** The maximum size. */ + /** + * The maximum size. + */ private Dimension maximumSize; - /** The minimum size. */ + /** + * The minimum size. + */ private Dimension minimumSize; - /** The preferred size. */ + /** + * The preferred size. + */ private Dimension preferredSize; - /** The bounds mask param. */ + /** + * The bounds mask param. + */ private int boundsMaskParam; - /** The ignore repaint. */ + /** + * The ignore repaint. + */ private boolean ignoreRepaint; - /** The enabled. */ + /** + * The enabled. + */ private boolean enabled = true; - /** The input methods enabled. */ + /** + * The input methods enabled. + */ private boolean inputMethodsEnabled = true; - /** The dispatch to im. */ + /** + * The dispatch to im. + */ transient boolean dispatchToIM = true; - /** The focusable. */ + /** + * The focusable. + */ private boolean focusable = true; // By default, all Components return // true from isFocusable() method - /** The visible. */ + /** + * The visible. + */ boolean visible = true; - /** The called set focusable. */ + /** + * The called set focusable. + */ private boolean calledSetFocusable; - /** The overriden is focusable. */ + /** + * The overridden is focusable. + */ private boolean overridenIsFocusable = true; - /** The focus traversal keys enabled. */ + /** + * The focus traversal keys enabled. + */ private boolean focusTraversalKeysEnabled = true; - /** Possible keys are: FORWARD_TRAVERSAL_KEYS, BACKWARD_TRAVERSAL_KEYS, UP_CYCLE_TRAVERSAL_KEYS. */ + /** + * Possible keys are: FORWARD_TRAVERSAL_KEYS, BACKWARD_TRAVERSAL_KEYS, + * UP_CYCLE_TRAVERSAL_KEYS. + */ private final Map> traversalKeys = new HashMap>(); - /** The traversal i ds. */ + /** + * The traversal i ds. + */ int[] traversalIDs; - /** The locale. */ + /** + * The locale. + */ private Locale locale; - /** The orientation. */ + /** + * The orientation. + */ private ComponentOrientation orientation; - /** The property change support. */ + /** + * The property change support. + */ private PropertyChangeSupport propertyChangeSupport; - //???AWT: private ArrayList popups; + // ???AWT: private ArrayList popups; - /** The coalescer. */ + /** + * The coalescer. + */ private boolean coalescer; - /** The events table. */ + /** + * The events table. + */ private Hashtable> eventsTable; - /** Cashed reference used during EventQueue.postEvent() */ + /** + * Cashed reference used during EventQueue.postEvent() + */ private LinkedList eventsList; - /** The hierarchy changing counter. */ + /** + * The hierarchy changing counter. + */ private int hierarchyChangingCounter; - /** The was showing. */ + /** + * The was showing. + */ private boolean wasShowing; - /** The was displayable. */ + /** + * The was displayable. + */ private boolean wasDisplayable; - /** The cursor. */ + /** + * The cursor. + */ Cursor cursor; - //???AWT: DropTarget dropTarget; + // ???AWT: DropTarget dropTarget; - /** The mouse exited expected. */ + /** + * The mouse exited expected. + */ private boolean mouseExitedExpected; - /** The repaint region. */ + /** + * The repaint region. + */ transient MultiRectArea repaintRegion; - //???AWT: transient RedrawManager redrawManager; - /** The redraw manager. */ + // ???AWT: transient RedrawManager redrawManager; + /** + * The redraw manager. + */ transient Object redrawManager; - /** The valid. */ + /** + * The valid. + */ private boolean valid; - /** The updated images. */ + /** + * The updated images. + */ private HashMap updatedImages; /** @@ -1244,7 +1085,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali private class ComponentLock { } - /** The component lock. */ + /** + * The component lock. + */ private final transient Object componentLock = new ComponentLock(); static { PrivilegedAction action = new PrivilegedAction() { @@ -1276,17 +1119,16 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali try { orientation = ComponentOrientation.UNKNOWN; redrawManager = null; - //???AWT + // ???AWT /* - traversalIDs = this instanceof Container ? KeyboardFocusManager.contTraversalIDs - : KeyboardFocusManager.compTraversalIDs; - for (int element : traversalIDs) { - traversalKeys.put(new Integer(element), null); - } - behaviour = createBehavior(); - */ + * traversalIDs = this instanceof Container ? + * KeyboardFocusManager.contTraversalIDs : + * KeyboardFocusManager.compTraversalIDs; for (int element : + * traversalIDs) { traversalKeys.put(new Integer(element), null); } + * behaviour = createBehavior(); + */ behaviour = null; - + deriveCoalescerFlag(); } finally { toolkit.unlockAWT(); @@ -1307,8 +1149,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali for (Class c = thisClass; c != Component.class; c = c.getSuperclass()) { try { coalesceMethod = c.getDeclaredMethod("coalesceEvents", new Class[] { //$NON-NLS-1$ - Class.forName("java.awt.AWTEvent"), //$NON-NLS-1$ - Class.forName("java.awt.AWTEvent") }); //$NON-NLS-1$ + Class.forName("java.awt.AWTEvent"), //$NON-NLS-1$ + Class.forName("java.awt.AWTEvent")}); //$NON-NLS-1$ } catch (Exception e) { } if (coalesceMethod != null) { @@ -1332,7 +1174,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the name of the Component. * - * @param name the new name of the Component. + * @param name + * the new name of the Component. */ public void setName(String name) { String oldName; @@ -1367,15 +1210,15 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Auto name. * - * @return the string + * @return the string. */ String autoName() { String name = getClass().getName(); if (name.indexOf("$") != -1) { //$NON-NLS-1$ return null; } - //???AWT - //int number = toolkit.autoNumber.nextComponent++; + // ???AWT + // int number = toolkit.autoNumber.nextComponent++; int number = 0; name = name.substring(name.lastIndexOf(".") + 1) + Integer.toString(number); //$NON-NLS-1$ return name; @@ -1390,10 +1233,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali public String toString() { /* * The format is based on 1.5 release behavior which can be revealed by - * the following code: - * - * Component c = new Component(){}; c.setVisible(false); - * System.out.println(c); + * the following code: Component c = new Component(){}; + * c.setVisible(false); System.out.println(c); */ toolkit.lockAWT(); try { @@ -1403,32 +1244,21 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT + // ???AWT /* - public void add(PopupMenu popup) { - toolkit.lockAWT(); - try { - if (popup.getParent() == this) { - return; - } - if (popups == null) { - popups = new ArrayList(); - } - popup.setParent(this); - popups.add(popup); - } finally { - toolkit.unlockAWT(); - } - } - */ + * public void add(PopupMenu popup) { toolkit.lockAWT(); try { if + * (popup.getParent() == this) { return; } if (popups == null) { popups = + * new ArrayList(); } popup.setParent(this); popups.add(popup); } + * finally { toolkit.unlockAWT(); } } + */ /** * Returns true, if the component contains the specified Point. * - * @param p the Point. - * - * @return true, if the component contains the specified Point, - * false otherwise. + * @param p + * the Point. + * @return true, if the component contains the specified Point, false + * otherwise. */ public boolean contains(Point p) { toolkit.lockAWT(); @@ -1440,14 +1270,15 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Returns true, if the component contains the point with - * the specified coordinates. + * Returns true, if the component contains the point with the specified + * coordinates. * - * @param x the x coordinate. - * @param y the y coordinate. - * - * @return true, if the component contains the point with - * the specified coordinates, false otherwise. + * @param x + * the x coordinate. + * @param y + * the y coordinate. + * @return true, if the component contains the point with the specified + * coordinates, false otherwise. */ public boolean contains(int x, int y) { toolkit.lockAWT(); @@ -1462,7 +1293,6 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Deprecated: replaced by replaced by getSize() method. * * @return the dimension. - * * @deprecated Replaced by getSize() method. */ @Deprecated @@ -1474,90 +1304,63 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali toolkit.unlockAWT(); } } - - //???AWT + + // ???AWT /* - public Container getParent() { - toolkit.lockAWT(); - try { - return parent; - } finally { - toolkit.unlockAWT(); - } - } - */ - + * public Container getParent() { toolkit.lockAWT(); try { return parent; } + * finally { toolkit.unlockAWT(); } } + */ + /** * List. * - * @param out the out - * @param indent the indent - * + * @param out + * the out. + * @param indent + * the indent * @return the nearest heavyweight ancestor in hierarchy or - * null if not found + * null if not found. */ - //???AWT + // ???AWT /* - Component getHWAncestor() { - return (parent != null ? parent.getHWSurface() : null); - } - */ - + * Component getHWAncestor() { return (parent != null ? + * parent.getHWSurface() : null); } + */ + /** * @return heavyweight component that is equal to or is a nearest * heavyweight container of the current component, or - * null if not found + * null if not found. */ - //???AWT + // ???AWT /* - Component getHWSurface() { - Component parent; - for (parent = this; (parent != null) && (parent.isLightweight()); parent = parent - .getParent()) { - ; - } - return parent; - } + * Component getHWSurface() { Component parent; for (parent = this; (parent + * != null) && (parent.isLightweight()); parent = parent .getParent()) { ; } + * return parent; } Window getWindowAncestor() { Component par; for (par = + * this; par != null && !(par instanceof Window); par = par.getParent()) { ; + * } return (Window) par; } + */ - Window getWindowAncestor() { - Component par; - for (par = this; par != null && !(par instanceof Window); par = par.getParent()) { - ; - } - return (Window) par; - } - */ - - /** To be called by container */ - //???AWT + /** + * To be called by container + */ + // ???AWT /* - void setParent(Container parent) { - this.parent = parent; - setRedrawManager(); - } - - void setRedrawManager() { - redrawManager = getRedrawManager(); - } - - public void remove(MenuComponent menu) { - toolkit.lockAWT(); - try { - if (menu.getParent() == this) { - menu.setParent(null); - popups.remove(menu); - } - } finally { - toolkit.unlockAWT(); - } - } - */ + * void setParent(Container parent) { this.parent = parent; + * setRedrawManager(); } void setRedrawManager() { redrawManager = + * getRedrawManager(); } public void remove(MenuComponent menu) { + * toolkit.lockAWT(); try { if (menu.getParent() == this) { + * menu.setParent(null); popups.remove(menu); } } finally { + * toolkit.unlockAWT(); } } + */ /** - * Prints a list of this component with the specified number of - * leading whitespace characters to the specified PrintStream. + * Prints a list of this component with the specified number of leading + * whitespace characters to the specified PrintStream. * - * @param out the output PrintStream object. - * @param indent how many leading whitespace characters to prepend + * @param out + * the output PrintStream object. + * @param indent + * how many leading whitespace characters to prepend. */ public void list(PrintStream out, int indent) { toolkit.lockAWT(); @@ -1571,7 +1374,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Prints a list of this component to the specified PrintWriter. * - * @param out the output PrintWriter object. + * @param out + * the output PrintWriter object. */ public void list(PrintWriter out) { toolkit.lockAWT(); @@ -1583,11 +1387,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Prints a list of this component with the specified number of - * leading whitespace characters to the specified PrintWriter. + * Prints a list of this component with the specified number of leading + * whitespace characters to the specified PrintWriter. * - * @param out the output PrintWriter object. - * @param indent how many leading whitespace characters to prepend + * @param out + * the output PrintWriter object. + * @param indent + * how many leading whitespace characters to prepend. */ public void list(PrintWriter out, int indent) { toolkit.lockAWT(); @@ -1599,13 +1405,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets a string composed of the desired number of - * whitespace characters. + * Gets a string composed of the desired number of whitespace characters. * - * @param indent the length of the String to return - * - * @return the string composed of the desired number of - * whitespace characters + * @param indent + * the length of the String to return. + * @return the string composed of the desired number of whitespace + * characters. */ String getIndentStr(int indent) { char[] ind = new char[indent]; @@ -1616,9 +1421,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Prints a list of this component to the specified PrintStream + * Prints a list of this component to the specified PrintStream. * - * @param out the output PrintStream object. + * @param out + * the output PrintStream object. */ public void list(PrintStream out) { toolkit.lockAWT(); @@ -1631,8 +1437,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Prints a list of this component to the standard system - * output stream. + * Prints a list of this component to the standard system output stream. */ public void list() { toolkit.lockAWT(); @@ -1644,9 +1449,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Prints this component. + * Prints this component. * - * @param g the Graphics to be used for painting. + * @param g + * the Graphics to be used for painting. */ public void print(Graphics g) { toolkit.lockAWT(); @@ -1660,7 +1466,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Prints the component and all of its subcomponents. * - * @param g the Graphics to be used for painting. + * @param g + * the Graphics to be used for painting. */ public void printAll(Graphics g) { toolkit.lockAWT(); @@ -1672,11 +1479,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Sets the size of the Component specified by width and height - * parameters. + * Sets the size of the Component specified by width and height parameters. * - * @param width the width of the Component. - * @param height the height of the Component. + * @param width + * the width of the Component. + * @param height + * the height of the Component. */ public void setSize(int width, int height) { toolkit.lockAWT(); @@ -1690,7 +1498,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the size of the Component specified by Dimension object. * - * @param d the new size of the Component. + * @param d + * the new size of the Component. */ public void setSize(Dimension d) { toolkit.lockAWT(); @@ -1704,9 +1513,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by setSize(int, int) method. * - * @param width the width. - * @param height the height. - * + * @param width + * the width. + * @param height + * the height. * @deprecated Replaced by setSize(int, int) method. */ @Deprecated @@ -1723,8 +1533,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by setSize(int, int) method. * - * @param size the size. - * + * @param size + * the size. * @deprecated Replaced by setSize(int, int) method. */ @Deprecated @@ -1740,8 +1550,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks whether or not this component is completely opaque. * - * @return true, if this component is completely opaque, - * false by default. + * @return true, if this component is completely opaque, false by default. */ public boolean isOpaque() { toolkit.lockAWT(); @@ -1765,7 +1574,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } finally { toolkit.unlockAWT(); } - //???AWT: fireAccessibleStateChange(AccessibleState.ENABLED, false); + // ???AWT: fireAccessibleStateChange(AccessibleState.ENABLED, false); } /** @@ -1781,15 +1590,15 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } finally { toolkit.unlockAWT(); } - //???AWT: fireAccessibleStateChange(AccessibleState.ENABLED, true); + // ???AWT: fireAccessibleStateChange(AccessibleState.ENABLED, true); } /** * Enables or disable this component. * - * @param b the boolean parameter. - * - * @deprecated Replaced by setEnabled(boolean) method. + * @param b + * the boolean parameter. + * @deprecated Replaced by setEnabled(boolean) method. */ @Deprecated public void enable(boolean b) { @@ -1809,9 +1618,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Stores the location of this component to the specified Point object; * returns the point of the component's top-left corner. * - * @param rv the Point object where the component's top-left corner - * position will be stored. - * + * @param rv + * the Point object where the component's top-left corner + * position will be stored. * @return the Point which specifies the component's top-left corner. */ public Point getLocation(Point rv) { @@ -1828,8 +1637,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets the location of this component on the form; - * returns the point of the component's top-left corner. + * Gets the location of this component on the form; returns the point of the + * component's top-left corner. * * @return the Point which specifies the component's top-left corner. */ @@ -1857,12 +1666,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Stores the size of this Component to the specified Dimension - * object. - * - * @param rv the Dimension object where the size of the Component - * will be stored. + * Stores the size of this Component to the specified Dimension object. * + * @param rv + * the Dimension object where the size of the Component will be + * stored. * @return the Dimension of this Component. */ public Dimension getSize(Dimension rv) { @@ -1879,9 +1687,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Checks whether or not this Component is valid. A component is valid - * if it is correctly sized and positioned within its parent container - * and all its children are also valid. + * Checks whether or not this Component is valid. A component is valid if it + * is correctly sized and positioned within its parent container and all its + * children are also valid. * * @return true, if the Component is valid, false otherwise. */ @@ -1898,7 +1706,6 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Deprecated: replaced by getComponentAt(int, int) method. * * @return the Point. - * * @deprecated Replaced by getComponentAt(int, int) method. */ @Deprecated @@ -1912,7 +1719,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Connects this Component to a native screen resource and makes it + * Connects this Component to a native screen resource and makes it * displayable. This method not be called directly by user applications. */ public void addNotify() { @@ -1920,11 +1727,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali try { prepare4HierarchyChange(); behaviour.addNotify(); - //???AWT -// finishHierarchyChange(this, parent, 0); -// if (dropTarget != null) { -// dropTarget.addNotify(peer); -// } + // ???AWT + // finishHierarchyChange(this, parent, 0); + // if (dropTarget != null) { + // dropTarget.addNotify(peer); + // } } finally { toolkit.unlockAWT(); } @@ -1933,45 +1740,32 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Map to display. * - * @param b the b + * @param b + * the b. */ void mapToDisplay(boolean b) { - //???AWT + // ???AWT /* - if (b && !isDisplayable()) { - if ((this instanceof Window) || ((parent != null) && parent.isDisplayable())) { - addNotify(); - } - } else if (!b && isDisplayable()) { - removeNotify(); - } - */ + * if (b && !isDisplayable()) { if ((this instanceof Window) || ((parent + * != null) && parent.isDisplayable())) { addNotify(); } } else if (!b + * && isDisplayable()) { removeNotify(); } + */ } /** * Gets the toolkit. * - * @return accessible context specific for particular component + * @return accessible context specific for particular component. */ - //???AWT + // ???AWT /* - AccessibleContext createAccessibleContext() { - return null; - } + * AccessibleContext createAccessibleContext() { return null; } public + * AccessibleContext getAccessibleContext() { toolkit.lockAWT(); try { if + * (accessibleContext == null) { accessibleContext = + * createAccessibleContext(); } return accessibleContext; } finally { + * toolkit.unlockAWT(); } } + */ - public AccessibleContext getAccessibleContext() { - toolkit.lockAWT(); - try { - if (accessibleContext == null) { - accessibleContext = createAccessibleContext(); - } - return accessibleContext; - } finally { - toolkit.unlockAWT(); - } - } - */ - /** * Gets Toolkit for the current Component. * @@ -1982,8 +1776,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets this component's locking object for AWT component tree - * and layout operations. + * Gets this component's locking object for AWT component tree and layout + * operations. * * @return the tree locking object. */ @@ -1992,12 +1786,14 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * @param evt the Event. - * @param what the event's key. + * Handles the event. Use ActionListener instead of this. * + * @param evt + * the Event. + * @param what + * the event's key. * @return true, if successful. - * - * @deprecated Use ActionListener class for registering event listener. + * @deprecated Use ActionListener class for registering event listener. */ @Deprecated public boolean action(Event evt, Object what) { @@ -2006,11 +1802,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali return false; } - /** * Gets the property change support. * - * @return the property change support + * @return the property change support. */ private PropertyChangeSupport getPropertyChangeSupport() { synchronized (componentLock) { @@ -2020,36 +1815,29 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali return propertyChangeSupport; } } - - //???AWT - /* - public void addPropertyChangeListener(PropertyChangeListener listener) { - getPropertyChangeSupport().addPropertyChangeListener(listener); - } - - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - getPropertyChangeSupport().addPropertyChangeListener(propertyName, listener); - } - public void applyComponentOrientation(ComponentOrientation orientation) { - toolkit.lockAWT(); - try { - setComponentOrientation(orientation); - } finally { - toolkit.unlockAWT(); - } - } - */ + // ???AWT + /* + * public void addPropertyChangeListener(PropertyChangeListener listener) { + * getPropertyChangeSupport().addPropertyChangeListener(listener); } public + * void addPropertyChangeListener(String propertyName, + * PropertyChangeListener listener) { + * getPropertyChangeSupport().addPropertyChangeListener(propertyName, + * listener); } public void applyComponentOrientation(ComponentOrientation + * orientation) { toolkit.lockAWT(); try { + * setComponentOrientation(orientation); } finally { toolkit.unlockAWT(); } + * } + */ /** - * Returns true if the set of focus traversal keys for the given focus - * traversal operation has been explicitly defined for this Component. - * - * @param id the ID of traversal key. + * Returns true if the set of focus traversal keys for the given focus + * traversal operation has been explicitly defined for this Component. * - * @return true, if the set of focus traversal keys for the given focus - * traversal operation has been explicitly defined for this Component, - * false otherwise. + * @param id + * the ID of traversal key. + * @return true, if the set of focus traversal keys for the given focus. + * traversal operation has been explicitly defined for this + * Component, false otherwise. */ public boolean areFocusTraversalKeysSet(int id) { toolkit.lockAWT(); @@ -2069,7 +1857,6 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Gets the bounds of the Component. * * @return the rectangle bounds of the Component. - * * @deprecated Use getBounds() methood. */ @Deprecated @@ -2083,16 +1870,20 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Returns the construction status of a specified image - * with the specified width and height that is being created. - * - * - * @param image the image to be checked. - * @param width the width of scaled image which status is being checked, or -1. - * @param height the height of scaled image which status is being checked, or -1. - * @param observer the ImageObserver object to be notified while - * the image is being prepared. + * Returns the construction status of a specified image with the specified + * width and height that is being created. * + * @param image + * the image to be checked. + * @param width + * the width of scaled image which status is being checked, or + * -1. + * @param height + * the height of scaled image which status is being checked, or + * -1. + * @param observer + * the ImageObserver object to be notified while the image is + * being prepared. * @return the ImageObserver flags of the current state of the image data. */ public int checkImage(Image image, int width, int height, ImageObserver observer) { @@ -2105,13 +1896,14 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Returns the construction status of a specified image that is being created. - * - * - * @param image the image to be checked. - * @param observer the ImageObserver object to be notified while - * the image is being prepared. + * Returns the construction status of a specified image that is being + * created. * + * @param image + * the image to be checked. + * @param observer + * the ImageObserver object to be notified while the image is + * being prepared. * @return the ImageObserver flags of the current state of the image data. */ public int checkImage(Image image, ImageObserver observer) { @@ -2126,10 +1918,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Coalesces the existed event with new event. * - * @param existingEvent the existing event in the EventQueue. - * @param newEvent the new event to be posted to the EventQueue. - * - * @return the coalesced AWTEvent, or null if there is no coalescing done. + * @param existingEvent + * the existing event in the EventQueue. + * @param newEvent + * the new event to be posted to the EventQueue. + * @return the coalesced AWTEvent, or null if there is no coalescing done. */ protected AWTEvent coalesceEvents(AWTEvent existingEvent, AWTEvent newEvent) { toolkit.lockAWT(); @@ -2147,7 +1940,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if this Component is a coalescer. * - * @return true, if is coalescer + * @return true, if is coalescer. */ boolean isCoalescer() { return coalescer; @@ -2156,9 +1949,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the relative event. * - * @param id the id - * - * @return the relative event + * @param id + * the id. + * @return the relative event. */ AWTEvent getRelativeEvent(int id) { Integer idWrapper = new Integer(id); @@ -2177,7 +1970,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the new event. * - * @param event the event + * @param event + * the event. */ void addNewEvent(AWTEvent event) { eventsList.addLast(event); @@ -2193,7 +1987,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the next event. * - * @param id the id + * @param id + * the id. */ void removeNextEvent(int id) { eventsTable.get(new Integer(id)).removeFirst(); @@ -2202,8 +1997,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Creates the image with the specified ImageProducer. * - * @param producer the ImageProducer to be used for image creation. - * + * @param producer + * the ImageProducer to be used for image creation. * @return the image with the specified ImageProducer. */ public Image createImage(ImageProducer producer) { @@ -2218,11 +2013,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Creates an off-screen drawable image to be used for double buffering. * - * @param width the width of the image. - * @param height the height of the image. - * - * @return the off-screen drawable image or null if the component is not - * displayable or GraphicsEnvironment.isHeadless() method returns true. + * @param width + * the width of the image. + * @param height + * the height of the image. + * @return the off-screen drawable image or null if the component is not + * displayable or GraphicsEnvironment.isHeadless() method returns + * true. */ public Image createImage(int width, int height) { toolkit.lockAWT(); @@ -2245,17 +2042,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Creates an off-screen drawable image with the specified width, - * height and ImageCapabilities. - * - * @param width the width - * @param height the height - * @param caps the ImageCapabilities. + * Creates an off-screen drawable image with the specified width, height and + * ImageCapabilities. * - * @return the volatile image - * - * @throws AWTException if an image with the specified capabilities - * cannot be created. + * @param width + * the width. + * @param height + * the height. + * @param caps + * the ImageCapabilities. + * @return the volatile image. + * @throws AWTException + * if an image with the specified capabilities cannot be + * created. */ public VolatileImage createVolatileImage(int width, int height, ImageCapabilities caps) throws AWTException { @@ -2277,16 +2076,17 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Creates a volatile off-screen drawable image which is used - * for double buffering. - * - * @param width the width of image. - * @param height the height of image. + * Creates a volatile off-screen drawable image which is used for double + * buffering. * - * @return the volatile image a volatile off-screen drawable image - * which is used for double buffering or null if the component - * is not displayable, or GraphicsEnvironment.isHeadless() method - * returns true. + * @param width + * the width of image. + * @param height + * the height of image. + * @return the volatile image a volatile off-screen drawable image which is + * used for double buffering or null if the component is not + * displayable, or GraphicsEnvironment.isHeadless() method returns + * true. */ public VolatileImage createVolatileImage(int width, int height) { toolkit.lockAWT(); @@ -2311,9 +2111,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * with the component's background color to prepare it for double-buffered * painting. * - * @param image the image - * @param width the width - * @param height the height + * @param image + * the image. + * @param width + * the width. + * @param height + * the height. */ private void fillImageBackground(Image image, int width, int height) { Graphics gr = image.getGraphics(); @@ -2325,8 +2128,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Delivers event. * - * @param evt the event. - * + * @param evt + * the event. * @deprecated Replaced by dispatchEvent(AWTEvent e) method. */ @Deprecated @@ -2335,7 +2138,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Prompts the layout manager to lay out this component. + * Prompts the layout manager to lay out this component. */ public void doLayout() { toolkit.lockAWT(); @@ -2350,9 +2153,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Fire property change impl. * - * @param propertyName the property name - * @param oldValue the old value - * @param newValue the new value + * @param propertyName + * the property name. + * @param oldValue + * the old value. + * @param newValue + * the new value. */ private void firePropertyChangeImpl(String propertyName, Object oldValue, Object newValue) { PropertyChangeSupport pcs; @@ -2368,32 +2174,40 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Reports a bound property changes for int properties. * - * @param propertyName the property name. - * @param oldValue the old property's value. - * @param newValue the new property's value. + * @param propertyName + * the property name. + * @param oldValue + * the old property's value. + * @param newValue + * the new property's value. */ protected void firePropertyChange(String propertyName, int oldValue, int newValue) { firePropertyChangeImpl(propertyName, new Integer(oldValue), new Integer(newValue)); } /** - * Report a bound property change for a boolean-valued property. - * - * @param propertyName the property name. - * @param oldValue the property's old value. - * @param newValue the property's new value. + * Report a bound property change for a boolean-valued property. + * + * @param propertyName + * the property name. + * @param oldValue + * the property's old value. + * @param newValue + * the property's new value. */ protected void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) { - firePropertyChangeImpl(propertyName, Boolean.valueOf(oldValue), Boolean - .valueOf(newValue)); + firePropertyChangeImpl(propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue)); } /** - * Reports a bound property change for an Object-valued property. + * Reports a bound property change for an Object-valued property. * - * @param propertyName the property name. - * @param oldValue the property's old value - * @param newValue the property's new value + * @param propertyName + * the property name. + * @param oldValue + * the property's old value. + * @param newValue + * the property's new value. */ protected void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) { @@ -2401,75 +2215,93 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Report a bound property change for a byte-valued property. + * Report a bound property change for a byte-valued property. * - * @param propertyName the property name. - * @param oldValue the property's old value. - * @param newValue the property's new value. + * @param propertyName + * the property name. + * @param oldValue + * the property's old value. + * @param newValue + * the property's new value. */ public void firePropertyChange(String propertyName, byte oldValue, byte newValue) { firePropertyChangeImpl(propertyName, new Byte(oldValue), new Byte(newValue)); } /** - * Report a bound property change for a char-valued property. + * Report a bound property change for a char-valued property. * - * @param propertyName the property name. - * @param oldValue the old property's value. - * @param newValue the new property's value. + * @param propertyName + * the property name. + * @param oldValue + * the old property's value. + * @param newValue + * the new property's value. */ public void firePropertyChange(String propertyName, char oldValue, char newValue) { firePropertyChangeImpl(propertyName, new Character(oldValue), new Character(newValue)); } /** - * Report a bound property change for a short-valued property. + * Report a bound property change for a short-valued property. * - * @param propertyName the property name. - * @param oldValue the old property's value. - * @param newValue the new property's value. + * @param propertyName + * the property name. + * @param oldValue + * the old property's value. + * @param newValue + * the new property's value. */ public void firePropertyChange(String propertyName, short oldValue, short newValue) { firePropertyChangeImpl(propertyName, new Short(oldValue), new Short(newValue)); } /** - * Report a bound property change for a long-valued property. + * Report a bound property change for a long-valued property. * - * @param propertyName the property name. - * @param oldValue the old property's value. - * @param newValue the new property's value. + * @param propertyName + * the property name. + * @param oldValue + * the old property's value. + * @param newValue + * the new property's value. */ public void firePropertyChange(String propertyName, long oldValue, long newValue) { firePropertyChangeImpl(propertyName, new Long(oldValue), new Long(newValue)); } /** - * Report a bound property change for a float-valued property. + * Report a bound property change for a float-valued property. * - * @param propertyName the property name. - * @param oldValue the old property's value. - * @param newValue the new property's value. + * @param propertyName + * the property name. + * @param oldValue + * the old property's value. + * @param newValue + * the new property's value. */ public void firePropertyChange(String propertyName, float oldValue, float newValue) { firePropertyChangeImpl(propertyName, new Float(oldValue), new Float(newValue)); } /** - * Report a bound property change for a double-valued property. + * Report a bound property change for a double-valued property. * - * @param propertyName the property name. - * @param oldValue the old property's value. - * @param newValue the new property's value. + * @param propertyName + * the property name. + * @param oldValue + * the old property's value. + * @param newValue + * the new property's value. */ public void firePropertyChange(String propertyName, double oldValue, double newValue) { firePropertyChangeImpl(propertyName, new Double(oldValue), new Double(newValue)); } /** - * Gets the alignment along the x axis. + * Gets the alignment along the x axis. * - * @return the alignment along the x axis. + * @return the alignment along the x axis. */ public float getAlignmentX() { toolkit.lockAWT(); @@ -2481,7 +2313,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets the alignment along the y axis. + * Gets the alignment along the y axis. * * @return the alignment along y axis. */ @@ -2502,12 +2334,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali public Color getBackground() { toolkit.lockAWT(); try { - //???AWT + // ???AWT /* - if ((backColor == null) && (parent != null)) { - return parent.getBackground(); - } - */ + * if ((backColor == null) && (parent != null)) { return + * parent.getBackground(); } + */ return backColor; } finally { toolkit.unlockAWT(); @@ -2529,11 +2360,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Writes the data of the bounding rectangle to the specified - * Rectangle object. - * - * @param rv the Rectangle object where the bounding rectangle's data is stored. + * Writes the data of the bounding rectangle to the specified Rectangle + * object. * + * @param rv + * the Rectangle object where the bounding rectangle's data is + * stored. * @return the bounding rectangle. */ public Rectangle getBounds(Rectangle rv) { @@ -2566,8 +2398,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the Component which contains the specified Point. * - * @param p the Point. - * + * @param p + * the Point. * @return the Component which contains the specified Point. */ public Component getComponentAt(Point p) { @@ -2580,14 +2412,15 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets the Component which contains the point with the - * specified coordinates. - * - * @param x the x coordinate of the point. - * @param y the y coordinate of the point. + * Gets the Component which contains the point with the specified + * coordinates. * - * @return the Component which contains the point with the - * specified coordinates. + * @param x + * the x coordinate of the point. + * @param y + * the y coordinate of the point. + * @return the Component which contains the point with the specified + * coordinates. */ public Component getComponentAt(int x, int y) { toolkit.lockAWT(); @@ -2622,11 +2455,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali try { if (cursor != null) { return cursor; - //???AWT - /* - } else if (parent != null) { - return parent.getCursor(); - */ + // ???AWT + /* + * } else if (parent != null) { return parent.getCursor(); + */ } return Cursor.getDefaultCursor(); } finally { @@ -2634,57 +2466,29 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT + // ???AWT /* - public DropTarget getDropTarget() { - toolkit.lockAWT(); - try { - return dropTarget; - } finally { - toolkit.unlockAWT(); - } - } - - public Container getFocusCycleRootAncestor() { - toolkit.lockAWT(); - try { - for (Container c = parent; c != null; c = c.getParent()) { - if (c.isFocusCycleRoot()) { - return c; - } - } - return null; - } finally { - toolkit.unlockAWT(); - } - } - - @SuppressWarnings("unchecked") - public Set getFocusTraversalKeys(int id) { - toolkit.lockAWT(); - try { - Integer kId = new Integer(id); - KeyboardFocusManager.checkTraversalKeysID(traversalKeys, kId); - Set keys = traversalKeys.get(kId); - if (keys == null && parent != null) { - keys = parent.getFocusTraversalKeys(id); - } - if (keys == null) { - keys = KeyboardFocusManager.getCurrentKeyboardFocusManager() - .getDefaultFocusTraversalKeys(id); - } - return (Set) keys; - } finally { - toolkit.unlockAWT(); - } - } - */ - + * public DropTarget getDropTarget() { toolkit.lockAWT(); try { return + * dropTarget; } finally { toolkit.unlockAWT(); } } public Container + * getFocusCycleRootAncestor() { toolkit.lockAWT(); try { for (Container c = + * parent; c != null; c = c.getParent()) { if (c.isFocusCycleRoot()) { + * return c; } } return null; } finally { toolkit.unlockAWT(); } } + * @SuppressWarnings("unchecked") public Set + * getFocusTraversalKeys(int id) { toolkit.lockAWT(); try { Integer kId = + * new Integer(id); KeyboardFocusManager.checkTraversalKeysID(traversalKeys, + * kId); Set keys = traversalKeys.get(kId); if (keys + * == null && parent != null) { keys = parent.getFocusTraversalKeys(id); } + * if (keys == null) { keys = + * KeyboardFocusManager.getCurrentKeyboardFocusManager() + * .getDefaultFocusTraversalKeys(id); } return (Set) keys; } + * finally { toolkit.unlockAWT(); } } + */ + /** * Checks if the the focus traversal keys are enabled for this component. * - * @return true, if the the focus traversal keys are enabled for - * this component, false otherwise. + * @return true, if the the focus traversal keys are enabled for this + * component, false otherwise. */ public boolean getFocusTraversalKeysEnabled() { toolkit.lockAWT(); @@ -2698,8 +2502,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the font metrics of the specified Font. * - * @param f the Font. - * + * @param f + * the Font. * @return the FontMetrics of the specified Font. */ @SuppressWarnings("deprecation") @@ -2715,12 +2519,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali public Color getForeground() { toolkit.lockAWT(); try { - //???AWT + // ???AWT /* - if (foreColor == null && parent != null) { - return parent.getForeground(); - } - */ + * if (foreColor == null && parent != null) { return + * parent.getForeground(); } + */ return foreColor; } finally { toolkit.unlockAWT(); @@ -2728,11 +2531,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets the Graphics of the Component or null if this Component - * is not displayable. + * Gets the Graphics of the Component or null if this Component is not + * displayable. * - * @return the Graphics of the Component or null if this Component - * is not displayable. + * @return the Graphics of the Component or null if this Component is not + * displayable. */ public Graphics getGraphics() { toolkit.lockAWT(); @@ -2749,26 +2552,18 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - /** * Gets the GraphicsConfiguration associated with this Component. * * @return the GraphicsConfiguration associated with this Component. */ public GraphicsConfiguration getGraphicsConfiguration() { - //???AWT + // ???AWT /* - toolkit.lockAWT(); - try { - Window win = getWindowAncestor(); - if (win == null) { - return null; - } - return win.getGraphicsConfiguration(); - } finally { - toolkit.unlockAWT(); - } - */ + * toolkit.lockAWT(); try { Window win = getWindowAncestor(); if (win == + * null) { return null; } return win.getGraphicsConfiguration(); } + * finally { toolkit.unlockAWT(); } + */ return null; } @@ -2787,11 +2582,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Returns true if paint messages received from the operating system - * should be ignored. + * Returns true if paint messages received from the operating system should + * be ignored. * - * @return true if paint messages received from the operating system - * should be ignored, false otherwise. + * @return true if paint messages received from the operating system should + * be ignored, false otherwise. */ public boolean getIgnoreRepaint() { toolkit.lockAWT(); @@ -2803,23 +2598,20 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets the input context of this component for handling - * the communication with input methods when text is entered - * in this component. + * Gets the input context of this component for handling the communication + * with input methods when text is entered in this component. * - * @return the InputContext used by this Component or - * null if no context is specifined. + * @return the InputContext used by this Component or null if no context is + * specifined. */ public InputContext getInputContext() { toolkit.lockAWT(); try { - //???AWT + // ???AWT /* - Container parent = getParent(); - if (parent != null) { - return parent.getInputContext(); - } - */ + * Container parent = getParent(); if (parent != null) { return + * parent.getInputContext(); } + */ return null; } finally { toolkit.unlockAWT(); @@ -2827,11 +2619,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets the input method request handler which supports requests - * from input methods for this component, or null for default. + * Gets the input method request handler which supports requests from input + * methods for this component, or null for default. * - * @return the input method request handler which supports requests - * from input methods for this component, or null for default. + * @return the input method request handler which supports requests from + * input methods for this component, or null for default. */ public InputMethodRequests getInputMethodRequests() { return null; @@ -2845,19 +2637,14 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali public Locale getLocale() { toolkit.lockAWT(); try { - //???AWT + // ???AWT /* - if (locale == null) { - if (parent == null) { - if (this instanceof Window) { - return Locale.getDefault(); - } - // awt.150=no parent - throw new IllegalComponentStateException(Messages.getString("awt.150")); //$NON-NLS-1$ - } - return getParent().getLocale(); - } - */ + * if (locale == null) { if (parent == null) { if (this instanceof + * Window) { return Locale.getDefault(); } // awt.150=no parent + * throw new + * IllegalComponentStateException(Messages.getString("awt.150")); + * //$NON-NLS-1$ } return getParent().getLocale(); } + */ return locale; } finally { toolkit.unlockAWT(); @@ -2865,35 +2652,30 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets the location of this component in the form of a point - * specifying the component's top-left corner in the - * screen's coordinate space. + * Gets the location of this component in the form of a point specifying the + * component's top-left corner in the screen's coordinate space. * - * @return the Point giving the component's location in the - * screen's coordinate space. - * - * @throws IllegalComponentStateException if the component is - * not shown on the screen. + * @return the Point giving the component's location in the screen's + * coordinate space. + * @throws IllegalComponentStateException + * if the component is not shown on the screen. */ public Point getLocationOnScreen() throws IllegalComponentStateException { toolkit.lockAWT(); try { Point p = new Point(); if (isShowing()) { - //???AWT + // ???AWT /* - Component comp; - for (comp = this; comp != null && !(comp instanceof Window); comp = comp - .getParent()) { - p.translate(comp.getX(), comp.getY()); - } - if (comp instanceof Window) { - p.translate(comp.getX(), comp.getY()); - } - */ + * Component comp; for (comp = this; comp != null && !(comp + * instanceof Window); comp = comp .getParent()) { + * p.translate(comp.getX(), comp.getY()); } if (comp instanceof + * Window) { p.translate(comp.getX(), comp.getY()); } + */ return p; } - // awt.151=component must be showing on the screen to determine its location + // awt.151=component must be showing on the screen to determine its + // location throw new IllegalComponentStateException(Messages.getString("awt.151")); //$NON-NLS-1$ } finally { toolkit.unlockAWT(); @@ -2901,11 +2683,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets the peer. This method should not be called directly by - * user applications. + * Gets the peer. This method should not be called directly by user + * applications. * * @return the ComponentPeer. - * * @deprecated Replaced by isDisplayable(). */ @Deprecated @@ -2922,24 +2703,24 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets an array of the property change listeners registered to - * this Component. + * Gets an array of the property change listeners registered to this + * Component. * - * @return an array of the PropertyChangeListeners registered to - * this Component. + * @return an array of the PropertyChangeListeners registered to this + * Component. */ public PropertyChangeListener[] getPropertyChangeListeners() { return getPropertyChangeSupport().getPropertyChangeListeners(); } /** - * Gets an array of PropertyChangeListener objects registered - * to this Component for the specified property. + * Gets an array of PropertyChangeListener objects registered to this + * Component for the specified property. * - * @param propertyName the property name. - * - * @return an array of PropertyChangeListener objects registered - * to this Component for the specified property. + * @param propertyName + * the property name. + * @return an array of PropertyChangeListener objects registered to this + * Component for the specified property. */ public PropertyChangeListener[] getPropertyChangeListeners(String propertyName) { return getPropertyChangeSupport().getPropertyChangeListeners(propertyName); @@ -2990,11 +2771,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Got the focus. * - * @param evt the Event. - * @param what the Object. - * + * @param evt + * the Event. + * @param what + * the Object. * @return true, if successful. - * * @deprecated Replaced by processFocusEvent(FocusEvent) method. */ @Deprecated @@ -3007,10 +2788,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Handles event. * - * @param evt the Event. - * + * @param evt + * the Event. * @return true, if successful. - * * @deprecated Replaced by processEvent(AWTEvent) method. */ @Deprecated @@ -3052,7 +2832,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali public boolean hasFocus() { toolkit.lockAWT(); try { - //???AWT: return isFocusOwner(); + // ???AWT: return isFocusOwner(); return false; } finally { toolkit.unlockAWT(); @@ -3076,24 +2856,24 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali moveFocusOnHide(); behaviour.setVisible(false); postEvent(new ComponentEvent(this, ComponentEvent.COMPONENT_HIDDEN)); - //???AWT: finishHierarchyChange(this, parent, 0); + // ???AWT: finishHierarchyChange(this, parent, 0); notifyInputMethod(null); - //???AWT: invalidateRealParent(); + // ???AWT: invalidateRealParent(); } finally { toolkit.unlockAWT(); } } /** - * Checks whether or not the point with the specified coordinates - * belongs to the Commponent. - * - * @param x the x coordinate of the Point. - * @param y the y coordinate of the Point. - * - * @return true, if the point with the specified coordinates - * belongs to the Commponent, false otherwise. + * Checks whether or not the point with the specified coordinates belongs to + * the Commponent. * + * @param x + * the x coordinate of the Point. + * @param y + * the y coordinate of the Point. + * @return true, if the point with the specified coordinates belongs to the + * Commponent, false otherwise. * @deprecated Replaced by contains(int, int) method. */ @Deprecated @@ -3107,15 +2887,15 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Invalidates the component, this component and all parents - * above it are marked as needing to be laid out. + * Invalidates the component, this component and all parents above it are + * marked as needing to be laid out. */ public void invalidate() { toolkit.lockAWT(); try { valid = false; resetDefaultSize(); - //???AWT: invalidateRealParent(); + // ???AWT: invalidateRealParent(); } finally { toolkit.unlockAWT(); } @@ -3124,8 +2904,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks whether or not the background color is set to this Component. * - * @return true, if the background color is set to this Component, - * false otherwise. + * @return true, if the background color is set to this Component, false + * otherwise. */ public boolean isBackgroundSet() { toolkit.lockAWT(); @@ -3139,8 +2919,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks whether or not a cursor is set for the Component. * - * @return true, if a cursor is set for the Component, - * false otherwise. + * @return true, if a cursor is set for the Component, false otherwise. */ public boolean isCursorSet() { toolkit.lockAWT(); @@ -3166,11 +2945,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Checks whether or not this component is painted to an buffer - * which is copied to the screen later. + * Checks whether or not this component is painted to an buffer which is + * copied to the screen later. * - * @return true, if this component is painted to an buffer - * which is copied to the screen later, false otherwise. + * @return true, if this component is painted to an buffer which is copied + * to the screen later, false otherwise. */ public boolean isDoubleBuffered() { toolkit.lockAWT(); @@ -3200,7 +2979,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * "Recursive" isEnabled(). * * @return true if not only component itself is enabled but its heavyweight - * parent is also "indirectly" enabled + * parent is also "indirectly" enabled. */ boolean isIndirectlyEnabled() { Component comp = this; @@ -3208,7 +2987,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali if (!comp.isLightweight() && !comp.isEnabled()) { return false; } - //???AWT: comp = comp.getRealParent(); + // ???AWT: comp = comp.getRealParent(); } return true; } @@ -3216,7 +2995,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if the component is key enabled. * - * @return true, if the component is enabled and indirectly enabled + * @return true, if the component is enabled and indirectly enabled. */ boolean isKeyEnabled() { if (!isEnabled()) { @@ -3229,39 +3008,24 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Gets only parent of a child component, but not owner of a window. * * @return parent of child component, null if component is a top-level - * (Window instance) + * (Window instance). */ - //???AWT + // ???AWT /* - Container getRealParent() { - return (!(this instanceof Window) ? getParent() : null); - } - - public boolean isFocusCycleRoot(Container container) { - toolkit.lockAWT(); - try { - return getFocusCycleRootAncestor() == container; - } finally { - toolkit.unlockAWT(); - } - } + * Container getRealParent() { return (!(this instanceof Window) ? + * getParent() : null); } public boolean isFocusCycleRoot(Container + * container) { toolkit.lockAWT(); try { return getFocusCycleRootAncestor() + * == container; } finally { toolkit.unlockAWT(); } } public boolean + * isFocusOwner() { toolkit.lockAWT(); try { return + * KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == + * this; } finally { toolkit.unlockAWT(); } } + */ - public boolean isFocusOwner() { - toolkit.lockAWT(); - try { - return KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == this; - } finally { - toolkit.unlockAWT(); - } - } - */ - /** * Checks whether or not this Component can be focusable. * * @return true, if this Component can be focusable, false otherwise. - * - * @deprecated Replaced by isFocusable(). + * @deprecated Replaced by isFocusable(). */ @Deprecated public boolean isFocusTraversable() { @@ -3306,8 +3070,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if foreground color is set for the Component or not. * - * @return true, if is foreground color is set for the Component, - * false otherwise. + * @return true, if is foreground color is set for the Component, false + * otherwise. */ public boolean isForegroundSet() { toolkit.lockAWT(); @@ -3321,8 +3085,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Returns true if this component has a lightweight peer. * - * @return true, if this component has a lightweight peer, - * false if it has a native peer or no peer. + * @return true, if this component has a lightweight peer, false if it has a + * native peer or no peer. */ public boolean isLightweight() { toolkit.lockAWT(); @@ -3333,22 +3097,18 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - /** * Checks whether or not this Component is shown. * * @return true, if this Component is shown, false otherwise. */ public boolean isShowing() { - //???AWT + // ???AWT /* - toolkit.lockAWT(); - try { - return (isVisible() && isDisplayable() && (parent != null) && parent.isShowing()); - } finally { - toolkit.unlockAWT(); - } - */ + * toolkit.lockAWT(); try { return (isVisible() && isDisplayable() && + * (parent != null) && parent.isShowing()); } finally { + * toolkit.unlockAWT(); } + */ return false; } @@ -3369,11 +3129,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by processKeyEvent(KeyEvent) method. * - * @param evt the Event. - * @param key the key code. - * + * @param evt + * the Event. + * @param key + * the key code. * @return true, if successful. - * * @deprecated Replaced by replaced by processKeyEvent(KeyEvent) method. */ @Deprecated @@ -3386,11 +3146,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by processKeyEvent(KeyEvent) method. * - * @param evt the Event. - * @param key the key code. - * + * @param evt + * the Event. + * @param key + * the key code. * @return true, if successful. - * * @deprecated Replaced by processKeyEvent(KeyEvent) method. */ @Deprecated @@ -3418,11 +3178,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by getComponentAt(int, int) method. * - * @param x the x coordinate. - * @param y the y coordinate. - * + * @param x + * the x coordinate. + * @param y + * the y coordinate. * @return The component. - * * @deprecated Replaced by getComponentAt(int, int) method. */ @Deprecated @@ -3439,13 +3199,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Deprecated: replaced by processFocusEvent(FocusEvent). - * - * @param evt the Event. - * @param what the Object. + * Deprecated: replaced by processFocusEvent(FocusEvent). * + * @param evt + * the Event. + * @param what + * the Object. * @return true, if successful. - * * @deprecated Replaced by processFocusEvent(FocusEvent). */ @Deprecated @@ -3458,12 +3218,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by processMouseEvent(MouseEvent) method. * - * @param evt the MouseEvent. - * @param x the x coordinate. - * @param y the y coordinate. - * + * @param evt + * the MouseEvent. + * @param x + * the x coordinate. + * @param y + * the y coordinate. * @return true, if successful. - * * @deprecated Replaced by processMouseEvent(MouseEvent) method. */ @Deprecated @@ -3476,12 +3237,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by getMinimumSize() method. * - * @param evt the Event. - * @param x the x coordinate. - * @param y the y coordinate. - * + * @param evt + * the Event. + * @param x + * the x coordinate. + * @param y + * the y coordinate. * @return true, if successful. - * * @deprecated Replaced by getMinimumSize() method. */ @Deprecated @@ -3494,12 +3256,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Replaced by processMouseEvent(MouseEvent) method. * - * @param evt the Event. - * @param x the x coordinate. - * @param y the y coordinate. - * + * @param evt + * the Event. + * @param x + * the x coordinate. + * @param y + * the y coordinate. * @return true, if successful. - * * @deprecated replaced by processMouseEvent(MouseEvent) method. */ @Deprecated @@ -3512,12 +3275,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Replaced by processMouseEvent(MouseEvent) method. * - * @param evt the Event. - * @param x the x coordinate. - * @param y the y coordinate. - * + * @param evt + * the Event. + * @param x + * the x coordinate. + * @param y + * the y coordinate. * @return true, if successful. - * * @deprecated Replaced by processMouseEvent(MouseEvent) method. */ @Deprecated @@ -3530,12 +3294,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Replaced by processMouseEvent(MouseEvent) method. * - * @param evt the Event. - * @param x the x coordinate. - * @param y the y coordinate. - * + * @param evt + * the Event. + * @param x + * the x coordinate. + * @param y + * the y coordinate. * @deprecated Replaced by processMouseEvent(MouseEvent) method. - * * @return true, if successful. */ @Deprecated @@ -3548,12 +3313,13 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Replaced by processMouseEvent(MouseEvent) method. * - * @param evt the Event. - * @param x the x coordinate. - * @param y the y coordinate. - * + * @param evt + * the Event. + * @param x + * the x coordinate. + * @param y + * the y coordinate. * @return true, if successful. - * * @deprecated Replaced by processMouseEvent(MouseEvent) method. */ @Deprecated @@ -3566,9 +3332,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by setLocation(int, int) method. * - * @param x the x coordinates. - * @param y the y coordinates. - * + * @param x + * the x coordinates. + * @param y + * the y coordinates. * @deprecated Replaced by setLocation(int, int) method. */ @Deprecated @@ -3582,18 +3349,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT + // ???AWT /* - @Deprecated - public void nextFocus() { - toolkit.lockAWT(); - try { - transferFocus(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS); - } finally { - toolkit.unlockAWT(); - } - } - */ + * @Deprecated public void nextFocus() { toolkit.lockAWT(); try { + * transferFocus(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS); } finally { + * toolkit.unlockAWT(); } } + */ /** * Returns a string representation of the component's state. @@ -3603,10 +3364,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali protected String paramString() { /* * The format is based on 1.5 release behavior which can be revealed by - * the following code: - * - * Component c = new Component(){}; c.setVisible(false); - * System.out.println(c); + * the following code: Component c = new Component(){}; + * c.setVisible(false); System.out.println(c); */ toolkit.lockAWT(); try { @@ -3624,35 +3383,27 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali if (handled) { return true; } - //???AWT + // ???AWT /* - - // propagate non-handled events up to parent - Component par = parent; - // try to call postEvent only on components which - // override any of deprecated method handlers - // while (par != null && !par.deprecatedEventHandler) { - // par = par.parent; - // } - // translate event coordinates before posting it to parent - if (par != null) { - evt.translate(x, y); - par.postEvent(evt); - } - - */ + * // propagate non-handled events up to parent Component par = parent; + * // try to call postEvent only on components which // override any of + * deprecated method handlers // while (par != null && + * !par.deprecatedEventHandler) { // par = par.parent; // } // translate + * event coordinates before posting it to parent if (par != null) { + * evt.translate(x, y); par.postEvent(evt); } + */ return false; } /** - * Prepares an image for rendering on the Component. - * - * @param image the Image to be prepared. - * @param observer the ImageObserver object to be notified as soon as - * the image is prepared. + * Prepares an image for rendering on the Component. * - * @return true if the image has been fully prepared, - * false otherwise. + * @param image + * the Image to be prepared. + * @param observer + * the ImageObserver object to be notified as soon as the image + * is prepared. + * @return true if the image has been fully prepared, false otherwise. */ public boolean prepareImage(Image image, ImageObserver observer) { toolkit.lockAWT(); @@ -3664,17 +3415,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Prepares an image for rendering on the Component with the - * specified width, height, and ImageObserver. + * Prepares an image for rendering on the Component with the specified + * width, height, and ImageObserver. * - * @param image the Image to be prepared. - * @param width the width of scaled image. - * @param height the height of scaled height. - * @param observer the ImageObserver object to be notified as soon as - * the image is prepared. - * - * @return true if the image is been fully prepared, - * false otherwise. + * @param image + * the Image to be prepared. + * @param width + * the width of scaled image. + * @param height + * the height of scaled height. + * @param observer + * the ImageObserver object to be notified as soon as the image + * is prepared. + * @return true if the image is been fully prepared, false otherwise. */ public boolean prepareImage(Image image, int width, int height, ImageObserver observer) { toolkit.lockAWT(); @@ -3691,16 +3444,14 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali public void removeNotify() { toolkit.lockAWT(); try { - //???AWT + // ???AWT /* - if (dropTarget != null) { - dropTarget.removeNotify(peer); - } - */ + * if (dropTarget != null) { dropTarget.removeNotify(peer); } + */ prepare4HierarchyChange(); - ///???AWT: moveFocus(); + // /???AWT: moveFocus(); behaviour.removeNotify(); - //???AWT: finishHierarchyChange(this, parent, 0); + // ???AWT: finishHierarchyChange(this, parent, 0); removeNotifyInputContext(); } finally { toolkit.unlockAWT(); @@ -3708,7 +3459,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Calls InputContext.removeNotify + * Calls InputContext.removeNotify. */ private void removeNotifyInputContext() { if (!inputMethodsEnabled) { @@ -3716,7 +3467,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } InputContext ic = getInputContext(); if (ic != null) { - //???AWT: ic.removeNotify(this); + // ???AWT: ic.removeNotify(this); } } @@ -3726,46 +3477,25 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * setFocusable(false) is called, and therefore automatic forward focus * traversal is necessary */ - //???AWT + // ???AWT /* - void moveFocus() { - // don't use transferFocus(), but query focus traversal policy directly - // and if it returns null, transfer focus up cycle - // and find next focusable component there - KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); - Container root = kfm.getCurrentFocusCycleRoot(); - Component nextComp = this; - boolean success = !isFocusOwner(); - while (!success) { - if (root != nextComp.getFocusCycleRootAncestor()) { - // component was probably removed from container - // so focus will be lost in some time - return; - } - nextComp = root.getFocusTraversalPolicy().getComponentAfter(root, nextComp); - if (nextComp == this) { - nextComp = null; // avoid looping - } - if (nextComp != null) { - success = nextComp.requestFocusInWindow(); - } else { - nextComp = root; - root = root.getFocusCycleRootAncestor(); - // if no acceptable component is found at all - clear global - // focus owner - if (root == null) { - if (nextComp instanceof Window) { - Window wnd = (Window) nextComp; - wnd.setFocusOwner(null); - wnd.setRequestedFocus(null); - } - kfm.clearGlobalFocusOwner(); - return; - } - } - } - } - */ + * void moveFocus() { // don't use transferFocus(), but query focus + * traversal policy directly // and if it returns null, transfer focus up + * cycle // and find next focusable component there KeyboardFocusManager kfm + * = KeyboardFocusManager.getCurrentKeyboardFocusManager(); Container root = + * kfm.getCurrentFocusCycleRoot(); Component nextComp = this; boolean + * success = !isFocusOwner(); while (!success) { if (root != + * nextComp.getFocusCycleRootAncestor()) { // component was probably removed + * from container // so focus will be lost in some time return; } nextComp = + * root.getFocusTraversalPolicy().getComponentAfter(root, nextComp); if + * (nextComp == this) { nextComp = null; // avoid looping } if (nextComp != + * null) { success = nextComp.requestFocusInWindow(); } else { nextComp = + * root; root = root.getFocusCycleRootAncestor(); // if no acceptable + * component is found at all - clear global // focus owner if (root == null) + * { if (nextComp instanceof Window) { Window wnd = (Window) nextComp; + * wnd.setFocusOwner(null); wnd.setRequestedFocus(null); } + * kfm.clearGlobalFocusOwner(); return; } } } } + */ /** * For Container there's a difference between moving focus when being made @@ -3774,80 +3504,73 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * setVisible() is not called. */ void moveFocusOnHide() { - //???AWT: moveFocus(); + // ???AWT: moveFocus(); } /** * Removes the property change listener registered for this component. * - * @param listener the PropertyChangeListener. + * @param listener + * the PropertyChangeListener. */ public void removePropertyChangeListener(PropertyChangeListener listener) { getPropertyChangeSupport().removePropertyChangeListener(listener); } /** - * Removes the property change listener registered fot this component - * for the specified propertyy. + * Removes the property change listener registered fot this component for + * the specified propertyy. * - * @param propertyName the property name. - * @param listener the PropertyChangeListener. + * @param propertyName + * the property name. + * @param listener + * the PropertyChangeListener. */ - public void removePropertyChangeListener(String propertyName, - PropertyChangeListener listener) { + public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { getPropertyChangeSupport().removePropertyChangeListener(propertyName, listener); } - /** - * Repaints the specified rectangle of this component within - * tm milliseconds. + * Repaints the specified rectangle of this component within tm + * milliseconds. * - * @param tm the time in milliseconds before updating. - * @param x the x coordinate of Rectangle. - * @param y the y coordinate of Rectangle. - * @param width the width of Rectangle. - * @param height the height of Rectangle. + * @param tm + * the time in milliseconds before updating. + * @param x + * the x coordinate of Rectangle. + * @param y + * the y coordinate of Rectangle. + * @param width + * the width of Rectangle. + * @param height + * the height of Rectangle. */ public void repaint(long tm, int x, int y, int width, int height) { - //???AWT + // ???AWT /* - toolkit.lockAWT(); - try { - if (width <= 0 || height <= 0 || (redrawManager == null) || !isShowing()) { - return; - } - if (behaviour instanceof LWBehavior) { - if (parent == null || !parent.visible || !parent.behaviour.isDisplayable()) { - return; - } - if (repaintRegion == null) { - repaintRegion = new MultiRectArea(new Rectangle(x, y, width, height)); - } - repaintRegion.intersect(new Rectangle(0, 0, this.w, this.h)); - repaintRegion.translate(this.x, this.y); - parent.repaintRegion = repaintRegion; - repaintRegion = null; - parent.repaint(tm, x + this.x, y + this.y, width, height); - } else { - if (repaintRegion != null) { - redrawManager.addUpdateRegion(this, repaintRegion); - repaintRegion = null; - } else { - redrawManager.addUpdateRegion(this, new Rectangle(x, y, width, height)); - } - toolkit.getSystemEventQueueCore().notifyEventMonitor(toolkit); - } - } finally { - toolkit.unlockAWT(); - } - */ + * toolkit.lockAWT(); try { if (width <= 0 || height <= 0 || + * (redrawManager == null) || !isShowing()) { return; } if (behaviour + * instanceof LWBehavior) { if (parent == null || !parent.visible || + * !parent.behaviour.isDisplayable()) { return; } if (repaintRegion == + * null) { repaintRegion = new MultiRectArea(new Rectangle(x, y, width, + * height)); } repaintRegion.intersect(new Rectangle(0, 0, this.w, + * this.h)); repaintRegion.translate(this.x, this.y); + * parent.repaintRegion = repaintRegion; repaintRegion = null; + * parent.repaint(tm, x + this.x, y + this.y, width, height); } else { + * if (repaintRegion != null) { redrawManager.addUpdateRegion(this, + * repaintRegion); repaintRegion = null; } else { + * redrawManager.addUpdateRegion(this, new Rectangle(x, y, width, + * height)); } + * toolkit.getSystemEventQueueCore().notifyEventMonitor(toolkit); } } + * finally { toolkit.unlockAWT(); } + */ } /** * Post event. * - * @param e the e + * @param e + * the e. */ void postEvent(AWTEvent e) { getToolkit().getSystemEventQueueImpl().postEvent(e); @@ -3856,10 +3579,14 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Repaints the specified Rectangle of this Component. * - * @param x the x coordinate of Rectangle. - * @param y the y coordinate of Rectangle. - * @param width the width of Rectangle. - * @param height the height of Rectangle. + * @param x + * the x coordinate of Rectangle. + * @param y + * the y coordinate of Rectangle. + * @param width + * the width of Rectangle. + * @param height + * the height of Rectangle. */ public void repaint(int x, int y, int width, int height) { toolkit.lockAWT(); @@ -3887,7 +3614,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Repaints the component within tm milliseconds. * - * @param tm the time in milliseconds before updating. + * @param tm + * the time in milliseconds before updating. */ public void repaint(long tm) { toolkit.lockAWT(); @@ -3899,29 +3627,28 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Requests that this Component get the input focus temporarily. - * This component must be displayable, visible, and focusable. + * Requests that this Component get the input focus temporarily. This + * component must be displayable, visible, and focusable. * - * @param temporary this parameter is true if the focus change - * is temporary, when the window loses the focus. - * - * @return true if the focus change request is succeeded, - * false otherwise. + * @param temporary + * this parameter is true if the focus change is temporary, when + * the window loses the focus. + * @return true if the focus change request is succeeded, false otherwise. */ protected boolean requestFocus(boolean temporary) { toolkit.lockAWT(); try { - //???AWT: return requestFocusImpl(temporary, true, false); + // ???AWT: return requestFocusImpl(temporary, true, false); } finally { toolkit.unlockAWT(); } - //???AWT + // ???AWT return false; } /** - * Requests that this Component get the input focus. - * This component must be displayable, visible, and focusable. + * Requests that this Component get the input focus. This component must be + * displayable, visible, and focusable. */ public void requestFocus() { toolkit.lockAWT(); @@ -3932,55 +3659,35 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT + // ???AWT /* - protected boolean requestFocusInWindow(boolean temporary) { - toolkit.lockAWT(); - try { - Window wnd = getWindowAncestor(); - if ((wnd == null) || !wnd.isFocused()) { - return false; - } - return requestFocusImpl(temporary, false, false); - } finally { - toolkit.unlockAWT(); - } - } - - boolean requestFocusImpl(boolean temporary, boolean crossWindow, boolean rejectionRecovery) { - if (!rejectionRecovery && isFocusOwner()) { - return true; - } - Window wnd = getWindowAncestor(); - Container par = getRealParent(); - if ((par != null) && par.isRemoved) { - return false; - } - if (!isShowing() || !isFocusable() || !wnd.isFocusableWindow()) { - return false; - } - return KeyboardFocusManager.getCurrentKeyboardFocusManager().requestFocus(this, - temporary, crossWindow, true); - } - - public boolean requestFocusInWindow() { - toolkit.lockAWT(); - try { - return requestFocusInWindow(false); - } finally { - toolkit.unlockAWT(); - } - } - */ + * protected boolean requestFocusInWindow(boolean temporary) { + * toolkit.lockAWT(); try { Window wnd = getWindowAncestor(); if ((wnd == + * null) || !wnd.isFocused()) { return false; } return + * requestFocusImpl(temporary, false, false); } finally { + * toolkit.unlockAWT(); } } boolean requestFocusImpl(boolean temporary, + * boolean crossWindow, boolean rejectionRecovery) { if (!rejectionRecovery + * && isFocusOwner()) { return true; } Window wnd = getWindowAncestor(); + * Container par = getRealParent(); if ((par != null) && par.isRemoved) { + * return false; } if (!isShowing() || !isFocusable() || + * !wnd.isFocusableWindow()) { return false; } return + * KeyboardFocusManager.getCurrentKeyboardFocusManager().requestFocus(this, + * temporary, crossWindow, true); } public boolean requestFocusInWindow() { + * toolkit.lockAWT(); try { return requestFocusInWindow(false); } finally { + * toolkit.unlockAWT(); } } + */ /** * Deprecated: replaced by setBounds(int, int, int, int) method. * - * @param x the x coordinate. - * @param y the y coordinate. - * @param w the width. - * @param h the height. - * + * @param x + * the x coordinate. + * @param y + * the y coordinate. + * @param w + * the width. + * @param h + * the height. * @deprecated Replaced by setBounds(int, int, int, int) method. */ @Deprecated @@ -3995,13 +3702,17 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Sets rectangle for this Component to be the rectangle with the specified + * Sets rectangle for this Component to be the rectangle with the specified * x,y coordinates of the top-left corner and the width and height. * - * @param x the x coordinate of the rectangle's top-left corner. - * @param y the y coordinate of the rectangle's top-left corner. - * @param w the width of rectangle. - * @param h the height of rectangle. + * @param x + * the x coordinate of the rectangle's top-left corner. + * @param y + * the y coordinate of the rectangle's top-left corner. + * @param w + * the width of rectangle. + * @param h + * the height of rectangle. */ public void setBounds(int x, int y, int w, int h) { toolkit.lockAWT(); @@ -4013,16 +3724,22 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Sets rectangle for this Component to be the rectangle with the specified - * x,y coordinates of the top-left corner and the width and height - * and posts the appropriate events. + * Sets rectangle for this Component to be the rectangle with the specified + * x,y coordinates of the top-left corner and the width and height and posts + * the appropriate events. * - * @param x the x coordinate of the rectangle's top-left corner. - * @param y the y coordinate of the rectangle's top-left corner. - * @param w the width of rectangle. - * @param h the height of rectangle. - * @param bMask the bitmask of bounds options - * @param updateBehavior the whether to update the behavoir's bounds as well + * @param x + * the x coordinate of the rectangle's top-left corner. + * @param y + * the y coordinate of the rectangle's top-left corner. + * @param w + * the width of rectangle. + * @param h + * the height of rectangle. + * @param bMask + * the bitmask of bounds options. + * @param updateBehavior + * the whether to update the behavoir's bounds as well. */ void setBounds(int x, int y, int w, int h, int bMask, boolean updateBehavior) { int oldX = this.x; @@ -4032,7 +3749,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali setBoundsFields(x, y, w, h, bMask); // Moved if ((oldX != this.x) || (oldY != this.y)) { - //???AWT: invalidateRealParent(); + // ???AWT: invalidateRealParent(); postEvent(new ComponentEvent(this, ComponentEvent.COMPONENT_MOVED)); spreadHierarchyBoundsEvents(this, HierarchyEvent.ANCESTOR_MOVED); } @@ -4051,7 +3768,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Calls InputContextImpl.notifyClientWindowChanged. * - * @param bounds the bounds + * @param bounds + * the bounds. */ void notifyInputMethod(Rectangle bounds) { // only Window actually notifies IM of bounds change @@ -4060,11 +3778,16 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the bounds fields. * - * @param x the x - * @param y the y - * @param w the w - * @param h the h - * @param bMask the b mask + * @param x + * the x. + * @param y + * the y. + * @param w + * the w. + * @param h + * the h. + * @param bMask + * the b mask. */ private void setBoundsFields(int x, int y, int w, int h, int bMask) { if ((bMask & NativeWindow.BOUNDS_NOSIZE) == 0) { @@ -4080,7 +3803,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the native insets. * - * @return the native insets + * @return the native insets. */ Insets getNativeInsets() { return new Insets(0, 0, 0, 0); @@ -4089,7 +3812,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the insets. * - * @return the insets + * @return the insets. */ Insets getInsets() { return new Insets(0, 0, 0, 0); @@ -4098,7 +3821,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if is mouse exited expected. * - * @return true, if is mouse exited expected + * @return true, if is mouse exited expected. */ boolean isMouseExitedExpected() { return mouseExitedExpected; @@ -4107,7 +3830,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the mouse exited expected. * - * @param expected the new mouse exited expected + * @param expected + * the new mouse exited expected. */ void setMouseExitedExpected(boolean expected) { mouseExitedExpected = expected; @@ -4116,7 +3840,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the new bounding rectangle for this Component. * - * @param r the new bounding rectangle. + * @param r + * the new bounding rectangle. */ public void setBounds(Rectangle r) { toolkit.lockAWT(); @@ -4128,10 +3853,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Sets the component orientation which affects the component's - * elements and text within this component. + * Sets the component orientation which affects the component's elements and + * text within this component. * - * @param o the ComponentOrientation object. + * @param o + * the ComponentOrientation object. */ public void setComponentOrientation(ComponentOrientation o) { ComponentOrientation oldOrientation; @@ -4149,7 +3875,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the specified cursor for this Component. * - * @param cursor the new Cursor. + * @param cursor + * the new Cursor. */ public void setCursor(Cursor cursor) { toolkit.lockAWT(); @@ -4168,26 +3895,20 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali if (isDisplayable() && isShowing()) { Rectangle absRect = new Rectangle(getLocationOnScreen(), getSize()); Point absPointerPos = toolkit.dispatcher.mouseDispatcher.getPointerPos(); - //???AWT + // ???AWT /* - if (absRect.contains(absPointerPos)) { - // set Cursor only on top-level Windows(on X11) - Window topLevelWnd = getWindowAncestor(); - if (topLevelWnd != null) { - Point pointerPos = MouseDispatcher.convertPoint(null, absPointerPos, - topLevelWnd); - Component compUnderCursor = topLevelWnd.findComponentAt(pointerPos); - // if (compUnderCursor == this || - // compUnderCursor.getCursorAncestor() == this) { - NativeWindow wnd = topLevelWnd.getNativeWindow(); - if (compUnderCursor != null && wnd != null) { - compUnderCursor.getRealCursor().getNativeCursor() - .setCursor(wnd.getId()); - } - // } - } - } - */ + * if (absRect.contains(absPointerPos)) { // set Cursor only on + * top-level Windows(on X11) Window topLevelWnd = + * getWindowAncestor(); if (topLevelWnd != null) { Point pointerPos + * = MouseDispatcher.convertPoint(null, absPointerPos, topLevelWnd); + * Component compUnderCursor = + * topLevelWnd.findComponentAt(pointerPos); // if (compUnderCursor + * == this || // compUnderCursor.getCursorAncestor() == this) { + * NativeWindow wnd = topLevelWnd.getNativeWindow(); if + * (compUnderCursor != null && wnd != null) { + * compUnderCursor.getRealCursor().getNativeCursor() + * .setCursor(wnd.getId()); } // } } } + */ } } @@ -4195,68 +3916,44 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Gets the ancestor Cursor if Component is disabled (directly or via an * ancestor) even if Cursor is explicitly set. * - * @param value the value - * - * @return actual Cursor to be displayed + * @param value + * the value. + * @return the actual Cursor to be displayed. */ - //???AWT + // ???AWT /* - Cursor getRealCursor() { - Component cursorAncestor = getCursorAncestor(); - return cursorAncestor != null ? cursorAncestor.getCursor() : Cursor.getDefaultCursor(); - } - */ + * Cursor getRealCursor() { Component cursorAncestor = getCursorAncestor(); + * return cursorAncestor != null ? cursorAncestor.getCursor() : + * Cursor.getDefaultCursor(); } + */ /** * Gets the ancestor(or component itself) whose cursor is set when pointer * is inside component * - * @return actual Cursor to be displayed + * @return the actual Cursor to be displayed. */ - //???AWT + // ???AWT /* - Component getCursorAncestor() { - Component comp; - for (comp = this; comp != null; comp = comp.getParent()) { - if (comp instanceof Window || comp.isCursorSet() && comp.isKeyEnabled()) { - return comp; - } - } - return null; - } + * Component getCursorAncestor() { Component comp; for (comp = this; comp != + * null; comp = comp.getParent()) { if (comp instanceof Window || + * comp.isCursorSet() && comp.isKeyEnabled()) { return comp; } } return + * null; } public void setDropTarget(DropTarget dt) { toolkit.lockAWT(); try + * { if (dropTarget == dt) { return; } DropTarget oldDropTarget = + * dropTarget; dropTarget = dt; if (oldDropTarget != null) { if + * (behaviour.isDisplayable()) { oldDropTarget.removeNotify(peer); } + * oldDropTarget.setComponent(null); } if (dt != null) { + * dt.setComponent(this); if (behaviour.isDisplayable()) { + * dt.addNotify(peer); } } } finally { toolkit.unlockAWT(); } } + */ - public void setDropTarget(DropTarget dt) { - toolkit.lockAWT(); - try { - if (dropTarget == dt) { - return; - } - DropTarget oldDropTarget = dropTarget; - dropTarget = dt; - if (oldDropTarget != null) { - if (behaviour.isDisplayable()) { - oldDropTarget.removeNotify(peer); - } - oldDropTarget.setComponent(null); - } - if (dt != null) { - dt.setComponent(this); - if (behaviour.isDisplayable()) { - dt.addNotify(peer); - } - } - } finally { - toolkit.unlockAWT(); - } - } - */ - /** - * Sets this component to the "enabled" or "disabled" state depending - * on the specified boolean parameter. + * Sets this component to the "enabled" or "disabled" state depending on the + * specified boolean parameter. * - * @param value true if this component should be enabled; false - * if this component should be disabled. + * @param value + * true if this component should be enabled; false if this + * component should be disabled. */ public void setEnabled(boolean value) { toolkit.lockAWT(); @@ -4270,7 +3967,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the enabled impl. * - * @param value the new enabled impl + * @param value + * the new enabled impl. */ void setEnabledImpl(boolean value) { if (enabled != value) { @@ -4283,77 +3981,49 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT + // ???AWT /* - private void fireAccessibleStateChange(AccessibleState state, boolean value) { - if (behaviour.isLightweight()) { - return; - } - AccessibleContext ac = getAccessibleContext(); - if (ac != null) { - AccessibleState oldValue = null; - AccessibleState newValue = null; - if (value) { - newValue = state; - } else { - oldValue = state; - } - ac.firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, oldValue, - newValue); - } - } - */ + * private void fireAccessibleStateChange(AccessibleState state, boolean + * value) { if (behaviour.isLightweight()) { return; } AccessibleContext ac + * = getAccessibleContext(); if (ac != null) { AccessibleState oldValue = + * null; AccessibleState newValue = null; if (value) { newValue = state; } + * else { oldValue = state; } + * ac.firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, + * oldValue, newValue); } } + */ - //???AWT + // ???AWT /* - public void setFocusTraversalKeys(int id, Set keystrokes) { - Set oldTraversalKeys; - String propName = "FocusTraversalKeys"; //$NON-NLS-1$ - toolkit.lockAWT(); - try { - Integer kId = new Integer(id); - KeyboardFocusManager.checkTraversalKeysID(traversalKeys, kId); - Map> keys = new HashMap>(); - for (int kid : traversalIDs) { - Integer key = new Integer(kid); - keys.put(key, getFocusTraversalKeys(kid)); - } - KeyboardFocusManager.checkKeyStrokes(traversalIDs, keys, kId, keystrokes); - oldTraversalKeys = traversalKeys.get(new Integer(id)); - // put a copy of keystrokes object into map: - Set newKeys = keystrokes; - if (keystrokes != null) { - newKeys = new HashSet(keystrokes); - } - traversalKeys.put(kId, newKeys); - String direction = ""; //$NON-NLS-1$ - switch (id) { - case KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS: - direction = "forward"; //$NON-NLS-1$ - break; - case KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS: - direction = "backward"; //$NON-NLS-1$ - break; - case KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS: - direction = "upCycle"; //$NON-NLS-1$ - break; - case KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS: - direction = "downCycle"; //$NON-NLS-1$ - break; - } - propName = direction + propName; - } finally { - toolkit.unlockAWT(); - } - firePropertyChange(propName, oldTraversalKeys, keystrokes); - } - */ + * public void setFocusTraversalKeys(int id, Set + * keystrokes) { Set oldTraversalKeys; String + * propName = "FocusTraversalKeys"; //$NON-NLS-1$ toolkit.lockAWT(); try { + * Integer kId = new Integer(id); + * KeyboardFocusManager.checkTraversalKeysID(traversalKeys, kId); + * Map> keys = new HashMap>(); for (int kid : traversalIDs) { Integer + * key = new Integer(kid); keys.put(key, getFocusTraversalKeys(kid)); } + * KeyboardFocusManager.checkKeyStrokes(traversalIDs, keys, kId, + * keystrokes); oldTraversalKeys = traversalKeys.get(new Integer(id)); // + * put a copy of keystrokes object into map: Set + * newKeys = keystrokes; if (keystrokes != null) { newKeys = new + * HashSet(keystrokes); } traversalKeys.put(kId, newKeys); + * String direction = ""; //$NON-NLS-1$ switch (id) { case + * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS: direction = "forward"; + * //$NON-NLS-1$ break; case KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS: + * direction = "backward"; //$NON-NLS-1$ break; case + * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS: direction = "upCycle"; + * //$NON-NLS-1$ break; case KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS: + * direction = "downCycle"; //$NON-NLS-1$ break; } propName = direction + + * propName; } finally { toolkit.unlockAWT(); } firePropertyChange(propName, + * oldTraversalKeys, keystrokes); } + */ /** * Sets the focus traversal keys state for this component. * - * @param value true if the focus traversal keys state is enabled, - * false if the focus traversal keys state is disabled. + * @param value + * true if the focus traversal keys state is enabled, false if + * the focus traversal keys state is disabled. */ public void setFocusTraversalKeysEnabled(boolean value) { boolean oldFocusTraversalKeysEnabled; @@ -4368,38 +4038,23 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali focusTraversalKeysEnabled); } - //???AWT + // ???AWT /* - public void setFocusable(boolean focusable) { - boolean oldFocusable; - toolkit.lockAWT(); - try { - calledSetFocusable = true; - oldFocusable = this.focusable; - this.focusable = focusable; - if (!focusable) { - moveFocus(); - } - } finally { - toolkit.unlockAWT(); - } - firePropertyChange("focusable", oldFocusable, focusable); //$NON-NLS-1$ - } - - public Font getFont() { - toolkit.lockAWT(); - try { - return (font == null) && (parent != null) ? parent.getFont() : font; - } finally { - toolkit.unlockAWT(); - } - } - */ + * public void setFocusable(boolean focusable) { boolean oldFocusable; + * toolkit.lockAWT(); try { calledSetFocusable = true; oldFocusable = + * this.focusable; this.focusable = focusable; if (!focusable) { + * moveFocus(); } } finally { toolkit.unlockAWT(); } + * firePropertyChange("focusable", oldFocusable, focusable); //$NON-NLS-1$ } + * public Font getFont() { toolkit.lockAWT(); try { return (font == null) && + * (parent != null) ? parent.getFont() : font; } finally { + * toolkit.unlockAWT(); } } + */ /** * Sets the font for this Component. * - * @param f the new font of the Component. + * @param f + * the new font of the Component. */ public void setFont(Font f) { Font oldFont; @@ -4416,7 +4071,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the font impl. * - * @param f the new font impl + * @param f + * the new font impl. */ void setFontImpl(Font f) { font = f; @@ -4426,12 +4082,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - /** * Invalidate the component if it inherits the font from the parent. This * method is overridden in Container. * - * @return true if the component was invalidated, false otherwise + * @return true if the component was invalidated, false otherwise. */ boolean propagateFont() { if (font == null) { @@ -4444,7 +4099,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the foreground color for this Component. * - * @param c the new foreground color. + * @param c + * the new foreground color. */ public void setForeground(Color c) { Color oldFgColor; @@ -4462,7 +4118,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the background color for the Component. * - * @param c the new background color for this component. + * @param c + * the new background color for this component. */ public void setBackground(Color c) { Color oldBkColor; @@ -4478,11 +4135,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Sets the flag for whether paint messages received from the operating - * system should be ignored or not. + * Sets the flag for whether paint messages received from the operating + * system should be ignored or not. * - * @param value true if paint messages received from the operating - * system should be ignored, false otherwise. + * @param value + * true if paint messages received from the operating system + * should be ignored, false otherwise. */ public void setIgnoreRepaint(boolean value) { toolkit.lockAWT(); @@ -4496,7 +4154,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the locale of the component. * - * @param locale the new Locale. + * @param locale + * the new Locale. */ public void setLocale(Locale locale) { Locale oldLocale; @@ -4513,7 +4172,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the location of the Component to the specified point. * - * @param p the new location of the Component + * @param p + * the new location of the Component. */ public void setLocation(Point p) { toolkit.lockAWT(); @@ -4525,10 +4185,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Sets the location of the Component to the specified x, y coordinates. + * Sets the location of the Component to the specified x, y coordinates. * - * @param x the x coordinate. - * @param y the y coordinate. + * @param x + * the x coordinate. + * @param y + * the y coordinate. */ public void setLocation(int x, int y) { toolkit.lockAWT(); @@ -4542,8 +4204,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the visibility state of the component. * - * @param b true if the component is visible, false if the component - * is not shown. + * @param b + * true if the component is visible, false if the component is + * not shown. */ public void setVisible(boolean b) { // show() & hide() are not deprecated for Window, @@ -4569,9 +4232,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali visible = true; behaviour.setVisible(true); postEvent(new ComponentEvent(this, ComponentEvent.COMPONENT_SHOWN)); - //???AWT: finishHierarchyChange(this, parent, 0); + // ???AWT: finishHierarchyChange(this, parent, 0); notifyInputMethod(new Rectangle(x, y, w, h)); - //???AWT: invalidateRealParent(); + // ???AWT: invalidateRealParent(); } finally { toolkit.unlockAWT(); } @@ -4580,8 +4243,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Deprecated: replaced by setVisible(boolean) method. * - * @param b the visibility's state. - * + * @param b + * the visibility's state. * @deprecated Replaced by setVisible(boolean) method. */ @Deprecated @@ -4593,97 +4256,40 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT + // ???AWT /* - void transferFocus(int dir) { - Container root = null; - if (this instanceof Container) { - Container cont = (Container) this; - if (cont.isFocusCycleRoot()) { - root = cont.getFocusTraversalRoot(); - } - } - if (root == null) { - root = getFocusCycleRootAncestor(); - } - // transfer focus up cycle if root is unreachable - Component comp = this; - while ((root != null) - && !(root.isFocusCycleRoot() && root.isShowing() && root.isEnabled() && root - .isFocusable())) { - comp = root; - root = root.getFocusCycleRootAncestor(); - } - if (root == null) { - return; - } - FocusTraversalPolicy policy = root.getFocusTraversalPolicy(); - Component nextComp = null; - switch (dir) { - case KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS: - nextComp = policy.getComponentAfter(root, comp); - break; - case KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS: - nextComp = policy.getComponentBefore(root, comp); - break; - } - if (nextComp != null) { - nextComp.requestFocus(false); - } - } - - public void transferFocus() { - toolkit.lockAWT(); - try { - nextFocus(); - } finally { - toolkit.unlockAWT(); - } - } - - public void transferFocusBackward() { - toolkit.lockAWT(); - try { - transferFocus(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS); - } finally { - toolkit.unlockAWT(); - } - } - - public void transferFocusUpCycle() { - toolkit.lockAWT(); - try { - KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); - Container root = kfm.getCurrentFocusCycleRoot(); - - if(root == null) { - return; - } - - boolean success = false; - Component nextComp = null; - Container newRoot = root; - do { - nextComp = newRoot instanceof Window ? newRoot.getFocusTraversalPolicy() - .getDefaultComponent(newRoot) : newRoot; - newRoot = newRoot.getFocusCycleRootAncestor(); - if (nextComp == null) { - break; - } - success = nextComp.requestFocusInWindow(); - if (newRoot == null) { - break; - } - kfm.setGlobalCurrentFocusCycleRoot(newRoot); - } while (!success); - if (!success && root != newRoot) { - kfm.setGlobalCurrentFocusCycleRoot(root); - } - } finally { - toolkit.unlockAWT(); - } - } - */ + * void transferFocus(int dir) { Container root = null; if (this instanceof + * Container) { Container cont = (Container) this; if + * (cont.isFocusCycleRoot()) { root = cont.getFocusTraversalRoot(); } } if + * (root == null) { root = getFocusCycleRootAncestor(); } // transfer focus + * up cycle if root is unreachable Component comp = this; while ((root != + * null) && !(root.isFocusCycleRoot() && root.isShowing() && + * root.isEnabled() && root .isFocusable())) { comp = root; root = + * root.getFocusCycleRootAncestor(); } if (root == null) { return; } + * FocusTraversalPolicy policy = root.getFocusTraversalPolicy(); Component + * nextComp = null; switch (dir) { case + * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS: nextComp = + * policy.getComponentAfter(root, comp); break; case + * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS: nextComp = + * policy.getComponentBefore(root, comp); break; } if (nextComp != null) { + * nextComp.requestFocus(false); } } public void transferFocus() { + * toolkit.lockAWT(); try { nextFocus(); } finally { toolkit.unlockAWT(); } + * } public void transferFocusBackward() { toolkit.lockAWT(); try { + * transferFocus(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS); } finally { + * toolkit.unlockAWT(); } } public void transferFocusUpCycle() { + * toolkit.lockAWT(); try { KeyboardFocusManager kfm = + * KeyboardFocusManager.getCurrentKeyboardFocusManager(); Container root = + * kfm.getCurrentFocusCycleRoot(); if(root == null) { return; } boolean + * success = false; Component nextComp = null; Container newRoot = root; do + * { nextComp = newRoot instanceof Window ? + * newRoot.getFocusTraversalPolicy() .getDefaultComponent(newRoot) : + * newRoot; newRoot = newRoot.getFocusCycleRootAncestor(); if (nextComp == + * null) { break; } success = nextComp.requestFocusInWindow(); if (newRoot + * == null) { break; } kfm.setGlobalCurrentFocusCycleRoot(newRoot); } while + * (!success); if (!success && root != newRoot) { + * kfm.setGlobalCurrentFocusCycleRoot(root); } } finally { + * toolkit.unlockAWT(); } } + */ /** * Validates that this component has a valid layout. @@ -4710,7 +4316,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the native window. * - * @return the native window + * @return the native window. */ NativeWindow getNativeWindow() { return behaviour.getNativeWindow(); @@ -4719,8 +4325,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks whether or not a maximum size is set for the Component. * - * @return true, if the maximum size is set for the Component, - * false otherwise. + * @return true, if the maximum size is set for the Component, false + * otherwise. */ public boolean isMaximumSizeSet() { toolkit.lockAWT(); @@ -4734,8 +4340,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks whether or not the minimum size is set for the component. * - * @return true, if the minimum size is set for the component, - * false otherwise. + * @return true, if the minimum size is set for the component, false + * otherwise. */ public boolean isMinimumSizeSet() { toolkit.lockAWT(); @@ -4749,8 +4355,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks whether or not the preferred size is set for the Component. * - * @return true, if the preferred size is set for the Component, - * false otherwise. + * @return true, if the preferred size is set for the Component, false + * otherwise. */ public boolean isPreferredSizeSet() { toolkit.lockAWT(); @@ -4769,8 +4375,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali public Dimension getMaximumSize() { toolkit.lockAWT(); try { - return isMaximumSizeSet() ? new Dimension(maximumSize) : new Dimension( - Short.MAX_VALUE, Short.MAX_VALUE); + return isMaximumSizeSet() ? new Dimension(maximumSize) : new Dimension(Short.MAX_VALUE, + Short.MAX_VALUE); } finally { toolkit.unlockAWT(); } @@ -4794,7 +4400,6 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Deprecated: replaced by getMinimumSize() method. * * @return the Dimension. - * * @deprecated Replaced by getMinimumSize() method. */ @Deprecated @@ -4808,7 +4413,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali if (defSize != null) { return (Dimension)defSize.clone(); } - return isDisplayable()? new Dimension(1, 1) : new Dimension(w, h); + return isDisplayable() ? new Dimension(1, 1) : new Dimension(w, h); } finally { toolkit.unlockAWT(); } @@ -4832,7 +4437,6 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Deprecated: replaced by getPreferredSize() method. * * @return the Dimension. - * * @deprecated Replaced by getPreferredSize() method. */ @Deprecated @@ -4855,7 +4459,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the maximum size of the Component. * - * @param maximumSize the new maximum size of the Component. + * @param maximumSize + * the new maximum size of the Component. */ public void setMaximumSize(Dimension maximumSize) { Dimension oldMaximumSize; @@ -4882,7 +4487,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali firePropertyChange("maximumSize", oldMaximumSize, this.maximumSize); //$NON-NLS-1$ toolkit.lockAWT(); try { - //???AWT: invalidateRealParent(); + // ???AWT: invalidateRealParent(); } finally { toolkit.unlockAWT(); } @@ -4891,7 +4496,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the minimum size of the Component. * - * @param minimumSize the new minimum size of the Component. + * @param minimumSize + * the new minimum size of the Component. */ public void setMinimumSize(Dimension minimumSize) { Dimension oldMinimumSize; @@ -4918,7 +4524,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali firePropertyChange("minimumSize", oldMinimumSize, this.minimumSize); //$NON-NLS-1$ toolkit.lockAWT(); try { - //???AWT: invalidateRealParent(); + // ???AWT: invalidateRealParent(); } finally { toolkit.unlockAWT(); } @@ -4927,7 +4533,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Sets the preferred size of the Component. * - * @param preferredSize the new preferred size of the Component. + * @param preferredSize + * the new preferred size of the Component. */ public void setPreferredSize(Dimension preferredSize) { Dimension oldPreferredSize; @@ -4954,47 +4561,38 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali firePropertyChange("preferredSize", oldPreferredSize, this.preferredSize); //$NON-NLS-1$ toolkit.lockAWT(); try { - //???AWT: invalidateRealParent(); + // ???AWT: invalidateRealParent(); } finally { toolkit.unlockAWT(); } } - //???AWT + // ???AWT /* - RedrawManager getRedrawManager() { - if (parent == null) { - return null; - } - return parent.getRedrawManager(); - } - */ + * RedrawManager getRedrawManager() { if (parent == null) { return null; } + * return parent.getRedrawManager(); } + */ /** * Checks if is focusability explicitly set. * - * @return true if component has a focusable peer + * @return true if component has a focusable peer. */ - //???AWT + // ???AWT /* - boolean isPeerFocusable() { - // The recommendations for Windows and Unix are that - // Canvases, Labels, Panels, Scrollbars, ScrollPanes, Windows, - // and lightweight Components have non-focusable peers, - // and all other Components have focusable peers. - if (this instanceof Canvas || this instanceof Label || this instanceof Panel - || this instanceof Scrollbar || this instanceof ScrollPane - || this instanceof Window || isLightweight()) { - return false; - } - return true; - } - */ + * boolean isPeerFocusable() { // The recommendations for Windows and Unix + * are that // Canvases, Labels, Panels, Scrollbars, ScrollPanes, Windows, + * // and lightweight Components have non-focusable peers, // and all other + * Components have focusable peers. if (this instanceof Canvas || this + * instanceof Label || this instanceof Panel || this instanceof Scrollbar || + * this instanceof ScrollPane || this instanceof Window || isLightweight()) + * { return false; } return true; } + */ /** * @return true if focusability was explicitly set via a call to * setFocusable() or via overriding isFocusable() or - * isFocusTraversable() + * isFocusTraversable(). */ boolean isFocusabilityExplicitlySet() { return calledSetFocusable || overridenIsFocusable; @@ -5003,7 +4601,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Paints the component and all of its subcomponents. * - * @param g the Graphics to be used for painting. + * @param g + * the Graphics to be used for painting. */ public void paintAll(Graphics g) { toolkit.lockAWT(); @@ -5017,7 +4616,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Updates this Component. * - * @param g the Graphics to be used for updating. + * @param g + * the Graphics to be used for updating. */ public void update(Graphics g) { toolkit.lockAWT(); @@ -5036,7 +4636,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Paints this component. * - * @param g the Graphics to be used for painting. + * @param g + * the Graphics to be used for painting. */ public void paint(Graphics g) { toolkit.lockAWT(); @@ -5050,7 +4651,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Prepares the component to be painted. * - * @param g the Graphics to be used for painting. + * @param g + * the Graphics to be used for painting. */ void prepaint(Graphics g) { // Just to nothing. For overriding. @@ -5059,7 +4661,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if is prepainter. * - * @return true, if is prepainter + * @return true, if is prepainter. */ boolean isPrepainter() { return false; @@ -5083,41 +4685,29 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali // To be inherited by Container } - //???AWT + // ???AWT /* - void finishHierarchyChange(Component changed, Container changedParent, int ancestorFlags) { - if (--hierarchyChangingCounter == 0) { - int changeFlags = ancestorFlags; - if (wasShowing != isShowing()) { - changeFlags |= HierarchyEvent.SHOWING_CHANGED; - } - if (wasDisplayable != isDisplayable()) { - changeFlags |= HierarchyEvent.DISPLAYABILITY_CHANGED; - } - if (changeFlags > 0) { - postEvent(new HierarchyEvent(this, HierarchyEvent.HIERARCHY_CHANGED, changed, - changedParent, changeFlags)); - } - finishChildrenHierarchyChange(changed, changedParent, ancestorFlags); - } - } - - - void finishChildrenHierarchyChange(Component changed, Container changedParent, - int ancestorFlags) { - // To be inherited by Container - } + * void finishHierarchyChange(Component changed, Container changedParent, + * int ancestorFlags) { if (--hierarchyChangingCounter == 0) { int + * changeFlags = ancestorFlags; if (wasShowing != isShowing()) { changeFlags + * |= HierarchyEvent.SHOWING_CHANGED; } if (wasDisplayable != + * isDisplayable()) { changeFlags |= HierarchyEvent.DISPLAYABILITY_CHANGED; + * } if (changeFlags > 0) { postEvent(new HierarchyEvent(this, + * HierarchyEvent.HIERARCHY_CHANGED, changed, changedParent, changeFlags)); + * } finishChildrenHierarchyChange(changed, changedParent, ancestorFlags); } + * } void finishChildrenHierarchyChange(Component changed, Container + * changedParent, int ancestorFlags) { // To be inherited by Container } + * void postHierarchyBoundsEvents(Component changed, int id) { postEvent(new + * HierarchyEvent(this, id, changed, null, 0)); } + */ - void postHierarchyBoundsEvents(Component changed, int id) { - postEvent(new HierarchyEvent(this, id, changed, null, 0)); - } - */ - /** * Spread hierarchy bounds events. * - * @param changed the changed - * @param id the id + * @param changed + * the changed. + * @param id + * the id. */ void spreadHierarchyBoundsEvents(Component changed, int id) { // To be inherited by Container @@ -5126,59 +4716,40 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Dispatches an event to this component. * - * @param e the Event. + * @param e + * the Event. */ public final void dispatchEvent(AWTEvent e) { - //???AWT + // ???AWT /* - if (e.isConsumed()) { - return; - } - if (e instanceof PaintEvent) { - toolkit.dispatchAWTEvent(e); - processPaintEvent((PaintEvent) e); - return; - } - KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); - if (!e.dispatchedByKFM && kfm.dispatchEvent(e)) { - return; - } - if (e instanceof KeyEvent) { - KeyEvent ke = (KeyEvent) e; - // consumes KeyEvent which represents a focus traversal key - if (getFocusTraversalKeysEnabled()) { - kfm.processKeyEvent(this, ke); - if (ke.isConsumed()) { - return; - } - } - } - if (inputMethodsEnabled && dispatchToIM && e.isPosted && dispatchEventToIM(e)) { - return; - } - if (e.getID() == WindowEvent.WINDOW_ICONIFIED) { - notifyInputMethod(null); - } - AWTEvent.EventDescriptor descriptor = toolkit.eventTypeLookup.getEventDescriptor(e); - toolkit.dispatchAWTEvent(e); - if (descriptor != null) { - if (isEventEnabled(descriptor.eventMask) - || (getListeners(descriptor.listenerType).length > 0)) { - processEvent(e); - } - // input events can be consumed by user listeners: - if (!e.isConsumed() && ((enabledAWTEvents & descriptor.eventMask) != 0)) { - postprocessEvent(e, descriptor.eventMask); - } - } - postDeprecatedEvent(e); - */ + * if (e.isConsumed()) { return; } if (e instanceof PaintEvent) { + * toolkit.dispatchAWTEvent(e); processPaintEvent((PaintEvent) e); + * return; } KeyboardFocusManager kfm = + * KeyboardFocusManager.getCurrentKeyboardFocusManager(); if + * (!e.dispatchedByKFM && kfm.dispatchEvent(e)) { return; } if (e + * instanceof KeyEvent) { KeyEvent ke = (KeyEvent) e; // consumes + * KeyEvent which represents a focus traversal key if + * (getFocusTraversalKeysEnabled()) { kfm.processKeyEvent(this, ke); if + * (ke.isConsumed()) { return; } } } if (inputMethodsEnabled && + * dispatchToIM && e.isPosted && dispatchEventToIM(e)) { return; } if + * (e.getID() == WindowEvent.WINDOW_ICONIFIED) { + * notifyInputMethod(null); } AWTEvent.EventDescriptor descriptor = + * toolkit.eventTypeLookup.getEventDescriptor(e); + * toolkit.dispatchAWTEvent(e); if (descriptor != null) { if + * (isEventEnabled(descriptor.eventMask) || + * (getListeners(descriptor.listenerType).length > 0)) { + * processEvent(e); } // input events can be consumed by user listeners: + * if (!e.isConsumed() && ((enabledAWTEvents & descriptor.eventMask) != + * 0)) { postprocessEvent(e, descriptor.eventMask); } } + * postDeprecatedEvent(e); + */ } /** * Post deprecated event. * - * @param e the e + * @param e + * the e. */ private void postDeprecatedEvent(AWTEvent e) { if (deprecatedEventHandler) { @@ -5192,27 +4763,29 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Postprocess event. * - * @param e the e - * @param eventMask the event mask + * @param e + * the e. + * @param eventMask + * the event mask. */ void postprocessEvent(AWTEvent e, long eventMask) { toolkit.lockAWT(); try { // call system listeners under AWT lock if (eventMask == AWTEvent.FOCUS_EVENT_MASK) { - preprocessFocusEvent((FocusEvent) e); + preprocessFocusEvent((FocusEvent)e); } else if (eventMask == AWTEvent.KEY_EVENT_MASK) { - preprocessKeyEvent((KeyEvent) e); + preprocessKeyEvent((KeyEvent)e); } else if (eventMask == AWTEvent.MOUSE_EVENT_MASK) { - preprocessMouseEvent((MouseEvent) e); + preprocessMouseEvent((MouseEvent)e); } else if (eventMask == AWTEvent.MOUSE_MOTION_EVENT_MASK) { - preprocessMouseMotionEvent((MouseEvent) e); + preprocessMouseMotionEvent((MouseEvent)e); } else if (eventMask == AWTEvent.COMPONENT_EVENT_MASK) { - preprocessComponentEvent((ComponentEvent) e); + preprocessComponentEvent((ComponentEvent)e); } else if (eventMask == AWTEvent.MOUSE_WHEEL_EVENT_MASK) { - preprocessMouseWheelEvent((MouseWheelEvent) e); + preprocessMouseWheelEvent((MouseWheelEvent)e); } else if (eventMask == AWTEvent.INPUT_METHOD_EVENT_MASK) { - preprocessInputMethodEvent((InputMethodEvent) e); + preprocessInputMethodEvent((InputMethodEvent)e); } } finally { toolkit.unlockAWT(); @@ -5222,7 +4795,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Preprocess input method event. * - * @param e the e + * @param e + * the e. */ private void preprocessInputMethodEvent(InputMethodEvent e) { processInputMethodEventImpl(e, inputMethodListeners.getSystemListeners()); @@ -5231,7 +4805,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Preprocess mouse wheel event. * - * @param e the e + * @param e + * the e. */ private void preprocessMouseWheelEvent(MouseWheelEvent e) { processMouseWheelEventImpl(e, mouseWheelListeners.getSystemListeners()); @@ -5240,8 +4815,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Process mouse wheel event impl. * - * @param e the e - * @param c the c + * @param e + * the e. + * @param c + * the c. */ private void processMouseWheelEventImpl(MouseWheelEvent e, Collection c) { for (MouseWheelListener listener : c) { @@ -5256,7 +4833,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Preprocess component event. * - * @param e the e + * @param e + * the e. */ private void preprocessComponentEvent(ComponentEvent e) { processComponentEventImpl(e, componentListeners.getSystemListeners()); @@ -5265,7 +4843,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Preprocess mouse motion event. * - * @param e the e + * @param e + * the e. */ void preprocessMouseMotionEvent(MouseEvent e) { processMouseMotionEventImpl(e, mouseMotionListeners.getSystemListeners()); @@ -5274,7 +4853,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Preprocess mouse event. * - * @param e the e + * @param e + * the e */ void preprocessMouseEvent(MouseEvent e) { processMouseEventImpl(e, mouseListeners.getSystemListeners()); @@ -5283,7 +4863,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Preprocess key event. * - * @param e the e + * @param e + * the e. */ void preprocessKeyEvent(KeyEvent e) { processKeyEventImpl(e, keyListeners.getSystemListeners()); @@ -5292,79 +4873,82 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Preprocess focus event. * - * @param e the e + * @param e + * the e. */ void preprocessFocusEvent(FocusEvent e) { processFocusEventImpl(e, focusListeners.getSystemListeners()); } /** - * Processes AWTEvent occurred on this component. + * Processes AWTEvent occurred on this component. * - * @param e the AWTEvent. + * @param e + * the AWTEvent. */ protected void processEvent(AWTEvent e) { long eventMask = toolkit.eventTypeLookup.getEventMask(e); if (eventMask == AWTEvent.COMPONENT_EVENT_MASK) { - processComponentEvent((ComponentEvent) e); + processComponentEvent((ComponentEvent)e); } else if (eventMask == AWTEvent.FOCUS_EVENT_MASK) { - processFocusEvent((FocusEvent) e); + processFocusEvent((FocusEvent)e); } else if (eventMask == AWTEvent.KEY_EVENT_MASK) { - processKeyEvent((KeyEvent) e); + processKeyEvent((KeyEvent)e); } else if (eventMask == AWTEvent.MOUSE_EVENT_MASK) { - processMouseEvent((MouseEvent) e); + processMouseEvent((MouseEvent)e); } else if (eventMask == AWTEvent.MOUSE_WHEEL_EVENT_MASK) { - processMouseWheelEvent((MouseWheelEvent) e); + processMouseWheelEvent((MouseWheelEvent)e); } else if (eventMask == AWTEvent.MOUSE_MOTION_EVENT_MASK) { - processMouseMotionEvent((MouseEvent) e); + processMouseMotionEvent((MouseEvent)e); } else if (eventMask == AWTEvent.HIERARCHY_EVENT_MASK) { - processHierarchyEvent((HierarchyEvent) e); + processHierarchyEvent((HierarchyEvent)e); } else if (eventMask == AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK) { - processHierarchyBoundsEvent((HierarchyEvent) e); + processHierarchyBoundsEvent((HierarchyEvent)e); } else if (eventMask == AWTEvent.INPUT_METHOD_EVENT_MASK) { - processInputMethodEvent((InputMethodEvent) e); + processInputMethodEvent((InputMethodEvent)e); } } /** - * Gets an array of all listener's objects based on the specified - * listener type and registered to this Component. - * - * @param listenerType the listener type. + * Gets an array of all listener's objects based on the specified listener + * type and registered to this Component. * + * @param listenerType + * the listener type. * @return an array of all listener's objects based on the specified - * listener type and registered to this Component. + * listener type and registered to this Component. */ @SuppressWarnings("unchecked") public T[] getListeners(Class listenerType) { if (ComponentListener.class.isAssignableFrom(listenerType)) { - return (T[]) getComponentListeners(); + return (T[])getComponentListeners(); } else if (FocusListener.class.isAssignableFrom(listenerType)) { - return (T[]) getFocusListeners(); + return (T[])getFocusListeners(); } else if (HierarchyBoundsListener.class.isAssignableFrom(listenerType)) { - return (T[]) getHierarchyBoundsListeners(); + return (T[])getHierarchyBoundsListeners(); } else if (HierarchyListener.class.isAssignableFrom(listenerType)) { - return (T[]) getHierarchyListeners(); + return (T[])getHierarchyListeners(); } else if (InputMethodListener.class.isAssignableFrom(listenerType)) { - return (T[]) getInputMethodListeners(); + return (T[])getInputMethodListeners(); } else if (KeyListener.class.isAssignableFrom(listenerType)) { - return (T[]) getKeyListeners(); + return (T[])getKeyListeners(); } else if (MouseWheelListener.class.isAssignableFrom(listenerType)) { - return (T[]) getMouseWheelListeners(); + return (T[])getMouseWheelListeners(); } else if (MouseMotionListener.class.isAssignableFrom(listenerType)) { - return (T[]) getMouseMotionListeners(); + return (T[])getMouseMotionListeners(); } else if (MouseListener.class.isAssignableFrom(listenerType)) { - return (T[]) getMouseListeners(); + return (T[])getMouseListeners(); } else if (PropertyChangeListener.class.isAssignableFrom(listenerType)) { - return (T[]) getPropertyChangeListeners(); + return (T[])getPropertyChangeListeners(); } - return (T[]) Array.newInstance(listenerType, 0); + return (T[])Array.newInstance(listenerType, 0); } /** * Process paint event. * - * @param event the event + * @param event + * the event. */ private void processPaintEvent(PaintEvent event) { if (redrawManager == null) { @@ -5392,13 +4976,15 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Inits the graphics. * - * @param g the g - * @param e the e + * @param g + * the g. + * @param e + * the e. */ void initGraphics(Graphics g, PaintEvent e) { Rectangle clip = e.getUpdateRect(); if (clip instanceof ClipRegion) { - g.setClip(((ClipRegion) clip).getClip()); + g.setClip(((ClipRegion)clip).getClip()); } else { g.setClip(clip); } @@ -5413,11 +4999,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Enables the events with the specified event mask to be delivered to - * this component. + * Enables the events with the specified event mask to be delivered to this + * component. * - * @param eventsToEnable the events mask which specifies the types - * of events to enable. + * @param eventsToEnable + * the events mask which specifies the types of events to enable. */ protected final void enableEvents(long eventsToEnable) { toolkit.lockAWT(); @@ -5432,17 +5018,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Enable awt events. * - * @param eventsToEnable the events to enable + * @param eventsToEnable + * the events to enable. */ private void enableAWTEvents(long eventsToEnable) { enabledAWTEvents |= eventsToEnable; } /** - * Disables the events with types specified by the specified event mask - * from being delivered to this component. + * Disables the events with types specified by the specified event mask from + * being delivered to this component. * - * @param eventsToDisable the event mask specifying the event types. + * @param eventsToDisable + * the event mask specifying the event types. */ protected final void disableEvents(long eventsToDisable) { toolkit.lockAWT(); @@ -5459,9 +5047,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if is mouse event enabled. * - * @param eventMask the event mask - * - * @return true, if is mouse event enabled + * @param eventMask + * the event mask. + * @return true, if is mouse event enabled. */ boolean isMouseEventEnabled(long eventMask) { return (isEventEnabled(eventMask) || (enabledAWTEvents & eventMask) != 0); @@ -5470,18 +5058,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Checks if is event enabled. * - * @param eventMask the event mask - * - * @return true, if is event enabled + * @param eventMask + * the event mask. + * @return true, if is event enabled. */ boolean isEventEnabled(long eventMask) { return ((enabledEvents & eventMask) != 0); } /** - * Enables or disables input method support for this component. + * Enables or disables input method support for this component. * - * @param enable true to enable input method support, false to disable it. + * @param enable + * true to enable input method support, false to disable it. */ public void enableInputMethods(boolean enable) { toolkit.lockAWT(); @@ -5496,11 +5085,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets an array of all component's listeners registered for this - * component. + * Gets an array of all component's listeners registered for this component. * * @return an array of all component's listeners registered for this - * component. + * component. */ public ComponentListener[] getComponentListeners() { return componentListeners.getUserListeners(new ComponentListener[0]); @@ -5510,7 +5098,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Adds the specified component listener to the Component for receiving * component's event. * - * @param l the ComponentListener. + * @param l + * the ComponentListener. */ public void addComponentListener(ComponentListener l) { componentListeners.addUserListener(l); @@ -5519,17 +5108,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the component listener registered for this Component. * - * @param l the ComponentListener. + * @param l + * the ComponentListener. */ public void removeComponentListener(ComponentListener l) { componentListeners.removeUserListener(l); } /** - * Processes a component event that has occurred on this component - * by dispatching them to any registered ComponentListener objects. + * Processes a component event that has occurred on this component by + * dispatching them to any registered ComponentListener objects. * - * @param e the ComponentEvent. + * @param e + * the ComponentEvent. */ protected void processComponentEvent(ComponentEvent e) { processComponentEventImpl(e, componentListeners.getUserListeners()); @@ -5538,8 +5129,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Process component event impl. * - * @param e the e - * @param c the c + * @param e + * the e. + * @param c + * the c. */ private void processComponentEventImpl(ComponentEvent e, Collection c) { for (ComponentListener listener : c) { @@ -5570,10 +5163,11 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Adds the specified focus listener to the Component for receiving - * focus events. + * Adds the specified focus listener to the Component for receiving focus + * events. * - * @param l the FocusListener. + * @param l + * the FocusListener. */ public void addFocusListener(FocusListener l) { focusListeners.addUserListener(l); @@ -5582,7 +5176,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the awt focus listener. * - * @param l the l + * @param l + * the l. */ void addAWTFocusListener(FocusListener l) { enableAWTEvents(AWTEvent.FOCUS_EVENT_MASK); @@ -5592,17 +5187,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the focus listener registered for this Component. * - * @param l the FocusListener. + * @param l + * the FocusListener. */ public void removeFocusListener(FocusListener l) { focusListeners.removeUserListener(l); } /** - * Processes a FocusEvent that has occurred on this component - * by dispatching it to the registered listeners. - * - * @param e the FocusEvent. + * Processes a FocusEvent that has occurred on this component by dispatching + * it to the registered listeners. + * + * @param e + * the FocusEvent. */ protected void processFocusEvent(FocusEvent e) { processFocusEventImpl(e, focusListeners.getUserListeners()); @@ -5611,8 +5208,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Process focus event impl. * - * @param e the e - * @param c the c + * @param e + * the e. + * @param c + * the c. */ private void processFocusEventImpl(FocusEvent e, Collection c) { for (FocusListener listener : c) { @@ -5628,11 +5227,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets an array of registered HierarchyListeners for - * this Component. + * Gets an array of registered HierarchyListeners for this Component. * - * @return an array of registered HierarchyListeners for - * this Component. + * @return an array of registered HierarchyListeners for this Component. */ public HierarchyListener[] getHierarchyListeners() { return hierarchyListeners.getUserListeners(new HierarchyListener[0]); @@ -5641,7 +5238,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the specified hierarchy listener. * - * @param l the HierarchyListener. + * @param l + * the HierarchyListener. */ public void addHierarchyListener(HierarchyListener l) { hierarchyListeners.addUserListener(l); @@ -5650,17 +5248,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the hierarchy listener registered for this component. * - * @param l the HierarchyListener. + * @param l + * the HierarchyListener. */ public void removeHierarchyListener(HierarchyListener l) { hierarchyListeners.removeUserListener(l); } /** - * Processes a hierarchy event that has occurred on this component - * by dispatching it to the registered listeners. + * Processes a hierarchy event that has occurred on this component by + * dispatching it to the registered listeners. * - * @param e the HierarchyEvent. + * @param e + * the HierarchyEvent. */ protected void processHierarchyEvent(HierarchyEvent e) { for (HierarchyListener listener : hierarchyListeners.getUserListeners()) { @@ -5673,8 +5273,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets an array of HierarchyBoundsListener objects registered - * to this Component. + * Gets an array of HierarchyBoundsListener objects registered to this + * Component. * * @return an array of HierarchyBoundsListener objects. */ @@ -5685,7 +5285,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the specified hierarchy bounds listener. * - * @param l the HierarchyBoundsListener. + * @param l + * the HierarchyBoundsListener. */ public void addHierarchyBoundsListener(HierarchyBoundsListener l) { hierarchyBoundsListeners.addUserListener(l); @@ -5694,17 +5295,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the hierarchy bounds listener registered for this Component. * - * @param l the HierarchyBoundsListener. + * @param l + * the HierarchyBoundsListener. */ public void removeHierarchyBoundsListener(HierarchyBoundsListener l) { hierarchyBoundsListeners.removeUserListener(l); } /** - * Processes a hierarchy bounds event that has occurred on this component - * by dispatching it to the registered listeners. - * - * @param e the HierarchyBoundsEvent. + * Processes a hierarchy bounds event that has occurred on this component by + * dispatching it to the registered listeners. + * + * @param e + * the HierarchyBoundsEvent. */ protected void processHierarchyBoundsEvent(HierarchyEvent e) { for (HierarchyBoundsListener listener : hierarchyBoundsListeners.getUserListeners()) { @@ -5731,7 +5334,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the specified key listener. * - * @param l the KeyListener. + * @param l + * the KeyListener. */ public void addKeyListener(KeyListener l) { keyListeners.addUserListener(l); @@ -5740,7 +5344,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the awt key listener. * - * @param l the l + * @param l + * the l. */ void addAWTKeyListener(KeyListener l) { enableAWTEvents(AWTEvent.KEY_EVENT_MASK); @@ -5750,17 +5355,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the key listener registered for this Component. * - * @param l the KeyListener. + * @param l + * the KeyListener. */ public void removeKeyListener(KeyListener l) { keyListeners.removeUserListener(l); } /** - * Processes a key event that has occurred on this component - * by dispatching it to the registered listeners. + * Processes a key event that has occurred on this component by dispatching + * it to the registered listeners. * - * @param e the KeyEvent. + * @param e + * the KeyEvent. */ protected void processKeyEvent(KeyEvent e) { processKeyEventImpl(e, keyListeners.getUserListeners()); @@ -5769,8 +5376,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Process key event impl. * - * @param e the e - * @param c the c + * @param e + * the e. + * @param c + * the c. */ private void processKeyEventImpl(KeyEvent e, Collection c) { for (KeyListener listener : c) { @@ -5800,7 +5409,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the specified mouse listener. * - * @param l the MouseListener. + * @param l + * the MouseListener. */ public void addMouseListener(MouseListener l) { mouseListeners.addUserListener(l); @@ -5809,7 +5419,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the awt mouse listener. * - * @param l the l + * @param l + * the l. */ void addAWTMouseListener(MouseListener l) { enableAWTEvents(AWTEvent.MOUSE_EVENT_MASK); @@ -5819,7 +5430,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the awt mouse motion listener. * - * @param l the l + * @param l + * the l. */ void addAWTMouseMotionListener(MouseMotionListener l) { enableAWTEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK); @@ -5829,7 +5441,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the awt component listener. * - * @param l the l + * @param l + * the l. */ void addAWTComponentListener(ComponentListener l) { enableAWTEvents(AWTEvent.COMPONENT_EVENT_MASK); @@ -5839,7 +5452,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the awt input method listener. * - * @param l the l + * @param l + * the l. */ void addAWTInputMethodListener(InputMethodListener l) { enableAWTEvents(AWTEvent.INPUT_METHOD_EVENT_MASK); @@ -5849,7 +5463,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the awt mouse wheel listener. * - * @param l the l + * @param l + * the l. */ void addAWTMouseWheelListener(MouseWheelListener l) { enableAWTEvents(AWTEvent.MOUSE_WHEEL_EVENT_MASK); @@ -5859,17 +5474,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the mouse listener registered for this Component. * - * @param l the MouseListener. + * @param l + * the MouseListener. */ public void removeMouseListener(MouseListener l) { mouseListeners.removeUserListener(l); } /** - * Processes a mouse event that has occurred on this component - * by dispatching it to the registered listeners. + * Processes a mouse event that has occurred on this component by + * dispatching it to the registered listeners. * - * @param e the MouseEvent. + * @param e + * the MouseEvent. */ protected void processMouseEvent(MouseEvent e) { processMouseEventImpl(e, mouseListeners.getUserListeners()); @@ -5878,8 +5495,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Process mouse event impl. * - * @param e the e - * @param c the c + * @param e + * the e. + * @param c + * the c. */ private void processMouseEventImpl(MouseEvent e, Collection c) { for (MouseListener listener : c) { @@ -5906,8 +5525,10 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Process mouse motion event impl. * - * @param e the e - * @param c the c + * @param e + * the e. + * @param c + * the c. */ private void processMouseMotionEventImpl(MouseEvent e, Collection c) { for (MouseMotionListener listener : c) { @@ -5923,11 +5544,9 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } /** - * Gets an array of the mouse motion listeners registered to - * the Component. + * Gets an array of the mouse motion listeners registered to the Component. * - * @return an array of the MouseMotionListeners registered to - * the Component. + * @return an array of the MouseMotionListeners registered to the Component. */ public MouseMotionListener[] getMouseMotionListeners() { return mouseMotionListeners.getUserListeners(new MouseMotionListener[0]); @@ -5936,7 +5555,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the specified mouse motion listener. * - * @param l the MouseMotionListener. + * @param l + * the MouseMotionListener. */ public void addMouseMotionListener(MouseMotionListener l) { mouseMotionListeners.addUserListener(l); @@ -5945,28 +5565,28 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the mouse motion listener registered for this component. * - * @param l the MouseMotionListener. + * @param l + * the MouseMotionListener. */ public void removeMouseMotionListener(MouseMotionListener l) { mouseMotionListeners.removeUserListener(l); } /** - * Processes a mouse motion event that has occurred on this component - * by dispatching it to the registered listeners. + * Processes a mouse motion event that has occurred on this component by + * dispatching it to the registered listeners. * - * @param e the MouseEvent. + * @param e + * the MouseEvent. */ protected void processMouseMotionEvent(MouseEvent e) { processMouseMotionEventImpl(e, mouseMotionListeners.getUserListeners()); } /** - * Gets an array of the mouse wheel listeners registered to - * the Component. + * Gets an array of the mouse wheel listeners registered to the Component. * - * @return an array of the MouseWheelListeners registered to - * the Component. + * @return an array of the MouseWheelListeners registered to the Component. */ public MouseWheelListener[] getMouseWheelListeners() { return mouseWheelListeners.getUserListeners(new MouseWheelListener[0]); @@ -5975,7 +5595,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the specified mouse wheel listener. * - * @param l the MouseWheelListener. + * @param l + * the MouseWheelListener. */ public void addMouseWheelListener(MouseWheelListener l) { mouseWheelListeners.addUserListener(l); @@ -5984,28 +5605,30 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the mouse wheel listener registered for this component. * - * @param l the MouseWheelListener. + * @param l + * the MouseWheelListener. */ public void removeMouseWheelListener(MouseWheelListener l) { mouseWheelListeners.removeUserListener(l); } /** - * Processes a mouse wheel event that has occurred on this component - * by dispatching it to the registered listeners. + * Processes a mouse wheel event that has occurred on this component by + * dispatching it to the registered listeners. * - * @param e the MouseWheelEvent. + * @param e + * the MouseWheelEvent. */ protected void processMouseWheelEvent(MouseWheelEvent e) { processMouseWheelEventImpl(e, mouseWheelListeners.getUserListeners()); } /** - * Gets an array of the InputMethodListener listeners - * registered to the Component. + * Gets an array of the InputMethodListener listeners registered to the + * Component. * - * @return an array of the InputMethodListener listeners - * registered to the Component. + * @return an array of the InputMethodListener listeners registered to the + * Component. */ public InputMethodListener[] getInputMethodListeners() { return inputMethodListeners.getUserListeners(new InputMethodListener[0]); @@ -6014,7 +5637,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Adds the specified input method listener. * - * @param l the InputMethodListener. + * @param l + * the InputMethodListener. */ public void addInputMethodListener(InputMethodListener l) { inputMethodListeners.addUserListener(l); @@ -6023,17 +5647,19 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Removes the input method listener registered for this component. * - * @param l the InputMethodListener. + * @param l + * the InputMethodListener. */ public void removeInputMethodListener(InputMethodListener l) { inputMethodListeners.removeUserListener(l); } /** - * Processes an input method event that has occurred on this component - * by dispatching it to the registered listeners. + * Processes an input method event that has occurred on this component by + * dispatching it to the registered listeners. * - * @param e the InputMethodEvent. + * @param e + * the InputMethodEvent. */ protected void processInputMethodEvent(InputMethodEvent e) { processInputMethodEventImpl(e, inputMethodListeners.getUserListeners()); @@ -6042,11 +5668,12 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Process input method event impl. * - * @param e the e - * @param c the c + * @param e + * the e. + * @param c + * the c. */ - private void processInputMethodEventImpl(InputMethodEvent e, - Collection c) { + private void processInputMethodEventImpl(InputMethodEvent e, Collection c) { for (InputMethodListener listener : c) { switch (e.getID()) { case InputMethodEvent.CARET_POSITION_CHANGED: @@ -6059,31 +5686,28 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT + // ???AWT /* - public Point getMousePosition() throws HeadlessException { - Point absPointerPos = MouseInfo.getPointerInfo().getLocation(); - Window winUnderPtr = toolkit.dispatcher.mouseDispatcher.findWindowAt(absPointerPos); - Point pointerPos = MouseDispatcher.convertPoint(null, absPointerPos, winUnderPtr); - boolean isUnderPointer = false; - if (winUnderPtr == null) { - return null; - } - isUnderPointer = winUnderPtr.isComponentAt(this, pointerPos); - if (isUnderPointer) { - return MouseDispatcher.convertPoint(null, absPointerPos, this); - } - return null; - } - */ + * public Point getMousePosition() throws HeadlessException { Point + * absPointerPos = MouseInfo.getPointerInfo().getLocation(); Window + * winUnderPtr = + * toolkit.dispatcher.mouseDispatcher.findWindowAt(absPointerPos); Point + * pointerPos = MouseDispatcher.convertPoint(null, absPointerPos, + * winUnderPtr); boolean isUnderPointer = false; if (winUnderPtr == null) { + * return null; } isUnderPointer = winUnderPtr.isComponentAt(this, + * pointerPos); if (isUnderPointer) { return + * MouseDispatcher.convertPoint(null, absPointerPos, this); } return null; } + */ /** * Set native caret at the given position
* Note: this method takes AWT lock inside because it walks through the * component hierarchy. * - * @param x the x - * @param y the y + * @param x + * the x. + * @param y + * the y. */ void setCaretPos(final int x, final int y) { Runnable r = new Runnable() { @@ -6106,35 +5730,34 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * This method should be called only at event dispatch thread. * - * @param x the x - * @param y the y + * @param x + * the x. + * @param y + * the y. */ void setCaretPosImpl(int x, int y) { Component c = this; while ((c != null) && c.behaviour.isLightweight()) { x += c.x; y += c.y; - //???AWT: c = c.getParent(); + // ???AWT: c = c.getParent(); } if (c == null) { return; } - //???AWT + // ???AWT /* - if (c instanceof Window) { - Insets insets = c.getNativeInsets(); - x -= insets.left; - y -= insets.top; - } - toolkit.getWindowFactory().setCaretPosition(x, y); - */ + * if (c instanceof Window) { Insets insets = c.getNativeInsets(); x -= + * insets.left; y -= insets.top; } + * toolkit.getWindowFactory().setCaretPosition(x, y); + */ } // to be overridden in standard components such as Button and List /** * Gets the default minimum size. * - * @return the default minimum size + * @return the default minimum size. */ Dimension getDefaultMinimumSize() { return null; @@ -6144,7 +5767,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Gets the default preferred size. * - * @return the default preferred size + * @return the default preferred size. */ Dimension getDefaultPreferredSize() { return null; @@ -6157,30 +5780,28 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali void resetDefaultSize() { } - //???AWT + // ???AWT /* - ComponentBehavior createBehavior() { - return new LWBehavior(this); - } - */ + * ComponentBehavior createBehavior() { return new LWBehavior(this); } + */ /** * Gets the default background. * - * @return the default background + * @return the default background. */ Color getDefaultBackground() { - //???AWT: return getWindowAncestor().getDefaultBackground(); + // ???AWT: return getWindowAncestor().getDefaultBackground(); return getBackground(); } /** * Gets the default foreground. * - * @return the default foreground + * @return the default foreground. */ Color getDefaultForeground() { - //???AWT return getWindowAncestor().getDefaultForeground(); + // ???AWT return getWindowAncestor().getDefaultForeground(); return getForeground(); } @@ -6188,7 +5809,8 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Called when native resource for this component is created (for * heavyweights only). * - * @param win the win + * @param win + * the win. */ void nativeWindowCreated(NativeWindow win) { // to be overridden @@ -6198,48 +5820,37 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * Determine the component's area hidden behind the windows that have higher * Z-order, including windows of other applications. * - * @param image the image - * @param destLocation the dest location - * @param destSize the dest size - * @param source the source - * - * @return the calculated region, or null if it cannot be determined - */ - //???AWT + * @param image + * the image. + * @param destLocation + * the dest location. + * @param destSize + * the dest size. + * @param source + * the source. + * @return the calculated region, or null if it cannot be determined. + */ + // ???AWT /* - MultiRectArea getObscuredRegion(Rectangle part) { - if (!visible || parent == null || !parent.visible) { - return null; - } - Rectangle r = new Rectangle(0, 0, w, h); - if (part != null) { - r = r.intersection(part); - } - if (r.isEmpty()) { - return null; - } - r.translate(x, y); - MultiRectArea ret = parent.getObscuredRegion(r); - if (ret != null) { - parent.addObscuredRegions(ret, this); - ret.translate(-x, -y); - ret.intersect(new Rectangle(0, 0, w, h)); - } - return ret; - } - */ + * MultiRectArea getObscuredRegion(Rectangle part) { if (!visible || parent + * == null || !parent.visible) { return null; } Rectangle r = new + * Rectangle(0, 0, w, h); if (part != null) { r = r.intersection(part); } if + * (r.isEmpty()) { return null; } r.translate(x, y); MultiRectArea ret = + * parent.getObscuredRegion(r); if (ret != null) { + * parent.addObscuredRegions(ret, this); ret.translate(-x, -y); + * ret.intersect(new Rectangle(0, 0, w, h)); } return ret; } + */ - //???AWT + // ???AWT /* - private void readObject(ObjectInputStream stream) throws IOException, - ClassNotFoundException { - stream.defaultReadObject(); - FieldsAccessor accessor = new FieldsAccessor(Component.class, this); - accessor.set("toolkit", Toolkit.getDefaultToolkit()); //$NON-NLS-1$ - accessor.set("behaviour", createBehavior()); //$NON-NLS-1$ - accessor.set("componentLock", new Object()); // $NON-LOCK-1$ //$NON-NLS-1$ - } - */ + * private void readObject(ObjectInputStream stream) throws IOException, + * ClassNotFoundException { stream.defaultReadObject(); FieldsAccessor + * accessor = new FieldsAccessor(Component.class, this); + * accessor.set("toolkit", Toolkit.getDefaultToolkit()); //$NON-NLS-1$ + * accessor.set("behaviour", createBehavior()); //$NON-NLS-1$ + * accessor.set("componentLock", new Object()); // $NON-LOCK-1$ + * //$NON-NLS-1$ } + */ final void onDrawImage(Image image, Point destLocation, Dimension destSize, Rectangle source) { ImageParameters imageParams; @@ -6272,33 +5883,37 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali } } - //???AWT + // ???AWT /* - private void invalidateRealParent() { - Container realParent = getRealParent(); - if ((realParent != null) && realParent.isValid()) { - realParent.invalidate(); - } - } - */ + * private void invalidateRealParent() { Container realParent = + * getRealParent(); if ((realParent != null) && realParent.isValid()) { + * realParent.invalidate(); } } + */ /** * The Class ImageParameters. */ private class ImageParameters { - - /** The drawing params. */ + + /** + * The drawing params. + */ private final LinkedList drawingParams = new LinkedList(); - /** The size. */ + /** + * The size. + */ Dimension size = new Dimension(Component.this.w, Component.this.h); /** * Adds the drawing. * - * @param destLocation the dest location - * @param destSize the dest size - * @param source the source + * @param destLocation + * the dest location. + * @param destSize + * the dest size. + * @param source + * the source. */ void addDrawing(Point destLocation, Dimension destSize, Rectangle source) { drawingParams.add(new DrawingParameters(destLocation, destSize, source)); @@ -6307,7 +5922,7 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * Drawing parameters iterator. * - * @return the iterator< drawing parameters> + * @return the iterator< drawing parameters>. */ Iterator drawingParametersIterator() { return drawingParams.iterator(); @@ -6317,22 +5932,31 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali * The Class DrawingParameters. */ class DrawingParameters { - - /** The dest location. */ + + /** + * The dest location. + */ Point destLocation; - /** The dest size. */ + /** + * The dest size. + */ Dimension destSize; - /** The source. */ + /** + * The source. + */ Rectangle source; /** * Instantiates a new drawing parameters. * - * @param destLocation the dest location - * @param destSize the dest size - * @param source the source + * @param destLocation + * the dest location. + * @param destSize + * the dest size. + * @param source + * the source. */ DrawingParameters(Point destLocation, Dimension destSize, Rectangle source) { this.destLocation = new Point(destLocation); @@ -6353,44 +5977,32 @@ public abstract class Component implements ImageObserver, MenuContainer, Seriali /** * TextComponent support. * - * @param e the e - * - * @return true, if dispatch event to im + * @param e + * the e. + * @return true, if dispatch event to im. */ - //???AWT + // ???AWT /* - private TextKit textKit = null; - - TextKit getTextKit() { - return textKit; - } - - void setTextKit(TextKit kit) { - textKit = kit; - } - */ + * private TextKit textKit = null; TextKit getTextKit() { return textKit; } + * void setTextKit(TextKit kit) { textKit = kit; } + */ /** - * TextField support + * TextField support. */ - //???AWT + // ???AWT /* - private TextFieldKit textFieldKit = null; - - TextFieldKit getTextFieldKit() { - return textFieldKit; - } - - void setTextFieldKit(TextFieldKit kit) { - textFieldKit = kit; - } - */ + * private TextFieldKit textFieldKit = null; TextFieldKit getTextFieldKit() + * { return textFieldKit; } void setTextFieldKit(TextFieldKit kit) { + * textFieldKit = kit; } + */ /** - * Dispatches input & focus events to input method - * context. - * @param e event to pass to InputContext.dispatchEvent() - * @return true if event was consumed by IM, false otherwise + * Dispatches input & focus events to input method context. + * + * @param e + * event to pass to InputContext.dispatchEvent(). + * @return true if event was consumed by IM, false otherwise. */ private boolean dispatchEventToIM(AWTEvent e) { InputContext ic = getInputContext(); diff --git a/awt/java/awt/ComponentBehavior.java b/awt/java/awt/ComponentBehavior.java index 89c9999a62..f4e8ffbf20 100644 --- a/awt/java/awt/ComponentBehavior.java +++ b/awt/java/awt/ComponentBehavior.java @@ -24,7 +24,7 @@ import org.apache.harmony.awt.wtk.NativeWindow; /** * The interface of the helper object that encapsulates the difference - * between lightweight and heavyweight components. + * between lightweight and heavyweight components. */ interface ComponentBehavior { diff --git a/awt/java/awt/ComponentOrientation.java b/awt/java/awt/ComponentOrientation.java index ddb118d592..5acc11a341 100644 --- a/awt/java/awt/ComponentOrientation.java +++ b/awt/java/awt/ComponentOrientation.java @@ -18,44 +18,59 @@ * @author Michael Danilov, Dmitry A. Durnev * @version $Revision$ */ + package java.awt; import java.io.Serializable; import java.util.*; /** - * The ComponentOrientation class specifies the language-sensitive orientation - * of component's elements or text. It is used to reflect the differences in this - * ordering between different writting systems. The ComponentOrientation class - * indicates the orientation of the elements/text in the horizontal direction - * ("left to right" or "right to left") and in the vertical direction + * The ComponentOrientation class specifies the language-sensitive orientation + * of component's elements or text. It is used to reflect the differences in + * this ordering between different writing systems. The ComponentOrientation + * class indicates the orientation of the elements/text in the horizontal + * direction ("left to right" or "right to left") and in the vertical direction * ("top to bottom" or "bottom to top"). + * + * @since Android 1.0 */ public final class ComponentOrientation implements Serializable { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -4113291392143563828L; - /** + /** * The Constant LEFT_TO_RIGHT indicates that items run left to right. */ public static final ComponentOrientation LEFT_TO_RIGHT = new ComponentOrientation(true, true); - /** + /** * The Constant RIGHT_TO_LEFT indicates that items run right to left. */ public static final ComponentOrientation RIGHT_TO_LEFT = new ComponentOrientation(true, false); - /** The Constant UNKNOWN indicates that a component's orientation is not set. */ + /** + * The Constant UNKNOWN indicates that a component's orientation is not set. + */ public static final ComponentOrientation UNKNOWN = new ComponentOrientation(true, true); - /** The Constant rlLangs. */ - private static final Set rlLangs = new HashSet(); //RIGHT_TO_LEFT languages + /** + * The Constant rlLangs. + */ + private static final Set rlLangs = new HashSet(); // RIGHT_TO_LEFT - /** The horizontal. */ + // languages + + /** + * The horizontal. + */ private final boolean horizontal; - /** The left2right. */ + /** + * The left2right. + */ private final boolean left2right; static { @@ -68,10 +83,9 @@ public final class ComponentOrientation implements Serializable { /** * Gets the orientation for the given ResourceBundle's localization. * - * @param bdl the ResourceBundle. - * + * @param bdl + * the ResourceBundle. * @return the ComponentOrientation. - * * @deprecated Use getOrientation(java.util.Locale) method. */ @Deprecated @@ -79,12 +93,11 @@ public final class ComponentOrientation implements Serializable { Object obj = null; try { obj = bdl.getObject("Orientation"); //$NON-NLS-1$ - } - catch (MissingResourceException mre) { + } catch (MissingResourceException mre) { obj = null; } if (obj instanceof ComponentOrientation) { - return (ComponentOrientation) obj; + return (ComponentOrientation)obj; } Locale locale = bdl.getLocale(); if (locale == null) { @@ -96,8 +109,8 @@ public final class ComponentOrientation implements Serializable { /** * Gets the orientation for the specified locale. * - * @param locale the specified Locale. - * + * @param locale + * the specified Locale. * @return the ComponentOrientation. */ public static ComponentOrientation getOrientation(Locale locale) { @@ -108,8 +121,10 @@ public final class ComponentOrientation implements Serializable { /** * Instantiates a new component orientation. * - * @param hor whether the items should be arranged horizontally - * @param l2r whether this orientation specifies a left-to-right flow + * @param hor + * whether the items should be arranged horizontally. + * @param l2r + * whether this orientation specifies a left-to-right flow. */ private ComponentOrientation(boolean hor, boolean l2r) { horizontal = hor; @@ -117,11 +132,10 @@ public final class ComponentOrientation implements Serializable { } /** - * Returns true if the text of the of writing systems arranged - * horizontally. + * Returns true if the text of the of writing systems arranged horizontally. * - * @return true, if the text is written horizontally, false - * for a vertical arrangement. + * @return true, if the text is written horizontally, false for a vertical + * arrangement. */ public boolean isHorizontal() { return horizontal; @@ -130,8 +144,8 @@ public final class ComponentOrientation implements Serializable { /** * Returns true if the text is arranged from left to right. * - * @return true, for writing systems written from left to right; - * false for right-to-left. + * @return true, for writing systems written from left to right; false for + * right-to-left. */ public boolean isLeftToRight() { return left2right; diff --git a/awt/java/awt/Composite.java b/awt/java/awt/Composite.java index 8e5b90a676..d1730fef4a 100644 --- a/awt/java/awt/Composite.java +++ b/awt/java/awt/Composite.java @@ -18,30 +18,34 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt; import java.awt.image.ColorModel; /** - * The Composite interface allows the methods to compose a draw primitive - * on the graphics area. The classes implementing this interface provides - * the rules and a method to create the context for a particular operation. + * The Composite interface allows the methods to compose a draw primitive on the + * graphics area. The classes implementing this interface provides the rules and + * a method to create the context for a particular operation. + * + * @since Android 1.0 */ public interface Composite { /** - * Creates a CompositeContext which defines the encapsulated and - * optimized environment for a compositing operation. Several contexts - * can exist for a single Composite object. - * - * @param srcColorModel the source's ColorModel. - * @param dstColorModel the destination's ColorModel. - * @param hints the RenderingHints. + * Creates a CompositeContext which defines the encapsulated and optimized + * environment for a compositing operation. Several contexts can exist for a + * single Composite object. * + * @param srcColorModel + * the source's ColorModel. + * @param dstColorModel + * the destination's ColorModel. + * @param hints + * the RenderingHints. * @return the CompositeContext object. */ - public CompositeContext createContext(ColorModel srcColorModel, - ColorModel dstColorModel, RenderingHints hints); + public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, + RenderingHints hints); } - diff --git a/awt/java/awt/CompositeContext.java b/awt/java/awt/CompositeContext.java index c6760325b6..795640d429 100644 --- a/awt/java/awt/CompositeContext.java +++ b/awt/java/awt/CompositeContext.java @@ -18,25 +18,31 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt; import java.awt.image.Raster; import java.awt.image.WritableRaster; /** - * The CompositeContext interface specifies the encapsulated and optimized - * environment for a compositing operation. + * The CompositeContext interface specifies the encapsulated and optimized + * environment for a compositing operation. + * + * @since Android 1.0 */ public interface CompositeContext { /** - * Composes the two source Raster objects and places the result in the - * destination WritableRaster. + * Composes the two source Raster objects and places the result in the + * destination WritableRaster. * - * @param src the source Raster. - * @param dstIn the destination Raster. - * @param dstOut the WritableRaster object where the result of - * composing operation is stored. + * @param src + * the source Raster. + * @param dstIn + * the destination Raster. + * @param dstOut + * the WritableRaster object where the result of composing + * operation is stored. */ public void compose(Raster src, Raster dstIn, WritableRaster dstOut); @@ -46,4 +52,3 @@ public interface CompositeContext { public void dispose(); } - diff --git a/awt/java/awt/Cursor.java b/awt/java/awt/Cursor.java index 625686c90a..0a0cc84987 100644 --- a/awt/java/awt/Cursor.java +++ b/awt/java/awt/Cursor.java @@ -18,6 +18,7 @@ * @author Dmitry A. Durnev * @version $Revision$ */ + package java.awt; import java.io.File; @@ -35,61 +36,99 @@ import org.apache.harmony.awt.wtk.NativeCursor; /** * The Cursor class represents the bitmap of the mouse cursor. + * + * @since Android 1.0 */ public class Cursor implements Serializable { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 8028237497568985504L; - - /** The Constant DEFAULT_CURSOR indicates the default cursor type. */ + + /** + * The Constant DEFAULT_CURSOR indicates the default cursor type. + */ public static final int DEFAULT_CURSOR = 0; - /** The Constant CROSSHAIR_CURSOR cursor type. */ + /** + * The Constant CROSSHAIR_CURSOR cursor type. + */ public static final int CROSSHAIR_CURSOR = 1; - /** The Constant TEXT_CURSOR cursor type. */ + /** + * The Constant TEXT_CURSOR cursor type. + */ public static final int TEXT_CURSOR = 2; - /** The Constant WAIT_CURSOR cursor type. */ + /** + * The Constant WAIT_CURSOR cursor type. + */ public static final int WAIT_CURSOR = 3; - /** The Constant SW_RESIZE_CURSOR cursor type. */ + /** + * The Constant SW_RESIZE_CURSOR cursor type. + */ public static final int SW_RESIZE_CURSOR = 4; - /** The Constant SE_RESIZE_CURSOR cursor type. */ + /** + * The Constant SE_RESIZE_CURSOR cursor type. + */ public static final int SE_RESIZE_CURSOR = 5; - /** The Constant NW_RESIZE_CURSOR cursor type. */ + /** + * The Constant NW_RESIZE_CURSOR cursor type. + */ public static final int NW_RESIZE_CURSOR = 6; - /** The Constant NE_RESIZE_CURSOR cursor type. */ + /** + * The Constant NE_RESIZE_CURSOR cursor type. + */ public static final int NE_RESIZE_CURSOR = 7; - /** The Constant N_RESIZE_CURSOR cursor type. */ + /** + * The Constant N_RESIZE_CURSOR cursor type. + */ public static final int N_RESIZE_CURSOR = 8; - /** The Constant S_RESIZE_CURSOR cursor type. */ + /** + * The Constant S_RESIZE_CURSOR cursor type. + */ public static final int S_RESIZE_CURSOR = 9; - /** The Constant W_RESIZE_CURSOR cursor type. */ + /** + * The Constant W_RESIZE_CURSOR cursor type. + */ public static final int W_RESIZE_CURSOR = 10; - /** The Constant E_RESIZE_CURSOR cursor type. */ + /** + * The Constant E_RESIZE_CURSOR cursor type. + */ public static final int E_RESIZE_CURSOR = 11; - /** The Constant HAND_CURSOR cursor type. */ + /** + * The Constant HAND_CURSOR cursor type. + */ public static final int HAND_CURSOR = 12; - /** The Constant MOVE_CURSOR cursor type. */ + /** + * The Constant MOVE_CURSOR cursor type. + */ public static final int MOVE_CURSOR = 13; - /** A mapping from names to system custom cursors. */ + /** + * A mapping from names to system custom cursors. + */ static Map systemCustomCursors; - - /** The cursor props. */ + + /** + * The cursor props. + */ static Properties cursorProps; - /** The Constant predefinedNames. */ + /** + * The Constant predefinedNames. + */ static final String[] predefinedNames = { "Default", "Crosshair", "Text", "Wait", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ "Southwest Resize", "Southeast Resize", //$NON-NLS-1$ //$NON-NLS-2$ @@ -99,41 +138,52 @@ public class Cursor implements Serializable { }; - /** The predefined set of cursors. */ + /** + * The predefined set of cursors. + */ protected static Cursor[] predefined = { - new Cursor(DEFAULT_CURSOR), null, null, null, - null, null, null, null, - null, null, null, null, - null, null + new Cursor(DEFAULT_CURSOR), null, null, null, null, null, null, null, null, null, null, + null, null, null }; - /** The Constant CUSTOM_CURSOR is associated with all custom cursor types. + /** + * The Constant CUSTOM_CURSOR is associated with all custom cursor types. * (Those which are not predefined) */ public static final int CUSTOM_CURSOR = -1; - /** The name of the cursor. */ + /** + * The name of the cursor. + */ protected String name; - /** The type of the cursor, chosen from the list of cursor type constants. */ + /** + * The type of the cursor, chosen from the list of cursor type constants. + */ private final int type; - - /** The native cursor. */ + + /** + * The native cursor. + */ private transient NativeCursor nativeCursor; - - /** The exact point on the cursor image that indicates which point - * the cursor is selecting (pointing to). The coordinates are given - * with respect the origin of the Image (its upper left corner). + + /** + * The exact point on the cursor image that indicates which point the cursor + * is selecting (pointing to). The coordinates are given with respect the + * origin of the Image (its upper left corner). */ private Point hotSpot; - - /** The image to draw on the screen representing the cursor. */ + + /** + * The image to draw on the screen representing the cursor. + */ private Image image; /** * Instantiates a new cursor with the specified name. * - * @param name the name of cursor. + * @param name + * the name of cursor. */ protected Cursor(String name) { this(name, null, new Point()); @@ -142,7 +192,8 @@ public class Cursor implements Serializable { /** * Instantiates a new cursor of the specified type. * - * @param type the type of cursor. + * @param type + * the type of cursor. */ public Cursor(int type) { checkType(type); @@ -155,9 +206,12 @@ public class Cursor implements Serializable { /** * Instantiates a new cursor. * - * @param name the name - * @param img the img - * @param hotSpot the hot spot + * @param name + * the name. + * @param img + * the img. + * @param hotSpot + * the hot spot. */ Cursor(String name, Image img, Point hotSpot) { this.name = name; @@ -167,10 +221,11 @@ public class Cursor implements Serializable { } /** - * Finalize method overrided finalize method from Object class. + * Finalize method overrides the finalize method from Object class. * - * @throws Throwable if the native cursor is not null and throws - * a throwable when destroyed. + * @throws Throwable + * if the native cursor is not null and throws a Throwable when + * destroyed. */ @Override protected void finalize() throws Throwable { @@ -201,7 +256,7 @@ public class Cursor implements Serializable { /** * Gets the cursor type. * - * @return the cursor type + * @return the cursor type. */ public int getType() { return type; @@ -210,8 +265,8 @@ public class Cursor implements Serializable { /** * Gets the predefined cursor with the specified type. * - * @param type the type of cursor. - * + * @param type + * the type of cursor. * @return the predefined cursor with the specified type. */ public static Cursor getPredefinedCursor(int type) { @@ -236,33 +291,33 @@ public class Cursor implements Serializable { /** * Gets the specified system custom cursor. * - * @param name the name of the desired system cursor. - * + * @param name + * the name of the desired system cursor. * @return the specific system cursor with the specified name. - * - * @throws AWTException if the desired cursor has malformed data - * such as an incorrectly defined hot spot. - * @throws HeadlessException if the isHeadless method of the GraphicsEnvironment - * returns true. + * @throws AWTException + * if the desired cursor has malformed data such as an + * incorrectly defined hot spot. + * @throws HeadlessException + * if the isHeadless method of the GraphicsEnvironment returns + * true. */ - public static Cursor getSystemCustomCursor(String name) - throws AWTException, HeadlessException { + public static Cursor getSystemCustomCursor(String name) throws AWTException, HeadlessException { Toolkit.checkHeadless(); return getSystemCustomCursorFromMap(name); } /** - * Gets the specified system custom cursor from the map of system custom cursors. + * Gets the specified system custom cursor from the map of system custom + * cursors. * - * @param name the name of the desired cursor. - * - * @return the desired system custom cursor from the - * map of system custom cursors. - * - * @throws AWTException the AWT exception + * @param name + * the name of the desired cursor. + * @return the desired system custom cursor from the map of system custom + * cursors. + * @throws AWTException + * the AWT exception. */ - private static Cursor getSystemCustomCursorFromMap (String name) - throws AWTException { + private static Cursor getSystemCustomCursorFromMap(String name) throws AWTException { loadCursorProps(); if (systemCustomCursors == null) { systemCustomCursors = new HashMap(); @@ -284,8 +339,7 @@ public class Cursor implements Serializable { int x, y; try { x = new Integer(hotSpotStr.substring(0, idx)).intValue(); - y = new Integer(hotSpotStr.substring(idx + 1, - hotSpotStr.length())).intValue(); + y = new Integer(hotSpotStr.substring(idx + 1, hotSpotStr.length())).intValue(); } catch (NumberFormatException nfe) { throw new AWTException(exMsg); } @@ -299,7 +353,8 @@ public class Cursor implements Serializable { /** * Load cursor props. * - * @throws AWTException the AWT exception + * @throws AWTException + * the AWT exception. */ private static void loadCursorProps() throws AWTException { if (cursorProps != null) { @@ -308,18 +363,18 @@ public class Cursor implements Serializable { String sep = File.separator; String cursorsDir = "lib" + sep + "images" + sep + "cursors"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ String cursorsAbsDir = System.getProperty("java.home") + sep + //$NON-NLS-1$ - cursorsDir; + cursorsDir; String cursorPropsFileName = "cursors.properties"; //$NON-NLS-1$ - String cursorPropsFullFileName = (cursorsAbsDir + sep + - cursorPropsFileName); + String cursorPropsFullFileName = (cursorsAbsDir + sep + cursorPropsFileName); cursorProps = new Properties(); try { - cursorProps.load(new FileInputStream(new File( - cursorPropsFullFileName))); + cursorProps.load(new FileInputStream(new File(cursorPropsFullFileName))); } catch (FileNotFoundException e) { // awt.142=Exception: class {0} {1} occurred while loading: {2} throw new AWTException(Messages.getString("awt.142",//$NON-NLS-1$ - new Object[]{e.getClass(), e.getMessage(), cursorPropsFullFileName})); + new Object[] { + e.getClass(), e.getMessage(), cursorPropsFullFileName + })); } catch (IOException e) { throw new AWTException(e.getMessage()); } @@ -329,7 +384,8 @@ public class Cursor implements Serializable { /** * Check type. * - * @param type the type + * @param type + * the type. */ static void checkType(int type) { // can't use predefined array here because it may not have been @@ -344,7 +400,7 @@ public class Cursor implements Serializable { /** * Gets the native cursor. * - * @return the native cursor + * @return the native cursor. */ NativeCursor getNativeCursor() { if (nativeCursor != null) { @@ -354,8 +410,7 @@ public class Cursor implements Serializable { if (type != CUSTOM_CURSOR) { nativeCursor = toolkit.createNativeCursor(type); } else { - nativeCursor = toolkit.createCustomNativeCursor(image, hotSpot, - name); + nativeCursor = toolkit.createCustomNativeCursor(image, hotSpot, name); } return nativeCursor; } @@ -363,10 +418,10 @@ public class Cursor implements Serializable { /** * Sets the native cursor. * - * @param nativeCursor the new native cursor + * @param nativeCursor + * the new native cursor. */ void setNativeCursor(NativeCursor nativeCursor) { this.nativeCursor = nativeCursor; } } - diff --git a/awt/java/awt/Dimension.java b/awt/java/awt/Dimension.java index 8137846018..6777962e7a 100644 --- a/awt/java/awt/Dimension.java +++ b/awt/java/awt/Dimension.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt; import java.awt.geom.Dimension2D; @@ -26,26 +27,36 @@ import java.io.Serializable; import org.apache.harmony.misc.HashCode; /** - * The Dimension represents the size (width and height) of a component. - * The width and height values can be negative, but in that case the - * behavior of some methods is unexpected. + * The Dimension represents the size (width and height) of a component. The + * width and height values can be negative, but in that case the behavior of + * some methods is unexpected. + * + * @since Android 1.0 */ public class Dimension extends Dimension2D implements Serializable { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 4723952579491349524L; - /** The width dimension. */ + /** + * The width dimension. + */ public int width; - - /** The height dimension. */ + + /** + * The height dimension. + */ public int height; /** - * Instantiates a new Dimension with the same data as the specified Dimension. + * Instantiates a new Dimension with the same data as the specified + * Dimension. * - * @param d the Dimension to copy the data from when creating the - * new Dimension object. + * @param d + * the Dimension to copy the data from when creating the new + * Dimension object. */ public Dimension(Dimension d) { this(d.width, d.height); @@ -61,8 +72,10 @@ public class Dimension extends Dimension2D implements Serializable { /** * Instantiates a new Dimension with the specified width and height. * - * @param width the width of the new Dimension. - * @param height the height of the new Dimension. + * @param width + * the width of the new Dimension. + * @param height + * the height of the new Dimension. */ public Dimension(int width, int height) { setSize(width, height); @@ -84,10 +97,10 @@ public class Dimension extends Dimension2D implements Serializable { /** * Compares this Dimension object with the specified object. * - * @param obj the Object to be compared. - * - * @return true, if the specified Object is a Dimension with - * the same width and height data as this Dimension. + * @param obj + * the Object to be compared. + * @return true, if the specified Object is a Dimension with the same width + * and height data as this Dimension. */ @Override public boolean equals(Object obj) { @@ -108,16 +121,20 @@ public class Dimension extends Dimension2D implements Serializable { */ @Override public String toString() { - // The output format based on 1.5 release behaviour. It could be obtained in the following way + // The output format based on 1.5 release behaviour. It could be + // obtained in the following way // System.out.println(new Dimension().toString()) return getClass().getName() + "[width=" + width + ",height=" + height + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } /** - * Sets the size of this Dimension object with the specified width and height. + * Sets the size of this Dimension object with the specified width and + * height. * - * @param width the width of the Dimension. - * @param height the height of the Dimension. + * @param width + * the width of the Dimension. + * @param height + * the height of the Dimension. */ public void setSize(int width, int height) { this.width = width; @@ -125,22 +142,24 @@ public class Dimension extends Dimension2D implements Serializable { } /** - * Sets the size of this Dimension object by copying the - * data from the specified Dimension object. + * Sets the size of this Dimension object by copying the data from the + * specified Dimension object. * - * @param d the Dimension that gives the new size values. + * @param d + * the Dimension that gives the new size values. */ public void setSize(Dimension d) { setSize(d.width, d.height); } /** - * Sets the size of this Dimension object with the specified double width + * Sets the size of this Dimension object with the specified double width * and height. * - * @param width the width of the Dimension. - * @param height the height of the Dimension. - * + * @param width + * the width of the Dimension. + * @param height + * the height of the Dimension. * @see java.awt.geom.Dimension2D#setSize(double, double) */ @Override @@ -161,7 +180,6 @@ public class Dimension extends Dimension2D implements Serializable { * Gets the height of the Dimension. * * @return the height of the Dimension. - * * @see java.awt.geom.Dimension2D#getHeight() */ @Override @@ -173,7 +191,6 @@ public class Dimension extends Dimension2D implements Serializable { * Gets the width of the Dimension. * * @return the width of the Dimension. - * * @see java.awt.geom.Dimension2D#getWidth() */ @Override @@ -182,4 +199,3 @@ public class Dimension extends Dimension2D implements Serializable { } } - diff --git a/awt/java/awt/DisplayMode.java b/awt/java/awt/DisplayMode.java index 082c7b8aea..8021010198 100644 --- a/awt/java/awt/DisplayMode.java +++ b/awt/java/awt/DisplayMode.java @@ -18,41 +18,60 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; /** - * The DisplayMode class containes the bit depth, height, width and - * refresh rate of a GraphicsDevice. + * The DisplayMode class contains the bit depth, height, width and refresh rate + * of a GraphicsDevice. + * + * @since Android 1.0 */ public final class DisplayMode { - - /** The width. */ + + /** + * The width. + */ private final int width; - /** The height. */ + /** + * The height. + */ private final int height; - /** The bit depth. */ + /** + * The bit depth. + */ private final int bitDepth; - /** The refresh rate. */ + /** + * The refresh rate. + */ private final int refreshRate; - /** The Constant Value BIT_DEPTH_MULTI indicates the bit depth */ + /** + * The Constant Value BIT_DEPTH_MULTI indicates the bit depth + */ public static final int BIT_DEPTH_MULTI = -1; - /** The Constant REFRESH_RATE_UNKNOWN indicates the refresh rate. */ + /** + * The Constant REFRESH_RATE_UNKNOWN indicates the refresh rate. + */ public static final int REFRESH_RATE_UNKNOWN = 0; - /** - * Creates a new DisplayMode object with the specified parameters. - * - * @param width the width of the display. - * @param height the height of the display. - * @param bitDepth the bit depth of the display. - * @param refreshRate the refresh rate of the display. - */ + /** + * Creates a new DisplayMode object with the specified parameters. + * + * @param width + * the width of the display. + * @param height + * the height of the display. + * @param bitDepth + * the bit depth of the display. + * @param refreshRate + * the refresh rate of the display. + */ public DisplayMode(int width, int height, int bitDepth, int refreshRate) { this.width = width; @@ -61,15 +80,14 @@ public final class DisplayMode { this.refreshRate = refreshRate; } - - /** - * Compares if this DisplayMode is equal to the specified object or not. - * - * @param dm the Object to be compared. - * - * @return true, if the specified object is a DisplayMode with the same - * data values as this DisplayMode, false otherwise. - */ + /** + * Compares if this DisplayMode is equal to the specified object or not. + * + * @param dm + * the Object to be compared. + * @return true, if the specified object is a DisplayMode with the same data + * values as this DisplayMode, false otherwise. + */ @Override public boolean equals(Object dm) { @@ -80,13 +98,13 @@ public final class DisplayMode { } /** - * Compares if this DisplayMode is equal to the specified DisplayMode object - * or not. - * - * @param dm the DisplayMode to be compared. - * - * @return true, if all of the data values of this DisplayMode are equal - * to the values of the specified DisplayMode object, false otherwise. + * Compares if this DisplayMode is equal to the specified DisplayMode object + * or not. + * + * @param dm + * the DisplayMode to be compared. + * @return true, if all of the data values of this DisplayMode are equal to + * the values of the specified DisplayMode object, false otherwise. */ public boolean equals(DisplayMode dm) { if (dm == null) { @@ -108,8 +126,8 @@ public final class DisplayMode { } /** - * Gets the bit depth of the DisplayMode, returns BIT_DEPTH_MULTI value - * if multiple bit depths are supported in this display mode. + * Gets the bit depth of the DisplayMode, returns BIT_DEPTH_MULTI value if + * multiple bit depths are supported in this display mode. * * @return the bit depth of the DisplayMode. */ diff --git a/awt/java/awt/Event.java b/awt/java/awt/Event.java index f074258db7..226a61fffe 100644 --- a/awt/java/awt/Event.java +++ b/awt/java/awt/Event.java @@ -18,224 +18,293 @@ * @author Dmitry A. Durnev * @version $Revision$ */ + package java.awt; import java.io.Serializable; /** - * The Event Class is obsolete and has been replaced by AWTEvent class. + * The Event class is obsolete and has been replaced by AWTEvent class. * + * @since Android 1.0 */ public class Event implements Serializable { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 5488922509400504703L; - - /** - * The Constant SHIFT_MASK indicates that the Shift key is down when - * the event occurred. + + /** + * The Constant SHIFT_MASK indicates that the Shift key is down when the + * event occurred. */ public static final int SHIFT_MASK = 1; - /** - * The Constant CTRL_MASK indicates that the Control key is down when - * the event occurred. + /** + * The Constant CTRL_MASK indicates that the Control key is down when the + * event occurred. */ public static final int CTRL_MASK = 2; - /** The Constant META_MASK indicates that the Meta key is down when t - * he event occurred (or the right mouse button). */ + /** + * The Constant META_MASK indicates that the Meta key is down when t he + * event occurred (or the right mouse button). + */ public static final int META_MASK = 4; - /** - * The Constant ALT_MASK indicates that the Alt key is down when - * the event occurred (or the middle mouse button). + /** + * The Constant ALT_MASK indicates that the Alt key is down when the event + * occurred (or the middle mouse button). */ public static final int ALT_MASK = 8; - /** The Constant HOME indicates Home key. */ + /** + * The Constant HOME indicates Home key. + */ public static final int HOME = 1000; - /** The Constant END indicates End key. */ + /** + * The Constant END indicates End key. + */ public static final int END = 1001; - /** The Constant PGUP indicates Page Up key. */ + /** + * The Constant PGUP indicates Page Up key. + */ public static final int PGUP = 1002; - /** The Constant PGDN indicates Page Down key. */ + /** + * The Constant PGDN indicates Page Down key. + */ public static final int PGDN = 1003; - /** The Constant UP indicates Up key. */ + /** + * The Constant UP indicates Up key. + */ public static final int UP = 1004; - /** The Constant DOWN indicates Down key. */ + /** + * The Constant DOWN indicates Down key. + */ public static final int DOWN = 1005; - /** The Constant LEFT indicates Left key. */ + /** + * The Constant LEFT indicates Left key. + */ public static final int LEFT = 1006; - /** The Constant RIGHT indicates Right key. */ + /** + * The Constant RIGHT indicates Right key. + */ public static final int RIGHT = 1007; - /** The Constant F1 indicates F1 key. */ + /** + * The Constant F1 indicates F1 key. + */ public static final int F1 = 1008; - /** The Constant F2 indicates F2 key. */ + /** + * The Constant F2 indicates F2 key. + */ public static final int F2 = 1009; - /** The Constant F3 indicates F3 key. */ + /** + * The Constant F3 indicates F3 key. + */ public static final int F3 = 1010; - /** The Constant F4 indicates F4 key. */ + /** + * The Constant F4 indicates F4 key. + */ public static final int F4 = 1011; - /** The Constant F5 indicates F5 key. */ + /** + * The Constant F5 indicates F5 key. + */ public static final int F5 = 1012; - /** The Constant F6 indicates F6 key. */ + /** + * The Constant F6 indicates F6 key. + */ public static final int F6 = 1013; - /** The Constant F7 indicates F7 key. */ + /** + * The Constant F7 indicates F7 key. + */ public static final int F7 = 1014; - /** The Constant F8 indicates F8 key. */ + /** + * The Constant F8 indicates F8 key. + */ public static final int F8 = 1015; - /** The Constant F9 indicates F9 key. */ + /** + * The Constant F9 indicates F9 key. + */ public static final int F9 = 1016; - /** The Constant F10 indicates F10 key. */ + /** + * The Constant F10 indicates F10 key. + */ public static final int F10 = 1017; - /** The Constant F11 indicates F11 key. */ + /** + * The Constant F11 indicates F11 key. + */ public static final int F11 = 1018; - /** The Constant F12 indicates F12 key. */ + /** + * The Constant F12 indicates F12 key. + */ public static final int F12 = 1019; - /** The Constant PRINT_SCREEN indicates Print Screen key. */ + /** + * The Constant PRINT_SCREEN indicates Print Screen key. + */ public static final int PRINT_SCREEN = 1020; - /** The Constant SCROLL_LOCK indicates Scroll Lock key. */ + /** + * The Constant SCROLL_LOCK indicates Scroll Lock key. + */ public static final int SCROLL_LOCK = 1021; - /** The Constant CAPS_LOCK indicates Caps Lock key. */ + /** + * The Constant CAPS_LOCK indicates Caps Lock key. + */ public static final int CAPS_LOCK = 1022; - /** The Constant NUM_LOCK indicates Num Lock key. */ + /** + * The Constant NUM_LOCK indicates Num Lock key. + */ public static final int NUM_LOCK = 1023; - /** The Constant PAUSE indicates Pause key. */ + /** + * The Constant PAUSE indicates Pause key. + */ public static final int PAUSE = 1024; - /** The Constant INSERT indicates Insert key. */ + /** + * The Constant INSERT indicates Insert key. + */ public static final int INSERT = 1025; - /** The Constant ENTER indicates Enter key. */ + /** + * The Constant ENTER indicates Enter key. + */ public static final int ENTER = 10; - /** The Constant BACK_SPACE indicates Back Space key. */ + /** + * The Constant BACK_SPACE indicates Back Space key. + */ public static final int BACK_SPACE = 8; - /** The Constant TAB indicates TAb key. */ + /** + * The Constant TAB indicates TAb key. + */ public static final int TAB = 9; - /** The Constant ESCAPE indicates Escape key. */ + /** + * The Constant ESCAPE indicates Escape key. + */ public static final int ESCAPE = 27; - /** The Constant DELETE indicates Delete key. */ + /** + * The Constant DELETE indicates Delete key. + */ public static final int DELETE = 127; - /** - * The Constant WINDOW_DESTROY indicates an event when the user has asked the - * window manager to kill the window. + /** + * The Constant WINDOW_DESTROY indicates an event when the user has asked + * the window manager to kill the window. */ public static final int WINDOW_DESTROY = 201; - /** + /** * The Constant WINDOW_EXPOSE indicates an event when the user has asked the * window manager to expose the window. */ public static final int WINDOW_EXPOSE = 202; - /** - * The Constant WINDOW_ICONIFY indicates an event when the user has asked the - * window manager to inconify the window. + /** + * The Constant WINDOW_ICONIFY indicates an event when the user has asked + * the window manager to iconify the window. */ public static final int WINDOW_ICONIFY = 203; - /** - * The Constant WINDOW_DEICONIFY indicates an event when the user has asked the - * window manager to deinconify the window. + /** + * The Constant WINDOW_DEICONIFY indicates an event when the user has asked + * the window manager to deiconify the window. */ public static final int WINDOW_DEICONIFY = 204; - /** + /** * The Constant WINDOW_MOVED indicates an event when the user has asked the - * window manager to move the window. + * window manager to move the window. */ public static final int WINDOW_MOVED = 205; - /** - * The Constant KEY_PRESS indicates an event when the user presses - * a normal key. + /** + * The Constant KEY_PRESS indicates an event when the user presses a normal + * key. */ public static final int KEY_PRESS = 401; - /** - * The Constant KEY_RELEASE indicates an event when the user releases - * a normal key. + /** + * The Constant KEY_RELEASE indicates an event when the user releases a + * normal key. */ public static final int KEY_RELEASE = 402; - /** - * The Constant KEY_ACTION indicates an event when the user pressed - * a non-ASCII action key. + /** + * The Constant KEY_ACTION indicates an event when the user pressed a + * non-ASCII action key. */ public static final int KEY_ACTION = 403; /** - * The Constant KEY_ACTION_RELEASE indicates an event when the user released - * a non-ASCII action key. + * The Constant KEY_ACTION_RELEASE indicates an event when the user released + * a non-ASCII action key. */ public static final int KEY_ACTION_RELEASE = 404; - /** - * The Constant MOUSE_DOWN indicates an event when the user has pressed - * the mouse button. + /** + * The Constant MOUSE_DOWN indicates an event when the user has pressed the + * mouse button. */ public static final int MOUSE_DOWN = 501; - /** - * The Constant MOUSE_UP indicates an event when the user has released - * the mouse button. + /** + * The Constant MOUSE_UP indicates an event when the user has released the + * mouse button. */ public static final int MOUSE_UP = 502; - /** - * The Constant MOUSE_MOVE indicates an event when the user has moved - * the mouse with no button pressed. + /** + * The Constant MOUSE_MOVE indicates an event when the user has moved the + * mouse with no button pressed. */ public static final int MOUSE_MOVE = 503; - /** - * The Constant MOUSE_ENTER indicates an event when the mouse - * has entered a component. + /** + * The Constant MOUSE_ENTER indicates an event when the mouse has entered a + * component. */ public static final int MOUSE_ENTER = 504; - /** - * The Constant MOUSE_EXIT indicates an event when the mouse - * has exited a component. + /** + * The Constant MOUSE_EXIT indicates an event when the mouse has exited a + * component. */ public static final int MOUSE_EXIT = 505; - /** The Constant MOUSE_DRAG indicates an event when the user - * has moved a mouse with the pressed button. + /** + * The Constant MOUSE_DRAG indicates an event when the user has moved a + * mouse with the pressed button. */ public static final int MOUSE_DRAG = 506; - /** + /** * The Constant SCROLL_LINE_UP indicates an event when the user has * activated line-up area of scrollbar. */ @@ -243,101 +312,136 @@ public class Event implements Serializable { /** * The Constant SCROLL_LINE_DOWN indicates an event when the user has - * activated line-down area of scrollbar. + * activated line-down area of scrollbar. */ public static final int SCROLL_LINE_DOWN = 602; /** * The Constant SCROLL_PAGE_UP indicates an event when the user has - * activated page up area of scrollbar. + * activated page up area of scrollbar. */ public static final int SCROLL_PAGE_UP = 603; /** * The Constant SCROLL_PAGE_DOWN indicates an event when the user has - * activated page down area of scrollbar. + * activated page down area of scrollbar. */ public static final int SCROLL_PAGE_DOWN = 604; /** - * The Constant SCROLL_ABSOLUTE indicates an event when the user - * has moved the bubble in a scroll bar. + * The Constant SCROLL_ABSOLUTE indicates an event when the user has moved + * the bubble in a scroll bar. */ public static final int SCROLL_ABSOLUTE = 605; - /** The Constant SCROLL_BEGIN indicates a scroll begin event. */ + /** + * The Constant SCROLL_BEGIN indicates a scroll begin event. + */ public static final int SCROLL_BEGIN = 606; - /** The Constant SCROLL_END indicates a scroll end event. */ + /** + * The Constant SCROLL_END indicates a scroll end event. + */ public static final int SCROLL_END = 607; - /** - * The Constant LIST_SELECT indicates that an item in a list - * has been selected. + /** + * The Constant LIST_SELECT indicates that an item in a list has been + * selected. */ public static final int LIST_SELECT = 701; - /** - * The Constant LIST_DESELECT indicates that an item in a list - * has been deselected. + /** + * The Constant LIST_DESELECT indicates that an item in a list has been + * unselected. */ public static final int LIST_DESELECT = 702; - /** - * The Constant ACTION_EVENT indicates that the user wants some - * action to occur. + /** + * The Constant ACTION_EVENT indicates that the user wants some action to + * occur. */ public static final int ACTION_EVENT = 1001; - /** The Constant LOAD_FILE indicates a file loading event. */ + /** + * The Constant LOAD_FILE indicates a file loading event. + */ public static final int LOAD_FILE = 1002; - /** The Constant SAVE_FILE indicates a file saving event. */ + /** + * The Constant SAVE_FILE indicates a file saving event. + */ public static final int SAVE_FILE = 1003; - /** The Constant GOT_FOCUS indicates that a component got the focus. */ + /** + * The Constant GOT_FOCUS indicates that a component got the focus. + */ public static final int GOT_FOCUS = 1004; - /** The Constant LOST_FOCUS indicates that the component lost the focus. */ + /** + * The Constant LOST_FOCUS indicates that the component lost the focus. + */ public static final int LOST_FOCUS = 1005; - /** The target is the component with which the event is associated. */ + /** + * The target is the component with which the event is associated. + */ public Object target; - /** The when is timestamp when event has occured. */ + /** + * The when is timestamp when event has occured. + */ public long when; - /** The id indicates the type of the event. */ + /** + * The id indicates the type of the event. + */ public int id; - /** The x coordinate of event. */ + /** + * The x coordinate of event. + */ public int x; - /** The y coordinate of event. */ + /** + * The y coordinate of event. + */ public int y; - /** The key code of key event. */ + /** + * The key code of key event. + */ public int key; - /** The state of the modifier keys (given by a bitmask). */ + /** + * The state of the modifier keys (given by a bitmask). + */ public int modifiers; - /** The click count indicates the number of consecutive clicks. */ + /** + * The click count indicates the number of consecutive clicks. + */ public int clickCount; - /** The argument of the event. */ + /** + * The argument of the event. + */ public Object arg; - /** The next event. */ + /** + * The next event. + */ public Event evt; /** - * Instantiates a new event with the specified target component, - * event type, and argument. + * Instantiates a new event with the specified target component, event type, + * and argument. * - * @param target the target component. - * @param id the event type. - * @param arg the argument. + * @param target + * the target component. + * @param id + * the event type. + * @param arg + * the argument. */ public Event(Object target, int id, Object arg) { this(target, 0l, id, 0, 0, 0, 0, arg); @@ -348,13 +452,20 @@ public class Event implements Serializable { * event type, x and y coordinates, keyboard key, state of the modifier * keys, and an argument set to null. * - * @param target the target component. - * @param when the time stamp. - * @param id the event type. - * @param x the x coordinate. - * @param y the y coordinate. - * @param key the key. - * @param modifiers the modifier keys state. + * @param target + * the target component. + * @param when + * the time stamp. + * @param id + * the event type. + * @param x + * the x coordinate. + * @param y + * the y coordinate. + * @param key + * the key. + * @param modifiers + * the modifier keys state. */ public Event(Object target, long when, int id, int x, int y, int key, int modifiers) { this(target, when, id, x, y, key, modifiers, null); @@ -365,14 +476,22 @@ public class Event implements Serializable { * event type, x and y coordinates, keyboard key, state of the modifier * keys, and an argument. * - * @param target the target component. - * @param when the time stamp. - * @param id the event type. - * @param x the x coordinate. - * @param y the y coordinate. - * @param key the key. - * @param modifiers the modifier keys state. - * @param arg the specified argument. + * @param target + * the target component. + * @param when + * the time stamp. + * @param id + * the event type. + * @param x + * the x coordinate. + * @param y + * the y coordinate. + * @param key + * the key. + * @param modifiers + * the modifier keys state. + * @param arg + * the specified argument. */ public Event(Object target, long when, int id, int x, int y, int key, int modifiers, Object arg) { this.target = target; @@ -392,11 +511,10 @@ public class Event implements Serializable { */ @Override public String toString() { - /* The format is based on 1.5 release behavior - * which can be revealed by the following code: - * - * Event e = new Event(new Button(), 0l, Event.KEY_PRESS, - * 0, 0, Event.TAB, Event.SHIFT_MASK, "arg"); + /* + * The format is based on 1.5 release behavior which can be revealed by + * the following code: Event e = new Event(new Button(), 0l, + * Event.KEY_PRESS, 0, 0, Event.TAB, Event.SHIFT_MASK, "arg"); * System.out.println(e); */ @@ -410,15 +528,15 @@ public class Event implements Serializable { */ protected String paramString() { return "id=" + id + ",x=" + x + ",y=" + y + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - (key != 0 ? ",key=" + key + getModifiersString() : "") + //$NON-NLS-1$ //$NON-NLS-2$ - ",target=" + target + //$NON-NLS-1$ - (arg != null ? ",arg=" + arg : ""); //$NON-NLS-1$ //$NON-NLS-2$ + (key != 0 ? ",key=" + key + getModifiersString() : "") + //$NON-NLS-1$ //$NON-NLS-2$ + ",target=" + target + //$NON-NLS-1$ + (arg != null ? ",arg=" + arg : ""); //$NON-NLS-1$ //$NON-NLS-2$ } /** * Gets a string representation of the modifiers. * - * @return a string representation of the modifiers + * @return a string representation of the modifiers. */ private String getModifiersString() { String strMod = ""; //$NON-NLS-1$ @@ -435,13 +553,13 @@ public class Event implements Serializable { } /** - * Translates x and y coordinates of his event to the x+dx and x+dy + * Translates x and y coordinates of his event to the x+dx and x+dy * coordinates. * - * @param dx the dx - the distance by which the event's x coordinate - * is increased - * @param dy the dy - the distance by which the event's y coordinate - * is increased + * @param dx + * the distance by which the event's x coordinate is increased. + * @param dy + * the distance by which the event's y coordinate is increased. */ public void translate(int dx, int dy) { x += dx; @@ -476,4 +594,3 @@ public class Event implements Serializable { } } - diff --git a/awt/java/awt/EventQueue.java b/awt/java/awt/EventQueue.java index 3997546190..126a593061 100644 --- a/awt/java/awt/EventQueue.java +++ b/awt/java/awt/EventQueue.java @@ -18,6 +18,7 @@ * @author Michael Danilov, Pavel Dolgov * @version $Revision$ */ + package java.awt; import java.awt.event.InvocationEvent; @@ -25,60 +26,69 @@ import java.lang.reflect.InvocationTargetException; import java.util.EmptyStackException; /** - * The EventQueue class manages events. It is a platform-independent class - * that queues events both from the underlying peer classes and from trusted + * The EventQueue class manages events. It is a platform-independent class that + * queues events both from the underlying peer classes and from trusted * application classes. + * + * @since Android 1.0 */ public class EventQueue { - - /** The core ref. */ - private final EventQueueCoreAtomicReference coreRef = - new EventQueueCoreAtomicReference(); - + + /** + * The core ref. + */ + private final EventQueueCoreAtomicReference coreRef = new EventQueueCoreAtomicReference(); + /** * The Class EventQueueCoreAtomicReference. */ private static final class EventQueueCoreAtomicReference { - - /** The core. */ + + /** + * The core. + */ private EventQueueCore core; - /*synchronized*/ /** + /* synchronized */ + /** * Gets the. * - * @return the event queue core + * @return the event queue core. */ - EventQueueCore get() { + EventQueueCore get() { return core; } - /*synchronized*/ /** + /* synchronized */ + /** * Sets the. * - * @param newCore the new core + * @param newCore + * the new core. */ - void set(EventQueueCore newCore) { + void set(EventQueueCore newCore) { core = newCore; } } /** - * Returns true if the calling thread is the current - * AWT EventQueue's dispatch thread. + * Returns true if the calling thread is the current AWT EventQueue's + * dispatch thread. * - * @return true, if the calling thread is the current - * AWT EventQueue's dispatch thread; false otherwise. + * @return true, if the calling thread is the current AWT EventQueue's + * dispatch thread; false otherwise. */ public static boolean isDispatchThread() { return Thread.currentThread() instanceof EventDispatchThread; } /** - * Posts an InvocationEvent which executes the run() method on a Runnable + * Posts an InvocationEvent which executes the run() method on a Runnable * when dispatched by the AWT event dispatcher thread. * - * @param runnable the Runnable whose run method should be executed - * synchronously on the EventQueue. + * @param runnable + * the Runnable whose run method should be executed synchronously + * on the EventQueue. */ public static void invokeLater(Runnable runnable) { Toolkit toolkit = Toolkit.getDefaultToolkit(); @@ -87,29 +97,28 @@ public class EventQueue { } /** - * Posts an InvocationEvent which executes the run() method on a Runnable - * when dispatched by the AWT event dispatcher thread and the - * notifyAll method is called on it immediately after run returns. - * - * @param runnable the Runnable whose run method should be executed - * synchronously on the EventQueue. + * Posts an InvocationEvent which executes the run() method on a Runnable + * when dispatched by the AWT event dispatcher thread and the notifyAll + * method is called on it immediately after run returns. * - * @throws InterruptedException if another thread has interrupted - * this thread. - * @throws InvocationTargetException if a throwable is thrown - * when running the runnable. + * @param runnable + * the Runnable whose run method should be executed synchronously + * on the EventQueue. + * @throws InterruptedException + * if another thread has interrupted this thread. + * @throws InvocationTargetException + * if an error occurred while running the runnable. */ - public static void invokeAndWait(Runnable runnable) - throws InterruptedException, InvocationTargetException { + public static void invokeAndWait(Runnable runnable) throws InterruptedException, + InvocationTargetException { if (isDispatchThread()) { throw new Error(); } final Toolkit toolkit = Toolkit.getDefaultToolkit(); - final Object notifier = new Object(); //$NON-LOCK-1$ - InvocationEvent event = new InvocationEvent( - toolkit, runnable, notifier, true); + final Object notifier = new Object(); // $NON-LOCK-1$ + InvocationEvent event = new InvocationEvent(toolkit, runnable, notifier, true); synchronized (notifier) { toolkit.getSystemEventQueueImpl().postEvent(event); @@ -126,7 +135,7 @@ public class EventQueue { /** * Gets the system event queue. * - * @return the system event queue + * @return the system event queue. */ private static EventQueue getSystemEventQueue() { Thread th = Thread.currentThread(); @@ -135,48 +144,45 @@ public class EventQueue { } return null; } - + /** - * Gets the most recent event's timestamp. - * This event was dispatched from the EventQueue associated with the - * calling thread. + * Gets the most recent event's timestamp. This event was dispatched from + * the EventQueue associated with the calling thread. * - * @return the timestamp of the last Event to be dispatched, - * or System.currentTimeMillis() if this method is invoked from - * a thread other than an event-dispatching thread. + * @return the timestamp of the last Event to be dispatched, or + * System.currentTimeMillis() if this method is invoked from a + * thread other than an event-dispatching thread. */ public static long getMostRecentEventTime() { EventQueue eq = getSystemEventQueue(); - return (eq != null) ? - eq.getMostRecentEventTimeImpl() : System.currentTimeMillis(); + return (eq != null) ? eq.getMostRecentEventTimeImpl() : System.currentTimeMillis(); } - + /** * Gets the most recent event time impl. * - * @return the most recent event time impl + * @return the most recent event time impl. */ private long getMostRecentEventTimeImpl() { return getCore().getMostRecentEventTime(); } /** - * Returns the the currently dispatched event by the EventQueue - * associated with the calling thread. + * Returns the the currently dispatched event by the EventQueue associated + * with the calling thread. * - * @return the currently dispatched event or null if this method - * is invoked from a thread other than an event-dispatching thread. + * @return the currently dispatched event or null if this method is invoked + * from a thread other than an event-dispatching thread. */ public static AWTEvent getCurrentEvent() { EventQueue eq = getSystemEventQueue(); - return (eq != null) ? - eq.getCurrentEventImpl() : null; + return (eq != null) ? eq.getCurrentEventImpl() : null; } /** * Gets the current event impl. * - * @return the current event impl + * @return the current event impl. */ private AWTEvent getCurrentEventImpl() { return getCore().getCurrentEvent(); @@ -192,7 +198,8 @@ public class EventQueue { /** * Instantiates a new event queue. * - * @param t the t + * @param t + * the t. */ EventQueue(Toolkit t) { setCore(new EventQueueCore(this, t)); @@ -201,7 +208,8 @@ public class EventQueue { /** * Posts a event to the EventQueue. * - * @param event AWTEvent. + * @param event + * AWTEvent. */ public void postEvent(AWTEvent event) { event.isPosted = true; @@ -209,29 +217,28 @@ public class EventQueue { } /** - * Returns an event from the EventQueue and removes it from this queue. - * - * @return the next AWTEvent. + * Returns an event from the EventQueue and removes it from this queue. * - * @throws InterruptedException is thrown if another thread - * interrupts this thread. + * @return the next AWTEvent. + * @throws InterruptedException + * is thrown if another thread interrupts this thread. */ public AWTEvent getNextEvent() throws InterruptedException { return getCore().getNextEvent(); } - + /** * Gets the next event no wait. * - * @return the next event no wait + * @return the next event no wait. */ AWTEvent getNextEventNoWait() { return getCore().getNextEventNoWait(); } /** - * Returns the first event of the EventQueue (without removing it - * from the queue). + * Returns the first event of the EventQueue (without removing it from the + * queue). * * @return the the first AWT event of the EventQueue. */ @@ -240,11 +247,11 @@ public class EventQueue { } /** - * Returns the first event of the EventQueue with the specified ID - * (without removing it from the queue). - * - * @param id the type ID of event. + * Returns the first event of the EventQueue with the specified ID (without + * removing it from the queue). * + * @param id + * the type ID of event. * @return the first event of the EventQueue with the specified ID. */ public AWTEvent peekEvent(int id) { @@ -252,21 +259,22 @@ public class EventQueue { } /** - * Replaces the existing EventQueue with the specified EventQueue. - * Any pending events are transferred to the new EventQueue. + * Replaces the existing EventQueue with the specified EventQueue. Any + * pending events are transferred to the new EventQueue. * - * @param newEventQueue the new event queue. + * @param newEventQueue + * the new event queue. */ public void push(EventQueue newEventQueue) { getCore().push(newEventQueue); } - + /** - * Stops dispatching events using this EventQueue. - * Any pending events are transferred to the previous EventQueue. + * Stops dispatching events using this EventQueue. Any pending events are + * transferred to the previous EventQueue. * - * @throws EmptyStackException is thrown if no previous push - * was made on this EventQueue. + * @throws EmptyStackException + * is thrown if no previous push was made on this EventQueue. */ protected void pop() throws EmptyStackException { getCore().pop(); @@ -275,7 +283,8 @@ public class EventQueue { /** * Dispatches the specified event. * - * @param event the AWTEvent. + * @param event + * the AWTEvent. */ protected void dispatchEvent(AWTEvent event) { getCore().dispatchEventImpl(event); @@ -284,7 +293,7 @@ public class EventQueue { /** * Checks if the queue is empty. * - * @return true, if is empty + * @return true, if is empty. */ boolean isEmpty() { return getCore().isEmpty(); @@ -293,16 +302,17 @@ public class EventQueue { /** * Gets the core. * - * @return the core + * @return the core. */ EventQueueCore getCore() { return coreRef.get(); } - + /** * Sets the core. * - * @param newCore the new core + * @param newCore + * the new core. */ void setCore(EventQueueCore newCore) { coreRef.set((newCore != null) ? newCore : new EventQueueCore(this)); diff --git a/awt/java/awt/Font.java b/awt/java/awt/Font.java index 139ae6827a..4ed93438d3 100644 --- a/awt/java/awt/Font.java +++ b/awt/java/awt/Font.java @@ -46,130 +46,165 @@ import org.apache.harmony.awt.gl.font.FontPeerImpl; import org.apache.harmony.awt.gl.font.FontMetricsImpl; import org.apache.harmony.awt.gl.font.LineMetricsImpl; import org.apache.harmony.awt.internal.nls.Messages; +import org.apache.harmony.luni.util.NotImplementedException; import org.apache.harmony.misc.HashCode; - /** - * The Font class represents fonts for rendering text. - * This class allow to map characters to glyphs. - *

- * A glyph is a shape used to render a character or a sequence of - * characters. For example one character of Latin writing system - * represented by one glyth, but in complex writing system such as - * South and South-East Asian there is more complicated correspondence - * between characters and glyphs. + * The Font class represents fonts for rendering text. This class allow to map + * characters to glyphs. + *

+ * A glyph is a shape used to render a character or a sequence of characters. + * For example one character of Latin writing system represented by one glyph, + * but in complex writing system such as South and South-East Asian there is + * more complicated correspondence between characters and glyphs. *

- * The Font object is identified by two types of names. The logical font name - * is the name that is used to construct the font. The font name - * is the name of a particular font face (for example, Arial Bold). - * The family name is the font's family name that specifies - * the typographic design across several faces (for example, Arial). In - * all the Font is identified by three attributes: the family name, - * the style (such as bold or italic), and the size. + * The Font object is identified by two types of names. The logical font name is + * the name that is used to construct the font. The font name is the name of a + * particular font face (for example, Arial Bold). The family name is the font's + * family name that specifies the typographic design across several faces (for + * example, Arial). In all the Font is identified by three attributes: the + * family name, the style (such as bold or italic), and the size. + * + * @since Android 1.0 */ public class Font implements Serializable { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -4206021311591459213L; // Identity Transform attribute - /** The Constant IDENTITY_TRANSFORM. */ + /** + * The Constant IDENTITY_TRANSFORM. + */ private static final TransformAttribute IDENTITY_TRANSFORM = new TransformAttribute( new AffineTransform()); - /** The Constant PLAIN indicates font's plain style. */ + /** + * The Constant PLAIN indicates font's plain style. + */ public static final int PLAIN = 0; - /** The Constant BOLD indicates font's bold style. */ + /** + * The Constant BOLD indicates font's bold style. + */ public static final int BOLD = 1; - /** The Constant ITALIC indicates font's italic style. */ + /** + * The Constant ITALIC indicates font's italic style. + */ public static final int ITALIC = 2; - /** The Constant ROMAN_BASELINE indicated roman baseline. */ + /** + * The Constant ROMAN_BASELINE indicated roman baseline. + */ public static final int ROMAN_BASELINE = 0; - /** The Constant CENTER_BASELINE indicates center baseline. */ + /** + * The Constant CENTER_BASELINE indicates center baseline. + */ public static final int CENTER_BASELINE = 1; - /** The Constant HANGING_BASELINE indicates hanging baseline. */ + /** + * The Constant HANGING_BASELINE indicates hanging baseline. + */ public static final int HANGING_BASELINE = 2; - /** - * The Constant TRUETYPE_FONT indicates a font resource of - * type TRUETYPE. + /** + * The Constant TRUETYPE_FONT indicates a font resource of type TRUETYPE. */ public static final int TRUETYPE_FONT = 0; - /** - * The Constant TYPE1_FONT indicates a font resource of - * type TYPE1. + /** + * The Constant TYPE1_FONT indicates a font resource of type TYPE1. */ public static final int TYPE1_FONT = 1; - /** - * The Constant LAYOUT_LEFT_TO_RIGHT indicates that text is - * left to right. + /** + * The Constant LAYOUT_LEFT_TO_RIGHT indicates that text is left to right. */ public static final int LAYOUT_LEFT_TO_RIGHT = 0; - /** - * The Constant LAYOUT_RIGHT_TO_LEFT indicates that text is - * right to left. + /** + * The Constant LAYOUT_RIGHT_TO_LEFT indicates that text is right to left. */ public static final int LAYOUT_RIGHT_TO_LEFT = 1; - /** - * The Constant LAYOUT_NO_START_CONTEXT indicates that the text - * in the char array before the indicated start should not be examined. + /** + * The Constant LAYOUT_NO_START_CONTEXT indicates that the text in the char + * array before the indicated start should not be examined. */ public static final int LAYOUT_NO_START_CONTEXT = 2; - /** The Constant LAYOUT_NO_LIMIT_CONTEXT indicates that text in - * the char array after the indicated limit should not be examined. */ + /** + * The Constant LAYOUT_NO_LIMIT_CONTEXT indicates that text in the char + * array after the indicated limit should not be examined. + */ public static final int LAYOUT_NO_LIMIT_CONTEXT = 4; - /** The Constant DEFAULT_FONT. */ + /** + * The Constant DEFAULT_FONT. + */ static final Font DEFAULT_FONT = new Font("Dialog", Font.PLAIN, 12); //$NON-NLS-1$ - /** The name of the Font. */ + /** + * The name of the Font. + */ protected String name; - /** The style of the Font. */ + /** + * The style of the Font. + */ protected int style; - /** The size of the Font. */ + /** + * The size of the Font. + */ protected int size; - /** The point size of the Font. */ + /** + * The point size of the Font. + */ protected float pointSize; // Flag if the Font object transformed - /** The transformed. */ + /** + * The transformed. + */ private boolean transformed; // Set of font attributes - /** The requested attributes. */ + /** + * The requested attributes. + */ private Hashtable fRequestedAttributes; // font peer object corresponding to this Font - /** The font peer. */ + /** + * The font peer. + */ private transient FontPeerImpl fontPeer; // number of glyphs in this Font - /** The num glyphs. */ + /** + * The num glyphs. + */ private transient int numGlyphs = -1; // code for missing glyph for this Font - /** The missing glyph code. */ + /** + * The missing glyph code. + */ private transient int missingGlyphCode = -1; /** * Writes object to ObjectOutputStream. * - * @param out ObjectOutputStream - * - * @throws IOException Signals that an I/O exception has occurred. + * @param out + * ObjectOutputStream. + * @throws IOException + * Signals that an I/O exception has occurred. */ private void writeObject(java.io.ObjectOutputStream out) throws IOException { out.defaultWriteObject(); @@ -179,10 +214,12 @@ public class Font implements Serializable { * Reads object from ObjectInputStream object and set native platform * dependent fields to default values. * - * @param in ObjectInputStream object - * - * @throws IOException Signals that an I/O exception has occurred. - * @throws ClassNotFoundException the class not found exception + * @param in + * ObjectInputStream object. + * @throws IOException + * Signals that an I/O exception has occurred. + * @throws ClassNotFoundException + * the class not found exception. */ private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { @@ -194,11 +231,11 @@ public class Font implements Serializable { } /** - * Instantiates a new Font with the specified attributes. - * The Font will be created with default attributes - * if the attribute's parameter is null. + * Instantiates a new Font with the specified attributes. The Font will be + * created with default attributes if the attribute's parameter is null. * - * @param attributes the attributes to be assigned to the new Font, or null. + * @param attributes + * the attributes to be assigned to the new Font, or null. */ public Font(Map attributes) { Object currAttr; @@ -217,43 +254,38 @@ public class Font implements Serializable { currAttr = attributes.get(TextAttribute.SIZE); if (currAttr != null) { - this.pointSize = ((Float) currAttr).floatValue(); - this.size = (int) Math.ceil(this.pointSize); + this.pointSize = ((Float)currAttr).floatValue(); + this.size = (int)Math.ceil(this.pointSize); } currAttr = attributes.get(TextAttribute.POSTURE); - if (currAttr != null - && currAttr.equals(TextAttribute.POSTURE_OBLIQUE)) { + if (currAttr != null && currAttr.equals(TextAttribute.POSTURE_OBLIQUE)) { this.style |= Font.ITALIC; } currAttr = attributes.get(TextAttribute.WEIGHT); if ((currAttr != null) - && (((Float) currAttr).floatValue() >= (TextAttribute.WEIGHT_BOLD) - .floatValue())) { + && (((Float)currAttr).floatValue() >= (TextAttribute.WEIGHT_BOLD).floatValue())) { this.style |= Font.BOLD; } currAttr = attributes.get(TextAttribute.FAMILY); if (currAttr != null) { - this.name = (String) currAttr; + this.name = (String)currAttr; } currAttr = attributes.get(TextAttribute.TRANSFORM); if (currAttr != null) { if (currAttr instanceof TransformAttribute) { - this.transformed = !((TransformAttribute) currAttr) - .getTransform().isIdentity(); + this.transformed = !((TransformAttribute)currAttr).getTransform().isIdentity(); } else if (currAttr instanceof AffineTransform) { - this.transformed = !((AffineTransform) currAttr) - .isIdentity(); + this.transformed = !((AffineTransform)currAttr).isIdentity(); } } } else { fRequestedAttributes = new Hashtable(5); - fRequestedAttributes.put(TextAttribute.TRANSFORM, - IDENTITY_TRANSFORM); + fRequestedAttributes.put(TextAttribute.TRANSFORM, IDENTITY_TRANSFORM); this.transformed = false; @@ -262,18 +294,14 @@ public class Font implements Serializable { fRequestedAttributes.put(TextAttribute.SIZE, new Float(this.size)); if ((this.style & Font.BOLD) != 0) { - fRequestedAttributes.put(TextAttribute.WEIGHT, - TextAttribute.WEIGHT_BOLD); + fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); } else { - fRequestedAttributes.put(TextAttribute.WEIGHT, - TextAttribute.WEIGHT_REGULAR); + fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR); } if ((this.style & Font.ITALIC) != 0) { - fRequestedAttributes.put(TextAttribute.POSTURE, - TextAttribute.POSTURE_OBLIQUE); + fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); } else { - fRequestedAttributes.put(TextAttribute.POSTURE, - TextAttribute.POSTURE_REGULAR); + fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR); } } @@ -282,9 +310,12 @@ public class Font implements Serializable { /** * Instantiates a new Font with the specified name, style and size. * - * @param name the name of font. - * @param style the style of font. - * @param size the size of font. + * @param name + * the name of font. + * @param style + * the style of font. + * @param size + * the size of font. */ public Font(String name, int style, int size) { @@ -303,46 +334,43 @@ public class Font implements Serializable { fRequestedAttributes.put(TextAttribute.SIZE, new Float(this.size)); if ((this.style & Font.BOLD) != 0) { - fRequestedAttributes.put(TextAttribute.WEIGHT, - TextAttribute.WEIGHT_BOLD); + fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); } else { - fRequestedAttributes.put(TextAttribute.WEIGHT, - TextAttribute.WEIGHT_REGULAR); + fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR); } if ((this.style & Font.ITALIC) != 0) { - fRequestedAttributes.put(TextAttribute.POSTURE, - TextAttribute.POSTURE_OBLIQUE); + fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); } else { - fRequestedAttributes.put(TextAttribute.POSTURE, - TextAttribute.POSTURE_REGULAR); + fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR); } } /** * Returns true if this Font has a glyph for the specified character. * - * @param c the character. - * - * @return true if this Font has a glyph for the specified character, - * false otherwise. + * @param c + * the character. + * @return true if this Font has a glyph for the specified character, false + * otherwise. */ public boolean canDisplay(char c) { - FontPeerImpl peer = (FontPeerImpl) this.getPeer(); + FontPeerImpl peer = (FontPeerImpl)this.getPeer(); return peer.canDisplay(c); } /** - * Returns true if the Font can display the characters of the - * the specified text from the specified start position - * to the specified limit position. - * - * @param text the text. - * @param start the start offset (in the character array). - * @param limit the limit offset (in the character array). - * - * @return the a character's position in the text that this Font - * can not display, or -1 if this Font can display all characters - * in this text. + * Returns true if the Font can display the characters of the the specified + * text from the specified start position to the specified limit position. + * + * @param text + * the text. + * @param start + * the start offset (in the character array). + * @param limit + * the limit offset (in the character array). + * @return the a character's position in the text that this Font can not + * display, or -1 if this Font can display all characters in this + * text. */ public int canDisplayUpTo(char[] text, int start, int limit) { int st = start; @@ -361,17 +389,19 @@ public class Font implements Serializable { } /** - * Returns true if the Font can display the characters of the - * the specified CharacterIterator from the specified start position - * and the specified limit position. - * - * @param iter the CharacterIterator. - * @param start the start offset. - * @param limit the limit offset. - * - * @return the a character's position in the CharacterIterator - * that this Font can not display, or -1 if this Font can display - * all characters in this text. + * Returns true if the Font can display the characters of the the specified + * CharacterIterator from the specified start position and the specified + * limit position. + * + * @param iter + * the CharacterIterator. + * @param start + * the start offset. + * @param limit + * the limit offset. + * @return the a character's position in the CharacterIterator that this + * Font can not display, or -1 if this Font can display all + * characters in this text. */ public int canDisplayUpTo(CharacterIterator iter, int start, int limit) { int st = start; @@ -394,11 +424,11 @@ public class Font implements Serializable { /** * Returns true if this Font can display a specified String. * - * @param str the String. - * - * @return the a character's position in the String that - * this Font can not display, or -1 if this Font can display - * all characters in this text. + * @param str + * the String. + * @return the a character's position in the String that this Font can not + * display, or -1 if this Font can display all characters in this + * text. */ public int canDisplayUpTo(String str) { char[] chars = str.toCharArray(); @@ -406,45 +436,49 @@ public class Font implements Serializable { } /** - * Creates a GlyphVector of associating characters to glyphs - * based on the unicode map of this Font. - * - * @param frc the FontRenderContext. - * @param chars the characters array. + * Creates a GlyphVector of associating characters to glyphs based on the + * Unicode map of this Font. * - * @return the GlyphVector of associating characters to glyphs - * based on the unicode map of this Font. + * @param frc + * the FontRenderContext. + * @param chars + * the characters array. + * @return the GlyphVector of associating characters to glyphs based on the + * Unicode map of this Font. */ public GlyphVector createGlyphVector(FontRenderContext frc, char[] chars) { return new AndroidGlyphVector(chars, frc, this, 0); } /** - * Creates a GlyphVector of associating characters contained - * in the specified CharacterIterator to glyphs based on - * the unicode map of this Font. - * - * @param frc the FontRenderContext. - * @param iter the CharacterIterator. - * - * @return the GlyphVector of associating characters contained - * in the specified CharacterIterator to glyphs - * based on the unicode map of this Font. - */ - public GlyphVector createGlyphVector(FontRenderContext frc, - CharacterIterator iter) { - throw new RuntimeException("Not implemented!"); //$NON-NLS-1$ + * Creates a GlyphVector of associating characters contained in the + * specified CharacterIterator to glyphs based on the Unicode map of this + * Font. + * + * @param frc + * the FontRenderContext. + * @param iter + * the CharacterIterator. + * @return the GlyphVector of associating characters contained in the + * specified CharacterIterator to glyphs based on the Unicode map of + * this Font. + */ + public GlyphVector createGlyphVector(FontRenderContext frc, CharacterIterator iter) { + throw new RuntimeException("Not implemented!"); //$NON-NLS-1$ } /** - * Creates a GlyphVector of associating characters to glyphs based on - * the unicode map of this Font. - * - * @param frc the FontRenderContext. - * @param glyphCodes the specified integer array of glyph codes. - * - * @return the GlyphVector of associating characters to glyphs - * based on the unicode map of this Font. + * Creates a GlyphVector of associating characters to glyphs based on the + * Unicode map of this Font. + * + * @param frc + * the FontRenderContext. + * @param glyphCodes + * the specified integer array of glyph codes. + * @return the GlyphVector of associating characters to glyphs based on the + * Unicode map of this Font. + * @throws NotImplementedException + * if this method is not implemented by a subclass. */ public GlyphVector createGlyphVector(FontRenderContext frc, int[] glyphCodes) throws org.apache.harmony.luni.util.NotImplementedException { @@ -452,14 +486,15 @@ public class Font implements Serializable { } /** - * Creates a GlyphVector of associating characters to glyphs based on - * the unicode map of this Font. + * Creates a GlyphVector of associating characters to glyphs based on the + * Unicode map of this Font. * - * @param frc the FontRenderContext. - * @param str the specified String. - * - * @return the GlyphVector of associating characters to glyphs - * based on the unicode map of this Font. + * @param frc + * the FontRenderContext. + * @param str + * the specified String. + * @return the GlyphVector of associating characters to glyphs based on the + * Unicode map of this Font. */ public GlyphVector createGlyphVector(FontRenderContext frc, String str) { return new AndroidGlyphVector(str.toCharArray(), frc, this, 0); @@ -467,14 +502,14 @@ public class Font implements Serializable { } /** - * Returns the font style constant value corresponding to one of the font style - * names ("BOLD", "ITALIC", "BOLDITALIC"). This method returns Font.PLAIN if - * the argument is not one of the predefined style names. - * - * @param fontStyleName font style name + * Returns the font style constant value corresponding to one of the font + * style names ("BOLD", "ITALIC", "BOLDITALIC"). This method returns + * Font.PLAIN if the argument is not one of the predefined style names. * + * @param fontStyleName + * font style name. * @return font style constant value corresponding to the font style name - * specified. + * specified. */ private static int getFontStyle(String fontStyleName) { int result = Font.PLAIN; @@ -491,12 +526,12 @@ public class Font implements Serializable { } /** - * Decodes the specified string which described the Font. The string - * should have the following format: fontname-style-pointsize. - * The style can be PLAIN, BOLD, BOLDITALIC, or ITALIC. - * - * @param str the string which describes the font. + * Decodes the specified string which described the Font. The string should + * have the following format: fontname-style-pointsize. The style can be + * PLAIN, BOLD, BOLDITALIC, or ITALIC. * + * @param str + * the string which describes the font. * @return the Font from the specified string. */ public static Font decode(String str) { @@ -553,15 +588,14 @@ public class Font implements Serializable { } /** - * Perfoms the specified affine transform to the Font and returns - * a new Font. - * - * @param trans the AffineTransform. + * Performs the specified affine transform to the Font and returns a new + * Font. * + * @param trans + * the AffineTransform. * @return the Font object. - * - * @throws IllegalArgumentException if affine transform parameter - * is null. + * @throws IllegalArgumentException + * if affine transform parameter is null. */ @SuppressWarnings("unchecked") public Font deriveFont(AffineTransform trans) { @@ -571,55 +605,52 @@ public class Font implements Serializable { throw new IllegalArgumentException(Messages.getString("awt.94")); //$NON-NLS-1$ } - Hashtable derivefRequestedAttributes = (Hashtable) fRequestedAttributes + Hashtable derivefRequestedAttributes = (Hashtable)fRequestedAttributes .clone(); - derivefRequestedAttributes.put(TextAttribute.TRANSFORM, - new TransformAttribute(trans)); + derivefRequestedAttributes.put(TextAttribute.TRANSFORM, new TransformAttribute(trans)); return new Font(derivefRequestedAttributes); } /** - * Returns a new Font that is a copy of the current Font - * modified so that the size is the specified size. - * - * @param size the size of font. + * Returns a new Font that is a copy of the current Font modified so that + * the size is the specified size. * + * @param size + * the size of font. * @return the Font object. */ @SuppressWarnings("unchecked") public Font deriveFont(float size) { - Hashtable derivefRequestedAttributes = (Hashtable) fRequestedAttributes + Hashtable derivefRequestedAttributes = (Hashtable)fRequestedAttributes .clone(); derivefRequestedAttributes.put(TextAttribute.SIZE, new Float(size)); return new Font(derivefRequestedAttributes); } /** - * Returns a new Font that is a copy of the current Font - * modified so that the style is the specified style. - * - * @param style the style of font. + * Returns a new Font that is a copy of the current Font modified so that + * the style is the specified style. * + * @param style + * the style of font. * @return the Font object. */ @SuppressWarnings("unchecked") public Font deriveFont(int style) { - Hashtable derivefRequestedAttributes = (Hashtable) fRequestedAttributes + Hashtable derivefRequestedAttributes = (Hashtable)fRequestedAttributes .clone(); if ((style & Font.BOLD) != 0) { - derivefRequestedAttributes.put(TextAttribute.WEIGHT, - TextAttribute.WEIGHT_BOLD); + derivefRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); } else if (derivefRequestedAttributes.get(TextAttribute.WEIGHT) != null) { derivefRequestedAttributes.remove(TextAttribute.WEIGHT); } if ((style & Font.ITALIC) != 0) { - derivefRequestedAttributes.put(TextAttribute.POSTURE, - TextAttribute.POSTURE_OBLIQUE); + derivefRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); } else if (derivefRequestedAttributes.get(TextAttribute.POSTURE) != null) { derivefRequestedAttributes.remove(TextAttribute.POSTURE); } @@ -628,13 +659,14 @@ public class Font implements Serializable { } /** - * Returns a new Font that is a copy of the current Font - * modified to match the specified style and with the specified - * affine transform applied to its glyphs. - * - * @param style the style of font. - * @param trans the AffineTransform. - * + * Returns a new Font that is a copy of the current Font modified to match + * the specified style and with the specified affine transform applied to + * its glyphs. + * + * @param style + * the style of font. + * @param trans + * the AffineTransform. * @return the Font object. */ @SuppressWarnings("unchecked") @@ -644,53 +676,48 @@ public class Font implements Serializable { // awt.94=transform can not be null throw new IllegalArgumentException(Messages.getString("awt.94")); //$NON-NLS-1$ } - Hashtable derivefRequestedAttributes = (Hashtable) fRequestedAttributes + Hashtable derivefRequestedAttributes = (Hashtable)fRequestedAttributes .clone(); if ((style & BOLD) != 0) { - derivefRequestedAttributes.put(TextAttribute.WEIGHT, - TextAttribute.WEIGHT_BOLD); + derivefRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); } else if (derivefRequestedAttributes.get(TextAttribute.WEIGHT) != null) { derivefRequestedAttributes.remove(TextAttribute.WEIGHT); } if ((style & ITALIC) != 0) { - derivefRequestedAttributes.put(TextAttribute.POSTURE, - TextAttribute.POSTURE_OBLIQUE); + derivefRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); } else if (derivefRequestedAttributes.get(TextAttribute.POSTURE) != null) { derivefRequestedAttributes.remove(TextAttribute.POSTURE); } - derivefRequestedAttributes.put(TextAttribute.TRANSFORM, - new TransformAttribute(trans)); + derivefRequestedAttributes.put(TextAttribute.TRANSFORM, new TransformAttribute(trans)); return new Font(derivefRequestedAttributes); } /** - * Returns a new Font that is a copy of the current Font - * modified so that the size and style are the specified - * size and style. - * - * @param style the style of font. - * @param size the size of font. + * Returns a new Font that is a copy of the current Font modified so that + * the size and style are the specified size and style. * + * @param style + * the style of font. + * @param size + * the size of font. * @return the Font object. */ @SuppressWarnings("unchecked") public Font deriveFont(int style, float size) { - Hashtable derivefRequestedAttributes = (Hashtable) fRequestedAttributes + Hashtable derivefRequestedAttributes = (Hashtable)fRequestedAttributes .clone(); if ((style & BOLD) != 0) { - derivefRequestedAttributes.put(TextAttribute.WEIGHT, - TextAttribute.WEIGHT_BOLD); + derivefRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); } else if (derivefRequestedAttributes.get(TextAttribute.WEIGHT) != null) { derivefRequestedAttributes.remove(TextAttribute.WEIGHT); } if ((style & ITALIC) != 0) { - derivefRequestedAttributes.put(TextAttribute.POSTURE, - TextAttribute.POSTURE_OBLIQUE); + derivefRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); } else if (derivefRequestedAttributes.get(TextAttribute.POSTURE) != null) { derivefRequestedAttributes.remove(TextAttribute.POSTURE); } @@ -703,15 +730,15 @@ public class Font implements Serializable { /** * Returns a new Font object with a new set of font attributes. * - * @param attributes the map of attributes. - * + * @param attributes + * the map of attributes. * @return the Font. */ @SuppressWarnings("unchecked") public Font deriveFont(Map attributes) { Attribute[] avalAttributes = this.getAvailableAttributes(); - Hashtable derivefRequestedAttributes = (Hashtable) fRequestedAttributes + Hashtable derivefRequestedAttributes = (Hashtable)fRequestedAttributes .clone(); Object currAttribute; for (Attribute element : avalAttributes) { @@ -726,10 +753,10 @@ public class Font implements Serializable { /** * Compares the specified Object with the current Font. * - * @param obj the Object to be compared. - * - * @return true, if the specified Object is an instance of Font - * with the same family, size, and style as this Font, false otherwise. + * @param obj + * the Object to be compared. + * @return true, if the specified Object is an instance of Font with the + * same family, size, and style as this Font, false otherwise. */ @Override public boolean equals(Object obj) { @@ -739,11 +766,10 @@ public class Font implements Serializable { if (obj != null) { try { - Font font = (Font) obj; + Font font = (Font)obj; return ((this.style == font.style) && (this.size == font.size) - && this.name.equals(font.name) - && (this.pointSize == font.pointSize) && (this + && this.name.equals(font.name) && (this.pointSize == font.pointSize) && (this .getTransform()).equals(font.getTransform())); } catch (ClassCastException e) { } @@ -759,7 +785,7 @@ public class Font implements Serializable { */ @SuppressWarnings("unchecked") public Map getAttributes() { - return (Map) fRequestedAttributes.clone(); + return (Map)fRequestedAttributes.clone(); } /** @@ -768,18 +794,19 @@ public class Font implements Serializable { * @return the keys array of all available attributes. */ public Attribute[] getAvailableAttributes() { - Attribute[] attrs = { TextAttribute.FAMILY, TextAttribute.POSTURE, - TextAttribute.SIZE, TextAttribute.TRANSFORM, - TextAttribute.WEIGHT, TextAttribute.SUPERSCRIPT, - TextAttribute.WIDTH }; + Attribute[] attrs = { + TextAttribute.FAMILY, TextAttribute.POSTURE, TextAttribute.SIZE, + TextAttribute.TRANSFORM, TextAttribute.WEIGHT, TextAttribute.SUPERSCRIPT, + TextAttribute.WIDTH + }; return attrs; } /** * Gets the baseline for this character. * - * @param c the character. - * + * @param c + * the character. * @return the baseline for this character. */ public byte getBaselineFor(char c) { @@ -800,19 +827,18 @@ public class Font implements Serializable { } /** - * Returns the family name of this Font associated with - * the specified locale. - * - * @param l the locale. + * Returns the family name of this Font associated with the specified + * locale. * - * @return the family name of this Font associated with - * the specified locale. + * @param l + * the locale. + * @return the family name of this Font associated with the specified + * locale. */ public String getFamily(Locale l) { if (l == null) { // awt.01='{0}' parameter is null - throw new NullPointerException(Messages.getString( - "awt.01", "Locale")); //$NON-NLS-1$ //$NON-NLS-2$ + throw new NullPointerException(Messages.getString("awt.01", "Locale")); //$NON-NLS-1$ //$NON-NLS-2$ } return getFamily(); } @@ -820,12 +846,12 @@ public class Font implements Serializable { /** * Gets a Font with the specified attribute set. * - * @param attributes the attributes to be assigned to the new Font. - * + * @param attributes + * the attributes to be assigned to the new Font. * @return the Font. */ public static Font getFont(Map attributes) { - Font fnt = (Font) attributes.get(TextAttribute.FONT); + Font fnt = (Font)attributes.get(TextAttribute.FONT); if (fnt != null) { return fnt; } @@ -833,14 +859,16 @@ public class Font implements Serializable { } /** - * Gets a Font object from the system properties list with the specified name - * or returns the specified Font if there is no such property. - * - * @param sp the specified property name. - * @param f the Font. + * Gets a Font object from the system properties list with the specified + * name or returns the specified Font if there is no such property. * - * @return the Font object from the system properties list with the specified name - * or the specified Font if there is no such property. + * @param sp + * the specified property name. + * @param f + * the Font. + * @return the Font object from the system properties list with the + * specified name or the specified Font if there is no such + * property. */ public static Font getFont(String sp, Font f) { String pr = System.getProperty(sp); @@ -851,12 +879,13 @@ public class Font implements Serializable { } /** - * Gets a Font object from the system properties list with the specified name. - * - * @param sp the system property name. + * Gets a Font object from the system properties list with the specified + * name. * - * @return the Font, or null if there is no shuch property - * with the specified name. + * @param sp + * the system property name. + * @return the Font, or null if there is no such property with the specified + * name. */ public static Font getFont(String sp) { return getFont(sp, null); @@ -877,8 +906,8 @@ public class Font implements Serializable { /** * Returns the font name associated with the specified locale. * - * @param l the locale. - * + * @param l + * the locale. * @return the font name associated with the specified locale. */ public String getFontName(Locale l) { @@ -888,38 +917,45 @@ public class Font implements Serializable { /** * Returns a LineMetrics object created with the specified parameters. * - * @param chars the chars array. - * @param start the start offset. - * @param end the end offset. - * @param frc the FontRenderContext. - * + * @param chars + * the chars array. + * @param start + * the start offset. + * @param end + * the end offset. + * @param frc + * the FontRenderContext. * @return the LineMetrics for the specified parameters. */ - public LineMetrics getLineMetrics(char[] chars, int start, int end, - FontRenderContext frc) { + public LineMetrics getLineMetrics(char[] chars, int start, int end, FontRenderContext frc) { if (frc == null) { // awt.00=FontRenderContext is null throw new NullPointerException(Messages.getString("awt.00")); //$NON-NLS-1$ } - //FontMetrics fm = AndroidGraphics2D.getInstance().getFontMetrics(); + // FontMetrics fm = AndroidGraphics2D.getInstance().getFontMetrics(); FontMetrics fm = new FontMetricsImpl(this); - float[] fmet = {fm.getAscent(), fm.getDescent(), fm.getLeading()}; + float[] fmet = { + fm.getAscent(), fm.getDescent(), fm.getLeading() + }; return new LineMetricsImpl(chars.length, fmet, null); } /** * Returns a LineMetrics object created with the specified parameters. * - * @param iter the CharacterIterator. - * @param start the start offset. - * @param end the end offset. - * @param frc the FontRenderContext. - * + * @param iter + * the CharacterIterator. + * @param start + * the start offset. + * @param end + * the end offset. + * @param frc + * the FontRenderContext. * @return the LineMetrics for the specified parameters. */ - public LineMetrics getLineMetrics(CharacterIterator iter, int start, - int end, FontRenderContext frc) { + public LineMetrics getLineMetrics(CharacterIterator iter, int start, int end, + FontRenderContext frc) { if (frc == null) { // awt.00=FontRenderContext is null @@ -935,8 +971,8 @@ public class Font implements Serializable { } else { char[] chars = new char[iterCount]; int i = 0; - for (char c = iter.setIndex(start); c != CharacterIterator.DONE - && (i < iterCount); c = iter.next()) { + for (char c = iter.setIndex(start); c != CharacterIterator.DONE && (i < iterCount); c = iter + .next()) { chars[i] = c; i++; } @@ -948,16 +984,19 @@ public class Font implements Serializable { /** * Returns a LineMetrics object created with the specified parameters. * - * @param str the String. - * @param frc the FontRenderContext. - * + * @param str + * the String. + * @param frc + * the FontRenderContext. * @return the LineMetrics for the specified parameters. */ public LineMetrics getLineMetrics(String str, FontRenderContext frc) { - //FontMetrics fm = AndroidGraphics2D.getInstance().getFontMetrics(); + // FontMetrics fm = AndroidGraphics2D.getInstance().getFontMetrics(); FontMetrics fm = new FontMetricsImpl(this); - float[] fmet = {fm.getAscent(), fm.getDescent(), fm.getLeading()}; - //Log.i("FONT FMET", fmet.toString()); + float[] fmet = { + fm.getAscent(), fm.getDescent(), fm.getLeading() + }; + // Log.i("FONT FMET", fmet.toString()); return new LineMetricsImpl(str.length(), fmet, null); } @@ -965,45 +1004,48 @@ public class Font implements Serializable { /** * Returns a LineMetrics object created with the specified parameters. * - * @param str the String. - * @param start the start offset. - * @param end the end offset. - * @param frc the FontRenderContext. - * + * @param str + * the String. + * @param start + * the start offset. + * @param end + * the end offset. + * @param frc + * the FontRenderContext. * @return the LineMetrics for the specified parameters. */ - public LineMetrics getLineMetrics(String str, int start, int end, - FontRenderContext frc) { + public LineMetrics getLineMetrics(String str, int start, int end, FontRenderContext frc) { return this.getLineMetrics(str.substring(start, end), frc); } /** - * Gets the logical bounds of the specified String in - * the specified FontRenderContext. The logical bounds contains - * the origin, ascent, advance, and height. - * - * @param ci the specified CharacterIterator. - * @param start the start offset. - * @param end the end offset. - * @param frc the FontRenderContext. - * + * Gets the logical bounds of the specified String in the specified + * FontRenderContext. The logical bounds contains the origin, ascent, + * advance, and height. + * + * @param ci + * the specified CharacterIterator. + * @param start + * the start offset. + * @param end + * the end offset. + * @param frc + * the FontRenderContext. * @return a Rectangle2D object. */ - public Rectangle2D getStringBounds(CharacterIterator ci, int start, - int end, FontRenderContext frc) { + public Rectangle2D getStringBounds(CharacterIterator ci, int start, int end, + FontRenderContext frc) { int first = ci.getBeginIndex(); int finish = ci.getEndIndex(); char[] chars; if (start < first) { // awt.95=Wrong start index: {0} - throw new IndexOutOfBoundsException(Messages.getString( - "awt.95", start)); //$NON-NLS-1$ + throw new IndexOutOfBoundsException(Messages.getString("awt.95", start)); //$NON-NLS-1$ } if (end > finish) { // awt.96=Wrong finish index: {0} - throw new IndexOutOfBoundsException(Messages.getString( - "awt.96", end)); //$NON-NLS-1$ + throw new IndexOutOfBoundsException(Messages.getString("awt.96", end)); //$NON-NLS-1$ } if (start > end) { // awt.97=Wrong range length: {0} @@ -1028,13 +1070,14 @@ public class Font implements Serializable { } /** - * Gets the logical bounds of the specified String in - * the specified FontRenderContext. The logical bounds contains - * the origin, ascent, advance, and height. - * - * @param str the specified String. - * @param frc the FontRenderContext. - * + * Gets the logical bounds of the specified String in the specified + * FontRenderContext. The logical bounds contains the origin, ascent, + * advance, and height. + * + * @param str + * the specified String. + * @param frc + * the FontRenderContext. * @return a Rectangle2D object. */ public Rectangle2D getStringBounds(String str, FontRenderContext frc) { @@ -1044,46 +1087,48 @@ public class Font implements Serializable { } /** - * Gets the logical bounds of the specified String in - * the specified FontRenderContext. The logical bounds contains - * the origin, ascent, advance, and height. - * - * @param str the specified String. - * @param start the start offset. - * @param end the end offset. - * @param frc the FontRenderContext. - * + * Gets the logical bounds of the specified String in the specified + * FontRenderContext. The logical bounds contains the origin, ascent, + * advance, and height. + * + * @param str + * the specified String. + * @param start + * the start offset. + * @param end + * the end offset. + * @param frc + * the FontRenderContext. * @return a Rectangle2D object. */ - public Rectangle2D getStringBounds(String str, int start, int end, - FontRenderContext frc) { + public Rectangle2D getStringBounds(String str, int start, int end, FontRenderContext frc) { return this.getStringBounds((str.substring(start, end)), frc); } /** - * Gets the logical bounds of the specified String in - * the specified FontRenderContext. The logical bounds contains - * the origin, ascent, advance, and height. - * - * @param chars the specified character array. - * @param start the start offset. - * @param end the end offset. - * @param frc the FontRenderContext. - * + * Gets the logical bounds of the specified String in the specified + * FontRenderContext. The logical bounds contains the origin, ascent, + * advance, and height. + * + * @param chars + * the specified character array. + * @param start + * the start offset. + * @param end + * the end offset. + * @param frc + * the FontRenderContext. * @return a Rectangle2D object. */ - public Rectangle2D getStringBounds(char[] chars, int start, int end, - FontRenderContext frc) { + public Rectangle2D getStringBounds(char[] chars, int start, int end, FontRenderContext frc) { if (start < 0) { // awt.95=Wrong start index: {0} - throw new IndexOutOfBoundsException(Messages.getString( - "awt.95", start)); //$NON-NLS-1$ + throw new IndexOutOfBoundsException(Messages.getString("awt.95", start)); //$NON-NLS-1$ } if (end > chars.length) { // awt.96=Wrong finish index: {0} - throw new IndexOutOfBoundsException(Messages.getString( - "awt.96", end)); //$NON-NLS-1$ + throw new IndexOutOfBoundsException(Messages.getString("awt.96", end)); //$NON-NLS-1$ } if (start > end) { // awt.97=Wrong range length: {0} @@ -1095,7 +1140,7 @@ public class Font implements Serializable { throw new NullPointerException(Messages.getString("awt.00")); //$NON-NLS-1$ } - FontPeerImpl peer = (FontPeerImpl) this.getPeer(); + FontPeerImpl peer = (FontPeerImpl)this.getPeer(); final int TRANSFORM_MASK = AffineTransform.TYPE_GENERAL_ROTATION | AffineTransform.TYPE_GENERAL_TRANSFORM; @@ -1110,13 +1155,13 @@ public class Font implements Serializable { for (int i = start; i < end; i++) { width += peer.charWidth(chars[i]); } - //LineMetrics nlm = peer.getLineMetrics(); - + // LineMetrics nlm = peer.getLineMetrics(); + LineMetrics nlm = getLineMetrics(chars, start, end, frc); - + bounds = transform.createTransformedShape( - new Rectangle2D.Float(0, -nlm.getAscent(), width, nlm - .getHeight())).getBounds2D(); + new Rectangle2D.Float(0, -nlm.getAscent(), width, nlm.getHeight())) + .getBounds2D(); } else { int len = end - start; char[] subChars = new char[len]; @@ -1127,11 +1172,11 @@ public class Font implements Serializable { } /** - * Gets the character's maximum bounds as defined in - * the specified FontRenderContext. - * - * @param frc the FontRenderContext. + * Gets the character's maximum bounds as defined in the specified + * FontRenderContext. * + * @param frc + * the FontRenderContext. * @return the character's maximum bounds. */ public Rectangle2D getMaxCharBounds(FontRenderContext frc) { @@ -1140,7 +1185,7 @@ public class Font implements Serializable { throw new NullPointerException(Messages.getString("awt.00")); //$NON-NLS-1$ } - FontPeerImpl peer = (FontPeerImpl) this.getPeer(); + FontPeerImpl peer = (FontPeerImpl)this.getPeer(); Rectangle2D bounds = peer.getMaxCharBounds(frc); AffineTransform transform = getTransform(); @@ -1155,42 +1200,40 @@ public class Font implements Serializable { } /** - * Returns a new GlyphVector object performing full layout of - * the text. - * - * @param frc the FontRenderContext. - * @param chars the character array to be layout. - * @param start the start offset of the text to use for - * the GlyphVector. - * @param count the count of characters to use for - * the GlyphVector. - * @param flags the flag indicating text direction: - * LAYOUT_RIGHT_TO_LEFT, LAYOUT_LEFT_TO_RIGHT. - * + * Returns a new GlyphVector object performing full layout of the text. + * + * @param frc + * the FontRenderContext. + * @param chars + * the character array to be layout. + * @param start + * the start offset of the text to use for the GlyphVector. + * @param count + * the count of characters to use for the GlyphVector. + * @param flags + * the flag indicating text direction: LAYOUT_RIGHT_TO_LEFT, + * LAYOUT_LEFT_TO_RIGHT. * @return the GlyphVector. */ - public GlyphVector layoutGlyphVector(FontRenderContext frc, char[] chars, - int start, int count, int flags) { + public GlyphVector layoutGlyphVector(FontRenderContext frc, char[] chars, int start, int count, + int flags) { // TODO: implement method for bidirectional text. // At the moment only LTR and RTL texts supported. if (start < 0) { // awt.95=Wrong start index: {0} - throw new ArrayIndexOutOfBoundsException(Messages.getString( - "awt.95", //$NON-NLS-1$ + throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.95", //$NON-NLS-1$ start)); } if (count < 0) { // awt.98=Wrong count value, can not be negative: {0} - throw new ArrayIndexOutOfBoundsException(Messages.getString( - "awt.98", //$NON-NLS-1$ + throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.98", //$NON-NLS-1$ count)); } if (start + count > chars.length) { // awt.99=Wrong [start + count] is out of range: {0} - throw new ArrayIndexOutOfBoundsException(Messages.getString( - "awt.99", //$NON-NLS-1$ + throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.99", //$NON-NLS-1$ (start + count))); } @@ -1234,7 +1277,7 @@ public class Font implements Serializable { * @return the postscript name of this Font. */ public String getPSName() { - FontPeerImpl peer = (FontPeerImpl) this.getPeer(); + FontPeerImpl peer = (FontPeerImpl)this.getPeer(); return peer.getPSName(); } @@ -1251,39 +1294,37 @@ public class Font implements Serializable { * Gets the peer of this Font. * * @return the peer of this Font. - * * @deprecated Font rendering is platform independent now. */ @Deprecated public java.awt.peer.FontPeer getPeer() { if (fontPeer == null) { - fontPeer = (FontPeerImpl) Toolkit.getDefaultToolkit() - .getGraphicsFactory().getFontPeer(this); + fontPeer = (FontPeerImpl)Toolkit.getDefaultToolkit().getGraphicsFactory().getFontPeer( + this); } return fontPeer; } /** - * Gets the transform acting on this Font (from the Font's - * attributes). + * Gets the transform acting on this Font (from the Font's attributes). * - * @return the transformation of this Font. + * @return the transformation of this Font. */ public AffineTransform getTransform() { Object transform = fRequestedAttributes.get(TextAttribute.TRANSFORM); if (transform != null) { if (transform instanceof TransformAttribute) { - return ((TransformAttribute) transform).getTransform(); + return ((TransformAttribute)transform).getTransform(); } if (transform instanceof AffineTransform) { - return new AffineTransform((AffineTransform) transform); + return new AffineTransform((AffineTransform)transform); } } else { transform = new AffineTransform(); } - return (AffineTransform) transform; + return (AffineTransform)transform; } @@ -1324,13 +1365,12 @@ public class Font implements Serializable { } /** - * Returns true if this Font has uniform line metrics. + * Returns true if this Font has uniform line metrics. * - * @return true if this Font has uniform line metrics, - * false otherwise. + * @return true if this Font has uniform line metrics, false otherwise. */ public boolean hasUniformLineMetrics() { - FontPeerImpl peer = (FontPeerImpl) this.getPeer(); + FontPeerImpl peer = (FontPeerImpl)this.getPeer(); return peer.hasUniformLineMetrics(); } @@ -1338,7 +1378,6 @@ public class Font implements Serializable { * Returns hash code of this Font object. * * @return the hash code of this Font object. - */ @Override public int hashCode() { @@ -1376,21 +1415,21 @@ public class Font implements Serializable { */ public int getNumGlyphs() { if (numGlyphs == -1) { - FontPeerImpl peer = (FontPeerImpl) this.getPeer(); + FontPeerImpl peer = (FontPeerImpl)this.getPeer(); this.numGlyphs = peer.getNumGlyphs(); } return this.numGlyphs; } /** - * Gets the glyphCode which is used as default glyph when this Font - * does not have a glyph for a specified unicode. + * Gets the glyphCode which is used as default glyph when this Font does not + * have a glyph for a specified Unicode. * * @return the missing glyph code. */ public int getMissingGlyphCode() { if (missingGlyphCode == -1) { - FontPeerImpl peer = (FontPeerImpl) this.getPeer(); + FontPeerImpl peer = (FontPeerImpl)this.getPeer(); this.missingGlyphCode = peer.getMissingGlyphCode(); } return this.missingGlyphCode; @@ -1407,29 +1446,30 @@ public class Font implements Serializable { /** * Gets the italic angle of this Font. - * + * * @return the italic angle of this Font. */ public float getItalicAngle() { - FontPeerImpl peer = (FontPeerImpl) this.getPeer(); + FontPeerImpl peer = (FontPeerImpl)this.getPeer(); return peer.getItalicAngle(); } /** * Creates the font with the specified font format and font file. * - * @param fontFormat the font format. - * @param fontFile the file object represented the input data - * for the font. - * + * @param fontFormat + * the font format. + * @param fontFile + * the file object represented the input data for the font. * @return the Font. - * - * @throws FontFormatException is thrown if fontFile does not contain - * the required font tables for the specified format. - * @throws IOException signals that an I/O exception has occurred. - */ - public static Font createFont(int fontFormat, File fontFile) - throws FontFormatException, IOException { + * @throws FontFormatException + * is thrown if fontFile does not contain the required font + * tables for the specified format. + * @throws IOException + * signals that an I/O exception has occurred. + */ + public static Font createFont(int fontFormat, File fontFile) throws FontFormatException, + IOException { // ???AWT not supported InputStream is = new FileInputStream(fontFile); try { @@ -1442,15 +1482,16 @@ public class Font implements Serializable { /** * Creates the font with the specified font format and input stream. * - * @param fontFormat the font format. - * @param fontStream the input stream represented input data for - * the font. - * + * @param fontFormat + * the font format. + * @param fontStream + * the input stream represented input data for the font. * @return the Font. - * - * @throws FontFormatException is thrown if fontFile does not contain - * the required font tables for the specified format. - * @throws IOException signals that an I/O exception has occurred. + * @throws FontFormatException + * is thrown if fontFile does not contain the required font + * tables for the specified format. + * @throws IOException + * signals that an I/O exception has occurred. */ public static Font createFont(int fontFormat, InputStream fontStream) throws FontFormatException, IOException { @@ -1466,15 +1507,15 @@ public class Font implements Serializable { if (fontFormat != TRUETYPE_FONT) { // awt.9A=Unsupported font format throw new IllegalArgumentException(Messages.getString("awt.9A")); //$NON-NLS-1$ } - + /* Get font file in system-specific directory */ - File fontFile = Toolkit.getDefaultToolkit().getGraphicsFactory() - .getFontManager().getTempFontFile(); + File fontFile = Toolkit.getDefaultToolkit().getGraphicsFactory().getFontManager() + .getTempFontFile(); - // BEGIN android-modified + // BEGIN android-modified buffStream = new BufferedInputStream(fontStream, 8192); - // END android-modified + // END android-modified FileOutputStream fOutStream = new FileOutputStream(fontFile); bRead = buffStream.read(buf, 0, size); diff --git a/awt/java/awt/FontFormatException.java b/awt/java/awt/FontFormatException.java index c017fd24a5..806711a764 100644 --- a/awt/java/awt/FontFormatException.java +++ b/awt/java/awt/FontFormatException.java @@ -18,21 +18,27 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt; /** - * The FontFormatException class is used to provide notification - * and information that font can't be created. + * The FontFormatException class is used to provide notification and information + * that font can't be created. + * + * @since Android 1.0 */ public class FontFormatException extends Exception { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -4481290147811361272L; /** * Instantiates a new font format exception with detailed message. * - * @param reason the detailed message. + * @param reason + * the detailed message. */ public FontFormatException(String reason) { super(reason); diff --git a/awt/java/awt/FontMetrics.java b/awt/java/awt/FontMetrics.java index 3948d736ab..90826265a7 100644 --- a/awt/java/awt/FontMetrics.java +++ b/awt/java/awt/FontMetrics.java @@ -18,6 +18,7 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt; import java.awt.font.FontRenderContext; @@ -29,34 +30,40 @@ import java.text.CharacterIterator; import org.apache.harmony.awt.internal.nls.Messages; /** - * The FontMetrics class contains information about the rendering - * of a particular font on a particular screen. + * The FontMetrics class contains information about the rendering of a + * particular font on a particular screen. *

- * Each character in the Font has three values that help define where - * to place it: an ascent, a descent, and an advance. The ascent is the - * distance the character extends above the baseline. The descent is - * the distance the character extends below the baseline. - * The advance width defines the position at which the next character - * should be placed. + * Each character in the Font has three values that help define where to place + * it: an ascent, a descent, and an advance. The ascent is the distance the + * character extends above the baseline. The descent is the distance the + * character extends below the baseline. The advance width defines the position + * at which the next character should be placed. *

- * An array of characters or a string has an ascent, a descent, - * and an advance width too. The ascent or descent of the array - * is specified by the maximum ascent or descent of the characters - * in the array. The advance width is the sum of the advance widths - * of each of the characters in the character array. + * An array of characters or a string has an ascent, a descent, and an advance + * width too. The ascent or descent of the array is specified by the maximum + * ascent or descent of the characters in the array. The advance width is the + * sum of the advance widths of each of the characters in the character array. + *

+ * + * @since Android 1.0 */ public abstract class FontMetrics implements Serializable { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 1681126225205050147L; - /** The font from which the FontMetrics is created. */ + /** + * The font from which the FontMetrics is created. + */ protected Font font; /** * Instantiates a new font metrics from the specified Font. * - * @param fnt the Font. + * @param fnt + * the Font. */ protected FontMetrics(Font fnt) { this.font = fnt; @@ -65,12 +72,11 @@ public abstract class FontMetrics implements Serializable { /** * Returns the String representation of this FontMetrics. * - * @return the string + * @return the string. */ @Override public String toString() { - return this.getClass().getName() + - "[font=" + this.getFont() + //$NON-NLS-1$ + return this.getClass().getName() + "[font=" + this.getFont() + //$NON-NLS-1$ "ascent=" + this.getAscent() + //$NON-NLS-1$ ", descent=" + this.getDescent() + //$NON-NLS-1$ ", height=" + this.getHeight() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ @@ -95,9 +101,9 @@ public abstract class FontMetrics implements Serializable { } /** - * Gets the font ascent of the Font associated with this FontMetrics. - * The font ascent is the distance from the font's baseline to - * the top of most alphanumeric characters. + * Gets the font ascent of the Font associated with this FontMetrics. The + * font ascent is the distance from the font's baseline to the top of most + * alphanumeric characters. * * @return the ascent of the Font associated with this FontMetrics. */ @@ -106,9 +112,9 @@ public abstract class FontMetrics implements Serializable { } /** - * Gets the font descent of the Font associated with this FontMetrics. - * The font descent is the distance from the font's baseline to - * the bottom of most alphanumeric characters with descenders. + * Gets the font descent of the Font associated with this FontMetrics. The + * font descent is the distance from the font's baseline to the bottom of + * most alphanumeric characters with descenders. * * @return the descent of the Font associated with this FontMetrics. */ @@ -126,192 +132,198 @@ public abstract class FontMetrics implements Serializable { } /** - * Gets the LineMetrics object for the specified CharacterIterator - * in the specified Graphics. - * - * @param ci the CharacterIterator. - * @param beginIndex the offset. - * @param limit the number of characters to be used. - * @param context the Graphics. - * - * @return the LineMetrics object for the specified CharacterIterator - * in the specified Graphics. + * Gets the LineMetrics object for the specified CharacterIterator in the + * specified Graphics. + * + * @param ci + * the CharacterIterator. + * @param beginIndex + * the offset. + * @param limit + * the number of characters to be used. + * @param context + * the Graphics. + * @return the LineMetrics object for the specified CharacterIterator in the + * specified Graphics. */ - public LineMetrics getLineMetrics(CharacterIterator ci, int beginIndex, - int limit, Graphics context) { - return font.getLineMetrics(ci, beginIndex, limit, - this.getFRCFromGraphics(context)); + public LineMetrics getLineMetrics(CharacterIterator ci, int beginIndex, int limit, + Graphics context) { + return font.getLineMetrics(ci, beginIndex, limit, this.getFRCFromGraphics(context)); } /** - * Gets the LineMetrics object for the specified String - * in the specified Graphics. - * - * @param str the String. - * @param context the Graphics. - * - * @return the LineMetrics object for the specified String - * in the specified Graphics. + * Gets the LineMetrics object for the specified String in the specified + * Graphics. + * + * @param str + * the String. + * @param context + * the Graphics. + * @return the LineMetrics object for the specified String in the specified + * Graphics. */ public LineMetrics getLineMetrics(String str, Graphics context) { return font.getLineMetrics(str, this.getFRCFromGraphics(context)); } /** - * Gets the LineMetrics object for the specified character - * array in the specified Graphics. - * - * @param chars the character array. - * @param beginIndex the offset of array. - * @param limit the number of characters to be used. - * @param context the Graphics. - * - * @return the LineMetrics object for the specified character - * array in the specified Graphics. + * Gets the LineMetrics object for the specified character array in the + * specified Graphics. + * + * @param chars + * the character array. + * @param beginIndex + * the offset of array. + * @param limit + * the number of characters to be used. + * @param context + * the Graphics. + * @return the LineMetrics object for the specified character array in the + * specified Graphics. */ - public LineMetrics getLineMetrics(char[] chars, int beginIndex, int limit, - Graphics context) { - return font.getLineMetrics(chars, beginIndex, limit, - this.getFRCFromGraphics(context)); + public LineMetrics getLineMetrics(char[] chars, int beginIndex, int limit, Graphics context) { + return font.getLineMetrics(chars, beginIndex, limit, this.getFRCFromGraphics(context)); } /** - * Gets the LineMetrics object for the specified String - * in the specified Graphics. - * - * @param str the String. - * @param beginIndex the offset. - * @param limit the number of characters to be used. - * @param context the Graphics. - * - * @return the LineMetrics object for the specified String - * in the specified Graphics. + * Gets the LineMetrics object for the specified String in the specified + * Graphics. + * + * @param str + * the String. + * @param beginIndex + * the offset. + * @param limit + * the number of characters to be used. + * @param context + * the Graphics. + * @return the LineMetrics object for the specified String in the specified + * Graphics. */ - public LineMetrics getLineMetrics(String str, int beginIndex, int limit, - Graphics context) { - return font.getLineMetrics(str, beginIndex, limit, - this.getFRCFromGraphics(context)); + public LineMetrics getLineMetrics(String str, int beginIndex, int limit, Graphics context) { + return font.getLineMetrics(str, beginIndex, limit, this.getFRCFromGraphics(context)); } /** - * Returns the character's maximum bounds in the specified - * Graphics context. - * - * @param context the Graphics context. + * Returns the character's maximum bounds in the specified Graphics context. * - * @return the character's maximum bounds in the specified - * Graphics context. + * @param context + * the Graphics context. + * @return the character's maximum bounds in the specified Graphics context. */ public Rectangle2D getMaxCharBounds(Graphics context) { return this.font.getMaxCharBounds(this.getFRCFromGraphics(context)); } - + /** - * Gets the bounds of the specified CharacterIterator - * in the specified Graphics context. - * - * @param ci the CharacterIterator. - * @param beginIndex the begin offset of the array. - * @param limit the number of characters. - * @param context the Graphics. + * Gets the bounds of the specified CharacterIterator in the specified + * Graphics context. * - * @return the bounds of the specified CharacterIterator - * in the specified Graphics context. + * @param ci + * the CharacterIterator. + * @param beginIndex + * the begin offset of the array. + * @param limit + * the number of characters. + * @param context + * the Graphics. + * @return the bounds of the specified CharacterIterator in the specified + * Graphics context. */ - public Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, - int limit, Graphics context) { - return font.getStringBounds(ci, beginIndex, limit, - this.getFRCFromGraphics(context)); + public Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, int limit, + Graphics context) { + return font.getStringBounds(ci, beginIndex, limit, this.getFRCFromGraphics(context)); } /** - * Gets the bounds of the specified String - * in the specified Graphics context. - * - * @param str the String. - * @param beginIndex the begin offset of the array. - * @param limit the number of characters. - * @param context the Graphics. - * - * @return the bounds of the specified String - * in the specified Graphics context. + * Gets the bounds of the specified String in the specified Graphics + * context. + * + * @param str + * the String. + * @param beginIndex + * the begin offset of the array. + * @param limit + * the number of characters. + * @param context + * the Graphics. + * @return the bounds of the specified String in the specified Graphics + * context. */ - public Rectangle2D getStringBounds(String str, int beginIndex, int limit, - Graphics context) { - return font.getStringBounds(str, beginIndex, limit, - this.getFRCFromGraphics(context)); + public Rectangle2D getStringBounds(String str, int beginIndex, int limit, Graphics context) { + return font.getStringBounds(str, beginIndex, limit, this.getFRCFromGraphics(context)); } - /** - * Gets the bounds of the specified characters array - * in the specified Graphics context. - * - * @param chars the characters array. - * @param beginIndex the begin offset of the array. - * @param limit the number of characters. - * @param context the Graphics. + * Gets the bounds of the specified characters array in the specified + * Graphics context. * - * @return the bounds of the specified characters array - * in the specified Graphics context. + * @param chars + * the characters array. + * @param beginIndex + * the begin offset of the array. + * @param limit + * the number of characters. + * @param context + * the Graphics. + * @return the bounds of the specified characters array in the specified + * Graphics context. */ - public Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, - Graphics context) { - return font.getStringBounds(chars, beginIndex, limit, - this.getFRCFromGraphics(context)); + public Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, Graphics context) { + return font.getStringBounds(chars, beginIndex, limit, this.getFRCFromGraphics(context)); } /** - * Gets the bounds of the specified String - * in the specified Graphics context. - * - * @param str the String. - * @param context the Graphics. - * - * @return the bounds of the specified String - * in the specified Graphics context. + * Gets the bounds of the specified String in the specified Graphics + * context. + * + * @param str + * the String. + * @param context + * the Graphics. + * @return the bounds of the specified String in the specified Graphics + * context. */ public Rectangle2D getStringBounds(String str, Graphics context) { return font.getStringBounds(str, this.getFRCFromGraphics(context)); } /** - * Checks if the Font has uniform line metrics or not. - * The Font can contain characters of other fonts for - * covering character set. In this case the Font isn't - * uniform. - * - * @return true, if the Font has uniform line metrics, - * false otherwise. + * Checks if the Font has uniform line metrics or not. The Font can contain + * characters of other fonts for covering character set. In this case the + * Font isn't uniform. + * + * @return true, if the Font has uniform line metrics, false otherwise. */ public boolean hasUniformLineMetrics() { return this.font.hasUniformLineMetrics(); } /** - * Returns the distance from the leftmost point to the rightmost - * point on the string's baseline showing the specified array - * of bytes in this Font. - * - * @param data the array of bytes to be measured. - * @param off the start offset. - * @param len the number of bytes to be measured. - * + * Returns the distance from the leftmost point to the rightmost point on + * the string's baseline showing the specified array of bytes in this Font. + * + * @param data + * the array of bytes to be measured. + * @param off + * the start offset. + * @param len + * the number of bytes to be measured. * @return the advance width of the array. */ public int bytesWidth(byte[] data, int off, int len) { int width = 0; - if ((off >= data.length) || (off < 0)){ + if ((off >= data.length) || (off < 0)) { // awt.13B=offset off is out of range throw new IllegalArgumentException(Messages.getString("awt.13B")); //$NON-NLS-1$ } - if ((off+len > data.length)){ + if ((off + len > data.length)) { // awt.13C=number of elemets len is out of range throw new IllegalArgumentException(Messages.getString("awt.13C")); //$NON-NLS-1$ } - for (int i = off; i < off+len; i++){ + for (int i = off; i < off + len; i++) { width += charWidth(data[i]); } @@ -319,29 +331,31 @@ public abstract class FontMetrics implements Serializable { } /** - * Returns the distance from the leftmost point to the rightmost - * point on the string's baseline showing the specified array - * of characters in this Font. - * - * @param data the array of characters to be measured. - * @param off the start offset. - * @param len the number of bytes to be measured. - * + * Returns the distance from the leftmost point to the rightmost point on + * the string's baseline showing the specified array of characters in this + * Font. + * + * @param data + * the array of characters to be measured. + * @param off + * the start offset. + * @param len + * the number of bytes to be measured. * @return the advance width of the array. */ - public int charsWidth(char[] data, int off , int len){ + public int charsWidth(char[] data, int off, int len) { int width = 0; - if ((off >= data.length) || (off < 0)){ + if ((off >= data.length) || (off < 0)) { // awt.13B=offset off is out of range throw new IllegalArgumentException(Messages.getString("awt.13B")); //$NON-NLS-1$ } - if ((off+len > data.length)){ + if ((off + len > data.length)) { // awt.13C=number of elemets len is out of range throw new IllegalArgumentException(Messages.getString("awt.13C")); //$NON-NLS-1$ } - for (int i = off; i < off+len; i++){ + for (int i = off; i < off + len; i++) { width += charWidth(data[i]); } @@ -349,12 +363,11 @@ public abstract class FontMetrics implements Serializable { } /** - * Returns the distance from the leftmost point to the rightmost - * point of the specified character in this Font. - * - * @param ch the specified unicode point code of - * character to be measured. + * Returns the distance from the leftmost point to the rightmost point of + * the specified character in this Font. * + * @param ch + * the specified Unicode point code of character to be measured. * @return the advance width of the character. */ public int charWidth(int ch) { @@ -362,11 +375,11 @@ public abstract class FontMetrics implements Serializable { } /** - * Returns the distance from the leftmost point to the rightmost - * point of the specified character in this Font. - * - * @param ch the specified character to be measured. + * Returns the distance from the leftmost point to the rightmost point of + * the specified character in this Font. * + * @param ch + * the specified character to be measured. * @return the advance width of the character. */ public int charWidth(char ch) { @@ -383,11 +396,11 @@ public abstract class FontMetrics implements Serializable { } /** - * Gets the maximum font ascent of the Font associated with - * this FontMetrics. + * Gets the maximum font ascent of the Font associated with this + * FontMetrics. * - * @return the maximum font ascent of the Font associated with - * this FontMetrics. + * @return the maximum font ascent of the Font associated with this + * FontMetrics. */ public int getMaxAscent() { return 0; @@ -397,7 +410,6 @@ public abstract class FontMetrics implements Serializable { * Gets the maximum font descent of character in this Font. * * @return the maximum font descent of character in this Font. - * * @deprecated Replaced by getMaxDescent() method. */ @Deprecated @@ -426,23 +438,22 @@ public abstract class FontMetrics implements Serializable { /** * Returns the advance width for the specified String in this Font. * - * @param str String to be measured. - * - * @return the the advance width for the specified String - * in this Font. + * @param str + * String to be measured. + * @return the the advance width for the specified String in this Font. */ public int stringWidth(String str) { return 0; } - + /** - * Returns FontRenderContext instanse of the Graphics context specified. - * - * @param context the specified Graphics context + * Returns a FontRenderContext instance of the Graphics context specified. * + * @param context + * the specified Graphics context. * @return a FontRenderContext of the specified Graphics context. */ - private FontRenderContext getFRCFromGraphics(Graphics context){ + private FontRenderContext getFRCFromGraphics(Graphics context) { FontRenderContext frc; if (context instanceof Graphics2D) { frc = ((Graphics2D)context).getFontRenderContext(); @@ -453,4 +464,3 @@ public abstract class FontMetrics implements Serializable { return frc; } } - diff --git a/awt/java/awt/GradientPaint.java b/awt/java/awt/GradientPaint.java index 0e06528f98..3b32ef5304 100644 --- a/awt/java/awt/GradientPaint.java +++ b/awt/java/awt/GradientPaint.java @@ -26,56 +26,71 @@ import org.apache.harmony.awt.internal.nls.Messages; /** * The GradientPaint class defines a way to fill a Shape with a linear color - * gradient pattern. + * gradient pattern. *

- * The GradientPaint's fill pattern is determined by two points and two colors, - * plus the cyclic mode option. - * Each of the two points is painted with its corresponding color, and on - * the line segment connecting the two points, the color is proportionally - * changed between the two colors. For points on the same line which are not - * between the two specified points (outside of the connecting segment) their - * color is determined by the cyclic mode option. If the mode is cyclic, then - * the rest of the line repeats the color pattern of the connecting segment, - * cycling back and forth between the two colors. If not, the mode is acyclic - * which means that all points - * on the line outside the connecting line segment are given the same - * color as the closest of the two specified points. + * The GradientPaint's fill pattern is determined by two points and two colors, + * plus the cyclic mode option. Each of the two points is painted with its + * corresponding color, and on the line segment connecting the two points, the + * color is proportionally changed between the two colors. For points on the + * same line which are not between the two specified points (outside of the + * connecting segment) their color is determined by the cyclic mode option. If + * the mode is cyclic, then the rest of the line repeats the color pattern of + * the connecting segment, cycling back and forth between the two colors. If + * not, the mode is acyclic which means that all points on the line outside the + * connecting line segment are given the same color as the closest of the two + * specified points. *

- * The color of points that are not on the line connecting the two - * specified points are given by perpendicular projection: by taking - * the set of lines perpendicular to the connecting line and for each - * one, the whole line is colored with the same color. + * The color of points that are not on the line connecting the two specified + * points are given by perpendicular projection: by taking the set of lines + * perpendicular to the connecting line and for each one, the whole line is + * colored with the same color. + * + * @since Android 1.0 */ public class GradientPaint implements Paint { - - /** The start point color. */ + + /** + * The start point color. + */ Color color1; - /** The end color point. */ + /** + * The end color point. + */ Color color2; - /** The location of the start point. */ + /** + * The location of the start point. + */ Point2D point1; - /** The location of the end point. */ + /** + * The location of the end point. + */ Point2D point2; - /** The indicator of cycle filling. If TRUE filling - * repeated outside points stripe, if FALSE solid color filling outside. */ + /** + * The indicator of cycle filling. If TRUE filling repeated outside points + * stripe, if FALSE solid color filling outside. + */ boolean cyclic; /** * Instantiates a new GradientPaint with cyclic or acyclic mode. * - * @param point1 the first specified point. - * @param color1 the Color of the first specified point. - * @param point2 the second specified point. - * @param color2 the Color of the second specified point. - * @param cyclic the cyclic mode - true if the gradient pattern should cycle - * repeatedly between the two colors; false otherwise. - */ - public GradientPaint(Point2D point1, Color color1, Point2D point2, - Color color2, boolean cyclic) { + * @param point1 + * the first specified point. + * @param color1 + * the Color of the first specified point. + * @param point2 + * the second specified point. + * @param color2 + * the Color of the second specified point. + * @param cyclic + * the cyclic mode - true if the gradient pattern should cycle + * repeatedly between the two colors; false otherwise. + */ + public GradientPaint(Point2D point1, Color color1, Point2D point2, Color color2, boolean cyclic) { if (point1 == null || point2 == null) { // awt.6D=Point is null throw new NullPointerException(Messages.getString("awt.6D")); //$NON-NLS-1$ @@ -93,17 +108,24 @@ public class GradientPaint implements Paint { } /** - * Instantiates a new GradientPaint with cyclic or acyclic mode; - * points are specified by coordinates. + * Instantiates a new GradientPaint with cyclic or acyclic mode; points are + * specified by coordinates. * - * @param x1 the X coordinate of the first point. - * @param y1 the Y coordinate of the first point. - * @param color1 the color of the first point. - * @param x2 the X coordinate of the second point. - * @param y2 the Y coordinate of the second point. - * @param color2 the color of the second point. - * @param cyclic the cyclic mode - true if the gradient pattern should cycle - * repeatedly between the two colors; false otherwise. + * @param x1 + * the X coordinate of the first point. + * @param y1 + * the Y coordinate of the first point. + * @param color1 + * the color of the first point. + * @param x2 + * the X coordinate of the second point. + * @param y2 + * the Y coordinate of the second point. + * @param color2 + * the color of the second point. + * @param cyclic + * the cyclic mode - true if the gradient pattern should cycle + * repeatedly between the two colors; false otherwise. */ public GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2, boolean cyclic) { @@ -111,15 +133,21 @@ public class GradientPaint implements Paint { } /** - * Instantiates a new acyclic GradientPaint; - * points are specified by coordinates. + * Instantiates a new acyclic GradientPaint; points are specified by + * coordinates. * - * @param x1 the X coordinate of the first point. - * @param y1 the Y coordinate of the first point. - * @param color1 the color of the first point. - * @param x2 the X coordinate of the second point. - * @param y2 the Y coordinate of the second point. - * @param color2 the color of the second point. + * @param x1 + * the X coordinate of the first point. + * @param y1 + * the Y coordinate of the first point. + * @param color1 + * the color of the first point. + * @param x2 + * the X coordinate of the second point. + * @param y2 + * the Y coordinate of the second point. + * @param color2 + * the color of the second point. */ public GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2) { this(x1, y1, color1, x2, y2, color2, false); @@ -128,29 +156,38 @@ public class GradientPaint implements Paint { /** * Instantiates a new acyclic GradientPaint. * - * @param point1 the first specified point. - * @param color1 the Color of the first specified point. - * @param point2 the second specified point. - * @param color2 the Color of the second specified point. + * @param point1 + * the first specified point. + * @param color1 + * the Color of the first specified point. + * @param point2 + * the second specified point. + * @param color2 + * the Color of the second specified point. */ public GradientPaint(Point2D point1, Color color1, Point2D point2, Color color2) { this(point1, color1, point2, color2, false); } /** - * Creates PaintContext for a color pattern generating. - * - * @param cm the ColorModel of the Paint data. - * @param deviceBounds the bounding Rectangle of graphics primitives - * being rendered in the device space. - * @param userBounds tthe bounding Rectangle of graphics primitives - * being rendered in the user space. - * @param t the AffineTransform from user space into device space. - * @param hints the RrenderingHints object. + * Creates PaintContext for a color pattern generating. * + * @param cm + * the ColorModel of the Paint data. + * @param deviceBounds + * the bounding Rectangle of graphics primitives being rendered + * in the device space. + * @param userBounds + * the bounding Rectangle of graphics primitives being rendered + * in the user space. + * @param t + * the AffineTransform from user space into device space. + * @param hints + * the RrenderingHints object. * @return the PaintContext for color pattern generating. - * - * @see java.awt.Paint#createContext(java.awt.image.ColorModel, java.awt.Rectangle, java.awt.geom.Rectangle2D, java.awt.geom.AffineTransform, java.awt.RenderingHints) + * @see java.awt.Paint#createContext(java.awt.image.ColorModel, + * java.awt.Rectangle, java.awt.geom.Rectangle2D, + * java.awt.geom.AffineTransform, java.awt.RenderingHints) */ public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, AffineTransform t, RenderingHints hints) { @@ -178,7 +215,7 @@ public class GradientPaint implements Paint { /** * Gets the first point. * - * @return the Point object - the first point. + * @return the Point object - the first point. */ public Point2D getPoint1() { return point1; @@ -197,7 +234,6 @@ public class GradientPaint implements Paint { * Gets the transparency mode for the GradientPaint. * * @return the transparency mode for the GradientPaint. - * * @see java.awt.Transparency#getTransparency() */ public int getTransparency() { @@ -207,11 +243,11 @@ public class GradientPaint implements Paint { } /** - * Returns the GradientPaint mode: true for cyclic mode, false for - * acyclic mode. + * Returns the GradientPaint mode: true for cyclic mode, false for acyclic + * mode. * - * @return true if the gradient cycles repeatedly between the two colors; - * false otherwise. + * @return true if the gradient cycles repeatedly between the two colors; + * false otherwise. */ public boolean isCyclic() { return cyclic; diff --git a/awt/java/awt/Graphics.java b/awt/java/awt/Graphics.java index c20f6bc9e0..2d6e79fca4 100644 --- a/awt/java/awt/Graphics.java +++ b/awt/java/awt/Graphics.java @@ -18,26 +18,27 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; import java.awt.image.ImageObserver; import java.text.AttributedCharacterIterator; /** - * The abstract Graphics class allows applications to draw on a screen - * or other rendering target. There are several properties which - * define rendering options: origin point, clipping area, color, font. - *

- * The origin point specifies the beggining of the clipping area coordinate - * system. All coordinates used in rendering operations are computed with - * respect to this point. The clipping area defines the boundaries where - * rendering operations can be performed. Rendering operations can't modify - * pixels outside of the clipping area. - *

- * The draw and fill methods allow applications to drawing shapes, text, - * images with specified font and color options in the specified part - * of the screen. - * + * The abstract Graphics class allows applications to draw on a screen or other + * rendering target. There are several properties which define rendering + * options: origin point, clipping area, color, font.
+ *
+ * The origin point specifies the beginning of the clipping area coordinate + * system. All coordinates used in rendering operations are computed with + * respect to this point. The clipping area defines the boundaries where + * rendering operations can be performed. Rendering operations can't modify + * pixels outside of the clipping area.
+ *
+ * The draw and fill methods allow applications to drawing shapes, text, images + * with specified font and color options in the specified part of the screen. + * + * @since Android 1.0 */ public abstract class Graphics { @@ -45,7 +46,7 @@ public abstract class Graphics { /** * Instantiates a new Graphics. This constructor is default for Graphics and - * can not be called directly. + * can not be called directly. */ protected Graphics() { } @@ -53,19 +54,22 @@ public abstract class Graphics { // Public methods /** - * Creates a copy of the Graphics object with a new origin and a new - * specified clip area. The new clip area is the rectangle defined by - * the origin point with coordinates X,Y and the given width and height. - * The coordinates of all subsequent rendering operations will be computed - * with respect to the new origin and can be performed only within the - * range of the clipping area dimentions. - * - * @param x the X coordinate of the original point - * @param y the Y coordinate of the original point - * @param width the width of clipping area - * @param height the height of clipping area + * Creates a copy of the Graphics object with a new origin and a new + * specified clip area. The new clip area is the rectangle defined by the + * origin point with coordinates X,Y and the given width and height. The + * coordinates of all subsequent rendering operations will be computed with + * respect to the new origin and can be performed only within the range of + * the clipping area dimensions. * - * @return the Graphics object with new origin point and clipping area. + * @param x + * the X coordinate of the original point. + * @param y + * the Y coordinate of the original point. + * @param width + * the width of clipping area. + * @param height + * the height of clipping area. + * @return the Graphics object with new origin point and clipping area. */ public Graphics create(int x, int y, int width, int height) { Graphics res = create(); @@ -75,18 +79,24 @@ public abstract class Graphics { } /** - * Draws the higlighted outline of a rectangle. + * Draws the highlighted outline of a rectangle. * - * @param x the X coordinate of the rectangle's top left corner. - * @param y the Y coordinate of the rectangle's top left corner. - * @param width the width of rectangle. - * @param height the height of rectangle. - * @param raised a boolean value that determines whether the rectangle - * is drawn as raised or indented. + * @param x + * the X coordinate of the rectangle's top left corner. + * @param y + * the Y coordinate of the rectangle's top left corner. + * @param width + * the width of rectangle. + * @param height + * the height of rectangle. + * @param raised + * a boolean value that determines whether the rectangle is drawn + * as raised or indented. */ public void draw3DRect(int x, int y, int width, int height, boolean raised) { // Note: lighter/darker colors should be used to draw 3d rect. - // The resulting rect is (width+1)x(height+1). Stroke and paint attributes of + // The resulting rect is (width+1)x(height+1). Stroke and paint + // attributes of // the Graphics2D should be reset to the default values. // fillRect is used instead of drawLine to bypass stroke // reset/set and rasterization. @@ -103,36 +113,46 @@ public abstract class Graphics { setColor(colorUp); fillRect(x, y, width, 1); - fillRect(x, y+1, 1, height); + fillRect(x, y + 1, 1, height); setColor(colorDown); - fillRect(x+width, y, 1, height); - fillRect(x+1, y+height, width, 1); + fillRect(x + width, y, 1, height); + fillRect(x + 1, y + height, width, 1); } /** - * Draws the text represented by byte array. This method uses the current + * Draws the text represented by byte array. This method uses the current * font and color for rendering. * - * @param bytes the byte array which contains the text to be drawn. - * @param off the offset within the byte array of the text to be drawn. - * @param len the number of bytes of text to draw. - * @param x the X coordinate where the text is to be drawn. - * @param y the Y coordinate where the text is to be drawn. + * @param bytes + * the byte array which contains the text to be drawn. + * @param off + * the offset within the byte array of the text to be drawn. + * @param len + * the number of bytes of text to draw. + * @param x + * the X coordinate where the text is to be drawn. + * @param y + * the Y coordinate where the text is to be drawn. */ public void drawBytes(byte[] bytes, int off, int len, int x, int y) { drawString(new String(bytes, off, len), x, y); } /** - * Draws the text represented by character array. This method uses the + * Draws the text represented by character array. This method uses the * current font and color for rendering. * - * @param chars the character array. - * @param off the offset within the character array of the text to be drawn. - * @param len the number of characters which will be drawn. - * @param x the X coordinate where the text is to be drawn. - * @param y the Y coordinate where the text is to be drawn. + * @param chars + * the character array. + * @param off + * the offset within the character array of the text to be drawn. + * @param len + * the number of characters which will be drawn. + * @param x + * the X coordinate where the text is to be drawn. + * @param y + * the Y coordinate where the text is to be drawn. */ public void drawChars(char[] chars, int off, int len, int x, int y) { drawString(new String(chars, off, len), x, y); @@ -141,37 +161,51 @@ public abstract class Graphics { /** * Draws the outline of a polygon which is defined by Polygon object. * - * @param p the Polygon object. + * @param p + * the Polygon object. */ public void drawPolygon(Polygon p) { drawPolygon(p.xpoints, p.ypoints, p.npoints); } /** - * Draws the rectangle with the specified width and length and top left + * Draws the rectangle with the specified width and length and top left * corner coordinates. * - * @param x the X coordinate of the rectangle's top left corner. - * @param y the Y coordinate of the rectangle's top left corner. - * @param width the width of the rectangle. - * @param height the height of the rectangle. + * @param x + * the X coordinate of the rectangle's top left corner. + * @param y + * the Y coordinate of the rectangle's top left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. */ public void drawRect(int x, int y, int width, int height) { - int []xpoints = {x, x, x+width, x+width}; - int []ypoints = {y, y+height, y+height, y}; + int[] xpoints = { + x, x, x + width, x + width + }; + int[] ypoints = { + y, y + height, y + height, y + }; drawPolygon(xpoints, ypoints, 4); } /** - * Fills the higlighted outline of a rectangle. + * Fills the highlighted outline of a rectangle. * - * @param x the X coordinate of the rectangle's top left corner. - * @param y the Y coordinate of the rectangle's top left corner. - * @param width the width of the rectangle. - * @param height the height of the rectangle. - * @param raised a boolean value that determines whether the rectangle - * is drawn as raised or indented. + * @param x + * the X coordinate of the rectangle's top left corner. + * @param y + * the Y coordinate of the rectangle's top left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. + * @param raised + * a boolean value that determines whether the rectangle is drawn + * as raised or indented. */ public void fill3DRect(int x, int y, int width, int height, boolean raised) { // Note: lighter/darker colors should be used to draw 3d rect. @@ -179,7 +213,7 @@ public abstract class Graphics { // Stroke and paint attributes of the Graphics2D should be reset // to the default values. fillRect is used instead of drawLine to // bypass stroke reset/set and line rasterization. - + Color color = getColor(); Color colorUp, colorDown; if (raised) { @@ -194,21 +228,22 @@ public abstract class Graphics { width--; height--; - fillRect(x+1, y+1, width-1, height-1); + fillRect(x + 1, y + 1, width - 1, height - 1); setColor(colorUp); fillRect(x, y, width, 1); - fillRect(x, y+1, 1, height); + fillRect(x, y + 1, 1, height); setColor(colorDown); - fillRect(x+width, y, 1, height); - fillRect(x+1, y+height, width, 1); + fillRect(x + width, y, 1, height); + fillRect(x + 1, y + height, width, 1); } /** * Fills the polygon with the current color. * - * @param p the Polygon object. + * @param p + * the Polygon object. */ public void fillPolygon(Polygon p) { fillPolygon(p.xpoints, p.ypoints, p.npoints); @@ -222,12 +257,12 @@ public abstract class Graphics { } /** - * Gets the bounds of the current clipping area as a rectangle - * and copies it to an existing rectangle. - * - * @param r a Rectangle object where the current clipping area - * bounds are to be copied. + * Gets the bounds of the current clipping area as a rectangle and copies it + * to an existing rectangle. * + * @param r + * a Rectangle object where the current clipping area bounds are + * to be copied. * @return the bounds of the current clipping area. */ public Rectangle getClipBounds(Rectangle r) { @@ -248,8 +283,7 @@ public abstract class Graphics { /** * Gets the bounds of the current clipping area as a rectangle. * - * @return a Rectangle object - * + * @return a Rectangle object. * @deprecated Use {@link #getClipBounds()} */ @Deprecated @@ -258,9 +292,8 @@ public abstract class Graphics { } /** - * Gets the font metrics of the current font. - * The font metrics object contains information about the rendering - * of a particular font. + * Gets the font metrics of the current font. The font metrics object + * contains information about the rendering of a particular font. * * @return the font metrics of current font. */ @@ -269,19 +302,23 @@ public abstract class Graphics { } /** - * Determines whether or not the specified rectangle intersects the - * current clipping area. - * - * @param x the X coordinate of the rectangle. - * @param y the Y coordinate of the rectangle. - * @param width the width of the rectangle. - * @param height the height of the rectangle. + * Determines whether or not the specified rectangle intersects the current + * clipping area. * - * @return true, if the specified rectangle intersects the current clipping area, - * overwise false. + * @param x + * the X coordinate of the rectangle. + * @param y + * the Y coordinate of the rectangle. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. + * @return true, if the specified rectangle intersects the current clipping + * area, false otherwise. */ public boolean hitClip(int x, int y, int width, int height) { - // TODO: Create package private method Rectangle.intersects(int, int, int, int); + // TODO: Create package private method Rectangle.intersects(int, int, + // int, int); return getClipBounds().intersects(new Rectangle(x, y, width, height)); } @@ -299,45 +336,56 @@ public abstract class Graphics { // Abstract methods /** - * Clears the specified rectangle. This method fills specified rectangle - * with background color. + * Clears the specified rectangle. This method fills specified rectangle + * with background color. * - * @param x the X coordinate of the rectangle. - * @param y the Y coordinate of the rectangle. - * @param width the width of the rectangle. - * @param height the height of the rectangle. + * @param x + * the X coordinate of the rectangle. + * @param y + * the Y coordinate of the rectangle. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. */ public abstract void clearRect(int x, int y, int width, int height); /** - * Intersects the current clipping area with a new rectangle. - * If the current clipping area is not defined, the rectangle - * becomes a new clipping area. Rendering operations are only allowed - * within the new the clipping area. - * - * @param x the X coordinate of the rectangle for intersection. - * @param y the Y coordinate of the rectangle for intersection. - * @param width the width of the rectangle for intersection. - * @param height the height of the rectangle for intersection. + * Intersects the current clipping area with a new rectangle. If the current + * clipping area is not defined, the rectangle becomes a new clipping area. + * Rendering operations are only allowed within the new the clipping area. + * + * @param x + * the X coordinate of the rectangle for intersection. + * @param y + * the Y coordinate of the rectangle for intersection. + * @param width + * the width of the rectangle for intersection. + * @param height + * the height of the rectangle for intersection. */ public abstract void clipRect(int x, int y, int width, int height); /** - * Copies the rectangle area to another area specified by - * a distance (dx, dy) from the original rectangle's location. - * Positive dx and dy values give a new location defined by - * translation to the right and down from the original location, - * negative dx and dy values - to the left and up. - *

- * - * @param sx the X coordinate of the rectangle which will be copied. - * @param sy the Y coordinate of the rectangle which will be copied. - * @param width the width of the rectangle which will be copied. - * @param height the height of the rectangle which will be copied. - * @param dx the horizontal distance from the source rectangle's - * location to the copy's location. - * @param dy the vertical distance from the source rectangle's - * location to the copy's location. + * Copies the rectangle area to another area specified by a distance (dx, + * dy) from the original rectangle's location. Positive dx and dy values + * give a new location defined by translation to the right and down from the + * original location, negative dx and dy values - to the left and up. + * + * @param sx + * the X coordinate of the rectangle which will be copied. + * @param sy + * the Y coordinate of the rectangle which will be copied. + * @param width + * the width of the rectangle which will be copied. + * @param height + * the height of the rectangle which will be copied. + * @param dx + * the horizontal distance from the source rectangle's location + * to the copy's location. + * @param dy + * the vertical distance from the source rectangle's location to + * the copy's location. */ public abstract void copyArea(int sx, int sy, int width, int height, int dx, int dy); @@ -349,215 +397,314 @@ public abstract class Graphics { public abstract Graphics create(); /** - * Disposes of the Graphics. This Graphics object can not be used after - * calling this method. + * Disposes of the Graphics. This Graphics object can not be used after + * calling this method. */ public abstract void dispose(); /** - * Draws the arc covering the specified rectangle and using the current color. - * The rectangle is defined by the origin point (X, Y) and dimentions - * (width and height). The arc center is the the center of specified rectangle. - * The angle origin is 3 o'clock position, the positive angle is counted as a - * counter-clockwise rotation, the negotive angle is counted as clockwise rotation. - * - * @param x the X origin coordinate of the rectangle which scales the arc. - * @param y the Y origin coordinate of the rectangle which scales the arc. - * @param width the width of the rectangle which scales the arc. - * @param height the height of the rectangle which scales the arc. - * @param sa start angle - the origin angle of arc. - * @param ea arc angle - the angular arc value relative to the start angle. + * Draws the arc covering the specified rectangle and using the current + * color. The rectangle is defined by the origin point (X, Y) and dimensions + * (width and height). The arc center is the the center of specified + * rectangle. The angle origin is 3 o'clock position, the positive angle is + * counted as a counter-clockwise rotation, the negative angle is counted as + * clockwise rotation. + * + * @param x + * the X origin coordinate of the rectangle which scales the arc. + * @param y + * the Y origin coordinate of the rectangle which scales the arc. + * @param width + * the width of the rectangle which scales the arc. + * @param height + * the height of the rectangle which scales the arc. + * @param sa + * start angle - the origin angle of arc. + * @param ea + * arc angle - the angular arc value relative to the start angle. */ public abstract void drawArc(int x, int y, int width, int height, int sa, int ea); /** - * Draws the specified image with the defined background color. - * The top left corner of image will be drawn at point (x, y) - * in current coordinate system. The image loading process notifies the - * specified Image Observer. This method returns true if the image - * has loaded, overwise it returns false. - * - * @param img the image which will be drawn. - * @param x the X coordinate of the image top left corner. - * @param y the Y coordinate of the image top left corner. - * @param bgcolor the background color. - * @param observer the ImageObserver object which should be notified about image loading process. - * - * @return true, if loading image is successful or image is null, overwise false. + * Draws the specified image with the defined background color. The top left + * corner of image will be drawn at point (x, y) in current coordinate + * system. The image loading process notifies the specified Image Observer. + * This method returns true if the image has loaded, otherwise it returns + * false. + * + * @param img + * the image which will be drawn. + * @param x + * the X coordinate of the image top left corner. + * @param y + * the Y coordinate of the image top left corner. + * @param bgcolor + * the background color. + * @param observer + * the ImageObserver object which should be notified about image + * loading process. + * @return true, if loading image is successful or image is null, false + * otherwise. */ public abstract boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer); /** - * Draws the specified image. - * The top left corner of image will be drawn at point (x, y) - * in current coordinate system. The image loading process notifies the - * specified Image Observer. This method returns true if the image - * has loaded, overwise it returns false. + * Draws the specified image. The top left corner of image will be drawn at + * point (x, y) in current coordinate system. The image loading process + * notifies the specified Image Observer. This method returns true if the + * image has loaded, otherwise it returns false. * - * @param img the image which will be drawn. - * @param x the X coordinate of the image top left corner. - * @param y the Y coordinate of the image top left corner. - * @param observer the ImageObserver object which should be notified about image loading process. - * - * @return true, if loading image is successful or image is null, overwise false. + * @param img + * the image which will be drawn. + * @param x + * the X coordinate of the image top left corner. + * @param y + * the Y coordinate of the image top left corner. + * @param observer + * the ImageObserver object which should be notified about image + * loading process. + * @return true, if loading image is successful or image is null, otherwise + * false. */ public abstract boolean drawImage(Image img, int x, int y, ImageObserver observer); /** - * Scales the specified image to fit in the specified rectangle and - * draws it with the defined background color. The top left corner - * of the image will be drawn at the point (x, y) in current coordinate - * system. The non-opaque pixels will be drawn in the background color. - * The image loading process notifies the specified Image Observer. - * This method returns true if the image has loaded, overwise it returns false. - * - * @param img the image which will be drawn. - * @param x the X coordinate of the image's top left corner. - * @param y the Y coordinate of the image's top left corner. - * @param width the width of rectangle which scales the image. - * @param height the height of rectangle which scales the image. - * @param bgcolor the background color. - * @param observer the ImageObserver object which should be notified about image loading process. - * - * @return true, if loading image is successful or image is null, overwise false. - */ - public abstract boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer); - - /** - * Scales the specified image to fit in the specified rectangle and - * draws it. The top left corner of the image will be drawn at the - * point (x, y) in current coordinate system. The image loading process - * notifies the specified Image Observer. - * This method returns true if the image has loaded, overwise it returns false. - * - * @param img the image which will be drawn. - * @param x the X coordinate of the image top left corner. - * @param y the Y coordinate of the image top left corner. - * @param width the width of rectangle which scales the image. - * @param height the height of rectangle which scales the image. - * @param observer the ImageObserver object which should be notified about image loading process. - * - * @return true, if loading image is successful or image is null, overwise false. - */ - public abstract boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer); - - /** - * Scales the specified area of the specified image to fit in the rectangle area - * defined by its corners coordinates and draws the sub-image with the specified - * background color. The sub-image to be drawn is defined by its top left - * corner coordinates (sx1, sy1) and bottom right corner coordinates (sx2, sy2) - * computed with respect to the origin (top left corner) of the source image. - * The non opaque pixels will be drawn in the background color. The - * image loading process notifies specified Image Observer. - * This method returns true if the image - * has loaded, overwise it returns false. - * - * @param img the image which will be drawn. - * @param dx1 the X top left corner coordinate of the destination rectangle area. - * @param dy1 the Y top left corner coordinate of the destination rectangle area. - * @param dx2 the X bottom right corner coordinate of the destination rectangle area. - * @param dy2 the Y bottom right corner coordinate of the destination rectangle area. - * @param sx1 the X top left corner coordinate of the area to be drawn within the source image. - * @param sy1 the Y top left corner coordinate of the area to be drawn within the source image. - * @param sx2 the X bottom right corner coordinate of the area to be drawn within the source image. - * @param sy2 the Y bottom right corner coordinate of the area to be drawn within the source image. - * @param bgcolor the background color. - * @param observer the ImageObserver object which should be notified about image loading process. - * - * @return true, if loading image is successful or image is null, overwise false. - */ - public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer); - - /** - * Scales the specified area of the specified image to fit in the rectangle area - * defined by its corners coordinates and draws the sub-image. The sub-image - * to be drawn is defined by its top left - * corner coordinates (sx1, sy1) and bottom right corner coordinates (sx2, sy2) - * computed with respect to the origin (top left corner) of the source image. - * The image loading process notifies specified Image Observer. - * This method returns true if the image - * has loaded, overwise it returns false. - * - * @param img the image which will be drawn. - * @param dx1 the X top left corner coordinate of the destination rectangle area. - * @param dy1 the Y top left corner coordinate of the destination rectangle area. - * @param dx2 the X bottom right corner coordinate of the destination rectangle area. - * @param dy2 the Y bottom right corner coordinate of the destination rectangle area. - * @param sx1 the X top left corner coordinate of the area to be drawn within the source image. - * @param sy1 the Y top left corner coordinate of the area to be drawn within the source image. - * @param sx2 the X bottom right corner coordinate of the area to be drawn within the source image. - * @param sy2 the Y bottom right corner coordinate of the area to be drawn within the source image. - * @param observer the ImageObserver object which should be notified about image loading process. - * - * @return true, if loading image is successful or image is null, overwise false. - */ - public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer); - - /** - * Draws a line from the point (x1, y1) to the point (x2, y2). - * This method draws the line with current color - * which can be changed by setColor(Color c) method. - * - * @param x1 the X coordinate of the first point. - * @param y1 the Y coordinate of the first point. - * @param x2 the X coordinate of the second point. - * @param y2 the Y coordinate of the second point. + * Scales the specified image to fit in the specified rectangle and draws it + * with the defined background color. The top left corner of the image will + * be drawn at the point (x, y) in current coordinate system. The non-opaque + * pixels will be drawn in the background color. The image loading process + * notifies the specified Image Observer. This method returns true if the + * image has loaded, otherwise it returns false. + * + * @param img + * the image which will be drawn. + * @param x + * the X coordinate of the image's top left corner. + * @param y + * the Y coordinate of the image's top left corner. + * @param width + * the width of rectangle which scales the image. + * @param height + * the height of rectangle which scales the image. + * @param bgcolor + * the background color. + * @param observer + * the ImageObserver object which should be notified about image + * loading process. + * @return true, if loading image is successful or image is null, otherwise + * false. + */ + public abstract boolean drawImage(Image img, int x, int y, int width, int height, + Color bgcolor, ImageObserver observer); + + /** + * Scales the specified image to fit in the specified rectangle and draws + * it. The top left corner of the image will be drawn at the point (x, y) in + * current coordinate system. The image loading process notifies the + * specified Image Observer. This method returns true if the image has + * loaded, otherwise it returns false. + * + * @param img + * the image which will be drawn. + * @param x + * the X coordinate of the image top left corner. + * @param y + * the Y coordinate of the image top left corner. + * @param width + * the width of rectangle which scales the image. + * @param height + * the height of rectangle which scales the image. + * @param observer + * the ImageObserver object which should be notified about image + * loading process. + * @return true, if loading image is successful or image is null, otherwise + * false. + */ + public abstract boolean drawImage(Image img, int x, int y, int width, int height, + ImageObserver observer); + + /** + * Scales the specified area of the specified image to fit in the rectangle + * area defined by its corners coordinates and draws the sub-image with the + * specified background color. The sub-image to be drawn is defined by its + * top left corner coordinates (sx1, sy1) and bottom right corner + * coordinates (sx2, sy2) computed with respect to the origin (top left + * corner) of the source image. The non opaque pixels will be drawn in the + * background color. The image loading process notifies specified Image + * Observer. This method returns true if the image has loaded, otherwise it + * returns false. + * + * @param img + * the image which will be drawn. + * @param dx1 + * the X top left corner coordinate of the destination rectangle + * area. + * @param dy1 + * the Y top left corner coordinate of the destination rectangle + * area. + * @param dx2 + * the X bottom right corner coordinate of the destination + * rectangle area. + * @param dy2 + * the Y bottom right corner coordinate of the destination + * rectangle area. + * @param sx1 + * the X top left corner coordinate of the area to be drawn + * within the source image. + * @param sy1 + * the Y top left corner coordinate of the area to be drawn + * within the source image. + * @param sx2 + * the X bottom right corner coordinate of the area to be drawn + * within the source image. + * @param sy2 + * the Y bottom right corner coordinate of the area to be drawn + * within the source image. + * @param bgcolor + * the background color. + * @param observer + * the ImageObserver object which should be notified about image + * loading process. + * @return true, if loading image is successful or image is null, false + * otherwise. + */ + public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, + int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer); + + /** + * Scales the specified area of the specified image to fit in the rectangle + * area defined by its corners coordinates and draws the sub-image. The + * sub-image to be drawn is defined by its top left corner coordinates (sx1, + * sy1) and bottom right corner coordinates (sx2, sy2) computed with respect + * to the origin (top left corner) of the source image. The image loading + * process notifies specified Image Observer. This method returns true if + * the image has loaded, otherwise it returns false. + * + * @param img + * the image which will be drawn. + * @param dx1 + * the X top left corner coordinate of the destination rectangle + * area. + * @param dy1 + * the Y top left corner coordinate of the destination rectangle + * area. + * @param dx2 + * the X bottom right corner coordinate of the destination + * rectangle area. + * @param dy2 + * the Y bottom right corner coordinate of the destination + * rectangle area. + * @param sx1 + * the X top left corner coordinate of the area to be drawn + * within the source image. + * @param sy1 + * the Y top left corner coordinate of the area to be drawn + * within the source image. + * @param sx2 + * the X bottom right corner coordinate of the area to be drawn + * within the source image. + * @param sy2 + * the Y bottom right corner coordinate of the area to be drawn + * within the source image. + * @param observer + * the ImageObserver object which should be notified about image + * loading process. + * @return true, if loading image is successful or image is null, false + * otherwise. + */ + public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, + int sy1, int sx2, int sy2, ImageObserver observer); + + /** + * Draws a line from the point (x1, y1) to the point (x2, y2). This method + * draws the line with current color which can be changed by setColor(Color + * c) method. + * + * @param x1 + * the X coordinate of the first point. + * @param y1 + * the Y coordinate of the first point. + * @param x2 + * the X coordinate of the second point. + * @param y2 + * the Y coordinate of the second point. */ public abstract void drawLine(int x1, int y1, int x2, int y2); /** - * Draws the ouline of an oval to fit in the rectangle defined - * by the given width, height, and top left corner. + * Draws the outline of an oval to fit in the rectangle defined by the given + * width, height, and top left corner. * - * @param x the X top left corner oval coordinate - * @param y the Y top left corner oval coordinate - * @param width the oval width - * @param height the oval height + * @param x + * the X top left corner oval coordinate. + * @param y + * the Y top left corner oval coordinate. + * @param width + * the oval width. + * @param height + * the oval height. */ public abstract void drawOval(int x, int y, int width, int height); /** - * Draws the outline of a polygon. The polygon vertices are defined by points - * with xpoints[i], ypoints[i] as coordinates. The polygon edges are the - * lines from the points with (xpoints[i-1], ypoints[i-1]) coordinates to - * the points with (xpoints[i], ypoints[i]) coordinates, for 0 < i < npoints +1. + * Draws the outline of a polygon. The polygon vertices are defined by + * points with xpoints[i], ypoints[i] as coordinates. The polygon edges are + * the lines from the points with (xpoints[i-1], ypoints[i-1]) coordinates + * to the points with (xpoints[i], ypoints[i]) coordinates, for 0 < i < + * npoints +1. * - * @param xpoints the array of X coordinates of the polygon vertices. - * @param ypoints the array of Y coordinates of the polygon vertices. - * @param npoints the number of polygon vertices/points. + * @param xpoints + * the array of X coordinates of the polygon vertices. + * @param ypoints + * the array of Y coordinates of the polygon vertices. + * @param npoints + * the number of polygon vertices/points. */ public abstract void drawPolygon(int[] xpoints, int[] ypoints, int npoints); /** - * Draws a set of connected lines which are defined by the x and y coordinate arrays. - * The polyline is closed if coordinates of the first point are the same as - * coordinates of the last point. + * Draws a set of connected lines which are defined by the x and y + * coordinate arrays. The polyline is closed if coordinates of the first + * point are the same as coordinates of the last point. * - * @param xpoints the array of X point coordinates. - * @param ypoints the array of Y point coordinates. - * @param npoints the number of points. + * @param xpoints + * the array of X point coordinates. + * @param ypoints + * the array of Y point coordinates. + * @param npoints + * the number of points. */ public abstract void drawPolyline(int[] xpoints, int[] ypoints, int npoints); /** * Draws the outline of a rectangle with round corners. * - * @param x the X coordinate of the rectangle's top left corner. - * @param y the Y coordinate of the rectangle's top left corner. - * @param width the width of the rectangle. - * @param height the height of the rectangle. - * @param arcWidth the arc width for the corners. - * @param arcHeight the arc height for the corners. - */ - public abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight); - - /** - * Draws a text defined by an iterator. The iterator should specify the font - * for every character. - * - * @param iterator the iterator. - * @param x the X coordinate of the firt character. - * @param y the Y coordinate of the first character. + * @param x + * the X coordinate of the rectangle's top left corner. + * @param y + * the Y coordinate of the rectangle's top left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. + * @param arcWidth + * the arc width for the corners. + * @param arcHeight + * the arc height for the corners. + */ + public abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, + int arcHeight); + + /** + * Draws a text defined by an iterator. The iterator should specify the font + * for every character. + * + * @param iterator + * the iterator. + * @param x + * the X coordinate of the first character. + * @param y + * the Y coordinate of the first character. */ public abstract void drawString(AttributedCharacterIterator iterator, int x, int y); @@ -565,86 +712,117 @@ public abstract class Graphics { * Draws a text defined by a string. This method draws the text with current * font and color. * - * @param str the string. - * @param x the X coordinate of the firt character. - * @param y the Y coordinate of the first character. + * @param str + * the string. + * @param x + * the X coordinate of the first character. + * @param y + * the Y coordinate of the first character. */ public abstract void drawString(String str, int x, int y); /** - * Fills the arc covering the rectangle and using the current color. - * The rectangle is defined by the origin point (X, Y) and dimentions (width and height). - * The arc center is the the center of specified rectangle. - * The angle origin is at the 3 o'clock position, and a positive angle gives + * Fills the arc covering the rectangle and using the current color. The + * rectangle is defined by the origin point (X, Y) and dimensions (width and + * height). The arc center is the the center of specified rectangle. The + * angle origin is at the 3 o'clock position, and a positive angle gives * counter-clockwise rotation, a negative angle gives clockwise rotation. - * - * @param x the X origin coordinate of the rectangle which scales the arc. - * @param y the Y origin coordinate of the rectangle which scales the arc. - * @param width the width of the rectangle which scales the arc. - * @param height the height of the rectangle which scales the arc. - * @param sa start angle - the origin angle of arc. - * @param ea arc angle - the angular arc value relative to the start angle. + * + * @param x + * the X origin coordinate of the rectangle which scales the arc. + * @param y + * the Y origin coordinate of the rectangle which scales the arc. + * @param width + * the width of the rectangle which scales the arc. + * @param height + * the height of the rectangle which scales the arc. + * @param sa + * start angle - the origin angle of arc. + * @param ea + * arc angle - the angular arc value relative to the start angle. */ public abstract void fillArc(int x, int y, int width, int height, int sa, int ea); /** - * Fills an oval with the current color where the oval is defined by the + * Fills an oval with the current color where the oval is defined by the * bounding rectangle with the given width, height, and top left corner. * - * @param x the X top left corner oval coordinate. - * @param y the Y top left corner oval coordinate. - * @param width the oval width. - * @param height the oval height. + * @param x + * the X top left corner oval coordinate. + * @param y + * the Y top left corner oval coordinate. + * @param width + * the oval width. + * @param height + * the oval height. */ public abstract void fillOval(int x, int y, int width, int height); /** - * Fills a polygon with the current color. The polygon vertices are defined by the points - * with xpoints[i], ypoints[i] as coordinates. The polygon edges are the - * lines from the points with (xpoints[i-1], ypoints[i-1]) coordinates to - * the points with (xpoints[i], ypoints[i]) coordinates, for 0 < i < npoints +1. + * Fills a polygon with the current color. The polygon vertices are defined + * by the points with xpoints[i], ypoints[i] as coordinates. The polygon + * edges are the lines from the points with (xpoints[i-1], ypoints[i-1]) + * coordinates to the points with (xpoints[i], ypoints[i]) coordinates, for + * 0 < i < npoints +1. * - * @param xpoints the array of X coordinates of the polygon vertices. - * @param ypoints the array of Y coordinates of the polygon vertices. - * @param npoints the number of polygon vertices/points. + * @param xpoints + * the array of X coordinates of the polygon vertices. + * @param ypoints + * the array of Y coordinates of the polygon vertices. + * @param npoints + * the number of polygon vertices/points. */ public abstract void fillPolygon(int[] xpoints, int[] ypoints, int npoints); /** - * Fills a rectangle with the current color. - * The rectangle is defined by its width and length and top left corner coordinates. + * Fills a rectangle with the current color. The rectangle is defined by its + * width and length and top left corner coordinates. * - * @param x the X coordinate of the rectangle's top left corner. - * @param y the Y coordinate of the rectangle's top left corner. - * @param width the width of rectangle. - * @param height the height of rectangle. + * @param x + * the X coordinate of the rectangle's top left corner. + * @param y + * the Y coordinate of the rectangle's top left corner. + * @param width + * the width of rectangle. + * @param height + * the height of rectangle. */ public abstract void fillRect(int x, int y, int width, int height); /** * Fills a round cornered rectangle with the current color. * - * @param x the X coordinate of the top left corner of the bounding rectangle. - * @param y the Y coordinate of the top left corner of the bounding rectangle. - * @param width the width of the bounding rectangle. - * @param height the height of the bounding rectangle. - * @param arcWidth the arc width at the corners. - * @param arcHeight the arc height at the corners. + * @param x + * the X coordinate of the top left corner of the bounding + * rectangle. + * @param y + * the Y coordinate of the top left corner of the bounding + * rectangle. + * @param width + * the width of the bounding rectangle. + * @param height + * the height of the bounding rectangle. + * @param arcWidth + * the arc width at the corners. + * @param arcHeight + * the arc height at the corners. */ - public abstract void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight); + public abstract void fillRoundRect(int x, int y, int width, int height, int arcWidth, + int arcHeight); /** - * Gets the clipping area. - *

- * + * Gets the clipping area.
+ *
+ * * @return a Shape object of the clipping area or null if it is not set. */ public abstract Shape getClip(); /** * Gets the bounds of the current clipping area as a rectangle. - * - * @return a Rectangle object which represents the bounds of the current clipping area. + * + * @return a Rectangle object which represents the bounds of the current + * clipping area. */ public abstract Rectangle getClipBounds(); @@ -663,75 +841,84 @@ public abstract class Graphics { public abstract Font getFont(); /** - * Gets the font metrics of the specified font. - * The font metrics object contains information about the rendering of a particular font. - * - * @param font the specified font + * Gets the font metrics of the specified font. The font metrics object + * contains information about the rendering of a particular font. * + * @param font + * the specified font. * @return the font metrics for the specified font. */ public abstract FontMetrics getFontMetrics(Font font); /** - * Sets the new clipping area specified by rectangle. The new clipping area - * doesn't depend on the window's visibility. Rendering operations can't be performed - * outside new clipping area. + * Sets the new clipping area specified by rectangle. The new clipping area + * doesn't depend on the window's visibility. Rendering operations can't be + * performed outside new clipping area. * - * @param x the X coordinate of the new clipping rectangle. - * @param y the Y coordinate of the new clipping rectangle. - * @param width the width of the new clipping rectangle. - * @param height the height of the new clipping rectangle. + * @param x + * the X coordinate of the new clipping rectangle. + * @param y + * the Y coordinate of the new clipping rectangle. + * @param width + * the width of the new clipping rectangle. + * @param height + * the height of the new clipping rectangle. */ public abstract void setClip(int x, int y, int width, int height); /** - * Sets the new clipping area to be the area specified by Shape object. - * The new clipping area doesn't depend on the window's visibility. - * Rendering operations can't be performed outside new clipping area. + * Sets the new clipping area to be the area specified by Shape object. The + * new clipping area doesn't depend on the window's visibility. Rendering + * operations can't be performed outside new clipping area. * - * @param clip a Shape object which representes new clipping area. + * @param clip + * the Shape object which represents new clipping area. */ public abstract void setClip(Shape clip); /** - * Sets the current Graphics color. All rendering operations with this Graphics - * will use this color. + * Sets the current Graphics color. All rendering operations with this + * Graphics will use this color. * - * @param c the new color. + * @param c + * the new color. */ public abstract void setColor(Color c); /** - * Sets the current Graphics font. All rendering operations with this Graphics - * will use this font. + * Sets the current Graphics font. All rendering operations with this + * Graphics will use this font. * - * @param font the new font. + * @param font + * the new font. */ public abstract void setFont(Font font); /** - * Sets the paint mode for the Graphics which overwrites all rendering + * Sets the paint mode for the Graphics which overwrites all rendering * operations with the current color. - * */ public abstract void setPaintMode(); /** - * Sets the XOR mode for the Graphics which changes a pixel from - * the current color to the specified XOR color. - *

+ * Sets the XOR mode for the Graphics which changes a pixel from the current + * color to the specified XOR color.
+ *
* - * @param color the new XOR mode + * @param color + * the new XOR mode. */ public abstract void setXORMode(Color color); /** - * Translates the origin of Graphics current coordinate system - * to the point with X, Y coordinates in the current coordinate system. - * All rendering operation in this Graphics will be related to the new origin. + * Translates the origin of Graphics current coordinate system to the point + * with X, Y coordinates in the current coordinate system. All rendering + * operation in this Graphics will be related to the new origin. * - * @param x the X coordinate of the origin - * @param y the Y coordinate of the origin + * @param x + * the X coordinate of the origin. + * @param y + * the Y coordinate of the origin. */ public abstract void translate(int x, int y); } diff --git a/awt/java/awt/Graphics2D.java b/awt/java/awt/Graphics2D.java index 2ff5e0c9b9..04a7319de8 100644 --- a/awt/java/awt/Graphics2D.java +++ b/awt/java/awt/Graphics2D.java @@ -30,19 +30,22 @@ import java.util.Map; /** * The Graphics2D class extends Graphics class and provides more capabilities - * for rendering text, images, shapes. This provides methods to peform - * transformation of coordinate system, color management, and text layout. - * The following attributes exist for rendering: + * for rendering text, images, shapes. This provides methods to perform + * transformation of coordinate system, color management, and text layout. The + * following attributes exist for rendering: *

    *
  • Color - current Graphics2D color;
  • *
  • Font - current Graphics2D font;
  • - *
  • Stroke - pen with a width of 1 pixel;
  • + *
  • Stroke - pen with a width of 1 pixel;
  • *
  • Transform - current Graphics2D Transformation;
  • - *
  • Composite - alpha compositing rules for combining source and destination colors.
  • - *
+ *
  • Composite - alpha compositing rules for combining source and destination + * colors.
  • + * + * + * @since Android 1.0 */ public abstract class Graphics2D extends Graphics { - + /** * Instantiates a new Graphics2D object. This constructor should never be * called directly. @@ -52,41 +55,46 @@ public abstract class Graphics2D extends Graphics { } /** - * Adds preferences for the rendering algorithms. The preferences - * are arbitrary and specified by Map objects. All specified by Map object - * preferencies can be modified. + * Adds preferences for the rendering algorithms. The preferences are + * arbitrary and specified by Map objects. All specified by Map object + * preferences can be modified. * - * @param hints the rendering hints. + * @param hints + * the rendering hints. */ public abstract void addRenderingHints(Map hints); /** - * Intersects the current clipping area with the specified Shape - * and the result becomes a new clipping area. - * If current clipping area is not defined, the Shape - * becomes the new clipping area. No rendering operations - * are allowed outside the clipping area. + * Intersects the current clipping area with the specified Shape and the + * result becomes a new clipping area. If current clipping area is not + * defined, the Shape becomes the new clipping area. No rendering operations + * are allowed outside the clipping area. * - * @param s the specified Shape object which will be intersected - * with current clipping area. + * @param s + * the specified Shape object which will be intersected with + * current clipping area. */ public abstract void clip(Shape s); /** * Draws the outline of the specified Shape. * - * @param s the Shape which ouline is drawn. + * @param s + * the Shape which outline is drawn. */ public abstract void draw(Shape s); /** - * Draws the specified GlyphVector object's text at the point x, y. + * Draws the specified GlyphVector object's text at the point x, y. * - * @param g the GlyphVector object to be drawn. - * @param x the X position where the GlyphVector's text should - * be rendered. - * @param y the Y position where the GlyphVector's text should - * be rendered. + * @param g + * the GlyphVector object to be drawn. + * @param x + * the X position where the GlyphVector's text should be + * rendered. + * @param y + * the Y position where the GlyphVector's text should be + * rendered. */ public abstract void drawGlyphVector(GlyphVector g, float x, float y); @@ -94,87 +102,107 @@ public abstract class Graphics2D extends Graphics { * Draws the BufferedImage -- modified according to the operation * BufferedImageOp -- at the point x, y. * - * @param img the BufferedImage to be rendered. - * @param op the filter to be applied to the image before rendering. - * @param x the X coordinate of the point where the image's upper left corner - * will be placed. - * @param y the Y coordinate of the point where the image's upper left corner - * will be placed. + * @param img + * the BufferedImage to be rendered. + * @param op + * the filter to be applied to the image before rendering. + * @param x + * the X coordinate of the point where the image's upper left + * corner will be placed. + * @param y + * the Y coordinate of the point where the image's upper left + * corner will be placed. */ public abstract void drawImage(BufferedImage img, BufferedImageOp op, int x, int y); /** - * Draws BufferedImage transformed from image space into user space + * Draws BufferedImage transformed from image space into user space * according to the AffineTransform xform and notifies the ImageObserver. - * - * @param img the BufferedImage to be rendered. - * @param xform the affine transformation from the image to the user space. - * @param obs the ImageObserver to be notified about the image conversion. * - * @return true, if the image is successfully loaded and rendered, - * or it's null, otherwise false. + * @param img + * the BufferedImage to be rendered. + * @param xform + * the affine transformation from the image to the user space. + * @param obs + * the ImageObserver to be notified about the image conversion. + * @return true, if the image is successfully loaded and rendered, or it's + * null, otherwise false. */ public abstract boolean drawImage(Image img, AffineTransform xform, ImageObserver obs); /** - * Draws a RenderableImage which is transformed from image space into user + * Draws a RenderableImage which is transformed from image space into user * according to the AffineTransform xform. - * - * @param img the RenderableImage to be rendered. - * @param xform the affine transformation from image to user space. + * + * @param img + * the RenderableImage to be rendered. + * @param xform + * the affine transformation from image to user space. */ public abstract void drawRenderableImage(RenderableImage img, AffineTransform xform); /** - * Draws a RenderedImage which is transformed from image space into user + * Draws a RenderedImage which is transformed from image space into user * according to the AffineTransform xform. - * - * @param img the RenderedImage to be rendered. - * @param xform the affine transformation from image to user space. + * + * @param img + * the RenderedImage to be rendered. + * @param xform + * the affine transformation from image to user space. */ public abstract void drawRenderedImage(RenderedImage img, AffineTransform xform); /** - * Draws the string specified by the AttributedCharacterIterator. - * The first character's position is specified by the X, Y parameters. + * Draws the string specified by the AttributedCharacterIterator. The first + * character's position is specified by the X, Y parameters. * - * @param iterator whose text is drawn. - * @param x the X position where the first character is drawn. - * @param y the Y position where the first character is drawn. + * @param iterator + * whose text is drawn. + * @param x + * the X position where the first character is drawn. + * @param y + * the Y position where the first character is drawn. */ public abstract void drawString(AttributedCharacterIterator iterator, float x, float y); /** - * Draws the string specified by the AttributedCharacterIterator. - * The first character's position is specified by the X, Y parameters. - * - * @param iterator whose text is drawn. - * @param x the X position where the first character is drawn. - * @param y the Y position where the first character is drawn. + * Draws the string specified by the AttributedCharacterIterator. The first + * character's position is specified by the X, Y parameters. * + * @param iterator + * whose text is drawn. + * @param x + * the X position where the first character is drawn. + * @param y + * the Y position where the first character is drawn. * @see java.awt.Graphics#drawString(AttributedCharacterIterator, int, int) */ @Override public abstract void drawString(AttributedCharacterIterator iterator, int x, int y); /** - * Draws the String whose the first character position is specified - * by the parameters X, Y. + * Draws the String whose the first character position is specified by the + * parameters X, Y. * - * @param s the String to be drawn. - * @param x the X position of the first character. - * @param y the Y position of the first character. + * @param s + * the String to be drawn. + * @param x + * the X position of the first character. + * @param y + * the Y position of the first character. */ public abstract void drawString(String s, float x, float y); /** - * Draws the String whose the first character coordinates are specified - * by the parameters X, Y. - * - * @param str the String to be drawn. - * @param x the X coordinate of the first character. - * @param y the Y coordinate of the first character. + * Draws the String whose the first character coordinates are specified by + * the parameters X, Y. * + * @param str + * the String to be drawn. + * @param x + * the X coordinate of the first character. + * @param y + * the Y coordinate of the first character. * @see java.awt.Graphics#drawString(String, int, int) */ @Override @@ -183,7 +211,8 @@ public abstract class Graphics2D extends Graphics { /** * Fills the interior of the specified Shape. * - * @param s the Shape to be filled. + * @param s + * the Shape to be filled. */ public abstract void fill(Shape s); @@ -204,7 +233,7 @@ public abstract class Graphics2D extends Graphics { /** * Gets the device configuration. * - * @return the device configuration + * @return the device configuration. */ public abstract GraphicsConfiguration getDeviceConfiguration(); @@ -223,17 +252,17 @@ public abstract class Graphics2D extends Graphics { public abstract Paint getPaint(); /** - * Gets the value of single preference for specified key. - * - * @param key the specified key of the rendering hint. + * Gets the value of single preference for specified key. * + * @param key + * the specified key of the rendering hint. * @return the value of rendering hint for specified key. */ public abstract Object getRenderingHint(RenderingHints.Key key); /** - * Gets the set of the rendering preferences as a collection of - * key/value pairs. + * Gets the set of the rendering preferences as a collection of key/value + * pairs. * * @return the RenderingHints which contains the rendering preferences. */ @@ -254,172 +283,196 @@ public abstract class Graphics2D extends Graphics { public abstract AffineTransform getTransform(); /** - * Determines wether or not the specified Shape intersects the specified - * Rectangle. If the onStroke parameter is true, this method - * checks whether or not the specified Shape outline intersects the specified - * Rectangle, otherwise this method checks whether or not the specified - * Shape's interior intersects the specified Rectangle. + * Determines whether or not the specified Shape intersects the specified + * Rectangle. If the onStroke parameter is true, this method checks whether + * or not the specified Shape outline intersects the specified Rectangle, + * otherwise this method checks whether or not the specified Shape's + * interior intersects the specified Rectangle. * - * @param rect the specified Rectangle. - * @param s the Shape to check for intersection. - * @param onStroke the parameter determines whether or not this method checks - * for intersection of the Shape outline or of the Shape interior with - * the Rectangle. - * - * @return true, if there is a hit, otherwise false. + * @param rect + * the specified Rectangle. + * @param s + * the Shape to check for intersection. + * @param onStroke + * the parameter determines whether or not this method checks for + * intersection of the Shape outline or of the Shape interior + * with the Rectangle. + * @return true, if there is a hit, false otherwise. */ public abstract boolean hit(Rectangle rect, Shape s, boolean onStroke); /** * Performs a rotation transform relative to current Graphics2D Transform. - * The coordinate system is rotated by the specified angle in radians relative to - * current origin. + * The coordinate system is rotated by the specified angle in radians + * relative to current origin. * - * @param theta the angle of rotation in radians. + * @param theta + * the angle of rotation in radians. */ public abstract void rotate(double theta); /** - * Performs a translated rotation transform relative to current Graphics2D - * Transform. The coordinate system is rotated by the specified angle in radians - * relative to current origin and then moved to point (x, y). - * - * Is this right? + * Performs a translated rotation transform relative to current Graphics2D + * Transform. The coordinate system is rotated by the specified angle in + * radians relative to current origin and then moved to point (x, y). Is + * this right? * - * @param theta the angle of rotation in radians. - * @param x the X coordinate. - * @param y the Y coordinate. + * @param theta + * the angle of rotation in radians. + * @param x + * the X coordinate. + * @param y + * the Y coordinate. */ public abstract void rotate(double theta, double x, double y); /** - * Performs a linear scale transform relative to current Graphics2D Transform. - * The coordinate system is rescaled vertically and horizontally + * Performs a linear scale transform relative to current Graphics2D + * Transform. The coordinate system is rescaled vertically and horizontally * by the specified parameters. * - * @param sx the scaling factor by which the X coordinate is multiplied. - * @param sy the scaling factor by which the Y coordinate is multiplied. + * @param sx + * the scaling factor by which the X coordinate is multiplied. + * @param sy + * the scaling factor by which the Y coordinate is multiplied. */ public abstract void scale(double sx, double sy); /** - * Sets a new background color for clearing rectangular areas. - * The clearRect method uses the current background color. + * Sets a new background color for clearing rectangular areas. The clearRect + * method uses the current background color. * - * @param color the new background color. + * @param color + * the new background color. */ public abstract void setBackground(Color color); /** - * Sets the current composite for Graphics2D. + * Sets the current composite for Graphics2D. * - * @param comp the Composite object. + * @param comp + * the Composite object. */ public abstract void setComposite(Composite comp); /** * Sets the paint for Graphics2D. * - * @param paint the Paint object. + * @param paint + * the Paint object. */ public abstract void setPaint(Paint paint); /** * Sets a key-value pair in the current RenderingHints map. * - * @param key the key of the rendering hint to set. - * @param value the value to set for the rendering hint. + * @param key + * the key of the rendering hint to set. + * @param value + * the value to set for the rendering hint. */ public abstract void setRenderingHint(RenderingHints.Key key, Object value); /** - * Replaces the current rendering hints with the specified rendering preferences. + * Replaces the current rendering hints with the specified rendering + * preferences. * - * @param hints the new Map of rendering hints. + * @param hints + * the new Map of rendering hints. */ public abstract void setRenderingHints(Map hints); /** * Sets the stroke for the Graphics2D. * - * @param s the Stroke object. + * @param s + * the Stroke object. */ public abstract void setStroke(Stroke s); /** - * Overwrite the current Transform of the Graphics2D. The specified Transform - * should be received from the getTransform() method and should be used - * only for restoring the original Graphics2D transform after calling - * draw or fill methods. + * Overwrite the current Transform of the Graphics2D. The specified + * Transform should be received from the getTransform() method and should be + * used only for restoring the original Graphics2D transform after calling + * draw or fill methods. * - * @param Tx the specified Transform. + * @param Tx + * the specified Transform. */ public abstract void setTransform(AffineTransform Tx); /** - * Performs a shear transform relative to current Graphics2D Transform. - * The coordinate system is shifted by the specified multipliers relative to + * Performs a shear transform relative to current Graphics2D Transform. The + * coordinate system is shifted by the specified multipliers relative to * current position. * - * @param shx the multiplier by which the X coordinates shift position - * along X axis as a function of Y coordinates. - * @param shy the multiplier by which the Y coordinates shift position - * along Y axis as a function of X coordinates. + * @param shx + * the multiplier by which the X coordinates shift position along + * X axis as a function of Y coordinates. + * @param shy + * the multiplier by which the Y coordinates shift position along + * Y axis as a function of X coordinates. */ public abstract void shear(double shx, double shy); /** - * Concatenates the AffineTransform object with current Transform - * of this Graphics2D. The transforms are applied in reverse order - * with the last specified transform applied first and the next - * transformation applied to the result of previous transformation. - * More precisely, if Cx is the current Graphics2D transform, the - * transform method's result with Tx as the parameter - * is the transformation Rx, where Rx(p) = Cx(Tx(p)), for p - a point - * in current coordinate system. Rx becomes the current Transform + * Concatenates the AffineTransform object with current Transform of this + * Graphics2D. The transforms are applied in reverse order with the last + * specified transform applied first and the next transformation applied to + * the result of previous transformation. More precisely, if Cx is the + * current Graphics2D transform, the transform method's result with Tx as + * the parameter is the transformation Rx, where Rx(p) = Cx(Tx(p)), for p - + * a point in current coordinate system. Rx becomes the current Transform * for this Graphics2D. * - * @param Tx the AffineTransform object to be concatenated with - * current Transform. + * @param Tx + * the AffineTransform object to be concatenated with current + * Transform. */ public abstract void transform(AffineTransform Tx); /** * Performs a translate transform relative to current Graphics2D Transform. - * The coordinate system is moved by the specified distance relative - * to current position. + * The coordinate system is moved by the specified distance relative to + * current position. * - * @param tx the translation distance along the X axis. - * @param ty the translation distance along the Y axis. + * @param tx + * the translation distance along the X axis. + * @param ty + * the translation distance along the Y axis. */ public abstract void translate(double tx, double ty); /** - * Moves the origin Graphics2D Transform to the point with x, y - * coordinates in current coordinate system. The new origin of coordinate - * system is moved to the (x, y) point accordingly. All rendering and - * transform operations are performed relative to this new origin. - * - * @param x the X coordinate. - * @param y the Y coordinate. + * Moves the origin Graphics2D Transform to the point with x, y coordinates + * in current coordinate system. The new origin of coordinate system is + * moved to the (x, y) point accordingly. All rendering and transform + * operations are performed relative to this new origin. * + * @param x + * the X coordinate. + * @param y + * the Y coordinate. * @see java.awt.Graphics#translate(int, int) */ @Override public abstract void translate(int x, int y); /** - * Fills a 3D rectangle with the current color. - * The rectangle is specified by its width, height, and top left corner - * coordinates. - * - * @param x the X coordinate of the rectangle's top left corner. - * @param y the Y coordinate of the rectangle's top left corner. - * @param width the width of rectangle. - * @param height the height of rectangle. - * @param raised a boolean value that determines whether the rectangle - * is drawn as raised or indented. - * + * Fills a 3D rectangle with the current color. The rectangle is specified + * by its width, height, and top left corner coordinates. + * + * @param x + * the X coordinate of the rectangle's top left corner. + * @param y + * the Y coordinate of the rectangle's top left corner. + * @param width + * the width of rectangle. + * @param height + * the height of rectangle. + * @param raised + * a boolean value that determines whether the rectangle is drawn + * as raised or indented. * @see java.awt.Graphics#fill3DRect(int, int, int, int, boolean) */ @Override @@ -433,15 +486,19 @@ public abstract class Graphics2D extends Graphics { } /** - * Draws the higlighted outline of a rectangle. + * Draws the highlighted outline of a rectangle. * - * @param x the X coordinate of the rectangle's top left corner. - * @param y the Y coordinate of the rectangle's top left corner. - * @param width the width of rectangle. - * @param height the height of rectangle. - * @param raised a boolean value that determines whether the rectangle - * is drawn as raised or indented. - * + * @param x + * the X coordinate of the rectangle's top left corner. + * @param y + * the Y coordinate of the rectangle's top left corner. + * @param width + * the width of rectangle. + * @param height + * the height of rectangle. + * @param raised + * a boolean value that determines whether the rectangle is drawn + * as raised or indented. * @see java.awt.Graphics#draw3DRect(int, int, int, int, boolean) */ @Override diff --git a/awt/java/awt/GraphicsConfiguration.java b/awt/java/awt/GraphicsConfiguration.java index 8bec253b8c..d59e896abb 100644 --- a/awt/java/awt/GraphicsConfiguration.java +++ b/awt/java/awt/GraphicsConfiguration.java @@ -18,6 +18,7 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; import java.awt.geom.AffineTransform; @@ -30,70 +31,76 @@ import org.apache.harmony.awt.internal.nls.Messages; /** * The GraphicsConfiguration class contains the characteristics of graphics * devices such as a printer or monitor, and represents device's capabilities - * and modes. Many GraphicsConfiguration objects can be associated with - * single graphics device. + * and modes. Many GraphicsConfiguration objects can be associated with single + * graphics device. + * + * @since Android 1.0 */ public abstract class GraphicsConfiguration { - - /** - * Constructor could not be used directly and should be obtained in - * extended classes. - */ + /** + * Constructor could not be used directly and should be obtained in extended + * classes. + */ protected GraphicsConfiguration() { } - - /** - * Creates BufferedImage image object with a data layout and color model - * compatible with this GraphicsConfiguration with specified width - * and height parameters. - * - * @param width the width of BufferedImage. - * @param height the height of BufferedImage. - * - * @return the BufferedImage object with specified width and height - * parameters. - */ + /** + * Creates BufferedImage image object with a data layout and color model + * compatible with this GraphicsConfiguration with specified width and + * height parameters. + * + * @param width + * the width of BufferedImage. + * @param height + * the height of BufferedImage. + * @return the BufferedImage object with specified width and height + * parameters. + */ public abstract BufferedImage createCompatibleImage(int width, int height); /** * Creates a BufferedImage that has the specified width, height, - * transparency and has a data layout and color model compatible with this - * GraphicsConfiguration. - * - * @param width the width of image. - * @param height the height of image. - * @param transparency the transparency mode. + * transparency and has a data layout and color model compatible with this + * GraphicsConfiguration. * + * @param width + * the width of image. + * @param height + * the height of image. + * @param transparency + * the transparency mode. * @return the BufferedImage object. */ public abstract BufferedImage createCompatibleImage(int width, int height, int transparency); /** - * Creates a VolatileImage that has the specified width and height - * and has a data layout and color model compatible with this - * GraphicsConfiguration. - * - * @param width the width of image. - * @param height the height of image. + * Creates a VolatileImage that has the specified width and height and has a + * data layout and color model compatible with this GraphicsConfiguration. * + * @param width + * the width of image. + * @param height + * the height of image. * @return the VolatileImage object. */ public abstract VolatileImage createCompatibleVolatileImage(int width, int height); /** * Creates a VolatileImage that supports the specified width, height, - * transparency and has a data layout and color model compatible with this - * GraphicsConfiguration. - * - * @param width the width of image. - * @param height the height of image. - * @param transparency the transparency mode. + * transparency and has a data layout and color model compatible with this + * GraphicsConfiguration. * + * @param width + * the width of image. + * @param height + * the height of image. + * @param transparency + * the transparency mode. * @return the VolatileImage object. */ - public abstract VolatileImage createCompatibleVolatileImage(int width, int height, int transparency); + public abstract VolatileImage createCompatibleVolatileImage(int width, int height, + int transparency); /** * Gets the bounds of area covered by the GraphicsConfiguration in the @@ -111,20 +118,19 @@ public abstract class GraphicsConfiguration { public abstract ColorModel getColorModel(); /** - * Gets the ColorModel of the GraphicsConfiguration which - * supports specified Transparency. + * Gets the ColorModel of the GraphicsConfiguration which supports specified + * Transparency. * - * @param transparency the Transparency mode: OPAQUE, BITMASK, or - * TRANSLUCENT. - * - * @return the ColorModel of the GraphicsConfiguration which - * supports specified Transparency. + * @param transparency + * the Transparency mode: OPAQUE, BITMASK, or TRANSLUCENT. + * @return the ColorModel of the GraphicsConfiguration which supports + * specified Transparency. */ public abstract ColorModel getColorModel(int transparency); /** - * Gets the default AffineTransform of the GraphicsConfiguration. - * This method translates user coordinates to device coordinates. + * Gets the default AffineTransform of the GraphicsConfiguration. This + * method translates user coordinates to device coordinates. * * @return the default AffineTransform of the GraphicsConfiguration. */ @@ -144,23 +150,24 @@ public abstract class GraphicsConfiguration { */ public abstract AffineTransform getNormalizingTransform(); - /** - * Creates VolatileImage with specified width, height, ImageCapabilities; - * a data layout and color model compatible with this GraphicsConfiguration. - * - * @param width the width of image. - * @param height the height of image. - * @param caps the ImageCapabilities object. - * - * @return the VolatileImage which data layout and color model compatible - * with this GraphicsConfiguration. - * - * @throws AWTException if ImageCapabilities is not supported by the - * GraphicsConfiguration. + * Creates VolatileImage with specified width, height, ImageCapabilities; a + * data layout and color model compatible with this GraphicsConfiguration. + * + * @param width + * the width of image. + * @param height + * the height of image. + * @param caps + * the ImageCapabilities object. + * @return the VolatileImage which data layout and color model compatible + * with this GraphicsConfiguration. + * @throws AWTException + * if ImageCapabilities is not supported by the + * GraphicsConfiguration. */ - public VolatileImage createCompatibleVolatileImage(int width, int height, - ImageCapabilities caps) throws AWTException { + public VolatileImage createCompatibleVolatileImage(int width, int height, ImageCapabilities caps) + throws AWTException { VolatileImage res = createCompatibleVolatileImage(width, height); if (!res.getCapabilities().equals(caps)) { // awt.14A=Can not create VolatileImage with specified capabilities @@ -170,21 +177,23 @@ public abstract class GraphicsConfiguration { } /** - * Creates a VolatileImage with specified width, height, transparency - * and ImageCapabilities; a data layout and color model compatible with - * this GraphicsConfiguration. - * - * @param width the width of image. - * @param height the height of image. - * @param caps the ImageCapabilities object. - * @param transparency the Transparency mode: OPAQUE, BITMASK, or - * TRANSLUCENT. - * - * @return the VolatileImage which data layout and color model compatible - * with this GraphicsConfiguration. - * - * @throws AWTException if ImageCapabilities is not supported by the + * Creates a VolatileImage with specified width, height, transparency and + * ImageCapabilities; a data layout and color model compatible with this * GraphicsConfiguration. + * + * @param width + * the width of image. + * @param height + * the height of image. + * @param caps + * the ImageCapabilities object. + * @param transparency + * the Transparency mode: OPAQUE, BITMASK, or TRANSLUCENT. + * @return the VolatileImage which data layout and color model compatible + * with this GraphicsConfiguration. + * @throws AWTException + * if ImageCapabilities is not supported by the + * GraphicsConfiguration. */ public VolatileImage createCompatibleVolatileImage(int width, int height, ImageCapabilities caps, int transparency) throws AWTException { @@ -199,7 +208,7 @@ public abstract class GraphicsConfiguration { /** * Gets the buffering capabilities of the GraphicsConfiguration. * - * @return the BufferCapabilities object. + * @return the BufferCapabilities object. */ public BufferCapabilities getBufferCapabilities() { return new BufferCapabilities(new ImageCapabilities(false), new ImageCapabilities(false), diff --git a/awt/java/awt/GraphicsDevice.java b/awt/java/awt/GraphicsDevice.java index 8cf700a95b..9eda4e0eda 100644 --- a/awt/java/awt/GraphicsDevice.java +++ b/awt/java/awt/GraphicsDevice.java @@ -18,50 +18,61 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; import org.apache.harmony.awt.internal.nls.Messages; /** - * The GraphicsDevice class describes the graphics devices (such as screens - * or printers) which are available in a particular graphics environment. - * Many GraphicsDevice instances can be associated with a single - * GraphicsEnvironment. Each GraphicsDevice has one or more GraphicsConfiguration - * objects which specify the different configurations and modes of GraphicsDevice. + * The GraphicsDevice class describes the graphics devices (such as screens or + * printers) which are available in a particular graphics environment. Many + * GraphicsDevice instances can be associated with a single GraphicsEnvironment. + * Each GraphicsDevice has one or more GraphicsConfiguration objects which + * specify the different configurations and modes of GraphicsDevice. + * + * @since Android 1.0 */ public abstract class GraphicsDevice { - - /** The display mode. */ + + /** + * The display mode. + */ private DisplayMode displayMode; - //???AWT -// private Window fullScreenWindow = null; + // ???AWT + // private Window fullScreenWindow = null; - /** The Constant TYPE_IMAGE_BUFFER indicates a image buffer device. */ + /** + * The Constant TYPE_IMAGE_BUFFER indicates a image buffer device. + */ public static final int TYPE_IMAGE_BUFFER = 2; - /** The Constant TYPE_PRINTER indicates a printer device. */ + /** + * The Constant TYPE_PRINTER indicates a printer device. + */ public static final int TYPE_PRINTER = 1; - /** The Constant TYPE_RASTER_SCREEN indicates a raster screen device. */ + /** + * The Constant TYPE_RASTER_SCREEN indicates a raster screen device. + */ public static final int TYPE_RASTER_SCREEN = 0; - /** - * Constructor is not to be used directly as this class is abstract. - */ + /** + * Constructor is not to be used directly as this class is abstract. + */ protected GraphicsDevice() { - displayMode = new DisplayMode(0, 0, DisplayMode.BIT_DEPTH_MULTI, DisplayMode.REFRESH_RATE_UNKNOWN); + displayMode = new DisplayMode(0, 0, DisplayMode.BIT_DEPTH_MULTI, + DisplayMode.REFRESH_RATE_UNKNOWN); } - - /** - * Returns an array of GraphicsConfiguration objects associated - * with the GraphicsDevice. - * - * @return an array of GraphicsConfiguration objects associated - * with the GraphicsDevice. - */ + /** + * Returns an array of GraphicsConfiguration objects associated with the + * GraphicsDevice. + * + * @return an array of GraphicsConfiguration objects associated with the + * GraphicsDevice. + */ public abstract GraphicsConfiguration[] getConfigurations(); /** @@ -72,41 +83,39 @@ public abstract class GraphicsDevice { public abstract GraphicsConfiguration getDefaultConfiguration(); /** - * Gets the String identifier which associated with the GraphicsDevice in + * Gets the String identifier which associated with the GraphicsDevice in * the GraphicsEnvironment. * - * @return the String identifier of the GraphicsDevice in - * the GraphicsEnvironment. + * @return the String identifier of the GraphicsDevice in the + * GraphicsEnvironment. */ public abstract String getIDstring(); /** - * Gets the type of this GraphicsDevice: - * TYPE_IMAGE_BUFFER, TYPE_PRINTER or TYPE_RASTER_SCREEN. + * Gets the type of this GraphicsDevice: TYPE_IMAGE_BUFFER, TYPE_PRINTER or + * TYPE_RASTER_SCREEN. * - * @return the type of this GraphicsDevice: TYPE_IMAGE_BUFFER, - * TYPE_PRINTER or TYPE_RASTER_SCREEN. + * @return the type of this GraphicsDevice: TYPE_IMAGE_BUFFER, TYPE_PRINTER + * or TYPE_RASTER_SCREEN. */ public abstract int getType(); - - - /** - * Returns the number of bytes available in accelerated - * memory on this device. - * - * @return the number of bytes available accelerated memory. - */ + /** + * Returns the number of bytes available in accelerated memory on this + * device. + * + * @return the number of bytes available accelerated memory. + */ public int getAvailableAcceleratedMemory() { return 0; } - /* ???AWT - public GraphicsConfiguration getBestConfiguration(GraphicsConfigTemplate gct) { - return gct.getBestConfiguration(getConfigurations()); - } - */ - + /* + * ???AWT public GraphicsConfiguration + * getBestConfiguration(GraphicsConfigTemplate gct) { return + * gct.getBestConfiguration(getConfigurations()); } + */ + /** * Gets the current display mode of the GraphicsDevice. * @@ -122,43 +131,43 @@ public abstract class GraphicsDevice { * @return an array of display modes available in this GraphicsDevice. */ public DisplayMode[] getDisplayModes() { - DisplayMode []dms = {displayMode}; - return dms; + DisplayMode[] dms = { + displayMode + }; + return dms; } - /* ???AWT - public Window getFullScreenWindow() { - return fullScreenWindow; - } - */ - + /* + * ???AWT public Window getFullScreenWindow() { return fullScreenWindow; } + */ + /** - * Returns true if this GraphicsDevice supports low-level - * display changes. + * Returns true if this GraphicsDevice supports low-level display changes. * - * @return true, if this GraphicsDevice supports low-level - * display changes; false otherwise. + * @return true, if this GraphicsDevice supports low-level display changes; + * false otherwise. */ public boolean isDisplayChangeSupported() { return false; } /** - * Returns true if this GraphicsDevice supports full screen - * mode. + * Returns true if this GraphicsDevice supports full screen mode. * - * @return true, if this GraphicsDevice supports full screen - * mode; otherwise false. + * @return true, if this GraphicsDevice supports full screen mode, false + * otherwise. */ public boolean isFullScreenSupported() { return false; } - //an array of display modes available in this GraphicsDevice. - + + // an array of display modes available in this GraphicsDevice. + /** * Sets the display mode of this GraphicsDevice. * - * @param dm the new display mode of this GraphicsDevice. + * @param dm + * the new display mode of this GraphicsDevice. */ public void setDisplayMode(DisplayMode dm) { if (!isDisplayChangeSupported()) { @@ -166,7 +175,7 @@ public abstract class GraphicsDevice { throw new UnsupportedOperationException(Messages.getString("awt.122")); //$NON-NLS-1$ } - DisplayMode []dms = getDisplayModes(); + DisplayMode[] dms = getDisplayModes(); for (DisplayMode element : dms) { if (element.equals(dm)) { displayMode = dm; @@ -177,23 +186,11 @@ public abstract class GraphicsDevice { throw new IllegalArgumentException(Messages.getString("awt.123", dm)); //$NON-NLS-1$ } - /* ???AWT - public void setFullScreenWindow(Window w) { - if (w == null) { - fullScreenWindow = null; - return; - } - - fullScreenWindow = w; - - if (isFullScreenSupported()) { - w.enableInputMethods(false); - } else { - w.setSize(displayMode.getWidth(), displayMode.getHeight()); - w.setLocation(0, 0); - } - w.setVisible(true); - w.setAlwaysOnTop(true); - } - */ + /* + * ???AWT public void setFullScreenWindow(Window w) { if (w == null) { + * fullScreenWindow = null; return; } fullScreenWindow = w; if + * (isFullScreenSupported()) { w.enableInputMethods(false); } else { + * w.setSize(displayMode.getWidth(), displayMode.getHeight()); + * w.setLocation(0, 0); } w.setVisible(true); w.setAlwaysOnTop(true); } + */ } diff --git a/awt/java/awt/GraphicsEnvironment.java b/awt/java/awt/GraphicsEnvironment.java index 3b14f55b40..d527417f73 100644 --- a/awt/java/awt/GraphicsEnvironment.java +++ b/awt/java/awt/GraphicsEnvironment.java @@ -28,17 +28,20 @@ import org.apache.harmony.awt.ContextStorage; import org.apache.harmony.awt.gl.CommonGraphics2DFactory; /** - * The GraphicsEnvironment class defines a collection of GraphicsDevice - * objects and Font objects which are available for Java application on - * current platform. + * The GraphicsEnvironment class defines a collection of GraphicsDevice objects + * and Font objects which are available for Java application on current + * platform. + * + * @since Android 1.0 */ public abstract class GraphicsEnvironment { - + /** - * Constructor could not be used directly and should be obtained in - * extended classes. + * Constructor could not be used directly and should be obtained in extended + * classes. */ - protected GraphicsEnvironment() {} + protected GraphicsEnvironment() { + } /** * Gets the local GraphicsEnvironment. @@ -46,17 +49,16 @@ public abstract class GraphicsEnvironment { * @return the local GraphicsEnvironment. */ public static GraphicsEnvironment getLocalGraphicsEnvironment() { - synchronized(ContextStorage.getContextLock()) { + synchronized (ContextStorage.getContextLock()) { if (ContextStorage.getGraphicsEnvironment() == null) { - if (isHeadless()) { - ContextStorage.setGraphicsEnvironment(new HeadlessGraphicsEnvironment()); + if (isHeadless()) { + ContextStorage.setGraphicsEnvironment(new HeadlessGraphicsEnvironment()); } else { - CommonGraphics2DFactory g2df = - (CommonGraphics2DFactory) Toolkit.getDefaultToolkit().getGraphicsFactory(); - - ContextStorage.setGraphicsEnvironment( - g2df.createGraphicsEnvironment(ContextStorage.getWindowFactory()) - ); + CommonGraphics2DFactory g2df = (CommonGraphics2DFactory)Toolkit + .getDefaultToolkit().getGraphicsFactory(); + + ContextStorage.setGraphicsEnvironment(g2df + .createGraphicsEnvironment(ContextStorage.getWindowFactory())); } } @@ -65,24 +67,24 @@ public abstract class GraphicsEnvironment { } /** - * Returns whether or not a display, keyboard, and mouse are supported - * in this graphics environment. + * Returns whether or not a display, keyboard, and mouse are supported in + * this graphics environment. * - * @return true, if HeadlessException will be thrown from areas of - * the graphics environment that are dependent on a display, keyboard, - * or mouse; false otherwise. + * @return true, if HeadlessException will be thrown from areas of the + * graphics environment that are dependent on a display, keyboard, + * or mouse, false otherwise. */ public boolean isHeadlessInstance() { return false; } /** - * Checks whether or not a display, keyboard, and mouse are supported - * in this environment. + * Checks whether or not a display, keyboard, and mouse are supported in + * this environment. * - * @return true, if a HeadlessException is thrown from areas of - * the Toolkit and GraphicsEnvironment that are dependent on - * a display, keyboard, or mouse; false otherwise. + * @return true, if a HeadlessException is thrown from areas of the Toolkit + * and GraphicsEnvironment that are dependent on a display, + * keyboard, or mouse, false otherwise. */ public static boolean isHeadless() { return "true".equals(System.getProperty("java.awt.headless")); @@ -92,8 +94,8 @@ public abstract class GraphicsEnvironment { * Gets the maximum bounds of system centered windows. * * @return the maximum bounds of system centered windows. - * - * @throws HeadlessException if isHeadless() method returns true. + * @throws HeadlessException + * if isHeadless() method returns true. */ public Rectangle getMaximumWindowBounds() throws HeadlessException { return getDefaultScreenDevice().getDefaultConfiguration().getBounds(); @@ -103,8 +105,8 @@ public abstract class GraphicsEnvironment { * Gets the Point which should defines the center of system window. * * @return the Point where the system window should be centered. - * - * @throws HeadlessException if isHeadless() method returns true. + * @throws HeadlessException + * if isHeadless() method returns true. */ public Point getCenterPoint() throws HeadlessException { Rectangle mwb = getMaximumWindowBounds(); @@ -112,9 +114,8 @@ public abstract class GraphicsEnvironment { } /** - * Indicates that the primary font should be used. - * Primary font is specified by initial system locale or default encoding). - * + * Indicates that the primary font should be used. Primary font is specified + * by initial system locale or default encoding). */ public void preferLocaleFonts() { // Note: API specification says following: @@ -123,7 +124,8 @@ public abstract class GraphicsEnvironment { // it may have no effect at all." So, doing nothing is an // acceptable behavior for this method. - // For now FontManager uses 1.4 font.properties scheme for font mapping, so + // For now FontManager uses 1.4 font.properties scheme for font mapping, + // so // this method doesn't make any sense. The implementation of this method // which will influence font mapping is postponed until // 1.5 mapping scheme not implemented. @@ -141,7 +143,8 @@ public abstract class GraphicsEnvironment { // it may have no effect at all." So, doing nothing is an // acceptable behavior for this method. - // For now FontManager uses 1.4 font.properties scheme for font mapping, so + // For now FontManager uses 1.4 font.properties scheme for font mapping, + // so // this method doesn't make any sense. The implementation of this method // which will influence font mapping is postponed until // 1.5 mapping scheme not implemented. @@ -153,19 +156,19 @@ public abstract class GraphicsEnvironment { * Creates the Graphics2D object for rendering to the specified * BufferedImage. * - * @param bufferedImage the BufferedImage object. - * - * @return the Graphics2D object which allows to render to the specified - * BufferedImage. + * @param bufferedImage + * the BufferedImage object. + * @return the Graphics2D object which allows to render to the specified + * BufferedImage. */ public abstract Graphics2D createGraphics(BufferedImage bufferedImage); /** - * Gets the array of all available fonts instances in this + * Gets the array of all available fonts instances in this * GraphicsEnviroments. * - * @return the array of all available fonts instances in this - * GraphicsEnviroments. + * @return the array of all available fonts instances in this + * GraphicsEnviroments. */ public abstract Font[] getAllFonts(); @@ -180,11 +183,11 @@ public abstract class GraphicsEnvironment { * Gets the array of all available font family names for the specified * locale. * - * @param locale the Locale object which represents geographical - * region. The default locale is used if locale is null. - * - * @return the array of available font family names for the specified - * locale. + * @param locale + * the Locale object which represents geographical region. The + * default locale is used if locale is null. + * @return the array of available font family names for the specified + * locale. */ public abstract String[] getAvailableFontFamilyNames(Locale locale); @@ -192,18 +195,18 @@ public abstract class GraphicsEnvironment { * Gets the default screen device as GraphicDevice object. * * @return the GraphicDevice object which represents default screen device. - * - * @throws HeadlessException if isHeadless() returns true. + * @throws HeadlessException + * if isHeadless() returns true. */ public abstract GraphicsDevice getDefaultScreenDevice() throws HeadlessException; /** * Gets an array of all available screen devices. * - * @return the array of GraphicsDevice obgects which represents - * all available screen devices. - * - * @throws HeadlessException if isHeadless() returns true. + * @return the array of GraphicsDevice objects which represents all + * available screen devices. + * @throws HeadlessException + * if isHeadless() returns true. */ public abstract GraphicsDevice[] getScreenDevices() throws HeadlessException; } diff --git a/awt/java/awt/HeadlessException.java b/awt/java/awt/HeadlessException.java index 28e463b3e0..ec111f1e4e 100644 --- a/awt/java/awt/HeadlessException.java +++ b/awt/java/awt/HeadlessException.java @@ -18,16 +18,21 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; /** - * The HeadlessException class provides notifications and error messages - * when code that is dependent on a keyboard, display, or mouse is called - * in an environment that does not support a keyboard, display, or mouse. + * The HeadlessException class provides notifications and error messages when + * code that is dependent on a keyboard, display, or mouse is called in an + * environment that does not support a keyboard, display, or mouse. + * + * @since Android 1.0 */ public class HeadlessException extends UnsupportedOperationException { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 167183644944358563L; /** @@ -40,7 +45,8 @@ public class HeadlessException extends UnsupportedOperationException { /** * Instantiates a new headless exception with the specified message. * - * @param msg the String which represents error message. + * @param msg + * the String which represents error message. */ public HeadlessException(String msg) { super(msg); diff --git a/awt/java/awt/HeadlessGraphicsEnvironment.java b/awt/java/awt/HeadlessGraphicsEnvironment.java index 97f88d168d..306393f33e 100644 --- a/awt/java/awt/HeadlessGraphicsEnvironment.java +++ b/awt/java/awt/HeadlessGraphicsEnvironment.java @@ -14,6 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package java.awt; import java.awt.GraphicsDevice; @@ -23,30 +24,32 @@ import org.apache.harmony.awt.gl.CommonGraphicsEnvironment; /** * The HeadlessGraphicsEnvironment class is the CommonGraphicsEnvironment - * implementation to use in the case where the environment lacks display, + * implementation to use in the case where the environment lacks display, * keyboard, and mouse support. + * + * @since Android 1.0 */ public class HeadlessGraphicsEnvironment extends CommonGraphicsEnvironment { - + /** - * Returns whether or not a display, keyboard, and mouse are supported - * in this graphics environment. + * Returns whether or not a display, keyboard, and mouse are supported in + * this graphics environment. * - * @return true, if HeadlessException will be thrown from areas of - * the graphics environment that are dependent on a display, keyboard, - * or mouse; false otherwise. + * @return true, if HeadlessException will be thrown from areas of the + * graphics environment that are dependent on a display, keyboard, + * or mouse, false otherwise. */ @Override public boolean isHeadlessInstance() { return true; } - + /** * Gets the default screen device as GraphicDevice object. * * @return the GraphicDevice object which represents default screen device. - * - * @throws HeadlessException if isHeadless() returns true. + * @throws HeadlessException + * if isHeadless() returns true. */ @Override public GraphicsDevice getDefaultScreenDevice() throws HeadlessException { @@ -56,10 +59,10 @@ public class HeadlessGraphicsEnvironment extends CommonGraphicsEnvironment { /** * Gets an array of all available screen devices. * - * @return the array of GraphicsDevice objects which represents - * all available screen devices. - * - * @throws HeadlessException if isHeadless() returns true. + * @return the array of GraphicsDevice objects which represents all + * available screen devices. + * @throws HeadlessException + * if isHeadless() returns true. */ @Override public GraphicsDevice[] getScreenDevices() throws HeadlessException { diff --git a/awt/java/awt/HeadlessToolkit.java b/awt/java/awt/HeadlessToolkit.java index a7dd557a44..c64a85a617 100644 --- a/awt/java/awt/HeadlessToolkit.java +++ b/awt/java/awt/HeadlessToolkit.java @@ -26,136 +26,75 @@ package java.awt; //import java.awt.dnd.InvalidDnDOperationException; //import java.awt.dnd.peer.DragSourceContextPeer; import java.awt.im.InputMethodHighlight; -import java.awt.image.ColorModel; -//import java.awt.peer.*; +import java.awt.image.ColorModel; //import java.awt.peer.*; //import java.beans.PropertyChangeSupport; import java.util.HashMap; import java.util.Map; import java.util.Properties; -import org.apache.harmony.awt.ComponentInternals; -//import org.apache.harmony.awt.datatransfer.DTK; +import org.apache.harmony.awt.ComponentInternals; //import org.apache.harmony.awt.datatransfer.DTK; import org.apache.harmony.awt.wtk.GraphicsFactory; import org.apache.harmony.awt.wtk.NativeEventQueue; import org.apache.harmony.awt.wtk.WindowFactory; /** - * The HeadlessToolkit class is a subclass of ToolkitImpl to - * be used for graphical environments that lack keyboard and - * mouse capabilities. + * The HeadlessToolkit class is a subclass of ToolkitImpl to be used for + * graphical environments that lack keyboard and mouse capabilities. + * + * @since Android 1.0 */ public final class HeadlessToolkit extends ToolkitImpl { - - //???AWT - /* - @Override - protected ButtonPeer createButton(Button a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected CheckboxPeer createCheckbox(Checkbox a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected ChoicePeer createChoice(Choice a0) throws HeadlessException { - throw new HeadlessException(); - } - - public Cursor createCustomCursor(Image img, Point hotSpot, String name) - throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected DialogPeer createDialog(Dialog a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - public T createDragGestureRecognizer( - Class recognizerAbstractClass, DragSource ds, Component c, int srcActions, - DragGestureListener dgl) { - return null; - } - - @Override - public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) - throws InvalidDnDOperationException { - throw new InvalidDnDOperationException(); - } - - @Override - protected FileDialogPeer createFileDialog(FileDialog a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected FramePeer createFrame(Frame a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected LabelPeer createLabel(Label a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected ListPeer createList(List a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected MenuPeer createMenu(Menu a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected MenuBarPeer createMenuBar(MenuBar a0) throws HeadlessException { - throw new HeadlessException(); - } - @Override - protected MenuItemPeer createMenuItem(MenuItem a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected PopupMenuPeer createPopupMenu(PopupMenu a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected ScrollbarPeer createScrollbar(Scrollbar a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected ScrollPanePeer createScrollPane(ScrollPane a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected TextAreaPeer createTextArea(TextArea a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected TextFieldPeer createTextField(TextField a0) throws HeadlessException { - throw new HeadlessException(); - } - - @Override - protected WindowPeer createWindow(Window a0) throws HeadlessException { - throw new HeadlessException(); - } - */ + // ???AWT + /* + * @Override protected ButtonPeer createButton(Button a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected CheckboxPeer createCheckbox(Checkbox a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected CheckboxMenuItemPeer + * createCheckboxMenuItem(CheckboxMenuItem a0) throws HeadlessException { + * throw new HeadlessException(); } + * @Override protected ChoicePeer createChoice(Choice a0) throws + * HeadlessException { throw new HeadlessException(); } public Cursor + * createCustomCursor(Image img, Point hotSpot, String name) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected DialogPeer createDialog(Dialog a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override public T + * createDragGestureRecognizer( Class recognizerAbstractClass, DragSource + * ds, Component c, int srcActions, DragGestureListener dgl) { return null; + * } + * @Override public DragSourceContextPeer + * createDragSourceContextPeer(DragGestureEvent dge) throws + * InvalidDnDOperationException { throw new InvalidDnDOperationException(); + * } + * @Override protected FileDialogPeer createFileDialog(FileDialog a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected FramePeer createFrame(Frame a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected LabelPeer createLabel(Label a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected ListPeer createList(List a0) throws HeadlessException + * { throw new HeadlessException(); } + * @Override protected MenuPeer createMenu(Menu a0) throws HeadlessException + * { throw new HeadlessException(); } + * @Override protected MenuBarPeer createMenuBar(MenuBar a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected MenuItemPeer createMenuItem(MenuItem a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected PopupMenuPeer createPopupMenu(PopupMenu a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected ScrollbarPeer createScrollbar(Scrollbar a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected ScrollPanePeer createScrollPane(ScrollPane a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected TextAreaPeer createTextArea(TextArea a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected TextFieldPeer createTextField(TextField a0) throws + * HeadlessException { throw new HeadlessException(); } + * @Override protected WindowPeer createWindow(Window a0) throws + * HeadlessException { throw new HeadlessException(); } + */ @Override public Dimension getBestCursorSize(int prefWidth, int prefHeight) throws HeadlessException { @@ -186,25 +125,18 @@ public final class HeadlessToolkit extends ToolkitImpl { public int getMenuShortcutKeyMask() throws HeadlessException { throw new HeadlessException(); } - - //???AWT + + // ???AWT /* - @Override - NativeEventQueue getNativeEventQueue() throws HeadlessException { - throw new HeadlessException(); - } - - @Override - public PrintJob getPrintJob(Frame frame, String jobtitle, JobAttributes jobAttributes, - PageAttributes pageAttributes) throws IllegalArgumentException { - throw new IllegalArgumentException(); - } - - @Override - public PrintJob getPrintJob(Frame frame, String jobtitle, Properties props) throws NullPointerException { - throw new NullPointerException(); - } - */ + * @Override NativeEventQueue getNativeEventQueue() throws HeadlessException + * { throw new HeadlessException(); } + * @Override public PrintJob getPrintJob(Frame frame, String jobtitle, + * JobAttributes jobAttributes, PageAttributes pageAttributes) throws + * IllegalArgumentException { throw new IllegalArgumentException(); } + * @Override public PrintJob getPrintJob(Frame frame, String jobtitle, + * Properties props) throws NullPointerException { throw new + * NullPointerException(); } + */ @Override public Insets getScreenInsets(GraphicsConfiguration gc) throws HeadlessException { @@ -214,44 +146,37 @@ public final class HeadlessToolkit extends ToolkitImpl { @Override public int getScreenResolution() throws HeadlessException { throw new HeadlessException(); - } + } @Override public Dimension getScreenSize() throws HeadlessException { throw new HeadlessException(); } - - //???AWT + + // ???AWT /* - @Override - public Clipboard getSystemClipboard() throws HeadlessException { - throw new HeadlessException(); - } - - @Override - public Clipboard getSystemSelection() throws HeadlessException { - throw new HeadlessException(); - } - - @Override - WindowFactory getWindowFactory() throws HeadlessException { - throw new HeadlessException(); - } - */ + * @Override public Clipboard getSystemClipboard() throws HeadlessException + * { throw new HeadlessException(); } + * @Override public Clipboard getSystemSelection() throws HeadlessException + * { throw new HeadlessException(); } + * @Override WindowFactory getWindowFactory() throws HeadlessException { + * throw new HeadlessException(); } + */ @Override protected void init() { lockAWT(); try { ComponentInternals.setComponentInternals(new ComponentInternalsImpl()); - //???AWT: new EventQueue(this); // create the system EventQueue - //???AWT: dispatcher = new Dispatcher(this); + // ???AWT: new EventQueue(this); // create the system EventQueue + // ???AWT: dispatcher = new Dispatcher(this); desktopProperties = new HashMap(); - //???AWT: desktopPropsSupport = new PropertyChangeSupport(this); -// ???AWT: awtEventsManager = new AWTEventsManager(); -// ???AWT: dispatchThread = new HeadlessEventDispatchThread(this, dispatcher); -// ???AWT: dtk = DTK.getDTK(); - dispatchThread.start(); + // ???AWT: desktopPropsSupport = new PropertyChangeSupport(this); + // ???AWT: awtEventsManager = new AWTEventsManager(); + // ???AWT: dispatchThread = new HeadlessEventDispatchThread(this, + // dispatcher); + // ???AWT: dtk = DTK.getDTK(); + dispatchThread.start(); } finally { unlockAWT(); } @@ -284,8 +209,8 @@ public final class HeadlessToolkit extends ToolkitImpl { } @Override - Map mapInputMethodHighlightImpl( - InputMethodHighlight highlight) throws HeadlessException { + Map mapInputMethodHighlightImpl(InputMethodHighlight highlight) + throws HeadlessException { throw new HeadlessException(); } diff --git a/awt/java/awt/IllegalComponentStateException.java b/awt/java/awt/IllegalComponentStateException.java index 21dc35f220..bed1729989 100644 --- a/awt/java/awt/IllegalComponentStateException.java +++ b/awt/java/awt/IllegalComponentStateException.java @@ -18,34 +18,38 @@ * @author Michael Danilov * @version $Revision$ */ + package java.awt; /** - * The IllegalComponentStateException class is used to provide - * notification that AWT component is not in an appropriate state - * for the requested operation. + * The IllegalComponentStateException class is used to provide notification that + * AWT component is not in an appropriate state for the requested operation. + * + * @since Android 1.0 */ public class IllegalComponentStateException extends IllegalStateException { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -1889339587208144238L; /** - * Instantiates a new IllegalComponentStateException with - * the specified message. + * Instantiates a new IllegalComponentStateException with the specified + * message. * - * @param s the String message which describes the exception. + * @param s + * the String message which describes the exception. */ public IllegalComponentStateException(String s) { super(s); } /** - * Instantiates a new IllegalComponentStateException without - * detailed message. + * Instantiates a new IllegalComponentStateException without detailed + * message. */ public IllegalComponentStateException() { } } - diff --git a/awt/java/awt/Image.java b/awt/java/awt/Image.java index c217e380c7..7ae3ed8836 100644 --- a/awt/java/awt/Image.java +++ b/awt/java/awt/Image.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt; import java.awt.image.AreaAveragingScaleFilter; @@ -30,64 +31,67 @@ import java.awt.image.ReplicateScaleFilter; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Image abstract class represents the graphic images. + * The Image abstract class represents the graphic images. + * + * @since Android 1.0 */ public abstract class Image { - /** - * The UndefinedProperty object should be returned if - * property is not defined for a particular image. + /** + * The UndefinedProperty object should be returned if property is not + * defined for a particular image. */ - public static final Object UndefinedProperty = new Object(); //$NON-LOCK-1$ + public static final Object UndefinedProperty = new Object(); // $NON-LOCK-1$ - /** - * The Constant SCALE_DEFAULT indicates the default image - * scaling algorithm. + /** + * The Constant SCALE_DEFAULT indicates the default image scaling algorithm. */ public static final int SCALE_DEFAULT = 1; - /** - * The Constant SCALE_FAST indicates an image scaling algorithm which - * places a higher priority on scaling speed than on the image's smoothness. + /** + * The Constant SCALE_FAST indicates an image scaling algorithm which places + * a higher priority on scaling speed than on the image's smoothness. */ public static final int SCALE_FAST = 2; - /** - * The Constant SCALE_SMOOTH indicates an image scaling algorithm which - * places a higher priority on image smoothness than on scaling speed. + /** + * The Constant SCALE_SMOOTH indicates an image scaling algorithm which + * places a higher priority on image smoothness than on scaling speed. */ public static final int SCALE_SMOOTH = 4; - /** - * The Constant SCALE_REPLICATE indicates the image scaling - * algorithm in the ReplicateScaleFilter class. + /** + * The Constant SCALE_REPLICATE indicates the image scaling algorithm in the + * ReplicateScaleFilter class. */ public static final int SCALE_REPLICATE = 8; - /** - * The Constant SCALE_AREA_AVERAGING indicates - * the area averaging image scaling algorithm. + /** + * The Constant SCALE_AREA_AVERAGING indicates the area averaging image + * scaling algorithm. */ public static final int SCALE_AREA_AVERAGING = 16; - /** - * The acceleration priority indicates image acceleration. + /** + * The acceleration priority indicates image acceleration. */ protected float accelerationPriority = 0.5f; - /** The Constant capabilities. */ + /** + * The Constant capabilities. + */ private static final ImageCapabilities capabilities = new ImageCapabilities(false); /** - * Gets the image property with the specified name. - * The UndefinedProperty object should be return if the property is - * not specified for this image. The return value should be null if the - * property is currently unknown yet and the specified ImageObserver is - * to be notified later. - * - * @param name the name of image's property. - * @param observer the ImageObserver. + * Gets the image property with the specified name. The UndefinedProperty + * object should be return if the property is not specified for this image. + * The return value should be null if the property is currently unknown yet + * and the specified ImageObserver is to be notified later. * + * @param name + * the name of image's property. + * @param observer + * the ImageObserver. * @return the Object which represents value of the specified property. */ public abstract Object getProperty(String name, ImageObserver observer); @@ -100,39 +104,40 @@ public abstract class Image { public abstract ImageProducer getSource(); /** - * Gets the width of this image. The specified ImageObserver object - * is notified when the width of this image is available. - * - * @param observer the ImageObserver object which is - * is notified when the width of this image is available. + * Gets the width of this image. The specified ImageObserver object is + * notified when the width of this image is available. * - * @return the width of image, or -1 if the width of this image - * is not available. + * @param observer + * the ImageObserver object which is is notified when the width + * of this image is available. + * @return the width of image, or -1 if the width of this image is not + * available. */ public abstract int getWidth(ImageObserver observer); /** - * Gets the height of this image. The specified ImageObserver object - * is notified when the height of this image is available. + * Gets the height of this image. The specified ImageObserver object is + * notified when the height of this image is available. * - * @param observer the ImageObserver object which is - * is notified when the height of this image is available. - * - * @return the height of image, or -1 if the height of this image - * is not available. + * @param observer + * the ImageObserver object which is is notified when the height + * of this image is available. + * @return the height of image, or -1 if the height of this image is not + * available. */ public abstract int getHeight(ImageObserver observer); /** - * Gets the scaled instance of this Image. This method returns - * an Image object constructed from the source of this image - * with the specified width, height, and applied scaling - * alghorithm. - * - * @param width the width of scaled Image. - * @param height the height of scaled Image. - * @param hints the constant which indicates scaling algorithm. + * Gets the scaled instance of this Image. This method returns an Image + * object constructed from the source of this image with the specified + * width, height, and applied scaling algorithm. * + * @param width + * the width of scaled Image. + * @param height + * the height of scaled Image. + * @param hints + * the constant which indicates scaling algorithm. * @return the scaled Image. */ public Image getScaledInstance(int width, int height, int hints) { @@ -147,17 +152,16 @@ public abstract class Image { } /** - * Gets a Graphics object for rendering this image. - * This method can be used for off-screen images. + * Gets a Graphics object for rendering this image. This method can be used + * for off-screen images. * * @return a Graphics object for rendering to this image. */ public abstract Graphics getGraphics(); /** - * Flushes resources which are used by this Image object. - * This method resets the image to the reconstructered state - * from the image's source. + * Flushes resources which are used by this Image object. This method resets + * the image to the reconstructed state from the image's source. */ public abstract void flush(); @@ -171,10 +175,10 @@ public abstract class Image { } /** - * Sets the acceleration priority for this image. - * - * @param priority the new acceleration priority (value in the - * range 0-1). + * Sets the acceleration priority for this image. + * + * @param priority + * the new acceleration priority (value in the range 0-1). */ public void setAccelerationPriority(float priority) { if (priority < 0 || priority > 1) { @@ -185,19 +189,17 @@ public abstract class Image { } /** - * Gets an ImageCapabilities object of this Image object - * for the specified GraphicsConfiguration. - * - * @param gc the specified GraphicsConfiguration object - * (null value means default GraphicsConfiguration). + * Gets an ImageCapabilities object of this Image object for the specified + * GraphicsConfiguration. * - * @return an ImageCapabilities object of this Image object - * for the specified GraphicsConfiguration. + * @param gc + * the specified GraphicsConfiguration object (null value means + * default GraphicsConfiguration). + * @return an ImageCapabilities object of this Image object for the + * specified GraphicsConfiguration. */ public ImageCapabilities getCapabilities(GraphicsConfiguration gc) { // Note: common image is not accelerated. return capabilities; } } - - diff --git a/awt/java/awt/ImageCapabilities.java b/awt/java/awt/ImageCapabilities.java index 6e9ecfc379..c6d59462ae 100644 --- a/awt/java/awt/ImageCapabilities.java +++ b/awt/java/awt/ImageCapabilities.java @@ -18,22 +18,27 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; /** * The ImageCapabilities class gives information about an image's capabilities. + * + * @since Android 1.0 */ public class ImageCapabilities implements Cloneable { - - /** The accelerated. */ + + /** + * The accelerated. + */ private final boolean accelerated; /** - * Instantiates a new ImageCapabilities with the specified - * acceleration flag which indicates whether acceleration - * is desired or not. + * Instantiates a new ImageCapabilities with the specified acceleration flag + * which indicates whether acceleration is desired or not. * - * @param accelerated the accelerated flag. + * @param accelerated + * the accelerated flag. */ public ImageCapabilities(boolean accelerated) { this.accelerated = accelerated; @@ -50,23 +55,22 @@ public class ImageCapabilities implements Cloneable { } /** - * Returne true if the Image of this ImageCapabilities is or can be + * Returns true if the Image of this ImageCapabilities is or can be * accelerated. - * + * * @return true, if the Image of this ImageCapabilities is or can be - * accelerated, false otherwise. + * accelerated, false otherwise. */ public boolean isAccelerated() { return accelerated; } /** - * Returns true if this ImageCapabilities applies to - * the VolatileImage which can lose its surfaces. + * Returns true if this ImageCapabilities applies to the VolatileImage which + * can lose its surfaces. * - * @return true if this ImageCapabilities applies to - * the VolatileImage which can lose its surfaces, - * false otherwise. + * @return true if this ImageCapabilities applies to the VolatileImage which + * can lose its surfaces, false otherwise. */ public boolean isTrueVolatile() { return true; diff --git a/awt/java/awt/Insets.java b/awt/java/awt/Insets.java index 61f3fd8bf2..04f198c619 100644 --- a/awt/java/awt/Insets.java +++ b/awt/java/awt/Insets.java @@ -18,44 +18,49 @@ * @author Dmitry A. Durnev * @version $Revision$ */ + package java.awt; import java.io.Serializable; import org.apache.harmony.misc.HashCode; - /** - * The Insets class represents the borders of a container. - * This class describes the space that a container should leave at each edge: - * the top, the bottom, the right side, and the left side. - * The space can be filled with a border, a blank space, or a title. + * The Insets class represents the borders of a container. This class describes + * the space that a container should leave at each edge: the top, the bottom, + * the right side, and the left side. The space can be filled with a border, a + * blank space, or a title. + * + * @since Android 1.0 */ public class Insets implements Cloneable, Serializable { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -2272572637695466749L; /** - * The top inset indicates the size of the space added to the - * top of the rectangle. + * The top inset indicates the size of the space added to the top of the + * rectangle. */ public int top; - /** - * The left inset indicates the size of the space added to the - * left side of the rectangle. + /** + * The left inset indicates the size of the space added to the left side of + * the rectangle. */ public int left; - /** - * The bottom inset indicates the size of the space subtracted from - * the bottom of the rectangle. + /** + * The bottom inset indicates the size of the space subtracted from the + * bottom of the rectangle. */ public int bottom; - /** The right inset indicates the size of the space subtracted from - * the right side of the rectangle. + /** + * The right inset indicates the size of the space subtracted from the right + * side of the rectangle. */ public int right; @@ -63,10 +68,14 @@ public class Insets implements Cloneable, Serializable { * Instantiates a new Inset object with the specified top, left, bottom, * right parameters. * - * @param top the top inset. - * @param left the left inset. - * @param bottom the bottom inset. - * @param right the right inset. + * @param top + * the top inset. + * @param left + * the left inset. + * @param bottom + * the bottom inset. + * @param right + * the right inset. */ public Insets(int top, int left, int bottom, int right) { setValues(top, left, bottom, right); @@ -100,10 +109,10 @@ public class Insets implements Cloneable, Serializable { /** * Checks if this Insets object is equal to the specified object. * - * @param o the Object to be compared. - * - * @return true, if the object is an Insets object whose data values - * are equal to those of this object, false otherwise. + * @param o + * the Object to be compared. + * @return true, if the object is an Insets object whose data values are + * equal to those of this object, false otherwise. */ @Override public boolean equals(Object o) { @@ -111,9 +120,8 @@ public class Insets implements Cloneable, Serializable { return true; } if (o instanceof Insets) { - Insets i = (Insets) o; - return ((i.left == left) && (i.bottom == bottom) && - (i.right == right) && (i.top == top)); + Insets i = (Insets)o; + return ((i.left == left) && (i.bottom == bottom) && (i.right == right) && (i.top == top)); } return false; } @@ -125,23 +133,26 @@ public class Insets implements Cloneable, Serializable { */ @Override public String toString() { - /* The format is based on 1.5 release behavior - * which can be revealed by the following code: - * System.out.println(new Insets(1, 2, 3, 4)); + /* + * The format is based on 1.5 release behavior which can be revealed by + * the following code: System.out.println(new Insets(1, 2, 3, 4)); */ - return (getClass().getName() + - "[left=" + left + ",top=" + top + //$NON-NLS-1$ //$NON-NLS-2$ - ",right=" + right + ",bottom=" + bottom + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + return (getClass().getName() + "[left=" + left + ",top=" + top + //$NON-NLS-1$ //$NON-NLS-2$ + ",right=" + right + ",bottom=" + bottom + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } /** * Sets top, left, bottom, and right insets to the specified values. * - * @param top the top inset. - * @param left the left inset. - * @param bottom the bottom inset. - * @param right the right inset. + * @param top + * the top inset. + * @param left + * the left inset. + * @param bottom + * the bottom inset. + * @param right + * the right inset. */ public void set(int top, int left, int bottom, int right) { setValues(top, left, bottom, right); @@ -150,10 +161,14 @@ public class Insets implements Cloneable, Serializable { /** * Sets the values. * - * @param top the top - * @param left the left - * @param bottom the bottom - * @param right the right + * @param top + * the top. + * @param left + * the left. + * @param bottom + * the bottom. + * @param right + * the right. */ private void setValues(int top, int left, int bottom, int right) { this.top = top; @@ -162,4 +177,3 @@ public class Insets implements Cloneable, Serializable { this.right = right; } } - diff --git a/awt/java/awt/ItemSelectable.java b/awt/java/awt/ItemSelectable.java index a46364b031..212cf709e5 100644 --- a/awt/java/awt/ItemSelectable.java +++ b/awt/java/awt/ItemSelectable.java @@ -18,35 +18,41 @@ * @author Michael Danilov * @version $Revision$ */ + package java.awt; import java.awt.event.ItemListener; /** * The ItemSelectable interface represents a set of items which can be selected. + * + * @since Android 1.0 */ public interface ItemSelectable { /** - * Adds an ItemListener for receiving item events when the state of an item - * is changed by the user. + * Adds an ItemListener for receiving item events when the state of an item + * is changed by the user. * - * @param l the ItemListener. + * @param l + * the ItemListener. */ public void addItemListener(ItemListener l); /** - * Gets an array of the selected objects or null if there is no selected object. - * - * @return an array of the selected objects or null if there is no selected + * Gets an array of the selected objects or null if there is no selected * object. + * + * @return an array of the selected objects or null if there is no selected + * object. */ public Object[] getSelectedObjects(); /** * Removes the specified ItemListener. * - * @param l the ItemListener which will be removed. + * @param l + * the ItemListener which will be removed. */ public void removeItemListener(ItemListener l); diff --git a/awt/java/awt/MenuComponent.java b/awt/java/awt/MenuComponent.java index 9eb4f3d8d2..9c1b120e66 100644 --- a/awt/java/awt/MenuComponent.java +++ b/awt/java/awt/MenuComponent.java @@ -21,8 +21,7 @@ import java.awt.event.FocusListener; import java.awt.event.MouseEvent; import java.awt.peer.MenuComponentPeer; import java.io.Serializable; -import java.util.Locale; -//import javax.accessibility.Accessible; +import java.util.Locale; //import javax.accessibility.Accessible; //import javax.accessibility.AccessibleComponent; //import javax.accessibility.AccessibleContext; //import javax.accessibility.AccessibleRole; @@ -31,371 +30,172 @@ import java.util.Locale; import org.apache.harmony.awt.gl.MultiRectArea; import org.apache.harmony.awt.state.MenuItemState; import org.apache.harmony.awt.state.MenuState; +import org.apache.harmony.luni.util.NotImplementedException; /** - * The MenuComponent abstract class is the superclass for menu - * components. Menu components receive and process AWT events. + * The MenuComponent abstract class is the superclass for menu components. Menu + * components receive and process AWT events. + * + * @since Android 1.0 */ public abstract class MenuComponent implements Serializable { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -4536902356223894379L; - /** The name. */ + /** + * The name. + */ private String name; - /** The font. */ + /** + * The font. + */ private Font font; - /** The parent. */ + /** + * The parent. + */ MenuContainer parent; - /** The deprecated event handler. */ + /** + * The deprecated event handler. + */ boolean deprecatedEventHandler = true; - /** The selected item index. */ + /** + * The selected item index. + */ private int selectedItemIndex; - //???AWT: private AccessibleContext accessibleContext; + // ???AWT: private AccessibleContext accessibleContext; - /** The toolkit. */ + /** + * The toolkit. + */ final Toolkit toolkit = Toolkit.getDefaultToolkit(); - //???AWT + // ???AWT /* - protected abstract class AccessibleAWTMenuComponent extends AccessibleContext implements - Serializable, AccessibleComponent, AccessibleSelection { - private static final long serialVersionUID = -4269533416223798698L; - - public void addFocusListener(FocusListener listener) { - } - - public boolean contains(Point pt) { - return false; - } - - public Accessible getAccessibleAt(Point pt) { - return null; - } - - public Color getBackground() { - return null; - } - - public Rectangle getBounds() { - return null; - } - - public Cursor getCursor() { - return null; - } - - public Font getFont() { - return MenuComponent.this.getFont(); - } - - public FontMetrics getFontMetrics(Font font) { - return null; - } - - public Color getForeground() { - return null; - } - - public Point getLocation() { - return null; - } - - public Point getLocationOnScreen() { - return null; - } - - public Dimension getSize() { - return null; - } - - public boolean isEnabled() { - return true; // always enabled - } - - public boolean isFocusTraversable() { - return true; // always focus traversable - } - - public boolean isShowing() { - return true;// always showing - } - - public boolean isVisible() { - return true; // always visible - } - - public void removeFocusListener(FocusListener listener) { - } - - public void requestFocus() { - } - - public void setBackground(Color color) { - } - - public void setBounds(Rectangle rect) { - } - - public void setCursor(Cursor cursor) { - } - - public void setEnabled(boolean enabled) { - } - - public void setFont(Font font) { - MenuComponent.this.setFont(font); - } - - public void setForeground(Color color) { - } - - public void setLocation(Point pt) { - } - - public void setSize(Dimension pt) { - } - - public void setVisible(boolean visible) { - } - - public void addAccessibleSelection(int index) { - } - - public void clearAccessibleSelection() { - } - - public Accessible getAccessibleSelection(int index) { - return null; - } - - public int getAccessibleSelectionCount() { - return 0; - } - - public boolean isAccessibleChildSelected(int index) { - return false; - } - - public void removeAccessibleSelection(int index) { - } - - public void selectAllAccessibleSelection() { - } - - @Override - public Accessible getAccessibleChild(int index) { - return null; - } - - @Override - public int getAccessibleChildrenCount() { - return 0; - } - - @Override - public AccessibleComponent getAccessibleComponent() { - return this; - } - - @Override - public String getAccessibleDescription() { - return super.getAccessibleDescription(); - } - - @Override - public int getAccessibleIndexInParent() { - toolkit.lockAWT(); - try { - Accessible aParent = getAccessibleParent(); - int aIndex = -1; - if (aParent instanceof MenuComponent) { - MenuComponent parent = (MenuComponent) aParent; - int count = parent.getItemCount(); - for (int i = 0; i < count; i++) { - MenuComponent comp = parent.getItem(i); - if (comp instanceof Accessible) { - aIndex++; - if (comp == MenuComponent.this) { - return aIndex; - } - } - } - } - return -1; - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public String getAccessibleName() { - return super.getAccessibleName(); - } - - @Override - public Accessible getAccessibleParent() { - toolkit.lockAWT(); - try { - Accessible aParent = super.getAccessibleParent(); - if (aParent != null) { - return aParent; - } - MenuContainer parent = getParent(); - if (parent instanceof Accessible) { - aParent = (Accessible) parent; - } - return aParent; - } finally { - toolkit.unlockAWT(); - } - } - - @Override - public AccessibleRole getAccessibleRole() { - return AccessibleRole.AWT_COMPONENT; - } - - @Override - public AccessibleSelection getAccessibleSelection() { - return this; - } - - @Override - public AccessibleStateSet getAccessibleStateSet() { - return new AccessibleStateSet(); - } - - @Override - public Locale getLocale() { - return Locale.getDefault(); - } - } - */ - - /** - * The accessor to MenuComponent internal state, - * utilized by the visual theme. - * - * @throws HeadlessException the headless exception - */ - //???AWT + * protected abstract class AccessibleAWTMenuComponent extends + * AccessibleContext implements Serializable, AccessibleComponent, + * AccessibleSelection { private static final long serialVersionUID = + * -4269533416223798698L; public void addFocusListener(FocusListener + * listener) { } public boolean contains(Point pt) { return false; } public + * Accessible getAccessibleAt(Point pt) { return null; } public Color + * getBackground() { return null; } public Rectangle getBounds() { return + * null; } public Cursor getCursor() { return null; } public Font getFont() + * { return MenuComponent.this.getFont(); } public FontMetrics + * getFontMetrics(Font font) { return null; } public Color getForeground() { + * return null; } public Point getLocation() { return null; } public Point + * getLocationOnScreen() { return null; } public Dimension getSize() { + * return null; } public boolean isEnabled() { return true; // always + * enabled } public boolean isFocusTraversable() { return true; // always + * focus traversable } public boolean isShowing() { return true;// always + * showing } public boolean isVisible() { return true; // always visible } + * public void removeFocusListener(FocusListener listener) { } public void + * requestFocus() { } public void setBackground(Color color) { } public void + * setBounds(Rectangle rect) { } public void setCursor(Cursor cursor) { } + * public void setEnabled(boolean enabled) { } public void setFont(Font + * font) { MenuComponent.this.setFont(font); } public void + * setForeground(Color color) { } public void setLocation(Point pt) { } + * public void setSize(Dimension pt) { } public void setVisible(boolean + * visible) { } public void addAccessibleSelection(int index) { } public + * void clearAccessibleSelection() { } public Accessible + * getAccessibleSelection(int index) { return null; } public int + * getAccessibleSelectionCount() { return 0; } public boolean + * isAccessibleChildSelected(int index) { return false; } public void + * removeAccessibleSelection(int index) { } public void + * selectAllAccessibleSelection() { } + * @Override public Accessible getAccessibleChild(int index) { return null; + * } + * @Override public int getAccessibleChildrenCount() { return 0; } + * @Override public AccessibleComponent getAccessibleComponent() { return + * this; } + * @Override public String getAccessibleDescription() { return + * super.getAccessibleDescription(); } + * @Override public int getAccessibleIndexInParent() { toolkit.lockAWT(); + * try { Accessible aParent = getAccessibleParent(); int aIndex = -1; if + * (aParent instanceof MenuComponent) { MenuComponent parent = + * (MenuComponent) aParent; int count = parent.getItemCount(); for (int i = + * 0; i < count; i++) { MenuComponent comp = parent.getItem(i); if (comp + * instanceof Accessible) { aIndex++; if (comp == MenuComponent.this) { + * return aIndex; } } } } return -1; } finally { toolkit.unlockAWT(); } } + * @Override public String getAccessibleName() { return + * super.getAccessibleName(); } + * @Override public Accessible getAccessibleParent() { toolkit.lockAWT(); + * try { Accessible aParent = super.getAccessibleParent(); if (aParent != + * null) { return aParent; } MenuContainer parent = getParent(); if (parent + * instanceof Accessible) { aParent = (Accessible) parent; } return aParent; + * } finally { toolkit.unlockAWT(); } } + * @Override public AccessibleRole getAccessibleRole() { return + * AccessibleRole.AWT_COMPONENT; } + * @Override public AccessibleSelection getAccessibleSelection() { return + * this; } + * @Override public AccessibleStateSet getAccessibleStateSet() { return new + * AccessibleStateSet(); } + * @Override public Locale getLocale() { return Locale.getDefault(); } } + */ + + /** + * The accessor to MenuComponent internal state, utilized by the visual + * theme. + * + * @throws HeadlessException + * the headless exception. + */ + // ???AWT /* - class State implements MenuState { - Dimension size; - - Dimension getSize() { - if (size == null) { - calculate(); - } - return size; - } - - public int getWidth() { - return getSize().width; - } - - public int getHeight() { - return getSize().height; - } - - public Font getFont() { - return MenuComponent.this.getFont(); - } - - public int getItemCount() { - return MenuComponent.this.getItemCount(); - } - - public int getSelectedItemIndex() { - return MenuComponent.this.getSelectedItemIndex(); - } - - public boolean isFontSet() { - return MenuComponent.this.isFontSet(); - } - - @SuppressWarnings("deprecation") - public FontMetrics getFontMetrics(Font f) { - return MenuComponent.this.toolkit.getFontMetrics(f); - } - - public Point getLocation() { - return MenuComponent.this.getLocation(); - } - - public MenuItemState getItem(int index) { - MenuItem item = MenuComponent.this.getItem(index); - return item.itemState; - } - - public void setSize(int w, int h) { - this.size = new Dimension(w, h); - } - - void calculate() { - size = new Dimension(); - size.setSize(toolkit.theme.calculateMenuSize(this)); - } - - void reset() { - for (int i = 0; i < getItemCount(); i++) { - ((MenuItem.State) getItem(i)).reset(); - } - } - - } - */ - - /** - * Pop-up box for menu. It transfers the paint events, - * keyboard and mouse events to the menu component itself - */ - //???AWT + * class State implements MenuState { Dimension size; Dimension getSize() { + * if (size == null) { calculate(); } return size; } public int getWidth() { + * return getSize().width; } public int getHeight() { return + * getSize().height; } public Font getFont() { return + * MenuComponent.this.getFont(); } public int getItemCount() { return + * MenuComponent.this.getItemCount(); } public int getSelectedItemIndex() { + * return MenuComponent.this.getSelectedItemIndex(); } public boolean + * isFontSet() { return MenuComponent.this.isFontSet(); } + * @SuppressWarnings("deprecation") public FontMetrics getFontMetrics(Font + * f) { return MenuComponent.this.toolkit.getFontMetrics(f); } public Point + * getLocation() { return MenuComponent.this.getLocation(); } public + * MenuItemState getItem(int index) { MenuItem item = + * MenuComponent.this.getItem(index); return item.itemState; } public void + * setSize(int w, int h) { this.size = new Dimension(w, h); } void + * calculate() { size = new Dimension(); + * size.setSize(toolkit.theme.calculateMenuSize(this)); } void reset() { for + * (int i = 0; i < getItemCount(); i++) { ((MenuItem.State) + * getItem(i)).reset(); } } } + */ + + /** + * Pop-up box for menu. It transfers the paint events, keyboard and mouse + * events to the menu component itself. + */ + // ???AWT /* - class MenuPopupBox extends PopupBox { - private final Point lastMousePos = new Point(); - - @Override - boolean isMenu() { - return true; - } - - @Override - void paint(Graphics gr) { - MenuComponent.this.paint(gr); - } - - @Override - void onKeyEvent(int eventId, int vKey, long when, int modifiers) { - MenuComponent.this.onKeyEvent(eventId, vKey, when, modifiers); - } + * class MenuPopupBox extends PopupBox { private final Point lastMousePos = + * new Point(); + * @Override boolean isMenu() { return true; } + * @Override void paint(Graphics gr) { MenuComponent.this.paint(gr); } + * @Override void onKeyEvent(int eventId, int vKey, long when, int + * modifiers) { MenuComponent.this.onKeyEvent(eventId, vKey, when, + * modifiers); } + * @Override void onMouseEvent(int eventId, Point where, int mouseButton, + * long when, int modifiers, int wheelRotation) { // prevent conflict of + * mouse and keyboard // when sub-menu drops down due to keyboard navigation + * if (lastMousePos.equals(where) && (eventId == MouseEvent.MOUSE_MOVED || + * eventId == MouseEvent.MOUSE_ENTERED)) { return; } + * lastMousePos.setLocation(where); MenuComponent.this.onMouseEvent(eventId, + * where, mouseButton, when, modifiers); } } + */ - @Override - void onMouseEvent(int eventId, Point where, int mouseButton, long when, int modifiers, - int wheelRotation) { - // prevent conflict of mouse and keyboard - // when sub-menu drops down due to keyboard navigation - if (lastMousePos.equals(where) - && (eventId == MouseEvent.MOUSE_MOVED || eventId == MouseEvent.MOUSE_ENTERED)) { - return; - } - lastMousePos.setLocation(where); - MenuComponent.this.onMouseEvent(eventId, where, mouseButton, when, modifiers); - } - } - */ - /** * Instantiates a new MenuComponent object. * - * @throws HeadlessException if the graphical interface - * environment can't support MenuComponents + * @throws HeadlessException + * if the graphical interface environment can't support + * MenuComponents. */ public MenuComponent() throws HeadlessException { toolkit.lockAWT(); @@ -438,9 +238,9 @@ public abstract class MenuComponent implements Serializable { } /** - * Gets the Parent menu Container . + * Gets the parent menu container. * - * @return the parent + * @return the parent. */ public MenuContainer getParent() { toolkit.lockAWT(); @@ -454,7 +254,8 @@ public abstract class MenuComponent implements Serializable { /** * Sets the name of the MenuComponent to the specified string. * - * @param name the new name of the MenuComponent object. + * @param name + * the new name of the MenuComponent object. */ public void setName(String name) { toolkit.lockAWT(); @@ -468,7 +269,8 @@ public abstract class MenuComponent implements Serializable { /** * Dispatches AWT event. * - * @param event the AWTEvent. + * @param event + * the AWTEvent. */ public final void dispatchEvent(AWTEvent event) { toolkit.lockAWT(); @@ -485,7 +287,8 @@ public abstract class MenuComponent implements Serializable { /** * Post deprecated event. * - * @param event the event + * @param event + * the event. */ void postDeprecatedEvent(AWTEvent event) { Event evt = event.getEvent(); @@ -495,11 +298,12 @@ public abstract class MenuComponent implements Serializable { } /** - * Gets the peer of the MenuComponent; an application must not - * use this method directly. + * Gets the peer of the MenuComponent; an application must not use this + * method directly. * * @return the MenuComponentPeer object. - * + * @throws NotImplementedException + * if this method is not implemented by a subclass. * @deprecated an application must not use this method directly. */ @Deprecated @@ -527,11 +331,9 @@ public abstract class MenuComponent implements Serializable { /** * Posts the Event to the MenuComponent. * - * @param e the Event. - * - * @return true, if the event is posted successfully; - * false otherwise. - * + * @param e + * the Event. + * @return true, if the event is posted successfully, false otherwise. * @deprecated Replaced dispatchEvent method. */ @SuppressWarnings("deprecation") @@ -551,8 +353,7 @@ public abstract class MenuComponent implements Serializable { /** * Returns the string representation of the MenuComponent state. * - * @return returns the string representation of the MenuComponent - * state. + * @return returns the string representation of the MenuComponent state. */ protected String paramString() { toolkit.lockAWT(); @@ -563,20 +364,13 @@ public abstract class MenuComponent implements Serializable { } } - //???AWT + // ???AWT /* - public AccessibleContext getAccessibleContext() { - toolkit.lockAWT(); - try { - if (accessibleContext == null) { - accessibleContext = createAccessibleContext(); - } - return accessibleContext; - } finally { - toolkit.unlockAWT(); - } - } - */ + * public AccessibleContext getAccessibleContext() { toolkit.lockAWT(); try + * { if (accessibleContext == null) { accessibleContext = + * createAccessibleContext(); } return accessibleContext; } finally { + * toolkit.unlockAWT(); } } + */ /** * Gets the font of the MenuComponent object. @@ -605,13 +399,13 @@ public abstract class MenuComponent implements Serializable { */ boolean isFontSet() { return font != null - || ((parent instanceof MenuComponent) && ((MenuComponent) parent).isFontSet()); + || ((parent instanceof MenuComponent) && ((MenuComponent)parent).isFontSet()); } /** * Checks for default font. * - * @return true, if successful + * @return true, if successful. */ boolean hasDefaultFont() { return false; @@ -620,7 +414,8 @@ public abstract class MenuComponent implements Serializable { /** * Processes an AWTEevent on this menu component. * - * @param event the AWTEvent. + * @param event + * the AWTEvent. */ protected void processEvent(AWTEvent event) { toolkit.lockAWT(); @@ -645,7 +440,8 @@ public abstract class MenuComponent implements Serializable { /** * Sets the Font for this MenuComponent object. * - * @param font the new Font to be used for this MenuComponent. + * @param font + * the new Font to be used for this MenuComponent. */ public void setFont(Font font) { toolkit.lockAWT(); @@ -659,7 +455,8 @@ public abstract class MenuComponent implements Serializable { /** * Sets the parent. * - * @param parent the new parent + * @param parent + * the new parent. */ void setParent(MenuContainer parent) { this.parent = parent; @@ -668,7 +465,7 @@ public abstract class MenuComponent implements Serializable { /** * Gets the location. * - * @return the location + * @return the location. */ Point getLocation() { // to be overridden @@ -678,7 +475,7 @@ public abstract class MenuComponent implements Serializable { /** * Gets the width. * - * @return the width + * @return the width. */ int getWidth() { // to be overridden @@ -688,7 +485,7 @@ public abstract class MenuComponent implements Serializable { /** * Gets the height. * - * @return the height + * @return the height. */ int getHeight() { // to be overridden @@ -698,31 +495,19 @@ public abstract class MenuComponent implements Serializable { /** * Recursively find the menu item for a menu shortcut. * - * @param gr the gr - * - * @return the menu item; - * or null if the item is not available for this shortcut + * @param gr + * the gr. + * @return the menu item; or null if the item is not available for this + * shortcut. */ - //???AWT + // ???AWT /* - MenuItem getShortcutMenuItemImpl(MenuShortcut ms) { - if (ms == null) { - return null; - } - for (int i = 0; i < getItemCount(); i++) { - MenuItem mi = getItem(i); - if (mi instanceof Menu) { - mi = ((Menu) mi).getShortcutMenuItemImpl(ms); - if (mi != null) { - return mi; - } - } else if (ms.equals(mi.getShortcut())) { - return mi; - } - } - return null; - } - */ + * MenuItem getShortcutMenuItemImpl(MenuShortcut ms) { if (ms == null) { + * return null; } for (int i = 0; i < getItemCount(); i++) { MenuItem mi = + * getItem(i); if (mi instanceof Menu) { mi = ((Menu) + * mi).getShortcutMenuItemImpl(ms); if (mi != null) { return mi; } } else if + * (ms.equals(mi.getShortcut())) { return mi; } } return null; } + */ void paint(Graphics gr) { gr.setColor(Color.LIGHT_GRAY); @@ -733,11 +518,16 @@ public abstract class MenuComponent implements Serializable { /** * Mouse events handler. * - * @param eventId - one of the MouseEvent.MOUSE_* constants - * @param where - mouse location - * @param mouseButton - mouse button that was pressed or released - * @param when - event time - * @param modifiers - input event modifiers + * @param eventId + * one of the MouseEvent.MOUSE_* constants. + * @param where + * mouse location. + * @param mouseButton + * mouse button that was pressed or released. + * @param when + * event time. + * @param modifiers + * input event modifiers. */ void onMouseEvent(int eventId, Point where, int mouseButton, long when, int modifiers) { // to be overridden @@ -746,159 +536,109 @@ public abstract class MenuComponent implements Serializable { /** * Keyboard event handler. * - * @param eventId - one of the KeyEvent.KEY_* constants - * @param vKey - the key code - * @param when - event time - * @param modifiers - input event modifiers + * @param eventId + * one of the KeyEvent.KEY_* constants. + * @param vKey + * the key code. + * @param when + * event time. + * @param modifiers + * input event modifiers. */ void onKeyEvent(int eventId, int vKey, long when, int modifiers) { // to be overridden } /** - * Post the ActionEvent or ItemEvent, - * depending on type of the menu item. + * Post the ActionEvent or ItemEvent, depending on type of the menu item. * - * @param index the index - * - * @return the item rect + * @param index + * the index. + * @return the item rect. */ - //???AWT + // ???AWT /* - void fireItemAction(int item, long when, int modifiers) { - MenuItem mi = getItem(item); - mi.itemSelected(when, modifiers); - } - - MenuItem getItem(int index) { - // to be overridden - return null; - } - - int getItemCount() { - return 0; - } - */ + * void fireItemAction(int item, long when, int modifiers) { MenuItem mi = + * getItem(item); mi.itemSelected(when, modifiers); } MenuItem getItem(int + * index) { // to be overridden return null; } int getItemCount() { return + * 0; } + */ /** - * @return The sub-menu of currently selecetd item, - * or null if such a sub-menu is not available + * @return The sub-menu of currently selecetd item, or null if such a + * sub-menu is not available. */ - //???AWT + // ???AWT /* - Menu getSelectedSubmenu() { - if (selectedItemIndex < 0) { - return null; - } - MenuItem item = getItem(selectedItemIndex); - return (item instanceof Menu) ? (Menu) item : null; - } - */ + * Menu getSelectedSubmenu() { if (selectedItemIndex < 0) { return null; } + * MenuItem item = getItem(selectedItemIndex); return (item instanceof Menu) + * ? (Menu) item : null; } + */ /** - * Convenience method for selectItem(index, true) + * Convenience method for selectItem(index, true). */ - //???AWT + // ???AWT /* - void selectItem(int index) { - selectItem(index, true); - } - */ + * void selectItem(int index) { selectItem(index, true); } + */ /** - * Change the selection in the menu - * @param index - new selecetd item's index - * @param showSubMenu - if new selected item has a sub-menu, - * should that sub-menu be displayed + * Change the selection in the menu. + * + * @param index + * new selecetd item's index. + * @param showSubMenu + * if new selected item has a sub-menu, should that sub-menu be + * displayed. */ - //???AWT + // ???AWT /* - void selectItem(int index, boolean showSubMenu) { - if (selectedItemIndex == index) { - return; - } - if (selectedItemIndex >= 0 && getItem(selectedItemIndex) instanceof Menu) { - ((Menu) getItem(selectedItemIndex)).hide(); - } - MultiRectArea clip = getUpdateClip(index, selectedItemIndex); - selectedItemIndex = index; - Graphics gr = getGraphics(clip); - if (gr != null) { - paint(gr); - } - if (showSubMenu) { - showSubMenu(selectedItemIndex); - } - } - */ + * void selectItem(int index, boolean showSubMenu) { if (selectedItemIndex + * == index) { return; } if (selectedItemIndex >= 0 && + * getItem(selectedItemIndex) instanceof Menu) { ((Menu) + * getItem(selectedItemIndex)).hide(); } MultiRectArea clip = + * getUpdateClip(index, selectedItemIndex); selectedItemIndex = index; + * Graphics gr = getGraphics(clip); if (gr != null) { paint(gr); } if + * (showSubMenu) { showSubMenu(selectedItemIndex); } } + */ /** * Change the selected item to the next one in the requested direction * moving cyclically, skipping separators - * @param forward - the direction to move the selection - * @param showSubMenu - if new selected item has a sub-menu, - * should that sub-menu be displayed + * + * @param forward + * the direction to move the selection. + * @param showSubMenu + * if new selected item has a sub-menu, should that sub-menu be + * displayed. */ - //???AWT + // ???AWT /* - void selectNextItem(boolean forward, boolean showSubMenu) { - int selected = getSelectedItemIndex(); - int count = getItemCount(); - if (count == 0) { - return; - } - if (selected < 0) { - selected = (forward ? count - 1 : 0); - } - int i = selected; - do { - i = (forward ? (i + 1) : (i + count - 1)) % count; - i %= count; - MenuItem item = getItem(i); - if (!"-".equals(item.getLabel())) { //$NON-NLS-1$ - selectItem(i, showSubMenu); - return; - } - } while (i != selected); - } - - - void showSubMenu(int index) { - if ((index < 0) || !isActive()) { - return; - } - MenuItem item = getItem(index); - if (item instanceof Menu) { - Menu menu = ((Menu) getItem(index)); - if (menu.getItemCount() == 0) { - return; - } - Point location = getSubmenuLocation(index); - menu.show(location.x, location.y, false); - } - } - */ + * void selectNextItem(boolean forward, boolean showSubMenu) { int selected + * = getSelectedItemIndex(); int count = getItemCount(); if (count == 0) { + * return; } if (selected < 0) { selected = (forward ? count - 1 : 0); } int + * i = selected; do { i = (forward ? (i + 1) : (i + count - 1)) % count; i + * %= count; MenuItem item = getItem(i); if (!"-".equals(item.getLabel())) { + * //$NON-NLS-1$ selectItem(i, showSubMenu); return; } } while (i != + * selected); } void showSubMenu(int index) { if ((index < 0) || + * !isActive()) { return; } MenuItem item = getItem(index); if (item + * instanceof Menu) { Menu menu = ((Menu) getItem(index)); if + * (menu.getItemCount() == 0) { return; } Point location = + * getSubmenuLocation(index); menu.show(location.x, location.y, false); } } + */ /** - * @return - the menu bar which is the root of crrent menu's hierarchy; - * or null if the hierarchy root is not a menu bar + * @return the menu bar which is the root of current menu's hierarchy; or + * null if the hierarchy root is not a menu bar. */ - //???AWT + // ???AWT /* - MenuBar getMenuBar() { - if (parent instanceof MenuBar) { - return (MenuBar) parent; - } - if (parent instanceof MenuComponent) { - return ((MenuComponent) parent).getMenuBar(); - } - return null; - } - - PopupBox getPopupBox() { - return null; - } - */ + * MenuBar getMenuBar() { if (parent instanceof MenuBar) { return (MenuBar) + * parent; } if (parent instanceof MenuComponent) { return ((MenuComponent) + * parent).getMenuBar(); } return null; } PopupBox getPopupBox() { return + * null; } + */ Rectangle getItemRect(int index) { // to be overridden @@ -906,13 +646,14 @@ public abstract class MenuComponent implements Serializable { } /** - * Determine the clip region when menu selection is changed - * from index1 to index2. - * - * @param index1 - old selected intem - * @param index2 - new selected item + * Determine the clip region when menu selection is changed from index1 to + * index2. * - * @return - the region to repaint + * @param index1 + * old selected item. + * @param index2 + * new selected item. + * @return the region to repaint. */ final MultiRectArea getUpdateClip(int index1, int index2) { MultiRectArea clip = new MultiRectArea(); @@ -928,9 +669,9 @@ public abstract class MenuComponent implements Serializable { /** * Gets the submenu location. * - * @param index the index - * - * @return the submenu location + * @param index + * the index. + * @return the submenu location. */ Point getSubmenuLocation(int index) { // to be overridden @@ -940,7 +681,7 @@ public abstract class MenuComponent implements Serializable { /** * Gets the selected item index. * - * @return the selected item index + * @return the selected item index. */ int getSelectedItemIndex() { return selectedItemIndex; @@ -952,14 +693,15 @@ public abstract class MenuComponent implements Serializable { void hide() { selectedItemIndex = -1; if (parent instanceof MenuComponent) { - ((MenuComponent) parent).itemHidden(this); + ((MenuComponent)parent).itemHidden(this); } } /** * Item hidden. * - * @param mc the mc + * @param mc + * the mc. */ void itemHidden(MenuComponent mc) { // to be overridden @@ -968,7 +710,7 @@ public abstract class MenuComponent implements Serializable { /** * Checks if is visible. * - * @return true, if is visible + * @return true, if is visible. */ boolean isVisible() { return true; @@ -977,7 +719,7 @@ public abstract class MenuComponent implements Serializable { /** * Checks if is active. * - * @return true, if is active + * @return true, if is active. */ boolean isActive() { return true; @@ -987,14 +729,16 @@ public abstract class MenuComponent implements Serializable { * Hide all menu hierarchy. */ void endMenu() { - //???AWT: toolkit.dispatcher.popupDispatcher.deactivateAll(); + // ???AWT: toolkit.dispatcher.popupDispatcher.deactivateAll(); } /** * Handle the mouse click or Enter key event on a menu's item. * - * @param when - the event time - * @param modifiers - input event modifiers + * @param when + * the event time. + * @param modifiers + * input event modifiers. */ void itemSelected(long when, int modifiers) { endMenu(); @@ -1003,14 +747,14 @@ public abstract class MenuComponent implements Serializable { /** * Auto name. * - * @return the string + * @return the string. */ String autoName() { String name = getClass().getName(); if (name.indexOf("$") != -1) { //$NON-NLS-1$ return null; } - //???AWT: int number = toolkit.autoNumber.nextMenuComponent++; + // ???AWT: int number = toolkit.autoNumber.nextMenuComponent++; int number = 0; name = name.substring(name.lastIndexOf(".") + 1) + Integer.toString(number); //$NON-NLS-1$ return name; @@ -1019,10 +763,10 @@ public abstract class MenuComponent implements Serializable { /** * Creates the Graphics object for the pop-up box of this menu component. * - * @param clip - the clip to set on this Graphics - * - * @return - the created Graphics object, - * or null if such object is not available. + * @param clip + * the clip to set on this Graphics. + * @return the created Graphics object, or null if such object is not + * available. */ Graphics getGraphics(MultiRectArea clip) { // to be overridden @@ -1030,12 +774,10 @@ public abstract class MenuComponent implements Serializable { } /** - * @return accessible context specific for particular menu component + * @return accessible context specific for particular menu component. */ - //???AWT + // ???AWT /* - AccessibleContext createAccessibleContext() { - return null; - } - */ + * AccessibleContext createAccessibleContext() { return null; } + */ } diff --git a/awt/java/awt/MenuContainer.java b/awt/java/awt/MenuContainer.java index 7a48f13c89..e509a1b1b7 100644 --- a/awt/java/awt/MenuContainer.java +++ b/awt/java/awt/MenuContainer.java @@ -18,17 +18,21 @@ * @author Pavel Dolgov * @version $Revision$ */ + package java.awt; /** * The MenuContainer interface represents all menu containers. + * + * @since Android 1.0 */ public interface MenuContainer { /** * Removes the specified MenuComponent from the MenuContainer. * - * @param c the MenuComponent. + * @param c + * the MenuComponent. */ public void remove(MenuComponent c); @@ -42,15 +46,12 @@ public interface MenuContainer { /** * Posts an Event. * - * @param e the Event. - * - * @return true if the event is posted successfully; - * false otherwise. - * + * @param e + * the Event. + * @return true if the event is posted successfully, false otherwise. * @deprecated Replaced by dispatchEvent method. */ @Deprecated public boolean postEvent(Event e); } - diff --git a/awt/java/awt/Paint.java b/awt/java/awt/Paint.java index f8732c8efe..dfea3a74bf 100644 --- a/awt/java/awt/Paint.java +++ b/awt/java/awt/Paint.java @@ -18,6 +18,7 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; import java.awt.geom.AffineTransform; @@ -25,28 +26,32 @@ import java.awt.geom.Rectangle2D; import java.awt.image.ColorModel; /** - * The Paint interface provides possibility of generating - * color patterns in device space for fill, draw, or stroke operations - * in a Graphics2D. + * The Paint interface provides possibility of generating color patterns in + * device space for fill, draw, or stroke operations in a Graphics2D. + * + * @since Android 1.0 */ public interface Paint extends Transparency { - + /** - * Creates the PaintContext which is used to generate color - * patterns for rendering operations of Graphics2D. - * - * @param cm the ColorModel object, or null. - * @param deviceBounds the Rectangle represents the bounding box of - * device space for the graphics rendering operations. - * @param userBounds the Rectangle represents bounding box of - * user space for the graphics rendering operations. - * @param xform the AffineTransform for translation from user space - * to device space. - * @param hints the RenderingHints preferences. + * Creates the PaintContext which is used to generate color patterns for + * rendering operations of Graphics2D. * + * @param cm + * the ColorModel object, or null. + * @param deviceBounds + * the Rectangle represents the bounding box of device space for + * the graphics rendering operations. + * @param userBounds + * the Rectangle represents bounding box of user space for the + * graphics rendering operations. + * @param xform + * the AffineTransform for translation from user space to device + * space. + * @param hints + * the RenderingHints preferences. * @return the PaintContext for generating color patterns. */ - PaintContext createContext(ColorModel cm, Rectangle deviceBounds, - Rectangle2D userBounds, AffineTransform xform, - RenderingHints hints); + PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints); } diff --git a/awt/java/awt/PaintContext.java b/awt/java/awt/PaintContext.java index 647de8bbbc..966b6ca99e 100644 --- a/awt/java/awt/PaintContext.java +++ b/awt/java/awt/PaintContext.java @@ -18,20 +18,22 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; import java.awt.image.ColorModel; import java.awt.image.Raster; /** - * The PaintContext interface determines the specific environment for - * generating color patterns in device space for fill, draw, or stroke - * rendering operations using Graphics2D. This interface provides colors - * through the Raster object associated with the specific ColorModel - * for Graphics2D rendering operations. + * The PaintContext interface determines the specific environment for generating + * color patterns in device space for fill, draw, or stroke rendering operations + * using Graphics2D. This interface provides colors through the Raster object + * associated with the specific ColorModel for Graphics2D rendering operations. + * + * @since Android 1.0 */ public interface PaintContext { - + /** * Releases the resources allocated for the operation. */ @@ -45,20 +47,23 @@ public interface PaintContext { ColorModel getColorModel(); /** - * Gets the Raster which defines the colors of the specified rectangular + * Gets the Raster which defines the colors of the specified rectangular * area for Graphics2D rendering operations. * - * @param x the X coordinate of the device space area for which - * colors are generated. - * @param y the Y coordinate of the device space area for which - * colors are generated. - * @param w the width of the device space area for which - * colors are generated. - * @param h the height of the device space area for which - * colors are generated. - * - * @return the Raster object which contains the colors of the specified - * rectangular area for Graphics2D rendering operations. + * @param x + * the X coordinate of the device space area for which colors are + * generated. + * @param y + * the Y coordinate of the device space area for which colors are + * generated. + * @param w + * the width of the device space area for which colors are + * generated. + * @param h + * the height of the device space area for which colors are + * generated. + * @return the Raster object which contains the colors of the specified + * rectangular area for Graphics2D rendering operations. */ Raster getRaster(int x, int y, int w, int h); } diff --git a/awt/java/awt/Point.java b/awt/java/awt/Point.java index 99418ed8a7..8ec4241215 100644 --- a/awt/java/awt/Point.java +++ b/awt/java/awt/Point.java @@ -18,28 +18,37 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt; import java.awt.geom.Point2D; import java.io.Serializable; /** - * The Point class represents a point location with coordinates X, Y in - * current coordinate system. + * The Point class represents a point location with coordinates X, Y in current + * coordinate system. + * + * @since Android 1.0 */ public class Point extends Point2D implements Serializable { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -5276940640259749850L; - /** The X coordinate of Point. */ + /** + * The X coordinate of Point. + */ public int x; - - /** The Y coordinate of Point. */ + + /** + * The Y coordinate of Point. + */ public int y; /** - * Instantiates a new point with (0, O) coordinates, the origin of + * Instantiates a new point with (0, O) coordinates, the origin of * coordinate system. */ public Point() { @@ -49,18 +58,20 @@ public class Point extends Point2D implements Serializable { /** * Instantiates a new point with (x, y) coordinates. * - * @param x the X coordinate of Point. - * @param y the Y coordinate of Point. + * @param x + * the X coordinate of Point. + * @param y + * the Y coordinate of Point. */ public Point(int x, int y) { setLocation(x, y); } /** - * Instantiates a new point, giving it the same locaion as - * the parameter p. + * Instantiates a new point, giving it the same location as the parameter p. * - * @param p the Point object giving the coordinates of the new point. + * @param p + * the Point object giving the coordinates of the new point. */ public Point(Point p) { setLocation(p.x, p.y); @@ -69,12 +80,10 @@ public class Point extends Point2D implements Serializable { /** * Compares current Point with the specified object. * - * @param obj the Object to be compared. - * - * @return true, if the Object being compared is a Point - * whose coordinates are equal to the coordinates of this - * Point, otherwise false. - * + * @param obj + * the Object to be compared. + * @return true, if the Object being compared is a Point whose coordinates + * are equal to the coordinates of this Point, false otherwise. * @see java.awt.geom.Point2D#equals(Object) */ @Override @@ -103,7 +112,6 @@ public class Point extends Point2D implements Serializable { * Gets X coordinate of Point as a double. * * @return X coordinate of the point as a double. - * * @see java.awt.geom.Point2D#getX() */ @Override @@ -115,7 +123,6 @@ public class Point extends Point2D implements Serializable { * Gets Y coordinate of Point as a double. * * @return Y coordinate of the point as a double. - * * @see java.awt.geom.Point2D#getY() */ @Override @@ -135,7 +142,8 @@ public class Point extends Point2D implements Serializable { /** * Sets the location of the Point to the same coordinates as p. * - * @param p the Point that gives the new location. + * @param p + * the Point that gives the new location. */ public void setLocation(Point p) { setLocation(p.x, p.y); @@ -144,8 +152,10 @@ public class Point extends Point2D implements Serializable { /** * Sets the location of the Point to the coordinates X, Y. * - * @param x the X coordinate of the Point's new location. - * @param y the Y coordinate of the Point's new location. + * @param x + * the X coordinate of the Point's new location. + * @param y + * the Y coordinate of the Point's new location. */ public void setLocation(int x, int y) { this.x = x; @@ -155,36 +165,43 @@ public class Point extends Point2D implements Serializable { /** * Sets the location of Point to the specified double coordinates. * - * @param x the X the Point's new location. - * @param y the Y the Point's new location. - * + * @param x + * the X the Point's new location. + * @param y + * the Y the Point's new location. * @see java.awt.geom.Point2D#setLocation(double, double) */ @Override public void setLocation(double x, double y) { - x = x < Integer.MIN_VALUE ? Integer.MIN_VALUE : x > Integer.MAX_VALUE ? Integer.MAX_VALUE : x; - y = y < Integer.MIN_VALUE ? Integer.MIN_VALUE : y > Integer.MAX_VALUE ? Integer.MAX_VALUE : y; + x = x < Integer.MIN_VALUE ? Integer.MIN_VALUE : x > Integer.MAX_VALUE ? Integer.MAX_VALUE + : x; + y = y < Integer.MIN_VALUE ? Integer.MIN_VALUE : y > Integer.MAX_VALUE ? Integer.MAX_VALUE + : y; setLocation((int)Math.round(x), (int)Math.round(y)); } /** * Moves the Point to the specified (x, y) location. * - * @param x the X coordinate of the new location. - * @param y the Y coordinate of the new location. + * @param x + * the X coordinate of the new location. + * @param y + * the Y coordinate of the new location. */ public void move(int x, int y) { setLocation(x, y); } /** - * Translates current Point moving it from the position (x, y) - * to the new position given by (x+dx, x+dy) coordinates. - * - * @param dx the horizontal delta - the Point is moved to this distance along - * X axis. - * @param dy the vertical delta - the Point is moved to this distance along - * Y axis. + * Translates current Point moving it from the position (x, y) to the new + * position given by (x+dx, x+dy) coordinates. + * + * @param dx + * the horizontal delta - the Point is moved to this distance + * along X axis. + * @param dy + * the vertical delta - the Point is moved to this distance along + * Y axis. */ public void translate(int dx, int dy) { x += dx; @@ -192,4 +209,3 @@ public class Point extends Point2D implements Serializable { } } - diff --git a/awt/java/awt/Polygon.java b/awt/java/awt/Polygon.java index 6f3fc9778c..de31eb9892 100644 --- a/awt/java/awt/Polygon.java +++ b/awt/java/awt/Polygon.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt; import java.awt.Point; @@ -34,57 +35,78 @@ import org.apache.harmony.awt.gl.*; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Polygon class defines an closed area specified by n vertices and - * n edges. The coordinates of the vertices are specified by x, y arrays. - * The edges are the line segments from the point (x[i], y[i]) to the point - * (x[i+1], y[i+1]), for -1 < i < (n-1) plus the line segment from - * the point (x[n-1], y[n-1]) to the point (x[0], y[0]) point. - * The Polygon is empty if the number of vertices is zero. + * The Polygon class defines an closed area specified by n vertices and n edges. + * The coordinates of the vertices are specified by x, y arrays. The edges are + * the line segments from the point (x[i], y[i]) to the point (x[i+1], y[i+1]), + * for -1 < i < (n-1) plus the line segment from the point (x[n-1], y[n-1]) to + * the point (x[0], y[0]) point. The Polygon is empty if the number of vertices + * is zero. + * + * @since Android 1.0 */ public class Polygon implements Shape, Serializable { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -6460061437900069969L; - /** The points buffer capacity. */ + /** + * The points buffer capacity. + */ private static final int BUFFER_CAPACITY = 4; - - /** The number of Polygon vertices.*/ + + /** + * The number of Polygon vertices. + */ public int npoints; - - /** The array of X coordinates of the vertices. */ + + /** + * The array of X coordinates of the vertices. + */ public int[] xpoints; - - /** The array of Y coordinates of the vertices. */ + + /** + * The array of Y coordinates of the vertices. + */ public int[] ypoints; - - /** - * The smallest Rectangle that completely contains this Polygon. + + /** + * The smallest Rectangle that completely contains this Polygon. */ protected Rectangle bounds; /* - * Polygon path iterator + * Polygon path iterator */ /** * The internal Class Iterator. */ class Iterator implements PathIterator { - /** The source Polygon object. */ + /** + * The source Polygon object. + */ public Polygon p; - - /** The path iterator transformation. */ + + /** + * The path iterator transformation. + */ public AffineTransform t; - - /** The current segmenet index. */ + + /** + * The current segment index. + */ public int index; /** - * Constructs a new Polygon.Iterator for the given polygon and transformation + * Constructs a new Polygon.Iterator for the given polygon and + * transformation * - * @param at - the AffineTransform object to apply rectangle path - * @param p the p + * @param at + * the AffineTransform object to apply rectangle path. + * @param p + * the p. */ public Iterator(AffineTransform at, Polygon p) { this.p = p; @@ -148,18 +170,21 @@ public class Polygon implements Shape, Serializable { } /** - * Instantiates a new polygon with the specified number of vertices, - * and the given arrays of x, y vertex coordinates. The length of - * each coordinate array may not be less than the specified number of - * vertices but may be greater. Only the first n elements are used from - * each coordinate array. - * - * @param xpoints the array of X vertex coordinates. - * @param ypoints the array of Y vertex coordinates. - * @param npoints the number vertices of the polygon. - * @throws IndexOutOfBoundsException if the length of xpoints or ypoints - * is less than n. - * @throws NegativeArraySizeException if n is negative. + * Instantiates a new polygon with the specified number of vertices, and the + * given arrays of x, y vertex coordinates. The length of each coordinate + * array may not be less than the specified number of vertices but may be + * greater. Only the first n elements are used from each coordinate array. + * + * @param xpoints + * the array of X vertex coordinates. + * @param ypoints + * the array of Y vertex coordinates. + * @param npoints + * the number vertices of the polygon. + * @throws IndexOutOfBoundsException + * if the length of xpoints or ypoints is less than n. + * @throws NegativeArraySizeException + * if n is negative. */ public Polygon(int[] xpoints, int[] ypoints, int npoints) { if (npoints > xpoints.length || npoints > ypoints.length) { @@ -178,9 +203,9 @@ public class Polygon implements Shape, Serializable { } /** - * Resets the current Polygon to an empty Polygon. More precisely, - * the number of Polygon vertices is set to zero, but x, y coordinates - * arrays are not affected. + * Resets the current Polygon to an empty Polygon. More precisely, the + * number of Polygon vertices is set to zero, but x, y coordinates arrays + * are not affected. */ public void reset() { npoints = 0; @@ -188,21 +213,22 @@ public class Polygon implements Shape, Serializable { } /** - * Invalidates the data that depends on the vertex coordinates. - * This method should be called after direct manipulations - * of the x, y vertex coordinates arrays to avoid unpredictable - * results of methods which rely on the bounding box. + * Invalidates the data that depends on the vertex coordinates. This method + * should be called after direct manipulations of the x, y vertex + * coordinates arrays to avoid unpredictable results of methods which rely + * on the bounding box. */ public void invalidate() { bounds = null; } /** - * Adds the point to the Polygon and updates the bounding box - * accordingly. + * Adds the point to the Polygon and updates the bounding box accordingly. * - * @param px the X coordinate of the added vertex. - * @param py the Y coordinate of the added vertex. + * @param px + * the X coordinate of the added vertex. + * @param py + * the Y coordinate of the added vertex. */ public void addPoint(int px, int py) { if (npoints == xpoints.length) { @@ -222,20 +248,16 @@ public class Polygon implements Shape, Serializable { npoints++; if (bounds != null) { - bounds.setFrameFromDiagonal( - Math.min(bounds.getMinX(), px), - Math.min(bounds.getMinY(), py), - Math.max(bounds.getMaxX(), px), - Math.max(bounds.getMaxY(), py)); + bounds.setFrameFromDiagonal(Math.min(bounds.getMinX(), px), Math.min(bounds.getMinY(), + py), Math.max(bounds.getMaxX(), px), Math.max(bounds.getMaxY(), py)); } } /** - * Gets the bounding rectangle of the Polygon. The bounding rectangle - * is the smallest rectangle which contains the Polygon. + * Gets the bounding rectangle of the Polygon. The bounding rectangle is the + * smallest rectangle which contains the Polygon. * * @return the bounding rectangle of the Polygon. - * * @see java.awt.Shape#getBounds() */ public Rectangle getBounds() { @@ -270,11 +292,10 @@ public class Polygon implements Shape, Serializable { } /** - * Gets the bounding rectangle of the Polygon. The bounding rectangle - * is the smallest rectangle which contains the Polygon. + * Gets the bounding rectangle of the Polygon. The bounding rectangle is the + * smallest rectangle which contains the Polygon. * * @return the bounding rectangle of the Polygon. - * * @deprecated Use getBounds() method. */ @Deprecated @@ -283,12 +304,10 @@ public class Polygon implements Shape, Serializable { } /** - * Gets the Rectangle2D which represents Polygon bounds. - * The bounding rectangle is the smallest rectangle which contains - * the Polygon. + * Gets the Rectangle2D which represents Polygon bounds. The bounding + * rectangle is the smallest rectangle which contains the Polygon. * * @return the bounding rectangle of the Polygon. - * * @see java.awt.Shape#getBounds2D() */ public Rectangle2D getBounds2D() { @@ -296,11 +315,13 @@ public class Polygon implements Shape, Serializable { } /** - * Translates all vertices of Polygon the specified distances - * along X, Y axis. + * Translates all vertices of Polygon the specified distances along X, Y + * axis. * - * @param mx the distance to translate horizontally. - * @param my the distance to translate vertically. + * @param mx + * the distance to translate horizontally. + * @param my + * the distance to translate vertically. */ public void translate(int mx, int my) { for (int i = 0; i < npoints; i++) { @@ -313,46 +334,47 @@ public class Polygon implements Shape, Serializable { } /** - * Checks whether or not the point given by the coordinates x, y lies inside + * Checks whether or not the point given by the coordinates x, y lies inside * the Polygon. * - * @param x the X coordinate of the point to check. - * @param y the Y coordinate of the point to check. - * - * @return true, if the specified point lies inside the Polygon, - * otherwise false. - * + * @param x + * the X coordinate of the point to check. + * @param y + * the Y coordinate of the point to check. + * @return true, if the specified point lies inside the Polygon, false + * otherwise. * @deprecated Use contains(int, int) method. */ @Deprecated public boolean inside(int x, int y) { - return contains((double) x, (double) y); + return contains((double)x, (double)y); } /** - * Checks whether or not the point given by the coordinates x, y lies inside + * Checks whether or not the point given by the coordinates x, y lies inside * the Polygon. * - * @param x the X coordinate of the point to check. - * @param y the Y coordinate of the point to check. - * - * @return true, if the specified point lies inside the Polygon, - * otherwise false. + * @param x + * the X coordinate of the point to check. + * @param y + * the Y coordinate of the point to check. + * @return true, if the specified point lies inside the Polygon, false + * otherwise. */ public boolean contains(int x, int y) { - return contains((double) x, (double) y); + return contains((double)x, (double)y); } /** - * Checks whether or not the point with specified double coordinates - * lies inside the Polygon. - * - * @param x the X coordinate of the point to check. - * @param y the Y coordinate of the point to check. - * - * @return true, if the point given by the double coordinates - * lies inside the Polygon, otherwise false. - * + * Checks whether or not the point with specified double coordinates lies + * inside the Polygon. + * + * @param x + * the X coordinate of the point to check. + * @param y + * the Y coordinate of the point to check. + * @return true, if the point given by the double coordinates lies inside + * the Polygon, false otherwise. * @see java.awt.Shape#contains(double, double) */ public boolean contains(double x, double y) { @@ -360,19 +382,21 @@ public class Polygon implements Shape, Serializable { } /** - * Checks whether or not the rectangle determined by the parameters - * [x, y, width, height] lies inside the Polygon. - * - * @param x the X coordinate of the rectangles's left upper - * corner as a double. - * @param y the Y coordinate of the rectangles's left upper - * corner as a double. - * @param width the width of rectangle as a double. - * @param width the height of rectangle as a double. - * - * @return true, if the specified rectangle lies inside the Polygon, - * otherwise false. - * + * Checks whether or not the rectangle determined by the parameters [x, y, + * width, height] lies inside the Polygon. + * + * @param x + * the X coordinate of the rectangles's left upper corner as a + * double. + * @param y + * the Y coordinate of the rectangles's left upper corner as a + * double. + * @param width + * the width of rectangle as a double. + * @param height + * the height of rectangle as a double. + * @return true, if the specified rectangle lies inside the Polygon, false + * otherwise. * @see java.awt.Shape#contains(double, double, double, double) */ public boolean contains(double x, double y, double width, double height) { @@ -381,20 +405,21 @@ public class Polygon implements Shape, Serializable { } /** - * Checks whether or not the rectangle determined by the parameters - * [x, y, width, height] intersects the interior of - * the Polygon. - * - * @param x the X coordinate of the rectangles's left upper - * corner as a double. - * @param y the Y coordinate of the rectangles's left upper - * corner as a double. - * @param width the width of rectangle as a double. - * @param width the height of rectangle as a double. - * - * @return true, if the specified rectangle intersects the interior of - * the Polygon, otherwise false. - * + * Checks whether or not the rectangle determined by the parameters [x, y, + * width, height] intersects the interior of the Polygon. + * + * @param x + * the X coordinate of the rectangles's left upper corner as a + * double. + * @param y + * the Y coordinate of the rectangles's left upper corner as a + * double. + * @param width + * the width of rectangle as a double. + * @param height + * the height of rectangle as a double. + * @return true, if the specified rectangle intersects the interior of the + * Polygon, false otherwise. * @see java.awt.Shape#intersects(double, double, double, double) */ public boolean intersects(double x, double y, double width, double height) { @@ -405,11 +430,10 @@ public class Polygon implements Shape, Serializable { /** * Checks whether or not the specified rectangle lies inside the Polygon. * - * @param rect the Rectangle2D object. - * - * @return true, if the specified rectangle lies inside the Polygon, - * otherwise false. - * + * @param rect + * the Rectangle2D object. + * @return true, if the specified rectangle lies inside the Polygon, false + * otherwise. * @see java.awt.Shape#contains(java.awt.geom.Rectangle2D) */ public boolean contains(Rectangle2D rect) { @@ -419,10 +443,10 @@ public class Polygon implements Shape, Serializable { /** * Checks whether or not the specified Point lies inside the Polygon. * - * @param point the Point object. - * - * @return true, if the specified Point lies inside the Polygon, - * otherwise false. + * @param point + * the Point object. + * @return true, if the specified Point lies inside the Polygon, false + * otherwise. */ public boolean contains(Point point) { return contains(point.getX(), point.getY()); @@ -431,11 +455,10 @@ public class Polygon implements Shape, Serializable { /** * Checks whether or not the specified Point2D lies inside the Polygon. * - * @param point the Point2D object. - * - * @return true, if the specified Point2D lies inside the Polygon, - * otherwise false. - * + * @param point + * the Point2D object. + * @return true, if the specified Point2D lies inside the Polygon, false + * otherwise. * @see java.awt.Shape#contains(java.awt.geom.Point2D) */ public boolean contains(Point2D point) { @@ -443,14 +466,13 @@ public class Polygon implements Shape, Serializable { } /** - * Checks whether or not the interior of rectangle specified by - * the Rectangle2D object intersects the interior of the Polygon. - * - * @param rect the Rectangle2D object. - * - * @return true, if the Rectangle2D intersects the interior of - * the Polygon, otherwise false. + * Checks whether or not the interior of rectangle specified by the + * Rectangle2D object intersects the interior of the Polygon. * + * @param rect + * the Rectangle2D object. + * @return true, if the Rectangle2D intersects the interior of the Polygon, + * false otherwise. * @see java.awt.Shape#intersects(java.awt.geom.Rectangle2D) */ public boolean intersects(Rectangle2D rect) { @@ -458,13 +480,12 @@ public class Polygon implements Shape, Serializable { } /** - * Gets the PathIterator object which gives the coordinates of - * the polygon, transformed according to the specified AffineTransform. - * - * @param t the specified AffineTransform object, or null. + * Gets the PathIterator object which gives the coordinates of the polygon, + * transformed according to the specified AffineTransform. * + * @param t + * the specified AffineTransform object or null. * @return PathIterator object for the Polygon. - * * @see java.awt.Shape#getPathIterator(java.awt.geom.AffineTransform) */ public PathIterator getPathIterator(AffineTransform t) { @@ -472,23 +493,23 @@ public class Polygon implements Shape, Serializable { } /** - * Gets the PathIterator object which gives the coordinates of - * the polygon, transformed according to the specified AffineTransform. - * The flatness parameter is ignored. - * - * @param t the specified AffineTransform object, or null. - * @param flatness the maximum number of the control points for - * a given curve which varies from colinear before a subdivided curve - * is replaced by a straight line connecting the endpoints. - * This parameter is ignored for the Polygon class. - * + * Gets the PathIterator object which gives the coordinates of the polygon, + * transformed according to the specified AffineTransform. The flatness + * parameter is ignored. + * + * @param t + * the specified AffineTransform object or null. + * @param flatness + * the maximum number of the control points for a given curve + * which varies from colinear before a subdivided curve is + * replaced by a straight line connecting the endpoints. This + * parameter is ignored for the Polygon class. * @return PathIterator object for the Polygon. - * - * @see java.awt.Shape#getPathIterator(java.awt.geom.AffineTransform, double) + * @see java.awt.Shape#getPathIterator(java.awt.geom.AffineTransform, + * double) */ public PathIterator getPathIterator(AffineTransform t, double flatness) { return new Iterator(t, this); } } - diff --git a/awt/java/awt/Rectangle.java b/awt/java/awt/Rectangle.java index 86c4dfca0d..d8ebb3ad19 100644 --- a/awt/java/awt/Rectangle.java +++ b/awt/java/awt/Rectangle.java @@ -18,36 +18,48 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt; import java.awt.geom.Rectangle2D; import java.io.Serializable; /** - * The Rectangle class defines the rectangular area in terms of its - * upper left corner coordinates [x,y], its width, and its height. - * A Rectangle specified by [x, y, width, height] parameters has an - * outline path with corners at [x, y], [x + width,y], [x + width,y + height], - * and [x, y + height]. - *

    - * The rectangle is empty if the width or height is negative or zero. - * In this case the isEmpty method returns true. + * The Rectangle class defines the rectangular area in terms of its upper left + * corner coordinates [x,y], its width, and its height. A Rectangle specified by + * [x, y, width, height] parameters has an outline path with corners at [x, y], + * [x + width,y], [x + width,y + height], and [x, y + height].
    + *
    + * The rectangle is empty if the width or height is negative or zero. In this + * case the isEmpty method returns true. + * + * @since Android 1.0 */ public class Rectangle extends Rectangle2D implements Shape, Serializable { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -4345857070255674764L; - /** The X coordinate of the rectangle's left upper corner. */ + /** + * The X coordinate of the rectangle's left upper corner. + */ public int x; - - /** The Y coordinate of the rectangle's left upper corner. */ + + /** + * The Y coordinate of the rectangle's left upper corner. + */ public int y; - - /** The width of rectangle. */ + + /** + * The width of rectangle. + */ public int width; - - /** The height of rectangle. */ + + /** + * The height of rectangle. + */ public int height; /** @@ -60,73 +72,82 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Instantiates a new rectangle whose upper left corner coordinates are - * given by the Point object (p.X and p.Y), and the width and - * the height are zero. + * given by the Point object (p.X and p.Y), and the width and the height are + * zero. * - * @param p the Point specifies the upper left corner coordinates of - * the rectangle. + * @param p + * the Point specifies the upper left corner coordinates of the + * rectangle. */ public Rectangle(Point p) { setBounds(p.x, p.y, 0, 0); } /** - * Instantiates a new rectangle whose upper left corner coordinates are - * given by the Point object (p.X and p.Y), and the width and the height - * are given by Dimension object (d.width and d.height). + * Instantiates a new rectangle whose upper left corner coordinates are + * given by the Point object (p.X and p.Y), and the width and the height are + * given by Dimension object (d.width and d.height). * - * @param p the Point specifies the upper left corner coordinates of - * the rectangle. - * @param d the Dimention specifies the width and the height of the rectangle. + * @param p + * the point specifies the upper left corner coordinates of the + * rectangle. + * @param d + * the dimension specifies the width and the height of the + * rectangle. */ public Rectangle(Point p, Dimension d) { setBounds(p.x, p.y, d.width, d.height); } /** - * Instantiates a new rectangle determined by the upper left corner + * Instantiates a new rectangle determined by the upper left corner * coordinates (x, y), width and height. * - * @param x the X upper left corner coordinate of the rectangle. - * @param y the Y upper left corner coordinate of the rectangle. - * @param width the width of rectangle. - * @param height the height of rectangle. + * @param x + * the X upper left corner coordinate of the rectangle. + * @param y + * the Y upper left corner coordinate of the rectangle. + * @param width + * the width of rectangle. + * @param height + * the height of rectangle. */ public Rectangle(int x, int y, int width, int height) { setBounds(x, y, width, height); } /** - * Instantiates a new rectangle with [0, 0] as its upper left - * corner coordinates and the specified width and height. + * Instantiates a new rectangle with [0, 0] as its upper left corner + * coordinates and the specified width and height. * - * @param width the width of rectangle. - * @param height the height of rectangle. + * @param width + * the width of rectangle. + * @param height + * the height of rectangle. */ public Rectangle(int width, int height) { setBounds(0, 0, width, height); } /** - * Instantiates a new rectangle with the same coordinates - * as the given source rectangle. + * Instantiates a new rectangle with the same coordinates as the given + * source rectangle. * - * @param r the Rectangle object which parameters will be used for - * instantiating a new Rectangle. + * @param r + * the Rectangle object which parameters will be used for + * instantiating a new Rectangle. */ public Rectangle(Rectangle r) { setBounds(r.x, r.y, r.width, r.height); } -/* - public Rectangle(Dimension d) { - setBounds(0, 0, d.width, d.height); - } -*/ + + /* + * public Rectangle(Dimension d) { setBounds(0, 0, d.width, d.height); } + */ /** * Gets the X coordinate of bound as a double. * * @return the X coordinate of bound as a double. - * * @see java.awt.geom.RectangularShape#getX() */ @Override @@ -138,7 +159,6 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { * Gets the Y coordinate of bound as a double. * * @return the Y coordinate of bound as a double. - * * @see java.awt.geom.RectangularShape#getY() */ @Override @@ -149,8 +169,7 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Gets the height of the rectangle as a double. * - * @return the height of the rectangle as a double. - * + * @return the height of the rectangle as a double. * @see java.awt.geom.RectangularShape#getHeight() */ @Override @@ -162,7 +181,6 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { * Gets the width of the rectangle as a double. * * @return the width of the rectangle as a double. - * * @see java.awt.geom.RectangularShape#getWidth() */ @Override @@ -171,11 +189,10 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Determines whether or not the rectangle is empty. The rectangle is empty if - * its width or height is negative or zero. + * Determines whether or not the rectangle is empty. The rectangle is empty + * if its width or height is negative or zero. * * @return true, if the rectangle is empty, otherwise false. - * * @see java.awt.geom.RectangularShape#isEmpty() */ @Override @@ -184,9 +201,9 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Gets the size of a Rectangle as Dimention object. + * Gets the size of a Rectangle as Dimension object. * - * @return a Dimention object which represents size of the rectangle. + * @return a Dimension object which represents size of the rectangle. */ public Dimension getSize() { return new Dimension(width, height); @@ -195,8 +212,10 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Sets the size of the Rectangle. * - * @param width the new width of the rectangle. - * @param height the new height of the rectangle. + * @param width + * the new width of the rectangle. + * @param height + * the new height of the rectangle. */ public void setSize(int width, int height) { this.width = width; @@ -206,7 +225,8 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Sets the size of a Rectangle specified as Dimension object. * - * @param d a Dimension object which represents new size of a rectangle. + * @param d + * a Dimension object which represents new size of a rectangle. */ public void setSize(Dimension d) { setSize(d.width, d.height); @@ -215,19 +235,21 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Gets the location of a rectangle's upper left corner as a Point object. * - * @return the Point object with coordinates equal to the upper left corner - * of the rectangle. + * @return the Point object with coordinates equal to the upper left corner + * of the rectangle. */ public Point getLocation() { return new Point(x, y); } /** - * Sets the location of the rectangle in terms of its upper left - * corner coordinates X and Y. + * Sets the location of the rectangle in terms of its upper left corner + * coordinates X and Y. * - * @param x the X coordinate of the rectangle's upper left corner. - * @param y the Y coordinate of the rectangle's upper left corner. + * @param x + * the X coordinate of the rectangle's upper left corner. + * @param y + * the Y coordinate of the rectangle's upper left corner. */ public void setLocation(int x, int y) { this.x = x; @@ -235,23 +257,25 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Sets the location of a rectangle using a Point object to give the + * Sets the location of a rectangle using a Point object to give the * coordinates of the upper left corner. * - * @param p the Point object which represents the new upper left corner - * coordinates of rectangle. + * @param p + * the Point object which represents the new upper left corner + * coordinates of rectangle. */ public void setLocation(Point p) { setLocation(p.x, p.y); } /** - * Moves a rectangle to the new location by moving its upper left corner - * to the point with coordinates X and Y. - * - * @param x the new X coordinate of the rectangle's upper left corner. - * @param y the new Y coordinate of the rectangle's upper left corner. + * Moves a rectangle to the new location by moving its upper left corner to + * the point with coordinates X and Y. * + * @param x + * the new X coordinate of the rectangle's upper left corner. + * @param y + * the new Y coordinate of the rectangle's upper left corner. * @deprecated Use setLocation(int, int) method. */ @Deprecated @@ -260,16 +284,19 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Sets the rectangle to be the nearest rectangle with integer coordinates + * Sets the rectangle to be the nearest rectangle with integer coordinates * bounding the rectangle defined by the double-valued parameters. * - * @param x the X coordinate of the upper left corner of the double-valued - * rectangle to be bounded. - * @param y the Y coordinate of the upper left corner of the double-valued - * rectangle to be bounded. - * @param width the width of the rectangle to be bounded. - * @param height the height of the rectangle to be bounded. - * + * @param x + * the X coordinate of the upper left corner of the double-valued + * rectangle to be bounded. + * @param y + * the Y coordinate of the upper left corner of the double-valued + * rectangle to be bounded. + * @param width + * the width of the rectangle to be bounded. + * @param height + * the height of the rectangle to be bounded. * @see java.awt.geom.Rectangle2D#setRect(double, double, double, double) */ @Override @@ -284,9 +311,10 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Sets a new size for the rectangle. * - * @param width the rectangle's new width. - * @param height the rectangle's new height. - * + * @param width + * the rectangle's new width. + * @param height + * the rectangle's new height. * @deprecated use the setSize(int, int) method. */ @Deprecated @@ -295,14 +323,17 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Resets the bounds of a rectangle to the specified x, y, width and height + * Resets the bounds of a rectangle to the specified x, y, width and height * parameters. * - * @param x the new X coordinate of the upper left corner. - * @param y the new Y coordinate of the upper left corner. - * @param width the new width of rectangle. - * @param height the new height of rectangle. - * + * @param x + * the new X coordinate of the upper left corner. + * @param y + * the new Y coordinate of the upper left corner. + * @param width + * the new width of rectangle. + * @param height + * the new height of rectangle. * @deprecated use setBounds(int, int, int, int) method */ @Deprecated @@ -312,10 +343,9 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Gets bounds of the rectangle as a new Rectangle object. - * - * @return the Rectangle object with the same bounds as - * the original rectangle. * + * @return the Rectangle object with the same bounds as the original + * rectangle. * @see java.awt.geom.RectangularShape#getBounds() */ @Override @@ -325,10 +355,9 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Gets the bounds of the original rectangle as a Rectangle2D object. - * - * @return the Rectangle2D object which represents the bounds of - * the original rectangle. * + * @return the Rectangle2D object which represents the bounds of the + * original rectangle. * @see java.awt.geom.Rectangle2D#getBounds2D() */ @Override @@ -337,13 +366,17 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Sets the bounds of a rectangle to the specified x, y, width, and height + * Sets the bounds of a rectangle to the specified x, y, width, and height * parameters. * - * @param x the X coordinate of the upper left corner. - * @param y the Y coordinate of the upper left corner. - * @param width the width of rectangle. - * @param height the height of rectangle. + * @param x + * the X coordinate of the upper left corner. + * @param y + * the Y coordinate of the upper left corner. + * @param width + * the width of rectangle. + * @param height + * the height of rectangle. */ public void setBounds(int x, int y, int width, int height) { this.x = x; @@ -353,25 +386,26 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Sets the bounds of the rectangle to match the bounds of the - * Rectangle object sent as a parameter. + * Sets the bounds of the rectangle to match the bounds of the Rectangle + * object sent as a parameter. * - * @param r the Rectangle object which specifies the new bounds. + * @param r + * the Rectangle object which specifies the new bounds. */ public void setBounds(Rectangle r) { setBounds(r.x, r.y, r.width, r.height); } /** - * Enlarges the rectangle by moving each corner outward from the - * center by a distance of dx horizonally and a distance of dy - * vertically. Specifically, changes a rectangle with - * [x, y, width, height] parameters to - * a rectangle with [x-dx, y-dy, width+2*dx, height+2*dy] - * parameters. - * - * @param dx the horizontal distance to move each corner coordinate. - * @param dy the vertical distance to move each corner coordinate. + * Enlarges the rectangle by moving each corner outward from the center by a + * distance of dx horizonally and a distance of dy vertically. Specifically, + * changes a rectangle with [x, y, width, height] parameters to a rectangle + * with [x-dx, y-dy, width+2*dx, height+2*dy] parameters. + * + * @param dx + * the horizontal distance to move each corner coordinate. + * @param dy + * the vertical distance to move each corner coordinate. */ public void grow(int dx, int dy) { x -= dx; @@ -381,11 +415,13 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Moves a rectangle a distance of mx along the x coordinate axis - * and a distance of my along y coordinate axis. + * Moves a rectangle a distance of mx along the x coordinate axis and a + * distance of my along y coordinate axis. * - * @param mx the horizontal translation increment. - * @param my the vertical translation increment. + * @param mx + * the horizontal translation increment. + * @param my + * the vertical translation increment. */ public void translate(int mx, int my) { x += mx; @@ -395,8 +431,12 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Enlarges the rectangle to cover the specified point. * - * @param px the X coordinate of the new point to be covered by the rectangle. - * @param py the Y coordinate of the new point to be covered by the rectangle. + * @param px + * the X coordinate of the new point to be covered by the + * rectangle. + * @param py + * the Y coordinate of the new point to be covered by the + * rectangle. */ public void add(int px, int py) { int x1 = Math.min(x, px); @@ -407,11 +447,12 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Enlarges the rectangle to cover the specified point with the - * new point given as a Point object. + * Enlarges the rectangle to cover the specified point with the new point + * given as a Point object. * - * @param p the Point object that specifies the new point to - * be covered by the rectangle. + * @param p + * the Point object that specifies the new point to be covered by + * the rectangle. */ public void add(Point p) { add(p.x, p.y); @@ -421,7 +462,8 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { * Adds a new rectangle to the original rectangle, the result is an union of * the specified specified rectangle and original rectangle. * - * @param r the Rectangle which is added to the original rectangle. + * @param r + * the Rectangle which is added to the original rectangle. */ public void add(Rectangle r) { int x1 = Math.min(x, r.x); @@ -432,14 +474,15 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Determines whether or not the point with specified coordinates [px, py] + * Determines whether or not the point with specified coordinates [px, py] * is within the bounds of the rectangle. * - * @param px the X coordinate of point. - * @param py the Y coordinate of point. - * - * @return true, if the point with specified coordinates [px, py] is - * within the bounds of the rectangle, otherwise false. + * @param px + * the X coordinate of point. + * @param py + * the Y coordinate of point. + * @return true, if the point with specified coordinates [px, py] is within + * the bounds of the rectangle, false otherwise. */ public boolean contains(int px, int py) { if (isEmpty()) { @@ -454,29 +497,32 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Determines whether or not the point given as a Point object - * is within the bounds of the rectangle. - * - * @param p the Point object + * Determines whether or not the point given as a Point object is within the + * bounds of the rectangle. * - * @return true, if the point p is within the bounds of the - * rectangle, otherwise false. + * @param p + * the Point object + * @return true, if the point p is within the bounds of the rectangle, + * otherwise false. */ public boolean contains(Point p) { return contains(p.x, p.y); } /** - * Determines whether or not the rectangle specified by [rx, ry, rw, rh] + * Determines whether or not the rectangle specified by [rx, ry, rw, rh] * parameters is located inside the original rectangle. * - * @param rx the X coordinate of the rectangle to compare. - * @param ry the Y coordinate of the rectangle to compare. - * @param rw the width of the rectangle to compare. - * @param rh the height of the rectangle to compare. - * + * @param rx + * the X coordinate of the rectangle to compare. + * @param ry + * the Y coordinate of the rectangle to compare. + * @param rw + * the width of the rectangle to compare. + * @param rh + * the height of the rectangle to compare. * @return true, if a rectangle with [rx, ry, rw, rh] parameters is entirely - * contained in the original rectangle, otherwise false. + * contained in the original rectangle, false otherwise. */ public boolean contains(int rx, int ry, int rw, int rh) { return contains(rx, ry) && contains(rx + rw - 1, ry + rh - 1); @@ -486,25 +532,25 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { * Compares whether or not the rectangle specified by the Rectangle object * is located inside the original rectangle. * - * @param r the Rectangle object. - * + * @param r + * the Rectangle object. * @return true, if the rectangle specified by Rectangle object is entirely - * contained in the original rectangle, otherwise false. + * contained in the original rectangle, false otherwise. */ public boolean contains(Rectangle r) { return contains(r.x, r.y, r.width, r.height); } /** - * Compares whether or not a point with specified coordinates [px, py] belongs - * to a rectangle. - * - * @param px the X coordinate of a point. - * @param py the Y coordinate of a point. - * - * @return true, if a point with specified coordinates [px, py] belongs - * to a rectangle, otherwise false. + * Compares whether or not a point with specified coordinates [px, py] + * belongs to a rectangle. * + * @param px + * the X coordinate of a point. + * @param py + * the Y coordinate of a point. + * @return true, if a point with specified coordinates [px, py] belongs to a + * rectangle, otherwise false. * @deprecated use contains(int, int) method. */ @Deprecated @@ -513,20 +559,19 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Returns the intersection of the original rectangle with the - * specified Rectangle2D. - * - * @param r the Rectangle2D object. - * - * @return the Rectangle2D object that is the result of intersecting - * the original rectangle with the specified Rectangle2D. + * Returns the intersection of the original rectangle with the specified + * Rectangle2D. * + * @param r + * the Rectangle2D object. + * @return the Rectangle2D object that is the result of intersecting the + * original rectangle with the specified Rectangle2D. * @see java.awt.geom.Rectangle2D#createIntersection(java.awt.geom.Rectangle2D) */ @Override public Rectangle2D createIntersection(Rectangle2D r) { if (r instanceof Rectangle) { - return intersection((Rectangle) r); + return intersection((Rectangle)r); } Rectangle2D dst = new Rectangle2D.Double(); Rectangle2D.intersect(this, r, dst); @@ -534,14 +579,13 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Returns the intersection of the original rectangle with the - * specified rectangle. An empty rectangle is returned if there is no - * intersection. - * - * @param r the Rectangle object. + * Returns the intersection of the original rectangle with the specified + * rectangle. An empty rectangle is returned if there is no intersection. * - * @return the Rectangle object is result of the original rectangle with the - * specified rectangle. + * @param r + * the Rectangle object. + * @return the Rectangle object is result of the original rectangle with the + * specified rectangle. */ public Rectangle intersection(Rectangle r) { int x1 = Math.max(x, r.x); @@ -552,39 +596,38 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Determines whether or not the original rectangle intersects - * the specified rectangle. + * Determines whether or not the original rectangle intersects the specified + * rectangle. * - * @param r the Rectangle object. - * - * @return true, if the two rectangles overlap; otherwise false. + * @param r + * the Rectangle object. + * @return true, if the two rectangles overlap, false otherwise. */ public boolean intersects(Rectangle r) { return !intersection(r).isEmpty(); } /** - * Determines where the specified Point is located with respect to - * the rectangle. This method computes whether the point is to the - * right or to the left of the rectangle and whether it is above - * or below the rectangle, and packs the result into an int by - * using a binary OR operation with the following masks: + * Determines where the specified Point is located with respect to the + * rectangle. This method computes whether the point is to the right or to + * the left of the rectangle and whether it is above or below the rectangle, + * and packs the result into an integer by using a binary OR operation with + * the following masks: *
      *
    • Rectangle2D.OUT_LEFT
    • *
    • Rectangle2D.OUT_TOP
    • *
    • Rectangle2D.OUT_RIGHT
    • *
    • Rectangle2D.OUT_BOTTOM
    • *
    - * - * If the rectangle is empty, all masks are set, and if the - * point is inside the rectangle, none are set. - * - * @param px the X coordinate of the specified point. - * @param py the Y coordinate of the specified point. - * - * @return the location of the Point relative to the rectangle - * as the result of logical OR operation with all out masks. - * + * If the rectangle is empty, all masks are set, and if the point is inside + * the rectangle, none are set. + * + * @param px + * the X coordinate of the specified point. + * @param py + * the Y coordinate of the specified point. + * @return the location of the Point relative to the rectangle as the result + * of logical OR operation with all out masks. * @see java.awt.geom.Rectangle2D#outcode(double, double) */ @Override @@ -593,23 +636,19 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { if (width <= 0) { code |= OUT_LEFT | OUT_RIGHT; - } else - if (px < x) { - code |= OUT_LEFT; - } else - if (px > x + width) { - code |= OUT_RIGHT; - } + } else if (px < x) { + code |= OUT_LEFT; + } else if (px > x + width) { + code |= OUT_RIGHT; + } if (height <= 0) { code |= OUT_TOP | OUT_BOTTOM; - } else - if (py < y) { - code |= OUT_TOP; - } else - if (py > y + height) { - code |= OUT_BOTTOM; - } + } else if (py < y) { + code |= OUT_TOP; + } else if (py > y + height) { + code |= OUT_BOTTOM; + } return code; } @@ -617,10 +656,9 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Enlarges the rectangle to cover the specified Rectangle2D. * - * @param r the Rectangle2D object. - * + * @param r + * the Rectangle2D object. * @return the union of the original and the specified Rectangle2D. - * * @see java.awt.geom.Rectangle2D#createUnion(java.awt.geom.Rectangle2D) */ @Override @@ -636,8 +674,8 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Enlarges the rectangle to cover the specified rectangle. * - * @param r the Rectangle. - * + * @param r + * the Rectangle. * @return the union of the original and the specified rectangle. */ public Rectangle union(Rectangle r) { @@ -649,11 +687,10 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { /** * Compares the original Rectangle with the specified object. * - * @param obj the specified Object for comparison. - * - * @return true, if the specified Object is a rectangle with the - * same dimensions as the original rectangle, otherwise false. - * + * @param obj + * the specified Object for comparison. + * @return true, if the specified Object is a rectangle with the same + * dimensions as the original rectangle, false otherwise. * @see java.awt.geom.Rectangle2D#equals(Object) */ @Override @@ -669,18 +706,18 @@ public class Rectangle extends Rectangle2D implements Shape, Serializable { } /** - * Returns a string representation of the rectangle; the string contains - * [x, y, width, height] parameters of the rectangle. + * Returns a string representation of the rectangle; the string contains [x, + * y, width, height] parameters of the rectangle. * * @return the string representation of the rectangle. */ @Override public String toString() { - // The output format based on 1.5 release behaviour. It could be obtained in the following way + // The output format based on 1.5 release behaviour. It could be + // obtained in the following way // System.out.println(new Rectangle().toString()) return getClass().getName() + "[x=" + x + ",y=" + y + //$NON-NLS-1$ //$NON-NLS-2$ - ",width=" + width + ",height=" + height + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + ",width=" + width + ",height=" + height + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } - diff --git a/awt/java/awt/RenderingHints.java b/awt/java/awt/RenderingHints.java index 495788490a..acf6fa15de 100644 --- a/awt/java/awt/RenderingHints.java +++ b/awt/java/awt/RenderingHints.java @@ -18,6 +18,7 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; import java.util.Collection; @@ -27,224 +28,219 @@ import java.util.Map; import java.util.Set; /** - * The RenderingHints class represents preferences for the rendering algorithms. - * The preferences are arbitrary and can be specified by Map objects or by - * key-value pairs. + * The RenderingHints class represents preferences for the rendering algorithms. + * The preferences are arbitrary and can be specified by Map objects or by + * key-value pairs. + * + * @since Android 1.0 */ public class RenderingHints implements Map, Cloneable { - + /** - * The Constant KEY_ALPHA_INTERPOLATION - alpha interpolation rendering - * hint key. + * The Constant KEY_ALPHA_INTERPOLATION - alpha interpolation rendering hint + * key. */ public static final Key KEY_ALPHA_INTERPOLATION = new KeyImpl(1); - - /** + + /** * The Constant VALUE_ALPHA_INTERPOLATION_DEFAULT - alpha interpolation * rendering hint value. */ - public static final Object VALUE_ALPHA_INTERPOLATION_DEFAULT = new KeyValue(KEY_ALPHA_INTERPOLATION); - - /** + public static final Object VALUE_ALPHA_INTERPOLATION_DEFAULT = new KeyValue( + KEY_ALPHA_INTERPOLATION); + + /** * The Constant VALUE_ALPHA_INTERPOLATION_SPEED - alpha interpolation * rendering hint value. */ - public static final Object VALUE_ALPHA_INTERPOLATION_SPEED = new KeyValue(KEY_ALPHA_INTERPOLATION); - - /** + public static final Object VALUE_ALPHA_INTERPOLATION_SPEED = new KeyValue( + KEY_ALPHA_INTERPOLATION); + + /** * The Constant VALUE_ALPHA_INTERPOLATION_QUALITY - alpha interpolation * rendering hint value. */ - public static final Object VALUE_ALPHA_INTERPOLATION_QUALITY = new KeyValue(KEY_ALPHA_INTERPOLATION); + public static final Object VALUE_ALPHA_INTERPOLATION_QUALITY = new KeyValue( + KEY_ALPHA_INTERPOLATION); - /** - * The Constant KEY_ANTIALIASING - antialiasing rendering - * hint key. + /** + * The Constant KEY_ANTIALIASING - antialiasing rendering hint key. */ public static final Key KEY_ANTIALIASING = new KeyImpl(2); - + /** - * The Constant VALUE_ANTIALIAS_DEFAULT - antialiasing - * rendering hint value. + * The Constant VALUE_ANTIALIAS_DEFAULT - antialiasing rendering hint value. */ public static final Object VALUE_ANTIALIAS_DEFAULT = new KeyValue(KEY_ANTIALIASING); - - /** - * The Constant VALUE_ANTIALIAS_ON - antialiasing - * rendering hint value. + + /** + * The Constant VALUE_ANTIALIAS_ON - antialiasing rendering hint value. */ public static final Object VALUE_ANTIALIAS_ON = new KeyValue(KEY_ANTIALIASING); - + /** - * The Constant VALUE_ANTIALIAS_OFF - antialiasing - * rendering hint value. + * The Constant VALUE_ANTIALIAS_OFF - antialiasing rendering hint value. */ public static final Object VALUE_ANTIALIAS_OFF = new KeyValue(KEY_ANTIALIASING); - /** - * The Constant KEY_COLOR_RENDERING - color rendering - * hint key. + /** + * The Constant KEY_COLOR_RENDERING - color rendering hint key. */ public static final Key KEY_COLOR_RENDERING = new KeyImpl(3); - + /** - * The Constant VALUE_COLOR_RENDER_DEFAULT - color - * rendering hint value. + * The Constant VALUE_COLOR_RENDER_DEFAULT - color rendering hint value. */ public static final Object VALUE_COLOR_RENDER_DEFAULT = new KeyValue(KEY_COLOR_RENDERING); - - /** - * The Constant VALUE_COLOR_RENDER_SPEED - color - * rendering hint value. + + /** + * The Constant VALUE_COLOR_RENDER_SPEED - color rendering hint value. */ public static final Object VALUE_COLOR_RENDER_SPEED = new KeyValue(KEY_COLOR_RENDERING); - - /** - * The Constant VALUE_COLOR_RENDER_QUALITY - color - * rendering hint value. + + /** + * The Constant VALUE_COLOR_RENDER_QUALITY - color rendering hint value. */ public static final Object VALUE_COLOR_RENDER_QUALITY = new KeyValue(KEY_COLOR_RENDERING); /** - * The Constant KEY_DITHERING - dithering - * rendering hint key. + * The Constant KEY_DITHERING - dithering rendering hint key. */ public static final Key KEY_DITHERING = new KeyImpl(4); - + /** - * The Constant VALUE_DITHER_DEFAULT - dithering - * rendering hint value. + * The Constant VALUE_DITHER_DEFAULT - dithering rendering hint value. */ public static final Object VALUE_DITHER_DEFAULT = new KeyValue(KEY_DITHERING); - - /** - * The Constant VALUE_DITHER_DISABLE - dithering - * rendering hint value. + + /** + * The Constant VALUE_DITHER_DISABLE - dithering rendering hint value. */ public static final Object VALUE_DITHER_DISABLE = new KeyValue(KEY_DITHERING); - - /** - * The Constant VALUE_DITHER_DISABLE - dithering - * rendering hint value. + + /** + * The Constant VALUE_DITHER_DISABLE - dithering rendering hint value. */ public static final Object VALUE_DITHER_ENABLE = new KeyValue(KEY_DITHERING); - /** - * The Constant KEY_FRACTIONALMETRICS - fractional metrics - * rendering hint key. + /** + * The Constant KEY_FRACTIONALMETRICS - fractional metrics rendering hint + * key. */ public static final Key KEY_FRACTIONALMETRICS = new KeyImpl(5); - + /** * The Constant VALUE_FRACTIONALMETRICS_DEFAULT - fractional metrics * rendering hint value. */ public static final Object VALUE_FRACTIONALMETRICS_DEFAULT = new KeyValue(KEY_FRACTIONALMETRICS); - + /** - * The Constant VALUE_FRACTIONALMETRICS_ON - fractional metrics - * rendering hint value. + * The Constant VALUE_FRACTIONALMETRICS_ON - fractional metrics rendering + * hint value. */ public static final Object VALUE_FRACTIONALMETRICS_ON = new KeyValue(KEY_FRACTIONALMETRICS); - + /** - * The Constant VALUE_FRACTIONALMETRICS_OFF - fractional metrics - * rendering hint value. + * The Constant VALUE_FRACTIONALMETRICS_OFF - fractional metrics rendering + * hint value. */ public static final Object VALUE_FRACTIONALMETRICS_OFF = new KeyValue(KEY_FRACTIONALMETRICS); - /** - * The Constant KEY_INTERPOLATION - interpolation - * rendering hint key. + /** + * The Constant KEY_INTERPOLATION - interpolation rendering hint key. */ public static final Key KEY_INTERPOLATION = new KeyImpl(6); - - /** - * The Constant VALUE_INTERPOLATION_BICUBIC - interpolation - * rendering hint value. + + /** + * The Constant VALUE_INTERPOLATION_BICUBIC - interpolation rendering hint + * value. */ public static final Object VALUE_INTERPOLATION_BICUBIC = new KeyValue(KEY_INTERPOLATION); - + /** - * The Constant VALUE_INTERPOLATION_BILINEAR - interpolation - * rendering hint value. + * The Constant VALUE_INTERPOLATION_BILINEAR - interpolation rendering hint + * value. */ public static final Object VALUE_INTERPOLATION_BILINEAR = new KeyValue(KEY_INTERPOLATION); - - /** The Constant VALUE_INTERPOLATION_NEAREST_NEIGHBOR - interpolation + + /** + * The Constant VALUE_INTERPOLATION_NEAREST_NEIGHBOR - interpolation * rendering hint value. */ - public static final Object VALUE_INTERPOLATION_NEAREST_NEIGHBOR = new KeyValue(KEY_INTERPOLATION); + public static final Object VALUE_INTERPOLATION_NEAREST_NEIGHBOR = new KeyValue( + KEY_INTERPOLATION); /** * The Constant KEY_RENDERING - rendering hint key. */ public static final Key KEY_RENDERING = new KeyImpl(7); - - /** - * The Constant VALUE_RENDER_DEFAULT - rendering hint value. + + /** + * The Constant VALUE_RENDER_DEFAULT - rendering hint value. */ public static final Object VALUE_RENDER_DEFAULT = new KeyValue(KEY_RENDERING); - - /** - * The Constant VALUE_RENDER_SPEED - rendering hint value. + + /** + * The Constant VALUE_RENDER_SPEED - rendering hint value. */ public static final Object VALUE_RENDER_SPEED = new KeyValue(KEY_RENDERING); - - /** - * The Constant VALUE_RENDER_QUALITY - rendering hint value. + + /** + * The Constant VALUE_RENDER_QUALITY - rendering hint value. */ public static final Object VALUE_RENDER_QUALITY = new KeyValue(KEY_RENDERING); - /** - * The Constant KEY_STROKE_CONTROL - stroke control hint key. + /** + * The Constant KEY_STROKE_CONTROL - stroke control hint key. */ public static final Key KEY_STROKE_CONTROL = new KeyImpl(8); - - /** - * The Constant VALUE_STROKE_DEFAULT - stroke hint value. + + /** + * The Constant VALUE_STROKE_DEFAULT - stroke hint value. */ public static final Object VALUE_STROKE_DEFAULT = new KeyValue(KEY_STROKE_CONTROL); - - /** - * The Constant VALUE_STROKE_NORMALIZE - stroke hint value. + + /** + * The Constant VALUE_STROKE_NORMALIZE - stroke hint value. */ public static final Object VALUE_STROKE_NORMALIZE = new KeyValue(KEY_STROKE_CONTROL); - - /** - * The Constant VALUE_STROKE_PURE - stroke hint value. + + /** + * The Constant VALUE_STROKE_PURE - stroke hint value. */ public static final Object VALUE_STROKE_PURE = new KeyValue(KEY_STROKE_CONTROL); - /** - * The Constant KEY_TEXT_ANTIALIASING - text antialiasing hint key. + /** + * The Constant KEY_TEXT_ANTIALIASING - text antialiasing hint key. */ public static final Key KEY_TEXT_ANTIALIASING = new KeyImpl(9); - + /** - * The Constant VALUE_TEXT_ANTIALIAS_DEFAULT - text antialiasing hint key. + * The Constant VALUE_TEXT_ANTIALIAS_DEFAULT - text antialiasing hint key. */ public static final Object VALUE_TEXT_ANTIALIAS_DEFAULT = new KeyValue(KEY_TEXT_ANTIALIASING); - + /** * The Constant VALUE_TEXT_ANTIALIAS_ON - text antialiasing hint key. */ public static final Object VALUE_TEXT_ANTIALIAS_ON = new KeyValue(KEY_TEXT_ANTIALIASING); - + /** - * The Constant VALUE_TEXT_ANTIALIAS_OFF - text antialiasing hint key. + * The Constant VALUE_TEXT_ANTIALIAS_OFF - text antialiasing hint key. */ public static final Object VALUE_TEXT_ANTIALIAS_OFF = new KeyValue(KEY_TEXT_ANTIALIASING); /** The map. */ private HashMap map = new HashMap(); - + /** - * Instantiates a new rendering hints object from specified Map object with defined - * key/value pairs or null for empty RenderingHints. + * Instantiates a new rendering hints object from specified Map object with + * defined key/value pairs or null for empty RenderingHints. * - * @param map the Map object with defined key/value pairs or null for - * empty RenderingHints. + * @param map + * the Map object with defined key/value pairs or null for empty + * RenderingHints. */ public RenderingHints(Map map) { super(); @@ -254,10 +250,13 @@ public class RenderingHints implements Map, Cloneable { } /** - * Instantiates a new rendering hints object with the specified key/value pair. + * Instantiates a new rendering hints object with the specified key/value + * pair. * - * @param key the key of hint property. - * @param value the value of hint property. + * @param key + * the key of hint property. + * @param value + * the value of hint property. */ public RenderingHints(Key key, Object value) { super(); @@ -268,21 +267,22 @@ public class RenderingHints implements Map, Cloneable { * Adds the properties represented by key/value pairs from the specified * RenderingHints object to current object. * - * @param hints the RenderingHints to be added. + * @param hints + * the RenderingHints to be added. */ public void add(RenderingHints hints) { map.putAll(hints.map); } /** - * Puts the specified value to the specified key. Neither the key nor - * the value can be null. - * - * @param key the rendering hint key. - * @param value the rendering hint value. + * Puts the specified value to the specified key. Neither the key nor the + * value can be null. * + * @param key + * the rendering hint key. + * @param value + * the rendering hint value. * @return the previous rendering hint value assigned to the key or null. - * */ public Object put(Object key, Object value) { if (!((Key)key).isCompatibleValue(value)) { @@ -293,13 +293,13 @@ public class RenderingHints implements Map, Cloneable { } /** - * Removes the specified key and corresponding value from - * the RenderingHints object. + * Removes the specified key and corresponding value from the RenderingHints + * object. * - * @param key the specified hint key to be removed. - * - * @return the object of previous rendering hint value which is - * assigned to the specified key, or null. + * @param key + * the specified hint key to be removed. + * @return the object of previous rendering hint value which is assigned to + * the specified key, or null. */ public Object remove(Object key) { return map.remove(key); @@ -308,8 +308,8 @@ public class RenderingHints implements Map, Cloneable { /** * Gets the value assigned to the specified key. * - * @param key the rendering hint key. - * + * @param key + * the rendering hint key. * @return the object assigned to the specified key. */ public Object get(Object key) { @@ -319,7 +319,7 @@ public class RenderingHints implements Map, Cloneable { /** * Returns a set of rendering hints keys for current RenderingHints object. * - * @return the set of rendering hints keys. + * @return the set of rendering hints keys. */ public Set keySet() { return map.keySet(); @@ -336,23 +336,23 @@ public class RenderingHints implements Map, Cloneable { } /** - * Puts all of the preferences from the specified Map into - * the current RenderingHints object. These mappings replace - * all existing preferences. + * Puts all of the preferences from the specified Map into the current + * RenderingHints object. These mappings replace all existing preferences. * - * @param m the specified Map of preferences. + * @param m + * the specified Map of preferences. */ public void putAll(Map m) { if (m instanceof RenderingHints) { - map.putAll(((RenderingHints) m).map); + map.putAll(((RenderingHints)m).map); } else { Set entries = m.entrySet(); - if (entries != null){ + if (entries != null) { Iterator it = entries.iterator(); while (it.hasNext()) { - Map.Entry entry = (Map.Entry) it.next(); - Key key = (Key) entry.getKey(); + Map.Entry entry = (Map.Entry)it.next(); + Key key = (Key)entry.getKey(); Object val = entry.getValue(); put(key, val); } @@ -361,7 +361,8 @@ public class RenderingHints implements Map, Cloneable { } /** - * Returns a Collection of values contained in current RenderingHints object. + * Returns a Collection of values contained in current RenderingHints + * object. * * @return the Collection of RenderingHints's values. */ @@ -373,10 +374,10 @@ public class RenderingHints implements Map, Cloneable { * Checks whether or not current RenderingHints object contains at least one * the value which is equal to the specified Object. * - * @param value the specified Object. - * + * @param value + * the specified Object. * @return true, if the specified object is assigned to at least one - * RenderingHint's key, false otherwise. + * RenderingHint's key, false otherwise. */ public boolean containsValue(Object value) { return map.containsValue(value); @@ -386,11 +387,10 @@ public class RenderingHints implements Map, Cloneable { * Checks whether or not current RenderingHints object contains the key * which is equal to the specified Object. * - * @param key the specified Object. - * + * @param key + * the specified Object. * @return true, if the RenderingHints object contains the specified Object - * as a key, false otherwise. - * + * as a key, false otherwise. */ public boolean containsKey(Object key) { if (key == null) { @@ -401,8 +401,8 @@ public class RenderingHints implements Map, Cloneable { } /** - * Checks whether or not the RenderingHints object contains any - * key/value pairs. + * Checks whether or not the RenderingHints object contains any key/value + * pairs. * * @return true, if the RenderingHints object is empty, false otherwise. */ @@ -429,11 +429,10 @@ public class RenderingHints implements Map, Cloneable { /** * Compares the RenderingHints object with the specified object. * - * @param o the specified Object to be compaired. - * - * @return true, if the Object is a Map whose key/value pairs - * match this RenderingHints' key/value pairs, - * false otherwise. + * @param o + * the specified Object to be compared. + * @return true, if the Object is a Map whose key/value pairs match this + * RenderingHints' key/value pairs, false otherwise. */ @Override public boolean equals(Object o) { @@ -452,7 +451,7 @@ public class RenderingHints implements Map, Cloneable { Key key = (Key)it.next(); Object v1 = get(key); Object v2 = m.get(key); - if (!(v1==null?v2==null:v1.equals(v2))) { + if (!(v1 == null ? v2 == null : v1.equals(v2))) { return false; } } @@ -485,28 +484,30 @@ public class RenderingHints implements Map, Cloneable { /** * Returns the string representation of the RenderingHints object. * - * @return the String object which represents RenderingHints object. + * @return the String object which represents RenderingHints object. */ @Override public String toString() { - return "RenderingHints["+map.toString()+"]"; //$NON-NLS-1$ //$NON-NLS-2$ + return "RenderingHints[" + map.toString() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } /** - * The RenderingHints.Key class is abstract and defines a base type for - * all RenderingHints keys. + * The RenderingHints.Key class is abstract and defines a base type for all + * RenderingHints keys. + * + * @since Android 1.0 */ public abstract static class Key { - + /** The key. */ private final int key; /** - * Instantiates a new key with unique int identifier. - * No two objects of the same subclass with the same integer key - * can be instantiated. + * Instantiates a new key with unique integer identifier. No two objects + * of the same subclass with the same integer key can be instantiated. * - * @param key the unique key. + * @param key + * the unique key. */ protected Key(int key) { this.key = key; @@ -515,10 +516,10 @@ public class RenderingHints implements Map, Cloneable { /** * Compares the Key object with the specified object. * - * @param o the specified Object to be compaired. - * - * @return true, if the Key is equal to the specified object, - * false otherwise. + * @param o + * the specified Object to be compared. + * @return true, if the Key is equal to the specified object, false + * otherwise. */ @Override public final boolean equals(Object o) { @@ -536,11 +537,11 @@ public class RenderingHints implements Map, Cloneable { } /** - * Returns int unique key with which this Key object has been + * Returns integer unique key with which this Key object has been * instantiated. * - * @return the int unique key with which this Key object has been - * instantiated. + * @return the integer unique key with which this Key object has been + * instantiated. */ protected final int intKey() { return key; @@ -549,10 +550,10 @@ public class RenderingHints implements Map, Cloneable { /** * Checks whether or not specified value is compatible with the Key. * - * @param val the Object. - * + * @param val + * the Object. * @return true, if the specified value is compatible with the Key, - * false otherwise. + * false otherwise. */ public abstract boolean isCompatibleValue(Object val); } @@ -563,9 +564,10 @@ public class RenderingHints implements Map, Cloneable { private static class KeyImpl extends Key { /** - * Instantiates a new key impl. + * Instantiates a new key implementation. * - * @param key the key + * @param key + * the key. */ protected KeyImpl(int key) { super(key); @@ -585,14 +587,17 @@ public class RenderingHints implements Map, Cloneable { * Private class KeyValue is used as value for Key class instance. */ private static class KeyValue { - - /** The key. */ + + /** + * The key. + */ private final Key key; /** * Instantiates a new key value. * - * @param key the key + * @param key + * the key. */ protected KeyValue(Key key) { this.key = key; diff --git a/awt/java/awt/Shape.java b/awt/java/awt/Shape.java index 3dbad25a84..59bc623b81 100644 --- a/awt/java/awt/Shape.java +++ b/awt/java/awt/Shape.java @@ -18,6 +18,7 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; import java.awt.geom.AffineTransform; @@ -26,137 +27,136 @@ import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; /** - * The Shape interface defines a geometric shape defined by a boundary - * (outline) path. The path outline can be accessed through a - * PathIterator object. The Shape - * interface provides methods for obtaining the bounding box (which is - * the smallest rectangle containing the shape and for obtaining a PathIterator - * object for current Shape, as well as utility methods which - * determine if the Shape contains or intersects a Rectangle or contains a Point. + * The Shape interface defines a geometric shape defined by a boundary (outline) + * path. The path outline can be accessed through a PathIterator object. The + * Shape interface provides methods for obtaining the bounding box (which is the + * smallest rectangle containing the shape and for obtaining a PathIterator + * object for current Shape, as well as utility methods which determine if the + * Shape contains or intersects a Rectangle or contains a Point. + * + * @since Android 1.0 */ public interface Shape { - + /** - * Checks whether or not the point with specified coordinates lies inside + * Checks whether or not the point with specified coordinates lies inside * the Shape. * - * @param x the X coordinate. - * @param y the Y coordinate. - * - * @return true, if the specified coordinates lie inside the Shape, - * otherwise false. + * @param x + * the X coordinate. + * @param y + * the Y coordinate. + * @return true, if the specified coordinates lie inside the Shape, false + * otherwise. */ public boolean contains(double x, double y); /** - * Checks whether or not the rectangle with specified - * [x, y, width, height] parameters lies inside the Shape. - * - * @param x the X double coordinate of the rectangle's upper left - * corner. - * @param y the Y double coordinate of the rectangle's upper left - * corner. - * @param w the width of rectangle. - * @param h the height of rectangle. - * - * @return true, if the specified rectangle lies inside the Shape, - * otherwise false. + * Checks whether or not the rectangle with specified [x, y, width, height] + * parameters lies inside the Shape. + * + * @param x + * the X double coordinate of the rectangle's upper left corner. + * @param y + * the Y double coordinate of the rectangle's upper left corner. + * @param w + * the width of rectangle. + * @param h + * the height of rectangle. + * @return true, if the specified rectangle lies inside the Shape, false + * otherwise. */ public boolean contains(double x, double y, double w, double h); /** * Checks whether or not the specified Point2D lies inside the Shape. * - * @param point the Point2D object. - * - * @return true, if the specified Point2D lies inside the Shape, - * otherwise false. + * @param point + * the Point2D object. + * @return true, if the specified Point2D lies inside the Shape, false + * otherwise. */ public boolean contains(Point2D point); /** * Checks whether or not the specified rectangle lies inside the Shape. * - * @param r the Rectangle2D object. - * - * @return true, if the specified rectangle lies inside the Shape, - * otherwise false. + * @param r + * the Rectangle2D object. + * @return true, if the specified rectangle lies inside the Shape, false + * otherwise. */ public boolean contains(Rectangle2D r); /** - * Gets the bounding rectangle of the Shape. The bounding rectangle - * is the smallest rectangle which contains the Shape. + * Gets the bounding rectangle of the Shape. The bounding rectangle is the + * smallest rectangle which contains the Shape. * * @return the bounding rectangle of the Shape. */ public Rectangle getBounds(); /** - * Gets the Rectangle2D which represents Shape bounds. - * The bounding rectangle is the smallest rectangle which contains - * the Shape. + * Gets the Rectangle2D which represents Shape bounds. The bounding + * rectangle is the smallest rectangle which contains the Shape. * * @return the bounding rectangle of the Shape. */ public Rectangle2D getBounds2D(); /** - * Gets the PathIterator object of the Shape which provides - * access to the shape's boundary modified - * by the specified AffineTransform. - * - * @param at the specified AffineTransform object, or null. + * Gets the PathIterator object of the Shape which provides access to the + * shape's boundary modified by the specified AffineTransform. * + * @param at + * the specified AffineTransform object or null. * @return PathIterator object for the Shape. */ public PathIterator getPathIterator(AffineTransform at); /** - * Gets the PathIterator object of the Shape which provides - * access to the coordinates of the shapes boundary modified - * by the specified AffineTransform. The flatness parameter - * defines the amount of subdivision of the curved segments and - * specifies the maximum distance which every point on the - * unflattened transformed curve can deviate from the returned - * flattened path segments. - * - * @param at the specified AffineTransform object, or null. - * @param flatness the maximum number of the control points for - * a given curve which varies from colinear before a subdivided - * curve is replaced by a straight line connecting the endpoints. - * + * Gets the PathIterator object of the Shape which provides access to the + * coordinates of the shapes boundary modified by the specified + * AffineTransform. The flatness parameter defines the amount of subdivision + * of the curved segments and specifies the maximum distance which every + * point on the unflattened transformed curve can deviate from the returned + * flattened path segments. + * + * @param at + * the specified AffineTransform object or null. + * @param flatness + * the maximum number of the control points for a given curve + * which varies from colinear before a subdivided curve is + * replaced by a straight line connecting the endpoints. * @return PathIterator object for the Shape. */ public PathIterator getPathIterator(AffineTransform at, double flatness); /** - * Checks whether or not the interior of rectangular specified by - * [x, y, width, height] parameters intersects the interior of - * the Shape. - * - * @param x the X double coordinate of the rectangle's upper left - * corner. - * @param y the Y double coordinate of the rectangle's upper left - * corner. - * @param w the width of rectangle. - * @param h the height of rectangle. - * - * @return true, if the rectangle specified by - * [x, y, width, height] parameters intersects the interior of - * the Shape, otherwise false. - * + * Checks whether or not the interior of rectangular specified by [x, y, + * width, height] parameters intersects the interior of the Shape. + * + * @param x + * the X double coordinate of the rectangle's upper left corner. + * @param y + * the Y double coordinate of the rectangle's upper left corner. + * @param w + * the width of rectangle. + * @param h + * the height of rectangle. + * @return true, if the rectangle specified by [x, y, width, height] + * parameters intersects the interior of the Shape, false otherwise. */ public boolean intersects(double x, double y, double w, double h); /** - * Checks whether or not the interior of rectangl specified by - * Rectangle2D object intersects the interior of the Shape. - * - * @param r the Rectangle2D object. + * Checks whether or not the interior of rectangle specified by Rectangle2D + * object intersects the interior of the Shape. * - * @return true, if the Rectangle2D intersects the interior of - * the Shape, otherwise false. + * @param r + * the Rectangle2D object. + * @return true, if the Rectangle2D intersects the interior of the Shape, + * otherwise false. */ public boolean intersects(Rectangle2D r); } diff --git a/awt/java/awt/Stroke.java b/awt/java/awt/Stroke.java index e6d683d733..6d17a23bd7 100644 --- a/awt/java/awt/Stroke.java +++ b/awt/java/awt/Stroke.java @@ -18,29 +18,32 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt; /** - * The Stroke interface gives a pen style to be used by the - * Graphics2D interface. It provides a means for getting a stroked version - * of a shape, which is the version that is suitable for drawing via - * the Graphics2D interface. Stroking a shape gives the shape's outline - * a width or drawing style. + * The Stroke interface gives a pen style to be used by the Graphics2D + * interface. It provides a means for getting a stroked version of a shape, + * which is the version that is suitable for drawing via the Graphics2D + * interface. Stroking a shape gives the shape's outline a width or drawing + * style. *

    - * The Draw methods from Graphics2D interface should use the Stroke object for - * rendering the shape's outline. The stroke should be set by - * setStroke(java.awt.Stroke) method of the Graphics2D interface. + * The Draw methods from Graphics2D interface should use the Stroke object for + * rendering the shape's outline. The stroke should be set by + * setStroke(java.awt.Stroke) method of the Graphics2D interface. + * * @see java.awt.Graphics2D#setStroke(java.awt.Stroke) + * @since Android 1.0 */ public interface Stroke { - + /** - * Creates the stroked shape, which is the version that is suitable for drawing via - * the Graphics2D interface. Stroking a shape gives the shape's outline - * a width or drawing style. - * - * @param p the original shape. + * Creates the stroked shape, which is the version that is suitable for + * drawing via the Graphics2D interface. Stroking a shape gives the shape's + * outline a width or drawing style. * + * @param p + * the original shape. * @return the stroked shape. */ public Shape createStrokedShape(Shape p); diff --git a/awt/java/awt/Toolkit.java b/awt/java/awt/Toolkit.java index 0c066b2a0b..e38d524020 100644 --- a/awt/java/awt/Toolkit.java +++ b/awt/java/awt/Toolkit.java @@ -56,34 +56,50 @@ import org.apache.harmony.awt.wtk.NativeEventThread; import org.apache.harmony.awt.wtk.ShutdownWatchdog; import org.apache.harmony.awt.wtk.Synchronizer; import org.apache.harmony.awt.wtk.WTK; +import org.apache.harmony.luni.util.NotImplementedException; /** - * The Toolkit class is the representation of the platform-specific - * Abstract Window Toolkit implementation. Toolkit's subclasses - * are used to bind the various components to particular native - * toolkit implementations. + * The Toolkit class is the representation of the platform-specific Abstract + * Window Toolkit implementation. Toolkit's subclasses are used to bind the + * various components to particular native toolkit implementations. + * + * @since Android 1.0 */ public abstract class Toolkit { - - /** The Constant RECOURCE_PATH. */ + + /** + * The Constant RECOURCE_PATH. + */ private static final String RECOURCE_PATH = "org.apache.harmony.awt.resources.AWTProperties"; //$NON-NLS-1$ - - /** The Constant properties. */ + + /** + * The Constant properties. + */ private static final ResourceBundle properties = loadResources(RECOURCE_PATH); - - /** The dispatcher. */ + + /** + * The dispatcher. + */ Dispatcher dispatcher; - /** The system event queue core. */ + /** + * The system event queue core. + */ private EventQueueCore systemEventQueueCore; - /** The dispatch thread. */ + /** + * The dispatch thread. + */ EventDispatchThread dispatchThread; - /** The native thread. */ + /** + * The native thread. + */ NativeEventThread nativeThread; - /** The awt events manager. */ + /** + * The AWT events manager. + */ protected AWTEventsManager awtEventsManager; /** @@ -92,47 +108,68 @@ public abstract class Toolkit { private class AWTTreeLock { } - /** The awt tree lock. */ + /** + * The AWT tree lock. + */ final Object awtTreeLock = new AWTTreeLock(); - /** The synchronizer. */ + /** + * The synchronizer. + */ private final Synchronizer synchronizer = ContextStorage.getSynchronizer(); - /** The shutdown watchdog. */ + /** + * The shutdown watchdog. + */ final ShutdownWatchdog shutdownWatchdog = new ShutdownWatchdog(); - /** The auto number. */ + /** + * The auto number. + */ final AutoNumber autoNumber = new AutoNumber(); - /** The event type lookup. */ + /** + * The event type lookup. + */ final AWTEvent.EventTypeLookup eventTypeLookup = new AWTEvent.EventTypeLookup(); - /** The b dynamic layout set. */ + /** + * The b dynamic layout set. + */ private boolean bDynamicLayoutSet = true; - /** The set of desktop properties that user set directly. */ + /** + * The set of desktop properties that user set directly. + */ private final HashSet userPropSet = new HashSet(); - /** The desktop properties. */ + /** + * The desktop properties. + */ protected Map desktopProperties; - /** The desktop props support. */ + /** + * The desktop props support. + */ protected PropertyChangeSupport desktopPropsSupport; /** - * For this component the native window is being created - * It is used in the callback-driven window creation - * (e.g. on Windows in the handler of WM_CREATE event) - * to establish the connection between this component - * and its native window. + * For this component the native window is being created It is used in the + * callback-driven window creation (e.g. on Windows in the handler of + * WM_CREATE event) to establish the connection between this component and + * its native window. */ private Object recentNativeWindowComponent; - /** The wtk. */ + /** + * The wtk. + */ private WTK wtk; /** * The Class ComponentInternalsImpl. + * + * @since Android 1.0 */ protected final class ComponentInternalsImpl extends ComponentInternals { @@ -143,13 +180,15 @@ public abstract class Toolkit { public void shutdown() { dispatchThread.shutdown(); } - + /** - * Sets the desktop property to the specified value and fires a property - * change event. + * Sets the desktop property to the specified value and fires a property + * change event. * - * @param name the name of property. - * @param value the new value of property. + * @param name + * the name of property. + * @param value + * the new value of property. */ @Override public void setDesktopProperty(String name, Object value) { @@ -157,12 +196,12 @@ public abstract class Toolkit { } } - /** - * A lot of methods must throw HeadlessException - * if GraphicsEnvironment.isHeadless() returns true. + * A lot of methods must throw HeadlessException if + * GraphicsEnvironment.isHeadless() returns true. * - * @throws HeadlessException the headless exception + * @throws HeadlessException + * the headless exception. */ static void checkHeadless() throws HeadlessException { if (GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance()) @@ -170,51 +209,49 @@ public abstract class Toolkit { } /** - * Lock awt. + * Lock AWT. */ final void lockAWT() { synchronizer.lock(); } /** - * Static lock awt. + * Static lock AWT. */ static final void staticLockAWT() { ContextStorage.getSynchronizer().lock(); } /** - * Unlock awt. + * Unlock AWT. */ final void unlockAWT() { synchronizer.unlock(); } /** - * Static unlock awt. + * Static unlock AWT. */ static final void staticUnlockAWT() { ContextStorage.getSynchronizer().unlock(); - } - - /** - * InvokeAndWait under AWT lock. W/o this method system can hang up. - * Added to support modality (Dialog.show() & PopupMenu.show()) from - * not event dispatch thread. Use in other cases is not recommended. - * - * Still can be called only for whole API methods that - * cannot be called from other classes API methods. - * Examples: - * show() for modal dialogs - correct, only user can call it, - * directly or through setVisible(true) - * setBounds() for components - incorrect, setBounds() - * can be called from layoutContainer() - * for layout managers - * - * @param runnable the runnable + } + + /** + * InvokeAndWait under AWT lock. W/o this method system can hang up. Added + * to support modality (Dialog.show() & PopupMenu.show()) from not event + * dispatch thread. Use in other cases is not recommended. Still can be + * called only for whole API methods that cannot be called from other + * classes API methods. Examples: show() for modal dialogs - correct, only + * user can call it, directly or through setVisible(true) setBounds() for + * components - incorrect, setBounds() can be called from layoutContainer() + * for layout managers * - * @throws InterruptedException the interrupted exception - * @throws InvocationTargetException the invocation target exception + * @param runnable + * the runnable. + * @throws InterruptedException + * the interrupted exception. + * @throws InvocationTargetException + * the invocation target exception. */ final void unsafeInvokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException { @@ -229,7 +266,7 @@ public abstract class Toolkit { /** * Gets the synchronizer. * - * @return the synchronizer + * @return the synchronizer. */ final Synchronizer getSynchronizer() { return synchronizer; @@ -238,19 +275,20 @@ public abstract class Toolkit { /** * Gets the wTK. * - * @return the wTK + * @return the wTK. */ final WTK getWTK() { return wtk; } /** - * Gets the property with the specified key and default value. - * This method returns the defValue if the property is not found. - * - * @param propName the name of property. - * @param defVal the default value. + * Gets the property with the specified key and default value. This method + * returns the defValue if the property is not found. * + * @param propName + * the name of property. + * @param defVal + * the default value. * @return the property value. */ public static String getProperty(String propName, String defVal) { @@ -273,11 +311,11 @@ public abstract class Toolkit { staticUnlockAWT(); } } - + /** * Gets the default Toolkit. * - * @return the default Toolkit + * @return the default Toolkit. */ public static Toolkit getDefaultToolkit() { synchronized (ContextStorage.getContextLock()) { @@ -290,34 +328,34 @@ public abstract class Toolkit { } staticLockAWT(); try { - defToolkit = GraphicsEnvironment.isHeadless() ? - new HeadlessToolkit() : new ToolkitImpl(); + defToolkit = GraphicsEnvironment.isHeadless() ? new HeadlessToolkit() + : new ToolkitImpl(); ContextStorage.setDefaultToolkit(defToolkit); return defToolkit; } finally { staticUnlockAWT(); } - //TODO: read system property named awt.toolkit - //and create an instance of the specified class, - //by default use ToolkitImpl + // TODO: read system property named awt.toolkit + // and create an instance of the specified class, + // by default use ToolkitImpl } } - + /** * Gets the default Font. * - * @return the derault Font for Toolkit. + * @return the default Font for Toolkit. */ Font getDefaultFont() { return wtk.getSystemProperties().getDefaultFont(); } - + /** * Load resources. * - * @param path the path - * - * @return the resource bundle + * @param path + * the path. + * @return the resource bundle. */ private static ResourceBundle loadResources(String path) { try { @@ -330,7 +368,7 @@ public abstract class Toolkit { /** * Gets the wTK class name. * - * @return the wTK class name + * @return the wTK class name. */ private static String getWTKClassName() { return "com.android.internal.awt.AndroidWTK"; @@ -339,9 +377,9 @@ public abstract class Toolkit { /** * Gets the component by id. * - * @param id the id - * - * @return the component by id + * @param id + * the id. + * @return the component by id. */ Component getComponentById(long id) { if (id == 0) { @@ -362,12 +400,12 @@ public abstract class Toolkit { /** * Instantiates a new toolkit. */ - public Toolkit() { + public Toolkit() { init(); } /** - * Inits AWT. + * Initiates AWT. */ protected void init() { lockAWT(); @@ -397,43 +435,52 @@ public abstract class Toolkit { unlockAWT(); } } - + /** * Synchronizes this toolkit's graphics. */ public abstract void sync(); /** - * Returns the construction status of a specified image that is being created. - * - * @param a0 the image to be checked. - * @param a1 the width of scaled image for which the status is being checked, or -1. - * @param a2 the height of scaled image for which the status is being checked, or -1. - * @param a3 the ImageObserver object to be notified while - * the image is being prepared. + * Returns the construction status of a specified image that is being + * created. * - * @return the ImageObserver flags which give the current state of the image data. + * @param a0 + * the image to be checked. + * @param a1 + * the width of scaled image for which the status is being + * checked or -1. + * @param a2 + * the height of scaled image for which the status is being + * checked or -1. + * @param a3 + * the ImageObserver object to be notified while the image is + * being prepared. + * @return the ImageObserver flags which give the current state of the image + * data. */ public abstract int checkImage(Image a0, int a1, int a2, ImageObserver a3); - + /** * Creates the image with the specified ImageProducer. * - * @param a0 the ImageProducer to be used for image creation. - * + * @param a0 + * the ImageProducer to be used for image creation. * @return the image with the specified ImageProducer. */ public abstract Image createImage(ImageProducer a0); /** - * Creates the image from the specified byte array, offset and length. - * The byte array should contain data with image format supported by - * Toolkit such as JPEG, GIF, or PNG. - * - * @param a0 the byte array with the image data. - * @param a1 the offset of the beggining the image data in the byte array. - * @param a2 the length of the image data in the byte array. + * Creates the image from the specified byte array, offset and length. The + * byte array should contain data with image format supported by Toolkit + * such as JPEG, GIF, or PNG. * + * @param a0 + * the byte array with the image data. + * @param a1 + * the offset of the beginning the image data in the byte array. + * @param a2 + * the length of the image data in the byte array. * @return the created Image. */ public abstract Image createImage(byte[] a0, int a1, int a2); @@ -441,8 +488,8 @@ public abstract class Toolkit { /** * Creates the image using image data from the specified URL. * - * @param a0 the URL for extracting image data. - * + * @param a0 + * the URL for extracting image data. * @return the Image. */ public abstract Image createImage(URL a0); @@ -450,8 +497,8 @@ public abstract class Toolkit { /** * Creates the image using image data from the specified file. * - * @param a0 the file name which contains image data of supported format. - * + * @param a0 + * the file name which contains image data of supported format. * @return the Image. */ public abstract Image createImage(String a0); @@ -460,22 +507,20 @@ public abstract class Toolkit { * Gets the color model. * * @return the ColorModel of Toolkit's screen. - * - * @throws HeadlessException if the - * GraphicsEnvironment.isHeadless() method returns true. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public abstract ColorModel getColorModel() throws HeadlessException; - + /** * Gets the screen device metrics for the specified font. * - * @param font the Font. - * + * @param font + * the Font. * @return the FontMetrics for the specified Font. - * * @deprecated Use getLineMetrics method from Font class. */ - + @Deprecated public abstract FontMetrics getFontMetrics(Font font); @@ -483,13 +528,18 @@ public abstract class Toolkit { * Prepares the specified image for rendering on the screen with the * specified size. * - * @param a0 the Image to be prepared. - * @param a1 the width of the screen representation or -1 for the current screen. - * @param a2 the height of the screen representation or -1 for the current screen. - * @param a3 the ImageObserver object to be notified as soon as - * the image is prepared. - * - * @return true, if image is fully prepared; false otherwise. + * @param a0 + * the Image to be prepared. + * @param a1 + * the width of the screen representation or -1 for the current + * screen. + * @param a2 + * the height of the screen representation or -1 for the current + * screen. + * @param a3 + * the ImageObserver object to be notified as soon as the image + * is prepared. + * @return true, if image is fully prepared, false otherwise. */ public abstract boolean prepareImage(Image a0, int a1, int a2, ImageObserver a3); @@ -502,21 +552,19 @@ public abstract class Toolkit { * Returns the array of font names which are available in this Toolkit. * * @return the array of font names which are available in this Toolkit. - * * @deprecated use GraphicsEnvironment.getAvailableFontFamilyNames() method. */ @Deprecated public abstract String[] getFontList(); - + /** - * Gets the the Font implementation using the specified peer - * interface. - * - * @param a0 the Font name to be implemented. - * @param a1 the the font style: PLAIN, BOLD, ITALIC. + * Gets the the Font implementation using the specified peer interface. * + * @param a0 + * the Font name to be implemented. + * @param a1 + * the the font style: PLAIN, BOLD, ITALIC. * @return the FontPeer implementation of the specified Font. - * * @deprecated use java.awt.GraphicsEnvironment.getAllFonts method. */ @@ -524,27 +572,27 @@ public abstract class Toolkit { protected abstract FontPeer getFontPeer(String a0, int a1); /** - * Gets the image from the specified file which contains image data in - * a supported image format (such as JPEG, GIF, or PNG); this method - * should return the same Image for multiple calls of this method with - * the same image file name. - * - * @param a0 the file name which contains image data in - * a supported image format (such as JPEG, GIF, or PNG). + * Gets the image from the specified file which contains image data in a + * supported image format (such as JPEG, GIF, or PNG); this method should + * return the same Image for multiple calls of this method with the same + * image file name. * + * @param a0 + * the file name which contains image data in a supported image + * format (such as JPEG, GIF, or PNG). * @return the Image. */ public abstract Image getImage(String a0); /** - * Gets the image from the specified URL which contains image data in - * a supported image format (such as JPEG, GIF, or PNG); this method - * should return the same Image for multiple calls of this method with - * the same image URL. - * - * @param a0 the URL which contains image data in - * a supported image format (such as JPEG, GIF, or PNG). + * Gets the image from the specified URL which contains image data in a + * supported image format (such as JPEG, GIF, or PNG); this method should + * return the same Image for multiple calls of this method with the same + * image URL. * + * @param a0 + * the URL which contains image data in a supported image format + * (such as JPEG, GIF, or PNG). * @return the Image. */ public abstract Image getImage(URL a0); @@ -553,20 +601,17 @@ public abstract class Toolkit { * Gets the screen resolution. * * @return the screen resolution. - * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public abstract int getScreenResolution() throws HeadlessException; /** * Gets the screen size. * - * @return a Dimension object containing the width and height of - * the screen. - * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @return a Dimension object containing the width and height of the screen. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public abstract Dimension getScreenSize() throws HeadlessException; @@ -578,15 +623,14 @@ public abstract class Toolkit { protected abstract EventQueue getSystemEventQueueImpl(); /** - * Returns a map of text attributes for the abstract level description - * of the specified input method highlight, or null if no mapping is found. - * - * @param highlight the InputMethodHighlight. + * Returns a map of text attributes for the abstract level description of + * the specified input method highlight, or null if no mapping is found. * - * @return the Map - * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @param highlight + * the InputMethodHighlight. + * @return the Map. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public abstract Map mapInputMethodHighlight( InputMethodHighlight highlight) throws HeadlessException; @@ -594,14 +638,14 @@ public abstract class Toolkit { /** * Map input method highlight impl. * - * @param highlight the highlight - * - * @return the map - * - * @throws HeadlessException the headless exception + * @param highlight + * the highlight. + * @return the map. + * @throws HeadlessException + * the headless exception. */ - Map mapInputMethodHighlightImpl( - InputMethodHighlight highlight) throws HeadlessException { + Map mapInputMethodHighlightImpl(InputMethodHighlight highlight) + throws HeadlessException { HashMap map = new HashMap(); wtk.getSystemProperties().mapInputMethodHighlight(highlight, map); return Collections. unmodifiableMap(map); @@ -611,9 +655,11 @@ public abstract class Toolkit { * Adds the specified PropertyChangeListener listener for the specified * property. * - * @param propName the property name for which the specified PropertyChangeListener - * will be added. - * @param l the PropertyChangeListener object. + * @param propName + * the property name for which the specified + * PropertyChangeListener will be added. + * @param l + * the PropertyChangeListener object. */ public void addPropertyChangeListener(String propName, PropertyChangeListener l) { lockAWT(); @@ -624,31 +670,32 @@ public abstract class Toolkit { } finally { unlockAWT(); } - if (l != null) { // there is no guarantee that null listener will not be added + if (l != null) { // there is no guarantee that null listener will not be + // added desktopPropsSupport.addPropertyChangeListener(propName, l); } } /** - * Returns an array of the property change listeners registered with - * this Toolkit. + * Returns an array of the property change listeners registered with this + * Toolkit. * - * @return an array of the property change listeners registered with - * this Toolkit. + * @return an array of the property change listeners registered with this + * Toolkit. */ public PropertyChangeListener[] getPropertyChangeListeners() { return desktopPropsSupport.getPropertyChangeListeners(); } /** - * Returns an array of the property change listeners registered with - * this Toolkit for notification regarding the specified property. - * - * @param propName the property name for which the PropertyChangeListener - * was registered. + * Returns an array of the property change listeners registered with this + * Toolkit for notification regarding the specified property. * - * @return the array of PropertyChangeListeners registered for the specified - * property name. + * @param propName + * the property name for which the PropertyChangeListener was + * registered. + * @return the array of PropertyChangeListeners registered for the specified + * property name. */ public PropertyChangeListener[] getPropertyChangeListeners(String propName) { return desktopPropsSupport.getPropertyChangeListeners(propName); @@ -658,28 +705,33 @@ public abstract class Toolkit { * Removes the specified property change listener registered for the * specified property name. * - * @param propName the property name. - * @param l the PropertyChangeListener registered for the specified property name. + * @param propName + * the property name. + * @param l + * the PropertyChangeListener registered for the specified + * property name. */ public void removePropertyChangeListener(String propName, PropertyChangeListener l) { desktopPropsSupport.removePropertyChangeListener(propName, l); } - + /** * Creates a custom cursor with the specified Image, hot spot, and cursor * description. * - * @param img the image of activated cursor. - * @param hotSpot the Point giving the coordinates of the cursor's hot spot. - * @param name the cursor description. - * + * @param img + * the image of activated cursor. + * @param hotSpot + * the Point giving the coordinates of the cursor's hot spot. + * @param name + * the cursor description. * @return the cursor with the specified Image, hot spot, and cursor - * description. - * - * @throws IndexOutOfBoundsException if the hot spot values are outside - * the bounds of the cursor. - * @throws HeadlessException if isHeadless() method of GraphicsEnvironment - * class returns true. + * description. + * @throws IndexOutOfBoundsException + * if the hot spot values are outside the bounds of the cursor. + * @throws HeadlessException + * if isHeadless() method of GraphicsEnvironment class returns + * true. */ public Cursor createCustomCursor(Image img, Point hotSpot, String name) throws IndexOutOfBoundsException, HeadlessException { @@ -698,20 +750,19 @@ public abstract class Toolkit { } /** - * Returns the supported cursor dimension which is closest to the - * specified width and height. If the Toolkit only supports a single - * cursor size, this method should return the supported cursor size. - * If custom cursor is not supported, a dimension of 0, 0 should be - * returned. - * - * @param prefWidth the preffered cursor width. - * @param prefHeight the preffered cursor height. + * Returns the supported cursor dimension which is closest to the specified + * width and height. If the Toolkit only supports a single cursor size, this + * method should return the supported cursor size. If custom cursor is not + * supported, a dimension of 0, 0 should be returned. * - * @return the supported cursor dimension which is closest to the - * specified width and height. - * - * @throws HeadlessException if GraphicsEnvironment.isHeadless() - * returns true. + * @param prefWidth + * the preferred cursor width. + * @param prefHeight + * the preferred cursor height. + * @return the supported cursor dimension which is closest to the specified + * width and height. + * @throws HeadlessException + * if GraphicsEnvironment.isHeadless() returns true. */ public Dimension getBestCursorSize(int prefWidth, int prefHeight) throws HeadlessException { lockAWT(); @@ -723,10 +774,10 @@ public abstract class Toolkit { } /** - * Gets the value for the specified desktop property. - * - * @param propName the property name. + * Gets the value for the specified desktop property. * + * @param propName + * the property name. * @return the Object that is the property's value. */ public final Object getDesktopProperty(String propName) { @@ -754,17 +805,19 @@ public abstract class Toolkit { /** * Returns the locking key state for the specified key. * - * @param a0 the key code: VK_CAPS_LOCK, VK_NUM_LOCK, VK_SCROLL_LOCK, - * or VK_KANA_LOCK. - * - * @return true if the specified key code is in the locked state, - * false otherwise. - * - * @throws UnsupportedOperationException if the state of this key - * can't be retrieved, or if the keyboard doesn't have this key. - * @throws NotImplementedException if this method is not implemented. - */ - public boolean getLockingKeyState(int a0) throws UnsupportedOperationException, org.apache.harmony.luni.util.NotImplementedException { + * @param a0 + * the key code: VK_CAPS_LOCK, VK_NUM_LOCK, VK_SCROLL_LOCK, or + * VK_KANA_LOCK. + * @return true if the specified key code is in the locked state, false + * otherwise. + * @throws UnsupportedOperationException + * if the state of this key can't be retrieved, or if the + * keyboard doesn't have this key. + * @throws NotImplementedException + * if this method is not implemented. + */ + public boolean getLockingKeyState(int a0) throws UnsupportedOperationException, + org.apache.harmony.luni.util.NotImplementedException { lockAWT(); try { } finally { @@ -781,9 +834,8 @@ public abstract class Toolkit { * custom cursor. * * @return the maximum cursor colors. - * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public int getMaximumCursorColors() throws HeadlessException { lockAWT(); @@ -796,11 +848,10 @@ public abstract class Toolkit { /** * Gets the menu shortcut key mask. - * - * @return the menu shortcut key mask. * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @return the menu shortcut key mask. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public int getMenuShortcutKeyMask() throws HeadlessException { lockAWT(); @@ -814,12 +865,11 @@ public abstract class Toolkit { /** * Gets the screen insets. * - * @param gc the GraphicsConfiguration. - * + * @param gc + * the GraphicsConfiguration. * @return the insets of this toolkit. - * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public Insets getScreenInsets(GraphicsConfiguration gc) throws HeadlessException { if (gc == null) { @@ -827,17 +877,17 @@ public abstract class Toolkit { } lockAWT(); try { - return new Insets(0, 0, 0, 0); //TODO: get real screen insets + return new Insets(0, 0, 0, 0); // TODO: get real screen insets } finally { unlockAWT(); } } /** - * Gets the system EventQueue instance. - * If the default implementation of checkAwtEventQueueAccess is used, - * then this results of a call to the security manager's checkPermission - * method with an AWTPermission("accessEventQueue") permission. + * Gets the system EventQueue instance. If the default implementation of + * checkAwtEventQueueAccess is used, then this results of a call to the + * security manager's checkPermission method with an + * AWTPermission("accessEventQueue") permission. * * @return the system EventQueue instance. */ @@ -849,19 +899,20 @@ public abstract class Toolkit { return getSystemEventQueueImpl(); } - /** + /** * Gets the system event queue core. * - * @return the system event queue core + * @return the system event queue core. */ EventQueueCore getSystemEventQueueCore() { return systemEventQueueCore; } - + /** * Sets the system event queue core. * - * @param core the new system event queue core + * @param core + * the new system event queue core. */ void setSystemEventQueueCore(EventQueueCore core) { systemEventQueueCore = core; @@ -882,11 +933,10 @@ public abstract class Toolkit { /** * Checks if dynamic layout of Containers is active or not. * - * @return true, if is dynamic layout of Containers is active, - * false otherwise. - * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @return true, if is dynamic layout of Containers is active, false + * otherwise. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public boolean isDynamicLayoutActive() throws HeadlessException { lockAWT(); @@ -898,17 +948,15 @@ public abstract class Toolkit { } } - /** - * Returns if the layout of Containers is checked dynamically during resizing, - * or statically after resizing is completed. - * - * @return true, if if the layout of Containers is checked dynamically during - * resizing; false, if the layout of Containers is checked statically after - * resizing is completed. + * Returns if the layout of Containers is checked dynamically during + * resizing, or statically after resizing is completed. * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @return true, if if the layout of Containers is checked dynamically + * during resizing; false, if the layout of Containers is checked + * statically after resizing is completed. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ protected boolean isDynamicLayoutSet() throws HeadlessException { lockAWT(); @@ -922,12 +970,11 @@ public abstract class Toolkit { /** * Checks if the specified frame state is supported by Toolkit or not. * - * @param state the frame state. - * - * @return true, if frame state is supported; false othrwise. - * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @param state + * the frame state. + * @return true, if frame state is supported, false otherwise. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public boolean isFrameStateSupported(int state) throws HeadlessException { lockAWT(); @@ -941,8 +988,8 @@ public abstract class Toolkit { /** * Loads the value of the desktop property with the specified property name. * - * @param propName the property name. - * + * @param propName + * the property name. * @return the desktop property values. */ protected Object lazilyLoadDesktopProperty(String propName) { @@ -952,11 +999,11 @@ public abstract class Toolkit { /** * Loads the current system color values to the specified array. * - * @param colors the array where the current system color values - * are written by this method. - * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @param colors + * the array where the current system color values are written by + * this method. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ protected void loadSystemColors(int[] colors) throws HeadlessException { lockAWT(); @@ -969,8 +1016,10 @@ public abstract class Toolkit { /** * Sets the value of the desktop property with the specified name. * - * @param propName the property's name. - * @param value the property's value. + * @param propName + * the property's name. + * @param value + * the property's value. */ protected final void setDesktopProperty(String propName, Object value) { Object oldVal; @@ -986,15 +1035,15 @@ public abstract class Toolkit { } /** - * Sets the layout state, whether the Container layout is checked - * dynamically during resizing, or statically after resizing is completed. - * - * @param dynamic the new dynamic layout state - if true the layout of - * Containers is checked dynamically during resizing, if false - - * statically after resizing is completed. + * Sets the layout state, whether the Container layout is checked + * dynamically during resizing, or statically after resizing is completed. * - * @throws HeadlessException if the GraphicsEnvironment.isHeadless() - * method returns true. + * @param dynamic + * the new dynamic layout state - if true the layout of + * Containers is checked dynamically during resizing, if false - + * statically after resizing is completed. + * @throws HeadlessException + * if the GraphicsEnvironment.isHeadless() method returns true. */ public void setDynamicLayout(boolean dynamic) throws HeadlessException { lockAWT(); @@ -1008,16 +1057,20 @@ public abstract class Toolkit { /** * Sets the locking key state for the specified key code. * - * @param a0 the key code: VK_CAPS_LOCK, VK_NUM_LOCK, VK_SCROLL_LOCK, - * or VK_KANA_LOCK. - * @param a1 the state - true to set the specified key code to the locked state, - * false - to unlock it. - * - * @throws UnsupportedOperationException if the state of this key - * can't be set, or if the keyboard doesn't have this key. - * @throws NotImplementedException if this method is not implemented. - */ - public void setLockingKeyState(int a0, boolean a1) throws UnsupportedOperationException, org.apache.harmony.luni.util.NotImplementedException { + * @param a0 + * the key code: VK_CAPS_LOCK, VK_NUM_LOCK, VK_SCROLL_LOCK, or + * VK_KANA_LOCK. + * @param a1 + * the state - true to set the specified key code to the locked + * state, false - to unlock it. + * @throws UnsupportedOperationException + * if the state of this key can't be set, or if the keyboard + * doesn't have this key. + * @throws NotImplementedException + * if this method is not implemented. + */ + public void setLockingKeyState(int a0, boolean a1) throws UnsupportedOperationException, + org.apache.harmony.luni.util.NotImplementedException { lockAWT(); try { } finally { @@ -1029,7 +1082,6 @@ public abstract class Toolkit { return; } - /** * On queue empty. */ @@ -1040,14 +1092,14 @@ public abstract class Toolkit { /** * Creates the wtk. * - * @param clsName the cls name - * - * @return the wTK + * @param clsName + * the cls name. + * @return the wTK. */ private WTK createWTK(String clsName) { WTK newWTK = null; try { - newWTK = (WTK) Class.forName(clsName).newInstance(); + newWTK = (WTK)Class.forName(clsName).newInstance(); } catch (Exception e) { throw new RuntimeException(e); } @@ -1056,7 +1108,9 @@ public abstract class Toolkit { /** * Connect the component to its native window - * @param winId - id of native window just created + * + * @param winId + * the id of native window just created. */ boolean onWindowCreated(long winId) { return false; @@ -1065,45 +1119,50 @@ public abstract class Toolkit { /** * Gets the native event queue. * - * @return the native event queue + * @return the native event queue. */ NativeEventQueue getNativeEventQueue() { return wtk.getNativeEventQueue(); } /** - * Returns a shared instance of implementation of org.apache.harmony.awt.wtk.NativeCursor - * for current platform for + * Returns a shared instance of implementation of + * org.apache.harmony.awt.wtk.NativeCursor for current platform for. * - * @param type - Java Cursor type - * - * @return new instance of implementation of NativeCursor + * @param type + * the Java Cursor type. + * @return new instance of implementation of NativeCursor. */ NativeCursor createNativeCursor(int type) { return wtk.getCursorFactory().getCursor(type); } /** - * Returns a shared instance of implementation of org.apache.harmony.awt.wtk.NativeCursor - * for current platform for custom cursor - * - * @param img the img - * @param hotSpot the hot spot - * @param name the name + * Returns a shared instance of implementation of + * org.apache.harmony.awt.wtk.NativeCursor for current platform for custom + * cursor * - * @return new instance of implementation of NativeCursor + * @param img + * the img. + * @param hotSpot + * the hot spot. + * @param name + * the name. + * @return new instance of implementation of NativeCursor. */ NativeCursor createCustomNativeCursor(Image img, Point hotSpot, String name) { return wtk.getCursorFactory().createCustomCursor(img, hotSpot.x, hotSpot.y); } /** - * Adds an AWTEventListener to the Toolkit to listen for events - * of types corresponding to bits in the specified event mask. - * Event masks are defined in AWTEvent class. + * Adds an AWTEventListener to the Toolkit to listen for events of types + * corresponding to bits in the specified event mask. Event masks are + * defined in AWTEvent class. * - * @param listener the AWTEventListener. - * @param eventMask he bitmask of event types. + * @param listener + * the AWTEventListener. + * @param eventMask + * the bitmask of event types. */ public void addAWTEventListener(AWTEventListener listener, long eventMask) { lockAWT(); @@ -1119,9 +1178,10 @@ public abstract class Toolkit { } /** - * Removes the specified awt event listener. + * Removes the specified AWT event listener. * - * @param listener the AWTEventListener to be removed. + * @param listener + * the AWTEventListener to be removed. */ public void removeAWTEventListener(AWTEventListener listener) { lockAWT(); @@ -1139,7 +1199,8 @@ public abstract class Toolkit { /** * Gets the array of all AWT event listeners registered with this Toolkit. * - * @return the array of all AWT event listeners registered with this Toolkit. + * @return the array of all AWT event listeners registered with this + * Toolkit. */ public AWTEventListener[] getAWTEventListeners() { lockAWT(); @@ -1155,13 +1216,13 @@ public abstract class Toolkit { } /** - * Returns the array of the AWT event listeners registered with this Toolkit + * Returns the array of the AWT event listeners registered with this Toolkit * for the event types corresponding to the specified event mask. * - * @param eventMask the bit mask of event type. - * - * @return the array of the AWT event listeners registered in this Toolkit - * for the event types corresponding to the specified event mask. + * @param eventMask + * the bit mask of event type. + * @return the array of the AWT event listeners registered in this Toolkit + * for the event types corresponding to the specified event mask. */ public AWTEventListener[] getAWTEventListeners(long eventMask) { lockAWT(); @@ -1177,30 +1238,37 @@ public abstract class Toolkit { } /** - * Dispatch awt event. + * Dispatch AWT event. * - * @param event the event + * @param event + * the event. */ void dispatchAWTEvent(AWTEvent event) { awtEventsManager.dispatchAWTEvent(event); } - + /** * The Class AWTEventsManager. */ final class AWTEventsManager { - /** The permission. */ + /** + * The permission. + */ AWTPermission permission = new AWTPermission("listenToAllAWTEvents"); //$NON-NLS-1$ - /** The listeners. */ + /** + * The listeners. + */ private final AWTListenerList listeners = new AWTListenerList(); /** - * Adds the awt event listener. + * Adds the AWT event listener. * - * @param listener the listener - * @param eventMask the event mask + * @param listener + * the listener. + * @param eventMask + * the event mask. */ void addAWTEventListener(AWTEventListener listener, long eventMask) { if (listener != null) { @@ -1209,9 +1277,10 @@ public abstract class Toolkit { } /** - * Removes the awt event listener. + * Removes the AWT event listener. * - * @param listener the listener + * @param listener + * the listener. */ void removeAWTEventListener(AWTEventListener listener) { if (listener != null) { @@ -1225,9 +1294,9 @@ public abstract class Toolkit { } /** - * Gets the aWT event listeners. + * Gets the AWT event listeners. * - * @return the aWT event listeners + * @return the AWT event listeners. */ AWTEventListener[] getAWTEventListeners() { HashSet listenersSet = new HashSet(); @@ -1238,11 +1307,11 @@ public abstract class Toolkit { } /** - * Gets the aWT event listeners. + * Gets the AWT event listeners. * - * @param eventMask the event mask - * - * @return the aWT event listeners + * @param eventMask + * the event mask. + * @return the AWT event listeners. */ AWTEventListener[] getAWTEventListeners(long eventMask) { HashSet listenersSet = new HashSet(); @@ -1255,9 +1324,10 @@ public abstract class Toolkit { } /** - * Dispatch awt event. + * Dispatch AWT event. * - * @param event the event + * @param event + * the event. */ void dispatchAWTEvent(AWTEvent event) { AWTEvent.EventDescriptor descriptor = eventTypeLookup.getEventDescriptor(event); @@ -1271,68 +1341,104 @@ public abstract class Toolkit { } } } - + /** * The Class AutoNumber. */ static final class AutoNumber { - /** The next component. */ + /** + * The next component. + */ int nextComponent = 0; - /** The next canvas. */ + /** + * The next canvas. + */ int nextCanvas = 0; - /** The next panel. */ + /** + * The next panel. + */ int nextPanel = 0; - /** The next window. */ + /** + * The next window. + */ int nextWindow = 0; - /** The next frame. */ + /** + * The next frame. + */ int nextFrame = 0; - /** The next dialog. */ + /** + * The next dialog. + */ int nextDialog = 0; - /** The next button. */ + /** + * The next button. + */ int nextButton = 0; - /** The next menu component. */ + /** + * The next menu component. + */ int nextMenuComponent = 0; - /** The next label. */ + /** + * The next label. + */ int nextLabel = 0; - /** The next check box. */ + /** + * The next check box. + */ int nextCheckBox = 0; - /** The next scrollbar. */ + /** + * The next scrollbar. + */ int nextScrollbar = 0; - /** The next scroll pane. */ + /** + * The next scroll pane. + */ int nextScrollPane = 0; - /** The next list. */ + /** + * The next list. + */ int nextList = 0; - /** The next choice. */ + /** + * The next choice. + */ int nextChoice = 0; - /** The next file dialog. */ + /** + * The next file dialog. + */ int nextFileDialog = 0; - /** The next text area. */ + /** + * The next text area. + */ int nextTextArea = 0; - /** The next text field. */ + /** + * The next text field. + */ int nextTextField = 0; } - + private class Lock { } - /** The lock. */ + /** + * The lock. + */ private final Object lock = new Lock(); - + } diff --git a/awt/java/awt/Transparency.java b/awt/java/awt/Transparency.java index 97931141aa..44a1e7f2e4 100644 --- a/awt/java/awt/Transparency.java +++ b/awt/java/awt/Transparency.java @@ -18,34 +18,40 @@ * @author Pavel Dolgov * @version $Revision$ */ + package java.awt; /** * The Transparency interface defines transparency's general modes. + * + * @since Android 1.0 */ public interface Transparency { - /** The Constant OPAQUE represents completely opaque data, - * all pixels have an alpha value of 1.0. + /** + * The Constant OPAQUE represents completely opaque data, all pixels have an + * alpha value of 1.0. */ public static final int OPAQUE = 1; - /** The Constant BITMASK represents data which can be either - * completely opaque, with an alpha value of 1.0, or completely - * transparent, with an alpha value of 0.0. + /** + * The Constant BITMASK represents data which can be either completely + * opaque, with an alpha value of 1.0, or completely transparent, with an + * alpha value of 0.0. */ public static final int BITMASK = 2; - /** The Constant TRANSLUCENT represents data which alpha value - * can vary between and including 0.0 and 1.0. */ + /** + * The Constant TRANSLUCENT represents data which alpha value can vary + * between and including 0.0 and 1.0. + */ public static final int TRANSLUCENT = 3; /** * Gets the transparency mode. * - * @return the transparency mode: OPAQUE, BITMASK or TRANSLUCENT. + * @return the transparency mode: OPAQUE, BITMASK or TRANSLUCENT. */ public int getTransparency(); } - diff --git a/awt/java/awt/color/CMMException.java b/awt/java/awt/color/CMMException.java index 16fe76eae9..18b9a7e563 100644 --- a/awt/java/awt/color/CMMException.java +++ b/awt/java/awt/color/CMMException.java @@ -21,18 +21,22 @@ package java.awt.color; /** - * The CMMException is thrown as soon as a native CMM error - * occures. + * The CMMException is thrown as soon as a native CMM error occurs. + * + * @since Android 1.0 */ public class CMMException extends java.lang.RuntimeException { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 5775558044142994965L; /** * Instantiates a new CMM exception with detail message. * - * @param s the String - detail message. + * @param s + * the detail message of the exception. */ public CMMException (String s) { super (s); diff --git a/awt/java/awt/color/ColorSpace.java b/awt/java/awt/color/ColorSpace.java index f961514106..44c491b749 100644 --- a/awt/java/awt/color/ColorSpace.java +++ b/awt/java/awt/color/ColorSpace.java @@ -26,131 +26,209 @@ import org.apache.harmony.awt.gl.color.LUTColorConverter; import org.apache.harmony.awt.internal.nls.Messages; /** - * The ColorSpace class defines a color space type for a Color and provides methods - * for arrays of color component operations. + * The ColorSpace class defines a color space type for a Color and provides + * methods for arrays of color component operations. + * + * @since Android 1.0 */ public abstract class ColorSpace implements Serializable { /** The Constant serialVersionUID. */ private static final long serialVersionUID = -409452704308689724L; - /** The Constant TYPE_XYZ indicates XYZ color space type. */ + /** + * The Constant TYPE_XYZ indicates XYZ color space type. + */ public static final int TYPE_XYZ = 0; - /** The Constant TYPE_Lab indicates Lab color space type. */ + /** + * The Constant TYPE_Lab indicates Lab color space type. + */ public static final int TYPE_Lab = 1; - /** The Constant TYPE_Luv indicates Luv color space type. */ + /** + * The Constant TYPE_Luv indicates Luv color space type. + */ public static final int TYPE_Luv = 2; - /** The Constant TYPE_YCbCr indicates YCbCr color space type. */ + /** + * The Constant TYPE_YCbCr indicates YCbCr color space type. + */ public static final int TYPE_YCbCr = 3; - /** The Constant TYPE_Yxy indicates Yxy color space type. */ + /** + * The Constant TYPE_Yxy indicates Yxy color space type. + */ public static final int TYPE_Yxy = 4; - /** The Constant TYPE_RGB indicates RGB color space type. */ + /** + * The Constant TYPE_RGB indicates RGB color space type. + */ public static final int TYPE_RGB = 5; - /** The Constant TYPE_GRAY indicates Gray color space type. */ + /** + * The Constant TYPE_GRAY indicates Gray color space type. + */ public static final int TYPE_GRAY = 6; - /** The Constant TYPE_HSV indicates HSV color space type. */ + /** + * The Constant TYPE_HSV indicates HSV color space type. + */ public static final int TYPE_HSV = 7; - /** The Constant TYPE_HLS indicates HLS color space type. */ + /** + * The Constant TYPE_HLS indicates HLS color space type. + */ public static final int TYPE_HLS = 8; - /** The Constant TYPE_CMYK indicates CMYK color space type. */ + /** + * The Constant TYPE_CMYK indicates CMYK color space type. + */ public static final int TYPE_CMYK = 9; - /** The Constant TYPE_CMY indicates CMY color space type. */ + /** + * The Constant TYPE_CMY indicates CMY color space type. + */ public static final int TYPE_CMY = 11; - /** The Constant TYPE_2CLR indicates color spaces with 2 components. */ + /** + * The Constant TYPE_2CLR indicates color spaces with 2 components. + */ public static final int TYPE_2CLR = 12; - /** The Constant TYPE_3CLR indicates color spaces with 3 components. */ + /** + * The Constant TYPE_3CLR indicates color spaces with 3 components. + */ public static final int TYPE_3CLR = 13; - /** The Constant TYPE_4CLR indicates color spaces with 4 components. */ + /** + * The Constant TYPE_4CLR indicates color spaces with 4 components. + */ public static final int TYPE_4CLR = 14; - /** The Constant TYPE_5CLR indicates color spaces with 5 components. */ + /** + * The Constant TYPE_5CLR indicates color spaces with 5 components. + */ public static final int TYPE_5CLR = 15; - /** The Constant TYPE_6CLR indicates color spaces with 6 components. */ + /** + * The Constant TYPE_6CLR indicates color spaces with 6 components. + */ public static final int TYPE_6CLR = 16; - /** The Constant TYPE_7CLR indicates color spaces with 7 components. */ + /** + * The Constant TYPE_7CLR indicates color spaces with 7 components. + */ public static final int TYPE_7CLR = 17; - /** The Constant TYPE_8CLR indicates color spaces with 8 components. */ + /** + * The Constant TYPE_8CLR indicates color spaces with 8 components. + */ public static final int TYPE_8CLR = 18; - /** The Constant TYPE_9CLR indicates color spaces with 9 components. */ + /** + * The Constant TYPE_9CLR indicates color spaces with 9 components. + */ public static final int TYPE_9CLR = 19; - /** The Constant TYPE_ACLR indicates color spaces with 10 components. */ + /** + * The Constant TYPE_ACLR indicates color spaces with 10 components. + */ public static final int TYPE_ACLR = 20; - /** The Constant TYPE_BCLR indicates color spaces with 11 components. */ + /** + * The Constant TYPE_BCLR indicates color spaces with 11 components. + */ public static final int TYPE_BCLR = 21; - /** The Constant TYPE_CCLR indicates color spaces with 12 components. */ + /** + * The Constant TYPE_CCLR indicates color spaces with 12 components. + */ public static final int TYPE_CCLR = 22; - /** The Constant TYPE_DCLR indicates color spaces with 13 components. */ + /** + * The Constant TYPE_DCLR indicates color spaces with 13 components. + */ public static final int TYPE_DCLR = 23; - /** The Constant TYPE_ECLR indicates color spaces with 14 components. */ + /** + * The Constant TYPE_ECLR indicates color spaces with 14 components. + */ public static final int TYPE_ECLR = 24; - /** The Constant TYPE_FCLR indicates color spaces with 15 components. */ + /** + * The Constant TYPE_FCLR indicates color spaces with 15 components. + */ public static final int TYPE_FCLR = 25; - /** The Constant CS_sRGB indicates standard RGB color space.*/ + /** + * The Constant CS_sRGB indicates standard RGB color space. + */ public static final int CS_sRGB = 1000; - /** The Constant CS_LINEAR_RGB indicates linear RGB color space. */ + /** + * The Constant CS_LINEAR_RGB indicates linear RGB color space. + */ public static final int CS_LINEAR_RGB = 1004; - /** The Constant CS_CIEXYZ indicates CIEXYZ conversion color space. */ + /** + * The Constant CS_CIEXYZ indicates CIEXYZ conversion color space. + */ public static final int CS_CIEXYZ = 1001; - /** The Constant CS_PYCC indicates Photo YCC conversion color space. */ + /** + * The Constant CS_PYCC indicates Photo YCC conversion color space. + */ public static final int CS_PYCC = 1002; - /** The Constant CS_GRAY indicates linear gray scale color space. */ + /** + * The Constant CS_GRAY indicates linear gray scale color space. + */ public static final int CS_GRAY = 1003; - /** The cs_ gray. */ + /** + * The cs_ gray. + */ private static ColorSpace cs_Gray = null; - /** The cs_ pycc. */ + /** + * The cs_ pycc. + */ private static ColorSpace cs_PYCC = null; - /** The cs_ ciexyz. */ + /** + * The cs_ ciexyz. + */ private static ColorSpace cs_CIEXYZ = null; - /** The cs_ lrgb. */ + /** + * The cs_ lrgb. + */ private static ColorSpace cs_LRGB = null; - /** The cs_s rgb. */ + /** + * The cs_s rgb. + */ private static ColorSpace cs_sRGB = null; - /** The type. */ + /** + * The type. + */ private int type; - /** The num components. */ + /** + * The num components. + */ private int numComponents; /** - * Instantiates a ColorSpace with the specified - * ColorSpace type and number of components. + * Instantiates a ColorSpace with the specified ColorSpace type and number + * of components. * - * @param type the type of color space. - * @param numcomponents the number of components. + * @param type + * the type of color space. + * @param numcomponents + * the number of components. */ protected ColorSpace(int type, int numcomponents) { this.numComponents = numcomponents; @@ -160,8 +238,8 @@ public abstract class ColorSpace implements Serializable { /** * Gets the name of the component for the specified component index. * - * @param idx the index of the component. - * + * @param idx + * the index of the component. * @return the name of the component. */ public String getName(int idx) { @@ -174,56 +252,54 @@ public abstract class ColorSpace implements Serializable { } /** - * Perform transformation a color from this ColorSpace - * into the RGB color space. - * - * @param colorvalue the color value in this ColorSpace. + * Performs the transformation of a color from this ColorSpace into the RGB + * color space. * - * @return the float array with color components in the - * RGB color space. + * @param colorvalue + * the color value in this ColorSpace. + * @return the float array with color components in the RGB color space. */ public abstract float[] toRGB(float[] colorvalue); /** - * Perform transformation a color from this ColorSpace - * into the CS_CIEXYZ color space. + * Performs the transformation of a color from this ColorSpace into the + * CS_CIEXYZ color space. * - * @param colorvalue the color value in this ColorSpace. - * - * @return the float array with color components in the - * CS_CIEXYZ color space. + * @param colorvalue + * the color value in this ColorSpace. + * @return the float array with color components in the CS_CIEXYZ color + * space. */ public abstract float[] toCIEXYZ(float[] colorvalue); /** - * Performs color transformation from the RGB color space - * into this ColorSpace. + * Performs the transformation of a color from the RGB color space into this + * ColorSpace. * - * @param rgbvalue a float array in the RGB color space. - * - * @return the float[] an array of transformed color - * components. + * @param rgbvalue + * the float array representing a color in the RGB color space. + * @return the float array with the transformed color components. */ public abstract float[] fromRGB(float[] rgbvalue); /** - * Performs color transformation from the CS_CIEXYZ color space + * Performs the transformation of a color from the CS_CIEXYZ color space * into this ColorSpace. * - * @param colorvalue a float array in the CS_CIEXYZ color space. - * - * @return the float[] an array of transformed color - * components. + * @param colorvalue + * the float array representing a color in the CS_CIEXYZ color + * space. + * @return the float array with the transformed color components. */ public abstract float[] fromCIEXYZ(float[] colorvalue); /** - * Gets the minimum normalized color component value for - * the specified component. - * - * @param component the component. + * Gets the minimum normalized color component value for the specified + * component. * - * @return the miniimum normalized value of the component. + * @param component + * the component to determine the minimum value. + * @return the minimum normalized value of the component. */ public float getMinValue(int component) { if (component < 0 || component > numComponents - 1) { @@ -234,11 +310,11 @@ public abstract class ColorSpace implements Serializable { } /** - * Gets the maximum normalized color component value for - * the specified component. - * - * @param component the component. + * Gets the maximum normalized color component value for the specified + * component. * + * @param component + * the component to determine the maximum value. * @return the maximum normalized value of the component. */ public float getMaxValue(int component) { @@ -252,8 +328,7 @@ public abstract class ColorSpace implements Serializable { /** * Checks if this ColorSpace has CS_sRGB type or not. * - * @return true, if this ColorSpace has CS_sRGB type, - * false otherwise. + * @return true, if this ColorSpace has CS_sRGB type, false otherwise. */ public boolean isCS_sRGB() { // If our color space is sRGB, then cs_sRGB @@ -281,12 +356,11 @@ public abstract class ColorSpace implements Serializable { /** - * Gets the single instance of ColorSpace with the specified - * ColorSpace: CS_sRGB, CS_LINEAR_RGB, CS_CIEXYZ, CS_GRAY, - * or CS_PYCC. - * - * @param colorspace the identifier of the specified Colorspace. + * Gets the single instance of ColorSpace with the specified ColorSpace: + * CS_sRGB, CS_LINEAR_RGB, CS_CIEXYZ, CS_GRAY, or CS_PYCC. * + * @param colorspace + * the identifier of the specified Colorspace. * @return the single instance of the desired ColorSpace. */ public static ColorSpace getInstance(int colorspace) { diff --git a/awt/java/awt/color/ICC_ColorSpace.java b/awt/java/awt/color/ICC_ColorSpace.java index 5ece2efe19..5b4d7e99f5 100644 --- a/awt/java/awt/color/ICC_ColorSpace.java +++ b/awt/java/awt/color/ICC_ColorSpace.java @@ -28,19 +28,24 @@ import org.apache.harmony.awt.internal.nls.Messages; import java.io.*; /** - * ICC_ColorSpace class implements ColorSpace abstract class and - * represents device independent and device dependent color spaces. - * This color space is based on the International Color Consortium - * Specification (ICC) File Format for Color Profiles: - * http://www.color.org + * This class implements the abstract class ColorSpace and represents device + * independent and device dependent color spaces. This color space is based on + * the International Color Consortium Specification (ICC) File Format for Color + * Profiles: http://www.color.org + * + * @since Android 1.0 */ public class ICC_ColorSpace extends ColorSpace { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 3455889114070431483L; // Need to keep compatibility with serialized form - /** The Constant serialPersistentFields. */ + /** + * The Constant serialPersistentFields. + */ private static final ObjectStreamField[] serialPersistentFields = { new ObjectStreamField("thisProfile", ICC_Profile.class), //$NON-NLS-1$ @@ -53,63 +58,94 @@ public class ICC_ColorSpace extends ColorSpace { /** - * According to ICC specification (from http://www.color.org) - * "For the CIEXYZ encoding, each component (X, Y, and Z) - * is encoded as a u1Fixed15Number". - * This means that max value for this encoding is 1 + (32767/32768) - */ + * According to ICC specification (from http://www.color.org) "For the + * CIEXYZ encoding, each component (X, Y, and Z) is encoded as a + * u1Fixed15Number". This means that max value for this encoding is 1 + + * (32767/32768) + */ private static final float MAX_XYZ = 1f + (32767f/32768f); - /** The Constant MAX_SHORT. */ + /** + * The Constant MAX_SHORT. + */ private static final float MAX_SHORT = 65535f; - /** The Constant INV_MAX_SHORT. */ + /** + * The Constant INV_MAX_SHORT. + */ private static final float INV_MAX_SHORT = 1f/MAX_SHORT; - /** The Constant SHORT2XYZ_FACTOR. */ + /** + * The Constant SHORT2XYZ_FACTOR. + */ private static final float SHORT2XYZ_FACTOR = MAX_XYZ/MAX_SHORT; - /** The Constant XYZ2SHORT_FACTOR. */ + /** + * The Constant XYZ2SHORT_FACTOR. + */ private static final float XYZ2SHORT_FACTOR = MAX_SHORT/MAX_XYZ; - /** The profile. */ + /** + * The profile. + */ private ICC_Profile profile = null; - /** The min values. */ + /** + * The min values. + */ private float minValues[] = null; - /** The max values. */ + /** + * The max values. + */ private float maxValues[] = null; // cache transforms here - performance gain - /** The to rgb transform. */ + /** + * The to rgb transform. + */ private ICC_Transform toRGBTransform = null; - /** The from rgb transform. */ + /** + * The from rgb transform. + */ private ICC_Transform fromRGBTransform = null; - /** The to xyz transform. */ + /** + * The to xyz transform. + */ private ICC_Transform toXYZTransform = null; - /** The from xyz transform. */ + /** + * The from xyz transform. + */ private ICC_Transform fromXYZTransform = null; - /** The converter. */ + /** + * The converter. + */ private final ColorConverter converter = new ColorConverter(); - /** The scaler. */ + /** + * The scaler. + */ private final ColorScaler scaler = new ColorScaler(); - /** The scaling data loaded. */ + /** + * The scaling data loaded. + */ private boolean scalingDataLoaded = false; - /** The resolved deserialized inst. */ + /** + * The resolved deserialized inst. + */ private ICC_ColorSpace resolvedDeserializedInst; /** * Instantiates a new ICC color space from an ICC_Profile object. * - * @param pf the ICC_Profile object. + * @param pf + * the ICC_Profile object. */ public ICC_ColorSpace(ICC_Profile pf) { super(pf.getColorSpaceType(), pf.getNumComponents()); @@ -132,7 +168,7 @@ public class ICC_ColorSpace extends ColorSpace { } /** - * Returns the ICC_Profile for this ICC_ColorSpace. + * Gets the ICC_Profile for this ICC_ColorSpace. * * @return the ICC_Profile for this ICC_ColorSpace. */ @@ -144,6 +180,14 @@ public class ICC_ColorSpace extends ColorSpace { return profile; } + /** + * Performs the transformation of a color from this ColorSpace into the RGB + * color space. + * + * @param colorvalue + * the color value in this ColorSpace. + * @return the float array with color components in the RGB color space. + */ @Override public float[] toRGB(float[] colorvalue) { if (toRGBTransform == null) { @@ -174,6 +218,15 @@ public class ICC_ColorSpace extends ColorSpace { return res; } + /** + * Performs the transformation of a color from this ColorSpace into the + * CS_CIEXYZ color space. + * + * @param colorvalue + * the color value in this ColorSpace. + * @return the float array with color components in the CS_CIEXYZ color + * space. + */ @Override public float[] toCIEXYZ(float[] colorvalue) { if (toXYZTransform == null) { @@ -212,6 +265,14 @@ public class ICC_ColorSpace extends ColorSpace { return res; } + /** + * Performs the transformation of a color from the RGB color space into this + * ColorSpace. + * + * @param rgbvalue + * the float array representing a color in the RGB color space. + * @return the float array with the transformed color components. + */ @Override public float[] fromRGB(float[] rgbvalue) { if (fromRGBTransform == null) { @@ -241,6 +302,15 @@ public class ICC_ColorSpace extends ColorSpace { return res; } + /** + * Performs the transformation of a color from the CS_CIEXYZ color space + * into this ColorSpace. + * + * @param xyzvalue + * the float array representing a color in the CS_CIEXYZ color + * space. + * @return the float array with the transformed color components. + */ @Override public float[] fromCIEXYZ(float[] xyzvalue) { if (fromXYZTransform == null) { @@ -279,6 +349,14 @@ public class ICC_ColorSpace extends ColorSpace { return res; } + /** + * Gets the minimum normalized color component value for the specified + * component. + * + * @param component + * the component to determine the minimum value. + * @return the minimum normalized value of the component. + */ @Override public float getMinValue(int component) { if ((component < 0) || (component > this.getNumComponents() - 1)) { @@ -289,6 +367,14 @@ public class ICC_ColorSpace extends ColorSpace { return minValues[component]; } + /** + * Gets the maximum normalized color component value for the specified + * component. + * + * @param component + * the component to determine the maximum value. + * @return the maximum normalized value of the component. + */ @Override public float getMaxValue(int component) { if ((component < 0) || (component > this.getNumComponents() - 1)) { @@ -334,9 +420,10 @@ public class ICC_ColorSpace extends ColorSpace { /** * Write object. * - * @param out the out - * - * @throws IOException Signals that an I/O exception has occurred. + * @param out + * the out + * @throws IOException + * Signals that an I/O exception has occurred. */ private void writeObject(ObjectOutputStream out) throws IOException { ObjectOutputStream.PutField fields = out.putFields(); @@ -354,10 +441,12 @@ public class ICC_ColorSpace extends ColorSpace { /** * Read object. * - * @param in the in - * - * @throws IOException Signals that an I/O exception has occurred. - * @throws ClassNotFoundException the class not found exception + * @param in + * the in + * @throws IOException + * Signals that an I/O exception has occurred. + * @throws ClassNotFoundException + * the class not found exception */ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { ObjectInputStream.GetField fields = in.readFields(); @@ -369,8 +458,8 @@ public class ICC_ColorSpace extends ColorSpace { * Read resolve. * * @return the object - * - * @throws ObjectStreamException the object stream exception + * @throws ObjectStreamException + * the object stream exception */ Object readResolve() throws ObjectStreamException { return resolvedDeserializedInst; diff --git a/awt/java/awt/color/ICC_Profile.java b/awt/java/awt/color/ICC_Profile.java index ad704e05ea..8ffee6c4b3 100644 --- a/awt/java/awt/color/ICC_Profile.java +++ b/awt/java/awt/color/ICC_Profile.java @@ -18,6 +18,7 @@ * @author Oleg V. Khaschansky * @version $Revision$ */ + package java.awt.color; import java.io.File; @@ -40,427 +41,681 @@ import org.apache.harmony.awt.gl.color.NativeCMM; import org.apache.harmony.awt.internal.nls.Messages; /** - * The ICC_Profile class represents a color profile data for color spaces - * based on the International Color Consortium Specification ICC.1:2001-12, - * File Format for Color Profiles. + * The ICC_Profile class represents a color profile data for color spaces based + * on the International Color Consortium Specification ICC.1:2001-12, File + * Format for Color Profiles. + * + * @since Android 1.0 */ public class ICC_Profile implements Serializable { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -3938515861990936766L; // NOTE: Constant field values are noted in 1.5 specification. /** - * The Constant CLASS_INPUT indicates that profile class is input. + * The Constant CLASS_INPUT indicates that profile class is input. */ public static final int CLASS_INPUT = 0; - /** - * The Constant CLASS_DISPLAY indicates that profile class is display. + /** + * The Constant CLASS_DISPLAY indicates that profile class is display. */ public static final int CLASS_DISPLAY = 1; - /** - * The Constant CLASS_OUTPUT indicates that profile class is output. + /** + * The Constant CLASS_OUTPUT indicates that profile class is output. */ public static final int CLASS_OUTPUT = 2; - /** - * The Constant CLASS_DEVICELINK indicates that profile class - * is device link. + /** + * The Constant CLASS_DEVICELINK indicates that profile class is device + * link. */ public static final int CLASS_DEVICELINK = 3; - /** - * The Constant CLASS_COLORSPACECONVERSION indicates that profile class - * is color space conversion. + /** + * The Constant CLASS_COLORSPACECONVERSION indicates that profile class is + * color space conversion. */ public static final int CLASS_COLORSPACECONVERSION = 4; - /** The Constant CLASS_ABSTRACT indicates that profile class is abstract. */ + /** + * The Constant CLASS_ABSTRACT indicates that profile class is abstract. + */ public static final int CLASS_ABSTRACT = 5; - /** - * The Constant CLASS_NAMEDCOLOR indicates that profile class - * is named color. + /** + * The Constant CLASS_NAMEDCOLOR indicates that profile class is named + * color. */ public static final int CLASS_NAMEDCOLOR = 6; - /** The Constant icSigXYZData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigXYZData - ICC Profile Color Space Type Signature. + */ public static final int icSigXYZData = 1482250784; - /** The Constant icSigLabData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigLabData - ICC Profile Color Space Type Signature. + */ public static final int icSigLabData = 1281450528; - /** The Constant icSigLuvData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigLuvData - ICC Profile Color Space Type Signature. + */ public static final int icSigLuvData = 1282766368; - /** The Constant icSigYCbCrData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigYCbCrData - ICC Profile Color Space Type Signature. + */ public static final int icSigYCbCrData = 1497588338; - /** The Constant icSigYxyData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigYxyData - ICC Profile Color Space Type Signature. + */ public static final int icSigYxyData = 1501067552; - /** The Constant icSigRgbData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigRgbData - ICC Profile Color Space Type Signature. + */ public static final int icSigRgbData = 1380401696; - /** The Constant icSigGrayData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigGrayData - ICC Profile Color Space Type Signature. + */ public static final int icSigGrayData = 1196573017; - /** The Constant icSigHsvData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigHsvData - ICC Profile Color Space Type Signature. + */ public static final int icSigHsvData = 1213421088; - /** The Constant icSigHlsData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigHlsData - ICC Profile Color Space Type Signature. + */ public static final int icSigHlsData = 1212961568; - /** The Constant icSigCmykData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigCmykData - ICC Profile Color Space Type Signature. + */ public static final int icSigCmykData = 1129142603; - /** The Constant icSigCmyData - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigCmyData - ICC Profile Color Space Type Signature. + */ public static final int icSigCmyData = 1129142560; - /** The Constant icSigSpace2CLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpace2CLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpace2CLR = 843271250; - /** The Constant icSigSpace3CLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpace3CLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpace3CLR = 860048466; - /** The Constant icSigSpace4CLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpace4CLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpace4CLR = 876825682; - /** The Constant icSigSpace5CLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpace5CLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpace5CLR = 893602898; - /** The Constant icSigSpace6CLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpace6CLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpace6CLR = 910380114; - /** The Constant icSigSpace7CLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpace7CLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpace7CLR = 927157330; - /** The Constant icSigSpace8CLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpace8CLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpace8CLR = 943934546; - /** The Constant icSigSpace9CLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpace9CLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpace9CLR = 960711762; - /** The Constant icSigSpaceACLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpaceACLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpaceACLR = 1094929490; - /** The Constant icSigSpaceBCLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpaceBCLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpaceBCLR = 1111706706; - /** The Constant icSigSpaceCCLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpaceCCLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpaceCCLR = 1128483922; - /** The Constant icSigSpaceDCLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpaceDCLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpaceDCLR = 1145261138; - /** The Constant icSigSpaceECLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpaceECLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpaceECLR = 1162038354; - /** The Constant icSigSpaceFCLR - ICC Profile Color Space Type Signature. */ + /** + * The Constant icSigSpaceFCLR - ICC Profile Color Space Type Signature. + */ public static final int icSigSpaceFCLR = 1178815570; - /** The Constant icSigInputClass - ICC Profile Class Signature. */ + /** + * The Constant icSigInputClass - ICC Profile Class Signature. + */ public static final int icSigInputClass = 1935896178; - /** The Constant icSigDisplayClass - ICC Profile Class Signature. */ + /** + * The Constant icSigDisplayClass - ICC Profile Class Signature. + */ public static final int icSigDisplayClass = 1835955314; - /** The Constant icSigOutputClass - ICC Profile Class Signature. */ + /** + * The Constant icSigOutputClass - ICC Profile Class Signature. + */ public static final int icSigOutputClass = 1886549106; - /** The Constant icSigLinkClass - ICC Profile Class Signature. */ + /** + * The Constant icSigLinkClass - ICC Profile Class Signature. + */ public static final int icSigLinkClass = 1818848875; - /** The Constant icSigAbstractClass - ICC Profile Class Signature. */ + /** + * The Constant icSigAbstractClass - ICC Profile Class Signature. + */ public static final int icSigAbstractClass = 1633842036; - /** The Constant icSigColorantOrderTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigColorantOrderTag - ICC Profile Tag Signature. + */ public static final int icSigColorantOrderTag = 1668051567; - /** The Constant icSigColorantTableTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigColorantTableTag - ICC Profile Tag Signature. + */ public static final int icSigColorantTableTag = 1668051572; - /** The Constant icSigColorSpaceClass - ICC Profile Tag Signature. */ + /** + * The Constant icSigColorSpaceClass - ICC Profile Tag Signature. + */ public static final int icSigColorSpaceClass = 1936744803; - /** The Constant icSigNamedColorClass - ICC Profile Tag Signature. */ + /** + * The Constant icSigNamedColorClass - ICC Profile Tag Signature. + */ public static final int icSigNamedColorClass = 1852662636; - /** The Constant icPerceptual - ICC Profile Rendering Intent. */ + /** + * The Constant icPerceptual - ICC Profile Rendering Intent. + */ public static final int icPerceptual = 0; - /** The Constant icRelativeColorimetric - ICC Profile Rendering Intent. */ + /** + * The Constant icRelativeColorimetric - ICC Profile Rendering Intent. + */ public static final int icRelativeColorimetric = 1; - /** The Constant icSaturation - ICC Profile Rendering Intent. */ + /** + * The Constant icSaturation - ICC Profile Rendering Intent. + */ public static final int icSaturation = 2; - /** The Constant icAbsoluteColorimetric - ICC Profile Rendering Intent. */ + /** + * The Constant icAbsoluteColorimetric - ICC Profile Rendering Intent. + */ public static final int icAbsoluteColorimetric = 3; - /** The Constant icSigHead - ICC Profile Tag Signature. */ + /** + * The Constant icSigHead - ICC Profile Tag Signature. + */ public static final int icSigHead = 1751474532; - /** The Constant icSigAToB0Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigAToB0Tag - ICC Profile Tag Signature. + */ public static final int icSigAToB0Tag = 1093812784; - /** The Constant icSigAToB1Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigAToB1Tag - ICC Profile Tag Signature. + */ public static final int icSigAToB1Tag = 1093812785; - /** The Constant icSigAToB2Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigAToB2Tag - ICC Profile Tag Signature. + */ public static final int icSigAToB2Tag = 1093812786; - /** The Constant icSigBlueColorantTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigBlueColorantTag - ICC Profile Tag Signature. + */ public static final int icSigBlueColorantTag = 1649957210; - /** The Constant icSigBlueMatrixColumnTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigBlueMatrixColumnTag - ICC Profile Tag Signature. + */ public static final int icSigBlueMatrixColumnTag = 1649957210; - /** The Constant icSigBlueTRCTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigBlueTRCTag - ICC Profile Tag Signature. + */ public static final int icSigBlueTRCTag = 1649693251; - /** The Constant icSigBToA0Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigBToA0Tag - ICC Profile Tag Signature. + */ public static final int icSigBToA0Tag = 1110589744; - /** The Constant icSigBToA1Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigBToA1Tag - ICC Profile Tag Signature. + */ public static final int icSigBToA1Tag = 1110589745; - /** The Constant icSigBToA2Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigBToA2Tag - ICC Profile Tag Signature. + */ public static final int icSigBToA2Tag = 1110589746; - /** The Constant icSigCalibrationDateTimeTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigCalibrationDateTimeTag - ICC Profile Tag Signature. + */ public static final int icSigCalibrationDateTimeTag = 1667329140; - /** The Constant icSigCharTargetTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigCharTargetTag - ICC Profile Tag Signature. + */ public static final int icSigCharTargetTag = 1952543335; - /** The Constant icSigCopyrightTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigCopyrightTag - ICC Profile Tag Signature. + */ public static final int icSigCopyrightTag = 1668313716; - /** The Constant icSigCrdInfoTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigCrdInfoTag - ICC Profile Tag Signature. + */ public static final int icSigCrdInfoTag = 1668441193; - /** The Constant icSigDeviceMfgDescTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigDeviceMfgDescTag - ICC Profile Tag Signature. + */ public static final int icSigDeviceMfgDescTag = 1684893284; - /** The Constant icSigDeviceModelDescTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigDeviceModelDescTag - ICC Profile Tag Signature. + */ public static final int icSigDeviceModelDescTag = 1684890724; - /** The Constant icSigDeviceSettingsTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigDeviceSettingsTag - ICC Profile Tag Signature. + */ public static final int icSigDeviceSettingsTag = 1684371059; - /** The Constant icSigGamutTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigGamutTag - ICC Profile Tag Signature. + */ public static final int icSigGamutTag = 1734438260; - /** The Constant icSigGrayTRCTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigGrayTRCTag - ICC Profile Tag Signature. + */ public static final int icSigGrayTRCTag = 1800688195; - /** The Constant icSigGreenColorantTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigGreenColorantTag - ICC Profile Tag Signature. + */ public static final int icSigGreenColorantTag = 1733843290; - /** The Constant icSigGreenMatrixColumnTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigGreenMatrixColumnTag - ICC Profile Tag Signature. + */ public static final int icSigGreenMatrixColumnTag = 1733843290; - /** The Constant icSigGreenTRCTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigGreenTRCTag - ICC Profile Tag Signature. + */ public static final int icSigGreenTRCTag = 1733579331; - /** The Constant icSigLuminanceTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigLuminanceTag - ICC Profile Tag Signature. + */ public static final int icSigLuminanceTag = 1819635049; - /** The Constant icSigMeasurementTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigMeasurementTag - ICC Profile Tag Signature. + */ public static final int icSigMeasurementTag = 1835360627; - /** The Constant icSigMediaBlackPointTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigMediaBlackPointTag - ICC Profile Tag Signature. + */ public static final int icSigMediaBlackPointTag = 1651208308; - /** The Constant icSigMediaWhitePointTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigMediaWhitePointTag - ICC Profile Tag Signature. + */ public static final int icSigMediaWhitePointTag = 2004119668; - /** The Constant icSigNamedColor2Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigNamedColor2Tag - ICC Profile Tag Signature. + */ public static final int icSigNamedColor2Tag = 1852009522; - /** The Constant icSigOutputResponseTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigOutputResponseTag - ICC Profile Tag Signature. + */ public static final int icSigOutputResponseTag = 1919251312; - /** The Constant icSigPreview0Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPreview0Tag - ICC Profile Tag Signature. + */ public static final int icSigPreview0Tag = 1886545200; - /** The Constant icSigPreview1Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPreview1Tag - ICC Profile Tag Signature. + */ public static final int icSigPreview1Tag = 1886545201; - /** The Constant icSigPreview2Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPreview2Tag - ICC Profile Tag Signature. + */ public static final int icSigPreview2Tag = 1886545202; - /** The Constant icSigProfileDescriptionTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigProfileDescriptionTag - ICC Profile Tag Signature. + */ public static final int icSigProfileDescriptionTag = 1684370275; - /** The Constant icSigProfileSequenceDescTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigProfileSequenceDescTag - ICC Profile Tag Signature. + */ public static final int icSigProfileSequenceDescTag = 1886610801; - /** The Constant icSigPs2CRD0Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPs2CRD0Tag - ICC Profile Tag Signature. + */ public static final int icSigPs2CRD0Tag = 1886610480; - /** The Constant icSigPs2CRD1Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPs2CRD1Tag - ICC Profile Tag Signature. + */ public static final int icSigPs2CRD1Tag = 1886610481; - /** The Constant icSigPs2CRD2Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPs2CRD2Tag - ICC Profile Tag Signature. + */ public static final int icSigPs2CRD2Tag = 1886610482; - /** The Constant icSigPs2CRD3Tag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPs2CRD3Tag - ICC Profile Tag Signature. + */ public static final int icSigPs2CRD3Tag = 1886610483; - /** The Constant icSigPs2CSATag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPs2CSATag - ICC Profile Tag Signature. + */ public static final int icSigPs2CSATag = 1886597747; - /** The Constant icSigPs2RenderingIntentTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigPs2RenderingIntentTag - ICC Profile Tag Signature. + */ public static final int icSigPs2RenderingIntentTag = 1886597737; - /** The Constant icSigRedColorantTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigRedColorantTag - ICC Profile Tag Signature. + */ public static final int icSigRedColorantTag = 1918392666; - /** The Constant icSigRedMatrixColumnTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigRedMatrixColumnTag - ICC Profile Tag Signature. + */ public static final int icSigRedMatrixColumnTag = 1918392666; - /** The Constant icSigRedTRCTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigRedTRCTag - ICC Profile Tag Signature. + */ public static final int icSigRedTRCTag = 1918128707; - /** The Constant icSigScreeningDescTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigScreeningDescTag - ICC Profile Tag Signature. + */ public static final int icSigScreeningDescTag = 1935897188; - /** The Constant icSigScreeningTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigScreeningTag - ICC Profile Tag Signature. + */ public static final int icSigScreeningTag = 1935897198; - /** The Constant icSigTechnologyTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigTechnologyTag - ICC Profile Tag Signature. + */ public static final int icSigTechnologyTag = 1952801640; - /** The Constant icSigUcrBgTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigUcrBgTag - ICC Profile Tag Signature. + */ public static final int icSigUcrBgTag = 1650877472; - /** The Constant icSigViewingCondDescTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigViewingCondDescTag - ICC Profile Tag Signature. + */ public static final int icSigViewingCondDescTag = 1987405156; - /** The Constant icSigViewingConditionsTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigViewingConditionsTag - ICC Profile Tag Signature. + */ public static final int icSigViewingConditionsTag = 1986618743; - /** The Constant icSigChromaticAdaptationTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigChromaticAdaptationTag - ICC Profile Tag Signature. + */ public static final int icSigChromaticAdaptationTag = 1667785060; - /** The Constant icSigChromaticityTag - ICC Profile Tag Signature. */ + /** + * The Constant icSigChromaticityTag - ICC Profile Tag Signature. + */ public static final int icSigChromaticityTag = 1667789421; - /** The Constant icHdrSize - ICC Profile Header Location. */ + /** + * The Constant icHdrSize - ICC Profile Header Location. + */ public static final int icHdrSize = 0; - /** The Constant icHdrCmmId - ICC Profile Header Location. */ + /** + * The Constant icHdrCmmId - ICC Profile Header Location. + */ public static final int icHdrCmmId = 4; - /** The Constant icHdrVersion - ICC Profile Header Location. */ + /** + * The Constant icHdrVersion - ICC Profile Header Location. + */ public static final int icHdrVersion = 8; - /** The Constant icHdrDeviceClass - ICC Profile Header Location. */ + /** + * The Constant icHdrDeviceClass - ICC Profile Header Location. + */ public static final int icHdrDeviceClass = 12; - /** The Constant icHdrColorSpace - ICC Profile Header Location. */ + /** + * The Constant icHdrColorSpace - ICC Profile Header Location. + */ public static final int icHdrColorSpace = 16; - /** The Constant icHdrPcs - ICC Profile Header Location. */ + /** + * The Constant icHdrPcs - ICC Profile Header Location. + */ public static final int icHdrPcs = 20; - /** The Constant icHdrDate - ICC Profile Header Location. */ + /** + * The Constant icHdrDate - ICC Profile Header Location. + */ public static final int icHdrDate = 24; - /** The Constant icHdrMagic - ICC Profile Header Location. */ + /** + * The Constant icHdrMagic - ICC Profile Header Location. + */ public static final int icHdrMagic = 36; - /** The Constant icHdrPlatform - ICC Profile Header Location. */ + /** + * The Constant icHdrPlatform - ICC Profile Header Location. + */ public static final int icHdrPlatform = 40; - /** The Constant icHdrProfileID - ICC Profile Header Location. */ + /** + * The Constant icHdrProfileID - ICC Profile Header Location. + */ public static final int icHdrProfileID = 84; - /** The Constant icHdrFlags - ICC Profile Header Location. */ + /** + * The Constant icHdrFlags - ICC Profile Header Location. + */ public static final int icHdrFlags = 44; - /** The Constant icHdrManufacturer - ICC Profile Header Location. */ + /** + * The Constant icHdrManufacturer - ICC Profile Header Location. + */ public static final int icHdrManufacturer = 48; - /** The Constant icHdrModel - ICC Profile Header Location. */ + /** + * The Constant icHdrModel - ICC Profile Header Location. + */ public static final int icHdrModel = 52; - /** The Constant icHdrAttributes - ICC Profile Header Location. */ + /** + * The Constant icHdrAttributes - ICC Profile Header Location. + */ public static final int icHdrAttributes = 56; - /** The Constant icHdrRenderingIntent - ICC Profile Header Location. */ + /** + * The Constant icHdrRenderingIntent - ICC Profile Header Location. + */ public static final int icHdrRenderingIntent = 64; - /** The Constant icHdrIlluminant - ICC Profile Header Location. */ + /** + * The Constant icHdrIlluminant - ICC Profile Header Location. + */ public static final int icHdrIlluminant = 68; - /** The Constant icHdrCreator - ICC Profile Header Location. */ + /** + * The Constant icHdrCreator - ICC Profile Header Location. + */ public static final int icHdrCreator = 80; - /** The Constant icICCAbsoluteColorimetric - ICC Profile Rendering Intent. */ + /** + * The Constant icICCAbsoluteColorimetric - ICC Profile Rendering Intent. + */ public static final int icICCAbsoluteColorimetric = 3; - /** The Constant icMediaRelativeColorimetric - ICC Profile Rendering Intent. */ + /** + * The Constant icMediaRelativeColorimetric - ICC Profile Rendering Intent. + */ public static final int icMediaRelativeColorimetric = 1; - /** The Constant icTagType - ICC Profile Constant. */ + /** + * The Constant icTagType - ICC Profile Constant. + */ public static final int icTagType = 0; - /** The Constant icTagReserved - ICC Profile Constant. */ + /** + * The Constant icTagReserved - ICC Profile Constant. + */ public static final int icTagReserved = 4; - /** The Constant icCurveCount - ICC Profile Constant. */ + /** + * The Constant icCurveCount - ICC Profile Constant. + */ public static final int icCurveCount = 8; - /** The Constant icCurveData - ICC Profile Constant. */ + /** + * The Constant icCurveData - ICC Profile Constant. + */ public static final int icCurveData = 12; - /** The Constant icXYZNumberX - ICC Profile Constant. */ + /** + * The Constant icXYZNumberX - ICC Profile Constant. + */ public static final int icXYZNumberX = 8; - /** Size of a profile header. */ + /** + * Size of a profile header. + */ private static final int headerSize = 128; - /** header magic number. */ + /** + * header magic number. + */ private static final int headerMagicNumber = 0x61637370; // Cache of predefined profiles - /** The s rgb profile. */ + /** + * The s rgb profile. + */ private static ICC_Profile sRGBProfile; - - /** The xyz profile. */ + + /** + * The xyz profile. + */ private static ICC_Profile xyzProfile; - - /** The gray profile. */ + + /** + * The gray profile. + */ private static ICC_Profile grayProfile; - - /** The pycc profile. */ + + /** + * The pycc profile. + */ private static ICC_Profile pyccProfile; - - /** The linear rgb profile. */ + + /** + * The linear rgb profile. + */ private static ICC_Profile linearRGBProfile; - /** Handle to the current profile. */ + /** + * Handle to the current profile. + */ private transient long profileHandle = 0; - /** If handle is used by another class this object is not responsible for closing profile. */ + /** + * If handle is used by another class this object is not responsible for + * closing profile. + */ private transient boolean handleStolen = false; - /** Cached header data. */ + /** + * Cached header data. + */ private transient byte[] headerData = null; - /** Serialization support. */ + /** + * Serialization support. + */ private transient ICC_Profile openedProfileObject; /** - * Instantiates a new iC c_ profile. + * Instantiates a new ICC profile with the given data. * - * @param data the data + * @param data + * the data. */ private ICC_Profile(byte[] data) { profileHandle = NativeCMM.cmmOpenProfile(data); @@ -476,7 +731,8 @@ public class ICC_Profile implements Serializable { /** * Used to instantiate subclasses (ICC_ProfileGrey and ICC_ProfileRGB). * - * @param profileHandle - should be valid handle to opened color profile + * @param profileHandle + * - should be valid handle to opened color profile */ ICC_Profile(long profileHandle) { this.profileHandle = profileHandle; @@ -487,10 +743,11 @@ public class ICC_Profile implements Serializable { /** * Writes the ICC_Profile to a file with the specified name. * - * @param fileName the file name. - * - * @throws IOException signals that an I/O exception has occurred during - * writing or opening the file. + * @param fileName + * the file name. + * @throws IOException + * if an I/O exception has occurred during writing or opening + * the file. */ public void write(String fileName) throws IOException { FileOutputStream oStream = new FileOutputStream(fileName); @@ -501,9 +758,10 @@ public class ICC_Profile implements Serializable { /** * Serializable implementation. * - * @param s the s - * - * @throws IOException Signals that an I/O exception has occurred. + * @param s + * the s + * @throws IOException + * Signals that an I/O exception has occurred. */ private void writeObject(ObjectOutputStream s) throws IOException { s.defaultWriteObject(); @@ -514,10 +772,12 @@ public class ICC_Profile implements Serializable { /** * Serializable implementation. * - * @param s the s - * - * @throws IOException Signals that an I/O exception has occurred. - * @throws ClassNotFoundException the class not found exception + * @param s + * the s + * @throws IOException + * Signals that an I/O exception has occurred. + * @throws ClassNotFoundException + * the class not found exception */ private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { s.defaultReadObject(); @@ -547,9 +807,9 @@ public class ICC_Profile implements Serializable { * Resolves instances being deserialized into instances registered with CMM. * * @return ICC_Profile object for profile registered with CMM. - * - * @throws ObjectStreamException if there is an error in the serialized - * files or during the process of reading them. + * @throws ObjectStreamException + * if there is an error in the serialized files or during the + * process of reading them. */ protected Object readResolve() throws ObjectStreamException { return openedProfileObject; @@ -558,20 +818,23 @@ public class ICC_Profile implements Serializable { /** * Writes the ICC_Profile to an OutputStream. * - * @param s the OutputStream. - * - * @throws IOException signals that an I/O exception has occurred during - * writing or opening OutputStream. + * @param s + * the OutputStream. + * @throws IOException + * signals that an I/O exception has occurred during writing or + * opening OutputStream. */ public void write(OutputStream s) throws IOException { s.write(getData()); } /** - * Sets a tagged data element in the profile from a byte array. + * Sets a tagged data element in the profile from a byte array. * - * @param tagSignature the ICC tag signature for the data element to be set. - * @param tagData the data to be set for the specified tag signature. + * @param tagSignature + * the ICC tag signature for the data element to be set. + * @param tagData + * the data to be set for the specified tag signature. */ public void setData(int tagSignature, byte[] tagData) { NativeCMM.cmmSetProfileElement(profileHandle, tagSignature, tagData); @@ -582,21 +845,17 @@ public class ICC_Profile implements Serializable { } /** - * Gets a tagged data element from the profile as a byte array. - * Elements are identified by tag signatures as defined in - * the ICC specification. - * - * @param tagSignature the ICC tag signature for the data element to get. + * Gets a tagged data element from the profile as a byte array. Elements are + * identified by tag signatures as defined in the ICC specification. * + * @param tagSignature + * the ICC tag signature for the data element to get. * @return a byte array that contains the tagged data element. */ public byte[] getData(int tagSignature) { int tagSize = 0; try { - tagSize = NativeCMM.cmmGetProfileElementSize( - profileHandle, - tagSignature - ); + tagSize = NativeCMM.cmmGetProfileElementSize(profileHandle, tagSignature); } catch (CMMException e) { // We'll get this exception if there's no element with // the specified tag signature @@ -625,7 +884,7 @@ public class ICC_Profile implements Serializable { */ @Override protected void finalize() { - if (profileHandle!=0 && !handleStolen) { + if (profileHandle != 0 && !handleStolen) { NativeCMM.cmmCloseProfile(profileHandle); } @@ -663,16 +922,16 @@ public class ICC_Profile implements Serializable { // Not an ICC profile class // awt.15F=Profile class does not comply with ICC specification throw new IllegalArgumentException(Messages.getString("awt.15F")); //$NON-NLS-1$ - + } /** - * Returns the color space type of the Profile Connection Space (PCS). + * Gets the color space type of the Profile Connection Space (PCS). * * @return the PCS type. */ public int getPCSType() { - return csFromSignature(getIntFromHeader(icHdrPcs)); + return csFromSignature(getIntFromHeader(icHdrPcs)); } /** @@ -740,7 +999,7 @@ public class ICC_Profile implements Serializable { * @return the minor version of this ICC profile. */ public int getMinorVersion() { - return getByteFromHeader(icHdrVersion+1); + return getByteFromHeader(icHdrVersion + 1); } /** @@ -762,13 +1021,14 @@ public class ICC_Profile implements Serializable { } /** - * Tries to open file at the specified path. Path entries can be - * divided by a separator character. + * Tries to open the file at the specified path. Path entries can be divided + * by a separator character. * - * @param path the path - * @param fileName the file name - * - * @return the file input stream + * @param path + * the path to the file. + * @param fileName + * the file name. + * @return the input stream to read the file. */ private static FileInputStream tryPath(String path, String fileName) { FileInputStream fiStream = null; @@ -786,7 +1046,8 @@ public class ICC_Profile implements Serializable { if (fiStream != null) { return fiStream; } - } catch (FileNotFoundException e) {} + } catch (FileNotFoundException e) { + } } return fiStream; @@ -795,18 +1056,18 @@ public class ICC_Profile implements Serializable { /** * Gets the single instance of ICC_Profile from data in the specified file. * - * @param fileName the specified name of file with ICC profile data. - * + * @param fileName + * the specified name of file with ICC profile data. * @return single instance of ICC_Profile. - * - * @throws IOException signals that an I/O error occured while reading the file - * or the file doesn't exist. + * @throws IOException + * signals that an I/O error occurred while reading the file or + * the file does not exist. */ public static ICC_Profile getInstance(String fileName) throws IOException { final String fName = fileName; // to use in the privileged block - FileInputStream fiStream = (FileInputStream) AccessController.doPrivileged( - new PrivilegedAction() { + FileInputStream fiStream = (FileInputStream)AccessController + .doPrivileged(new PrivilegedAction() { public FileInputStream run() { FileInputStream fiStream = null; @@ -816,7 +1077,8 @@ public class ICC_Profile implements Serializable { if (fiStream != null) { return fiStream; } - } catch (FileNotFoundException e) {} + } catch (FileNotFoundException e) { + } // Check java.iccprofile.path entries fiStream = tryPath(System.getProperty("java.iccprofile.path"), fName); //$NON-NLS-1$ @@ -833,9 +1095,8 @@ public class ICC_Profile implements Serializable { // Check directory with java sample profiles String home = System.getProperty("java.home"); //$NON-NLS-1$ if (home != null) { - fiStream = tryPath( - home + File.separatorChar + - "lib" + File.separatorChar + "cmm", fName //$NON-NLS-1$ //$NON-NLS-2$ + fiStream = tryPath(home + File.separatorChar + + "lib" + File.separatorChar + "cmm", fName //$NON-NLS-1$ //$NON-NLS-2$ ); } @@ -854,17 +1115,17 @@ public class ICC_Profile implements Serializable { } /** - * Gets the single instance of ICC_Profile with data in - * the specified InputStream. - * - * @param s the InputStream with ICC profile data. + * Gets the single instance of ICC_Profile with data in the specified + * InputStream. * + * @param s + * the InputStream with ICC profile data. * @return single instance of ICC_Profile. - * - * @throws IOException if an I/O exception has occurred during reading - * from InputStream. - * @throws IllegalArgumentException if the file does not contain valid - * ICC Profile data. + * @throws IOException + * if an I/O exception has occurred during reading from + * InputStream. + * @throws IllegalArgumentException + * if the file does not contain valid ICC Profile data. */ public static ICC_Profile getInstance(InputStream s) throws IOException { byte[] header = new byte[headerSize]; @@ -877,10 +1138,7 @@ public class ICC_Profile implements Serializable { } // Check the profile data for consistency - if ( - ICC_ProfileHelper.getBigEndianFromByteArray(header, icHdrMagic) != - headerMagicNumber - ) { + if (ICC_ProfileHelper.getBigEndianFromByteArray(header, icHdrMagic) != headerMagicNumber) { throw new IllegalArgumentException(invalidDataMessage); } @@ -892,10 +1150,7 @@ public class ICC_Profile implements Serializable { System.arraycopy(header, 0, profileData, 0, headerSize); // Read the profile itself - if ( - s.read(profileData, headerSize, profileSize - headerSize) != - profileSize - headerSize - ) { + if (s.read(profileData, headerSize, profileSize - headerSize) != profileSize - headerSize) { throw new IllegalArgumentException(invalidDataMessage); } @@ -903,16 +1158,15 @@ public class ICC_Profile implements Serializable { } /** - * Gets the single instance of ICC_Profile from the specified data in - * a byte array. + * Gets the single instance of ICC_Profile from the specified data in a byte + * array. * - * @param data the byte array of ICC profile. - * - * @return single instance of ICC_Profile from the specified data in - * a byte array. - * - * @throws IllegalArgumentException if the file does not contain valid - * ICC Profile data. + * @param data + * the byte array of ICC profile. + * @return single instance of ICC_Profile from the specified data in a byte + * array. + * @throws IllegalArgumentException + * if the file does not contain valid ICC Profile data. */ public static ICC_Profile getInstance(byte[] data) { ICC_Profile res = null; @@ -924,29 +1178,28 @@ public class ICC_Profile implements Serializable { throw new IllegalArgumentException(Messages.getString("awt.162")); //$NON-NLS-1$ } - if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) { //$NON-NLS-1$ //$NON-NLS-2$ - try { - if ( res.getColorSpaceType () == ColorSpace.TYPE_RGB && - res.getDataSize(icSigMediaWhitePointTag) > 0 && - res.getDataSize(icSigRedColorantTag) > 0 && - res.getDataSize(icSigGreenColorantTag) > 0 && - res.getDataSize(icSigBlueColorantTag) > 0 && - res.getDataSize(icSigRedTRCTag) > 0 && - res.getDataSize(icSigGreenTRCTag) > 0 && - res.getDataSize(icSigBlueTRCTag) > 0 - ) { - res = new ICC_ProfileRGB(res.getProfileHandle()); - } else if ( res.getColorSpaceType () == ColorSpace.TYPE_GRAY && - res.getDataSize(icSigMediaWhitePointTag) > 0 && - res.getDataSize(icSigGrayTRCTag) > 0 - ) { - res = new ICC_ProfileGray (res.getProfileHandle()); - } + if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) { //$NON-NLS-1$ //$NON-NLS-2$ + try { + if (res.getColorSpaceType() == ColorSpace.TYPE_RGB + && res.getDataSize(icSigMediaWhitePointTag) > 0 + && res.getDataSize(icSigRedColorantTag) > 0 + && res.getDataSize(icSigGreenColorantTag) > 0 + && res.getDataSize(icSigBlueColorantTag) > 0 + && res.getDataSize(icSigRedTRCTag) > 0 + && res.getDataSize(icSigGreenTRCTag) > 0 + && res.getDataSize(icSigBlueTRCTag) > 0) { + res = new ICC_ProfileRGB(res.getProfileHandle()); + } else if (res.getColorSpaceType() == ColorSpace.TYPE_GRAY + && res.getDataSize(icSigMediaWhitePointTag) > 0 + && res.getDataSize(icSigGrayTRCTag) > 0) { + res = new ICC_ProfileGray(res.getProfileHandle()); + } - } catch (CMMException e) { /* return res in this case */ } - } + } catch (CMMException e) { /* return res in this case */ + } + } - return res; + return res; } /** @@ -954,80 +1207,77 @@ public class ICC_Profile implements Serializable { * defined by the ColorSpace class: CS_sRGB, CS_LINEAR_RGB, CS_CIEXYZ, * CS_PYCC, CS_GRAY. * - * @param cspace the type of color space defined in the ColorSpace class. - * + * @param cspace + * the type of color space defined in the ColorSpace class. * @return single instance of ICC_Profile. - * - * @throws IllegalArgumentException is not one of the defined color - * space types. + * @throws IllegalArgumentException + * is not one of the defined color space types. */ public static ICC_Profile getInstance(int cspace) { - try { - switch (cspace) { + try { + switch (cspace) { - case ColorSpace.CS_sRGB: - if (sRGBProfile == null) { - sRGBProfile = getInstance("sRGB.pf"); //$NON-NLS-1$ - } - return sRGBProfile; + case ColorSpace.CS_sRGB: + if (sRGBProfile == null) { + sRGBProfile = getInstance("sRGB.pf"); //$NON-NLS-1$ + } + return sRGBProfile; - case ColorSpace.CS_CIEXYZ: - if (xyzProfile == null) { - xyzProfile = getInstance("CIEXYZ.pf"); //$NON-NLS-1$ - } - return xyzProfile; + case ColorSpace.CS_CIEXYZ: + if (xyzProfile == null) { + xyzProfile = getInstance("CIEXYZ.pf"); //$NON-NLS-1$ + } + return xyzProfile; - case ColorSpace.CS_GRAY: - if (grayProfile == null) { - grayProfile = getInstance("GRAY.pf"); //$NON-NLS-1$ - } - return grayProfile; + case ColorSpace.CS_GRAY: + if (grayProfile == null) { + grayProfile = getInstance("GRAY.pf"); //$NON-NLS-1$ + } + return grayProfile; - case ColorSpace.CS_PYCC: - if (pyccProfile == null) { - pyccProfile = getInstance("PYCC.pf"); //$NON-NLS-1$ - } - return pyccProfile; + case ColorSpace.CS_PYCC: + if (pyccProfile == null) { + pyccProfile = getInstance("PYCC.pf"); //$NON-NLS-1$ + } + return pyccProfile; - case ColorSpace.CS_LINEAR_RGB: - if (linearRGBProfile == null) { - linearRGBProfile = getInstance("LINEAR_RGB.pf"); //$NON-NLS-1$ + case ColorSpace.CS_LINEAR_RGB: + if (linearRGBProfile == null) { + linearRGBProfile = getInstance("LINEAR_RGB.pf"); //$NON-NLS-1$ + } + return linearRGBProfile; + } + + } catch (IOException e) { + // awt.163=Can't open color profile + throw new IllegalArgumentException(Messages.getString("Can't open color profile")); //$NON-NLS-1$ } - return linearRGBProfile; - } - } catch (IOException e) { - // awt.163=Can't open color profile - throw new IllegalArgumentException(Messages.getString("Can't open color profile")); //$NON-NLS-1$ + // awt.164=Not a predefined color space + throw new IllegalArgumentException(Messages.getString("Not a predefined color space")); //$NON-NLS-1$ } - // awt.164=Not a predefined color space - throw new IllegalArgumentException(Messages.getString("Not a predefined color space")); //$NON-NLS-1$ - } - /** * Reads an integer from the profile header at the specified position. * - * @param idx - offset in bytes from the beginning of the header - * - * @return the int from header + * @param idx + * - offset in bytes from the beginning of the header + * @return the integer value from header */ private int getIntFromHeader(int idx) { if (headerData == null) { headerData = getData(icSigHead); } - return ((headerData[idx] & 0xFF) << 24)| - ((headerData[idx+1] & 0xFF) << 16)| - ((headerData[idx+2] & 0xFF) << 8) | - ((headerData[idx+3] & 0xFF)); + return ((headerData[idx] & 0xFF) << 24) | ((headerData[idx + 1] & 0xFF) << 16) + | ((headerData[idx + 2] & 0xFF) << 8) | ((headerData[idx + 3] & 0xFF)); } /** * Reads byte from the profile header at the specified position. * - * @param idx - offset in bytes from the beginning of the header - * + * @param idx + * - offset in bytes from the beginning of the header * @return the byte from header */ private byte getByteFromHeader(int idx) { @@ -1039,11 +1289,11 @@ public class ICC_Profile implements Serializable { } /** - * Converts ICC color space signature to the java predefined - * color space type. - * - * @param signature the signature + * Converts ICC color space signature to the java predefined color space + * type. * + * @param signature + * the signature * @return the int */ private int csFromSignature(int signature) { @@ -1102,7 +1352,7 @@ public class ICC_Profile implements Serializable { } // awt.165=Color space doesn't comply with ICC specification - throw new IllegalArgumentException (Messages.getString("awt.165")); //$NON-NLS-1$ + throw new IllegalArgumentException(Messages.getString("awt.165")); //$NON-NLS-1$ } /** @@ -1118,22 +1368,19 @@ public class ICC_Profile implements Serializable { /** * Gets the data size. * - * @param tagSignature the tag signature - * + * @param tagSignature + * the tag signature * @return the data size */ private int getDataSize(int tagSignature) { - return NativeCMM.cmmGetProfileElementSize( - profileHandle, - tagSignature - ); + return NativeCMM.cmmGetProfileElementSize(profileHandle, tagSignature); } /** * Reads XYZ value from the tag data. * - * @param tagSignature the tag signature - * + * @param tagSignature + * the tag signature * @return the XYZ value */ float[] getXYZValue(int tagSignature) { @@ -1153,20 +1400,20 @@ public class ICC_Profile implements Serializable { /** * Gets the media white point. * - * @return the media white point + * @return the media white point. */ float[] getMediaWhitePoint() { return getXYZValue(icSigMediaWhitePointTag); } /** - * If TRC is not a table returns gamma via return value - * and sets dataTRC to null. If TRC is a table returns 0 - * and fills dataTRC with values. - * - * @param tagSignature the tag signature - * @param dataTRC the data trc + * If TRC is not a table returns gamma via return value and sets dataTRC to + * null. If TRC is a table returns 0 and fills dataTRC with values. * + * @param tagSignature + * the tag signature + * @param dataTRC + * the data trc * @return - gamma or zero if TRC is a table */ private float getGammaOrTRC(int tagSignature, short[] dataTRC) { @@ -1195,8 +1442,8 @@ public class ICC_Profile implements Serializable { /** * Gets the gamma. * - * @param tagSignature the tag signature - * + * @param tagSignature + * the tag signature * @return the gamma */ float getGamma(int tagSignature) { @@ -1211,10 +1458,10 @@ public class ICC_Profile implements Serializable { } /** - * Gets the tRC. - * - * @param tagSignature the tag signature + * Gets the TRC. * + * @param tagSignature + * the tag signature * @return the tRC */ short[] getTRC(int tagSignature) { @@ -1228,4 +1475,3 @@ public class ICC_Profile implements Serializable { return dataTRC; } } - diff --git a/awt/java/awt/color/ICC_ProfileGray.java b/awt/java/awt/color/ICC_ProfileGray.java index f009b18fcd..f748101742 100644 --- a/awt/java/awt/color/ICC_ProfileGray.java +++ b/awt/java/awt/color/ICC_ProfileGray.java @@ -22,21 +22,26 @@ package java.awt.color; /** * The ICC_ProfileGray class represent profiles with TYPE_GRAY color space type, - * and includes the grayTRCTag and mediaWhitePointTag tags. + * and includes the grayTRCTag and mediaWhitePointTag tags. The gray component + * can be transformed from a GRAY device profile color space to the CIEXYZ + * Profile through the tone reproduction curve (TRC): + *

    + * PCSY = grayTRC[deviceGray] * - * The gray component can be transformed from a GRAY device profile color space - * to the CIEXYZ Profile through the tone reproduction curve (TRC): - *

    PCSY = grayTRC[deviceGray] + * @since Android 1.0 */ public class ICC_ProfileGray extends ICC_Profile { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -1124721290732002649L; /** * Instantiates a new iC c_ profile gray. * - * @param profileHandle the profile handle + * @param profileHandle + * the profile handle */ ICC_ProfileGray(long profileHandle) { super(profileHandle); @@ -45,12 +50,17 @@ public class ICC_ProfileGray extends ICC_Profile { /** * Gets the TRC as an array of shorts. * - * @return a short array of the TRC. + * @return the short array of the TRC. */ public short[] getTRC() { return super.getTRC(icSigGrayTRCTag); } + /** + * Gets the media white point. + * + * @return the media white point + */ @Override public float[] getMediaWhitePoint() { return super.getMediaWhitePoint(); diff --git a/awt/java/awt/color/ICC_ProfileRGB.java b/awt/java/awt/color/ICC_ProfileRGB.java index beb1a0c24b..9c6010fcde 100644 --- a/awt/java/awt/color/ICC_ProfileRGB.java +++ b/awt/java/awt/color/ICC_ProfileRGB.java @@ -23,38 +23,58 @@ package java.awt.color; import org.apache.harmony.awt.internal.nls.Messages; /** - * The ICC_ProfileRGB class represents profiles with RGB color space type and - * contains the redColorantTag, greenColorantTag, blueColorantTag, redTRCTag, + * The ICC_ProfileRGB class represents profiles with RGB color space type and + * contains the redColorantTag, greenColorantTag, blueColorantTag, redTRCTag, * greenTRCTag, blueTRCTag, and mediaWhitePointTag tags. + * + * @since Android 1.0 */ public class ICC_ProfileRGB extends ICC_Profile { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 8505067385152579334L; /** - * Instantiates a new iC c_ profile rgb. + * Instantiates a new RGB ICC_Profile. * - * @param profileHandle the profile handle + * @param profileHandle + * the profile handle */ ICC_ProfileRGB(long profileHandle) { super(profileHandle); } - /** The Constant REDCOMPONENT indicates the red component. */ + /** + * The Constant REDCOMPONENT indicates the red component. + */ public static final int REDCOMPONENT = 0; - /** The Constant GREENCOMPONENT indicates the green component. */ + /** + * The Constant GREENCOMPONENT indicates the green component. + */ public static final int GREENCOMPONENT = 1; - /** The Constant BLUECOMPONENT indicates the blue component. */ + /** + * The Constant BLUECOMPONENT indicates the blue component. + */ public static final int BLUECOMPONENT = 2; // awt.15E=Unknown component. Must be REDCOMPONENT, GREENCOMPONENT or BLUECOMPONENT. - /** The Constant UNKNOWN_COMPONENT_MSG. */ + /** + * The Constant UNKNOWN_COMPONENT_MSG. + */ private static final String UNKNOWN_COMPONENT_MSG = Messages .getString("awt.15E"); //$NON-NLS-1$ + /** + * Gets the TRC. + * + * @param component + * the tag signature. + * @return the TRC value. + */ @Override public short[] getTRC(int component) { switch (component) { @@ -70,6 +90,13 @@ public class ICC_ProfileRGB extends ICC_Profile { throw new IllegalArgumentException(UNKNOWN_COMPONENT_MSG); } + /** + * Gets the gamma. + * + * @param component + * the tag signature. + * @return the gamma value. + */ @Override public float getGamma(int component) { switch (component) { @@ -86,11 +113,11 @@ public class ICC_ProfileRGB extends ICC_Profile { } /** - * Gets a float matrix which contains the X, Y, and Z components of - * the profile's redColorantTag, greenColorantTag, and blueColorantTag. + * Gets a float matrix which contains the X, Y, and Z components of the + * profile's redColorantTag, greenColorantTag, and blueColorantTag. * - * @return a float matrix which contains the X, Y, and Z components of - * the profile's redColorantTag, greenColorantTag, and blueColorantTag. + * @return the float matrix which contains the X, Y, and Z components of the + * profile's redColorantTag, greenColorantTag, and blueColorantTag. */ public float[][] getMatrix() { float [][] m = new float[3][3]; // The matrix @@ -114,6 +141,11 @@ public class ICC_ProfileRGB extends ICC_Profile { return m; } + /** + * Gets the media white point. + * + * @return the media white point. + */ @Override public float[] getMediaWhitePoint() { return super.getMediaWhitePoint(); diff --git a/awt/java/awt/color/ProfileDataException.java b/awt/java/awt/color/ProfileDataException.java index ca169fe756..335f314caf 100644 --- a/awt/java/awt/color/ProfileDataException.java +++ b/awt/java/awt/color/ProfileDataException.java @@ -21,18 +21,23 @@ package java.awt.color; /** - * The ProfileDataException class represents an error which occurs - * while accessing or processing an ICC_Profile object. + * The ProfileDataException class represents an error which occurs while + * accessing or processing an ICC_Profile object. + * + * @since Android 1.0 */ public class ProfileDataException extends RuntimeException { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 7286140888240322498L; /** * Instantiates a new profile data exception with detailed message. * - * @param s the detailed message. + * @param s + * the detailed message of the exception. */ public ProfileDataException(String s) { super(s); diff --git a/awt/java/awt/color/package.html b/awt/java/awt/color/package.html new file mode 100644 index 0000000000..609d963a80 --- /dev/null +++ b/awt/java/awt/color/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes representing color spaces and profiles based on the International Color Consortium (ICC) Profile Format Specification. +

    + @since Android 1.0 + + diff --git a/awt/java/awt/event/AWTEventListener.java b/awt/java/awt/event/AWTEventListener.java index f621c9b155..76293b3a7d 100644 --- a/awt/java/awt/event/AWTEventListener.java +++ b/awt/java/awt/event/AWTEventListener.java @@ -23,6 +23,12 @@ package java.awt.event; import java.awt.AWTEvent; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface AWTEventListener extends EventListener { public void eventDispatched(AWTEvent event); diff --git a/awt/java/awt/event/AWTEventListenerProxy.java b/awt/java/awt/event/AWTEventListenerProxy.java index 5ee5e59a90..3edc41f3e6 100644 --- a/awt/java/awt/event/AWTEventListenerProxy.java +++ b/awt/java/awt/event/AWTEventListenerProxy.java @@ -26,6 +26,12 @@ import java.util.EventListenerProxy; import org.apache.harmony.awt.internal.nls.Messages; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class AWTEventListenerProxy extends EventListenerProxy implements AWTEventListener { private AWTEventListener listener; diff --git a/awt/java/awt/event/ActionEvent.java b/awt/java/awt/event/ActionEvent.java index c32fc4bd29..e882e0db9e 100644 --- a/awt/java/awt/event/ActionEvent.java +++ b/awt/java/awt/event/ActionEvent.java @@ -22,6 +22,12 @@ package java.awt.event; import java.awt.AWTEvent; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class ActionEvent extends AWTEvent { private static final long serialVersionUID = -7671078796273832149L; diff --git a/awt/java/awt/event/ActionListener.java b/awt/java/awt/event/ActionListener.java index 473d2b6828..a6eee7a165 100644 --- a/awt/java/awt/event/ActionListener.java +++ b/awt/java/awt/event/ActionListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface ActionListener extends EventListener { public void actionPerformed(ActionEvent e); diff --git a/awt/java/awt/event/AdjustmentEvent.java b/awt/java/awt/event/AdjustmentEvent.java index a2b11a8f30..be2d6c4baf 100644 --- a/awt/java/awt/event/AdjustmentEvent.java +++ b/awt/java/awt/event/AdjustmentEvent.java @@ -23,6 +23,12 @@ package java.awt.event; import java.awt.AWTEvent; import java.awt.Adjustable; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class AdjustmentEvent extends AWTEvent { private static final long serialVersionUID = 5700290645205279921L; diff --git a/awt/java/awt/event/AdjustmentListener.java b/awt/java/awt/event/AdjustmentListener.java index ef7c378635..5f6a72473f 100644 --- a/awt/java/awt/event/AdjustmentListener.java +++ b/awt/java/awt/event/AdjustmentListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface AdjustmentListener extends EventListener { public void adjustmentValueChanged(AdjustmentEvent e); diff --git a/awt/java/awt/event/ComponentAdapter.java b/awt/java/awt/event/ComponentAdapter.java index 4f0bd90fd9..c42235f967 100644 --- a/awt/java/awt/event/ComponentAdapter.java +++ b/awt/java/awt/event/ComponentAdapter.java @@ -20,6 +20,12 @@ */ package java.awt.event; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class ComponentAdapter implements ComponentListener { public ComponentAdapter() { diff --git a/awt/java/awt/event/ComponentEvent.java b/awt/java/awt/event/ComponentEvent.java index d0bca542db..760d3abf2a 100644 --- a/awt/java/awt/event/ComponentEvent.java +++ b/awt/java/awt/event/ComponentEvent.java @@ -23,6 +23,12 @@ package java.awt.event; import java.awt.AWTEvent; import java.awt.Component; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class ComponentEvent extends AWTEvent { private static final long serialVersionUID = 8101406823902992965L; diff --git a/awt/java/awt/event/ComponentListener.java b/awt/java/awt/event/ComponentListener.java index 147e9e07de..a5adba2e9b 100644 --- a/awt/java/awt/event/ComponentListener.java +++ b/awt/java/awt/event/ComponentListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface ComponentListener extends EventListener { public void componentHidden(ComponentEvent e); diff --git a/awt/java/awt/event/ContainerAdapter.java b/awt/java/awt/event/ContainerAdapter.java index 12dc3dea01..44983c7930 100644 --- a/awt/java/awt/event/ContainerAdapter.java +++ b/awt/java/awt/event/ContainerAdapter.java @@ -20,6 +20,12 @@ */ package java.awt.event; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class ContainerAdapter implements ContainerListener { public ContainerAdapter() { diff --git a/awt/java/awt/event/ContainerEvent.java b/awt/java/awt/event/ContainerEvent.java index 1a1055c4c9..372c9e4775 100644 --- a/awt/java/awt/event/ContainerEvent.java +++ b/awt/java/awt/event/ContainerEvent.java @@ -23,6 +23,12 @@ package java.awt.event; import java.awt.Component; //???AWT: import java.awt.Container; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class ContainerEvent extends ComponentEvent { private static final long serialVersionUID = -4114942250539772041L; diff --git a/awt/java/awt/event/ContainerListener.java b/awt/java/awt/event/ContainerListener.java index bf47664fc7..517859e431 100644 --- a/awt/java/awt/event/ContainerListener.java +++ b/awt/java/awt/event/ContainerListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface ContainerListener extends EventListener { public void componentAdded(ContainerEvent e); diff --git a/awt/java/awt/event/FocusAdapter.java b/awt/java/awt/event/FocusAdapter.java index 3489e110a9..3a3e37fb05 100644 --- a/awt/java/awt/event/FocusAdapter.java +++ b/awt/java/awt/event/FocusAdapter.java @@ -20,6 +20,12 @@ */ package java.awt.event; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class FocusAdapter implements FocusListener { public FocusAdapter() { diff --git a/awt/java/awt/event/FocusEvent.java b/awt/java/awt/event/FocusEvent.java index 1db5263f4b..4a18689579 100644 --- a/awt/java/awt/event/FocusEvent.java +++ b/awt/java/awt/event/FocusEvent.java @@ -22,6 +22,12 @@ package java.awt.event; import java.awt.Component; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class FocusEvent extends ComponentEvent { private static final long serialVersionUID = 523753786457416396L; diff --git a/awt/java/awt/event/FocusListener.java b/awt/java/awt/event/FocusListener.java index ee98d9042d..6bbbd001f7 100644 --- a/awt/java/awt/event/FocusListener.java +++ b/awt/java/awt/event/FocusListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface FocusListener extends EventListener { public void focusGained(FocusEvent e); diff --git a/awt/java/awt/event/HierarchyBoundsAdapter.java b/awt/java/awt/event/HierarchyBoundsAdapter.java index 24e3d9d001..bbfe8ff2d8 100644 --- a/awt/java/awt/event/HierarchyBoundsAdapter.java +++ b/awt/java/awt/event/HierarchyBoundsAdapter.java @@ -20,6 +20,12 @@ */ package java.awt.event; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class HierarchyBoundsAdapter implements HierarchyBoundsListener { public HierarchyBoundsAdapter() { diff --git a/awt/java/awt/event/HierarchyBoundsListener.java b/awt/java/awt/event/HierarchyBoundsListener.java index 4288f52d6b..3e8f2e7907 100644 --- a/awt/java/awt/event/HierarchyBoundsListener.java +++ b/awt/java/awt/event/HierarchyBoundsListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface HierarchyBoundsListener extends EventListener { public void ancestorMoved(HierarchyEvent e); diff --git a/awt/java/awt/event/HierarchyEvent.java b/awt/java/awt/event/HierarchyEvent.java index 188166715a..c1d22f44ce 100644 --- a/awt/java/awt/event/HierarchyEvent.java +++ b/awt/java/awt/event/HierarchyEvent.java @@ -24,6 +24,12 @@ import java.awt.AWTEvent; import java.awt.Component; //???AWT: import java.awt.Container; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class HierarchyEvent extends AWTEvent { private static final long serialVersionUID = -5337576970038043990L; diff --git a/awt/java/awt/event/HierarchyListener.java b/awt/java/awt/event/HierarchyListener.java index e01ba11b41..ff3d9bcfcd 100644 --- a/awt/java/awt/event/HierarchyListener.java +++ b/awt/java/awt/event/HierarchyListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface HierarchyListener extends EventListener { public void hierarchyChanged(HierarchyEvent e); diff --git a/awt/java/awt/event/InputEvent.java b/awt/java/awt/event/InputEvent.java index c98382d803..343b7a3b05 100644 --- a/awt/java/awt/event/InputEvent.java +++ b/awt/java/awt/event/InputEvent.java @@ -22,6 +22,12 @@ package java.awt.event; import java.awt.Component; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class InputEvent extends ComponentEvent { private static final long serialVersionUID = -2482525981698309786L; diff --git a/awt/java/awt/event/InputMethodEvent.java b/awt/java/awt/event/InputMethodEvent.java index a5cac4e034..be001a5805 100644 --- a/awt/java/awt/event/InputMethodEvent.java +++ b/awt/java/awt/event/InputMethodEvent.java @@ -27,6 +27,12 @@ import java.text.AttributedCharacterIterator; import org.apache.harmony.awt.internal.nls.Messages; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class InputMethodEvent extends AWTEvent { private static final long serialVersionUID = 4727190874778922661L; diff --git a/awt/java/awt/event/InputMethodListener.java b/awt/java/awt/event/InputMethodListener.java index 0ab69180a8..85eaa7e6c1 100644 --- a/awt/java/awt/event/InputMethodListener.java +++ b/awt/java/awt/event/InputMethodListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface InputMethodListener extends EventListener { public void caretPositionChanged(InputMethodEvent e); diff --git a/awt/java/awt/event/InvocationEvent.java b/awt/java/awt/event/InvocationEvent.java index 59346ed47f..58e3b72987 100644 --- a/awt/java/awt/event/InvocationEvent.java +++ b/awt/java/awt/event/InvocationEvent.java @@ -25,6 +25,12 @@ import java.awt.ActiveEvent; import org.apache.harmony.awt.internal.nls.Messages; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class InvocationEvent extends AWTEvent implements ActiveEvent { private static final long serialVersionUID = 436056344909459450L; diff --git a/awt/java/awt/event/ItemEvent.java b/awt/java/awt/event/ItemEvent.java index 842da14b06..09908f24f8 100644 --- a/awt/java/awt/event/ItemEvent.java +++ b/awt/java/awt/event/ItemEvent.java @@ -23,6 +23,12 @@ package java.awt.event; import java.awt.AWTEvent; import java.awt.ItemSelectable; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class ItemEvent extends AWTEvent { private static final long serialVersionUID = -608708132447206933L; diff --git a/awt/java/awt/event/ItemListener.java b/awt/java/awt/event/ItemListener.java index 33633be35d..8dec67322a 100644 --- a/awt/java/awt/event/ItemListener.java +++ b/awt/java/awt/event/ItemListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface ItemListener extends EventListener { public void itemStateChanged(ItemEvent e); diff --git a/awt/java/awt/event/KeyAdapter.java b/awt/java/awt/event/KeyAdapter.java index 423b5c9cd9..a96cca8d8c 100644 --- a/awt/java/awt/event/KeyAdapter.java +++ b/awt/java/awt/event/KeyAdapter.java @@ -20,6 +20,12 @@ */ package java.awt.event; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class KeyAdapter implements KeyListener { public KeyAdapter() { diff --git a/awt/java/awt/event/KeyEvent.java b/awt/java/awt/event/KeyEvent.java index 056c64cbe8..8627f708d0 100644 --- a/awt/java/awt/event/KeyEvent.java +++ b/awt/java/awt/event/KeyEvent.java @@ -27,6 +27,12 @@ import java.lang.reflect.Modifier; import org.apache.harmony.awt.internal.nls.Messages; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class KeyEvent extends InputEvent { private static final long serialVersionUID = -2352130953028126954L; diff --git a/awt/java/awt/event/KeyListener.java b/awt/java/awt/event/KeyListener.java index f20fc90d19..ec144dfefc 100644 --- a/awt/java/awt/event/KeyListener.java +++ b/awt/java/awt/event/KeyListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface KeyListener extends EventListener { public void keyPressed(KeyEvent e); diff --git a/awt/java/awt/event/MouseAdapter.java b/awt/java/awt/event/MouseAdapter.java index 4973956a26..dc19173c34 100644 --- a/awt/java/awt/event/MouseAdapter.java +++ b/awt/java/awt/event/MouseAdapter.java @@ -20,6 +20,12 @@ */ package java.awt.event; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class MouseAdapter implements MouseListener { public MouseAdapter() { diff --git a/awt/java/awt/event/MouseEvent.java b/awt/java/awt/event/MouseEvent.java index 0b776f9f0c..2b1fa8b2aa 100644 --- a/awt/java/awt/event/MouseEvent.java +++ b/awt/java/awt/event/MouseEvent.java @@ -26,6 +26,12 @@ import java.awt.Toolkit; import org.apache.harmony.awt.internal.nls.Messages; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class MouseEvent extends InputEvent { private static final long serialVersionUID = -991214153494842848L; diff --git a/awt/java/awt/event/MouseListener.java b/awt/java/awt/event/MouseListener.java index 5d32b0f921..95879b90e6 100644 --- a/awt/java/awt/event/MouseListener.java +++ b/awt/java/awt/event/MouseListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface MouseListener extends EventListener { public void mouseClicked(MouseEvent e); diff --git a/awt/java/awt/event/MouseMotionAdapter.java b/awt/java/awt/event/MouseMotionAdapter.java index a4bebcc630..1ecd0d5ad5 100644 --- a/awt/java/awt/event/MouseMotionAdapter.java +++ b/awt/java/awt/event/MouseMotionAdapter.java @@ -20,6 +20,12 @@ */ package java.awt.event; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class MouseMotionAdapter implements MouseMotionListener { public MouseMotionAdapter() { diff --git a/awt/java/awt/event/MouseMotionListener.java b/awt/java/awt/event/MouseMotionListener.java index a5c11da632..e1313c340b 100644 --- a/awt/java/awt/event/MouseMotionListener.java +++ b/awt/java/awt/event/MouseMotionListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface MouseMotionListener extends EventListener { public void mouseDragged(MouseEvent e); diff --git a/awt/java/awt/event/MouseWheelEvent.java b/awt/java/awt/event/MouseWheelEvent.java index d3ac9d8c88..a3ed424368 100644 --- a/awt/java/awt/event/MouseWheelEvent.java +++ b/awt/java/awt/event/MouseWheelEvent.java @@ -22,6 +22,12 @@ package java.awt.event; import java.awt.Component; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class MouseWheelEvent extends MouseEvent { private static final long serialVersionUID = -9187413581993563929L; diff --git a/awt/java/awt/event/MouseWheelListener.java b/awt/java/awt/event/MouseWheelListener.java index 8ca1c8b8f7..2d6a98236b 100644 --- a/awt/java/awt/event/MouseWheelListener.java +++ b/awt/java/awt/event/MouseWheelListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface MouseWheelListener extends EventListener { public void mouseWheelMoved(MouseWheelEvent e); diff --git a/awt/java/awt/event/PaintEvent.java b/awt/java/awt/event/PaintEvent.java index d0573e16e2..22ac0908df 100644 --- a/awt/java/awt/event/PaintEvent.java +++ b/awt/java/awt/event/PaintEvent.java @@ -23,6 +23,12 @@ package java.awt.event; import java.awt.Component; import java.awt.Rectangle; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class PaintEvent extends ComponentEvent { private static final long serialVersionUID = 1267492026433337593L; diff --git a/awt/java/awt/event/TextEvent.java b/awt/java/awt/event/TextEvent.java index e2bfd96a93..2a690ad50d 100644 --- a/awt/java/awt/event/TextEvent.java +++ b/awt/java/awt/event/TextEvent.java @@ -22,6 +22,12 @@ package java.awt.event; import java.awt.AWTEvent; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class TextEvent extends AWTEvent { private static final long serialVersionUID = 6269902291250941179L; diff --git a/awt/java/awt/event/TextListener.java b/awt/java/awt/event/TextListener.java index 6c5a671d2b..05757c42ac 100644 --- a/awt/java/awt/event/TextListener.java +++ b/awt/java/awt/event/TextListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface TextListener extends EventListener { public void textValueChanged(TextEvent e); diff --git a/awt/java/awt/event/WindowAdapter.java b/awt/java/awt/event/WindowAdapter.java index 9d4b37784a..970aa8de45 100644 --- a/awt/java/awt/event/WindowAdapter.java +++ b/awt/java/awt/event/WindowAdapter.java @@ -20,6 +20,12 @@ */ package java.awt.event; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public abstract class WindowAdapter implements WindowListener, WindowStateListener, WindowFocusListener { public WindowAdapter() { diff --git a/awt/java/awt/event/WindowEvent.java b/awt/java/awt/event/WindowEvent.java index 65a30e4a36..474d2ac82b 100644 --- a/awt/java/awt/event/WindowEvent.java +++ b/awt/java/awt/event/WindowEvent.java @@ -25,6 +25,12 @@ package java.awt.event; //import java.awt.Window; //import java.awt.Frame; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class WindowEvent extends ComponentEvent { private static final long serialVersionUID = -1567959133147912127L; diff --git a/awt/java/awt/event/WindowFocusListener.java b/awt/java/awt/event/WindowFocusListener.java index e0200f2826..528459f3b5 100644 --- a/awt/java/awt/event/WindowFocusListener.java +++ b/awt/java/awt/event/WindowFocusListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface WindowFocusListener extends EventListener { public void windowGainedFocus(WindowEvent e); diff --git a/awt/java/awt/event/WindowListener.java b/awt/java/awt/event/WindowListener.java index 20a2b08800..31bd547bd3 100644 --- a/awt/java/awt/event/WindowListener.java +++ b/awt/java/awt/event/WindowListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface WindowListener extends EventListener { public void windowActivated(WindowEvent e); diff --git a/awt/java/awt/event/WindowStateListener.java b/awt/java/awt/event/WindowStateListener.java index 12dbc2085e..ba14d9ee8d 100644 --- a/awt/java/awt/event/WindowStateListener.java +++ b/awt/java/awt/event/WindowStateListener.java @@ -22,6 +22,12 @@ package java.awt.event; import java.util.EventListener; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface WindowStateListener extends EventListener { public void windowStateChanged(WindowEvent e); diff --git a/awt/java/awt/font/FontRenderContext.java b/awt/java/awt/font/FontRenderContext.java index 766300d7d0..d7de00f209 100644 --- a/awt/java/awt/font/FontRenderContext.java +++ b/awt/java/awt/font/FontRenderContext.java @@ -23,23 +23,30 @@ package java.awt.font; import java.awt.geom.AffineTransform; /** - * The FontRenderContext class contains the information - * about text measurement. Anti-aliasing and fractional-metrics - * modes are defined by an application and affect the size of - * a character. + * The FontRenderContext class contains the information about text measurement. + * Anti-aliasing and fractional-metrics modes are defined by an application and + * affect the size of a character. + * + * @since Android 1.0 */ public class FontRenderContext { // Affine transform of this mode - /** The transform. */ + /** + * The transform. + */ private AffineTransform transform; // Is the anti-aliased mode used - /** The anti aliased. */ + /** + * The anti aliased. + */ private boolean fAntiAliased; // Is the fractional metrics used - /** The fractional metrics. */ + /** + * The fractional metrics. + */ private boolean fFractionalMetrics; @@ -47,9 +54,12 @@ public class FontRenderContext { * Instantiates a new FontRenderContext object with the specified * AffineTransform, anti-aliasing and fractional metrics flags. * - * @param trans the AffineTransform. - * @param antiAliased the anti-aliasing flag. - * @param usesFractionalMetrics the fractional metrics flag. + * @param trans + * the AffineTransform. + * @param antiAliased + * the anti-aliasing flag. + * @param usesFractionalMetrics + * the fractional metrics flag. */ public FontRenderContext(AffineTransform trans, boolean antiAliased, boolean usesFractionalMetrics) { @@ -67,12 +77,12 @@ public class FontRenderContext { } /** - * Compares the specified Object with current FontRenderContext object. - * - * @param obj the Object to be compared. + * Compares the specified Object with current FontRenderContext object. * + * @param obj + * the Object to be compared. * @return true, if the specified Object is equal to current - * FontRenderContext object. + * FontRenderContext object. */ @Override public boolean equals(Object obj) { @@ -92,11 +102,11 @@ public class FontRenderContext { } /** - * Gets the transform which is used for scaling typographical points - * to pixels in this FontRenderContext. + * Gets the transform which is used for scaling typographical points to + * pixels in this FontRenderContext. * - * @return the AffineTransform which is used for scaling typographical - * points to pixels in this FontRenderContext. + * @return the AffineTransform which is used for scaling typographical + * points to pixels in this FontRenderContext. */ public AffineTransform getTransform() { if (transform != null){ @@ -106,13 +116,13 @@ public class FontRenderContext { } /** - * Compares the specified FontRenderContext object with current + * Compares the specified FontRenderContext object with current * FontRenderContext. * - * @param frc the FontRenderContext object to be compared. - * - * @return true, if the specified FontRenderContext object is - * equal to current FontRenderContext. + * @param frc + * the FontRenderContext object to be compared. + * @return true, if the specified FontRenderContext object is equal to + * current FontRenderContext. */ public boolean equals(FontRenderContext frc) { if (this == frc){ @@ -132,11 +142,11 @@ public class FontRenderContext { } /** - * Returns true if the text fractional metrics are used in - * this FontRenderContext. + * Returns true if the text fractional metrics are used in this + * FontRenderContext. * - * @return true, if the text fractional metrics are used in - * this FontRenderContext, false otherwise. + * @return true, if the text fractional metrics are used in this + * FontRenderContext, false otherwise. */ public boolean usesFractionalMetrics() { return this.fFractionalMetrics; @@ -146,7 +156,7 @@ public class FontRenderContext { * Returns true if anti-aliasing is used in this FontRenderContext. * * @return true, if is anti-aliasing is used in this FontRenderContext, - * false otherwise. + * false otherwise. */ public boolean isAntiAliased() { return this.fAntiAliased; diff --git a/awt/java/awt/font/GlyphJustificationInfo.java b/awt/java/awt/font/GlyphJustificationInfo.java index 4c3e02ea7d..b03de0aa15 100644 --- a/awt/java/awt/font/GlyphJustificationInfo.java +++ b/awt/java/awt/font/GlyphJustificationInfo.java @@ -18,124 +18,134 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; import org.apache.harmony.awt.internal.nls.Messages; /** - * The GlyphJustificationInfo class provides information about - * the glyph's justification properties. There are four justification - * properties: weight, priority, absorb, and limit. + * The GlyphJustificationInfo class provides information about the glyph's + * justification properties. There are four justification properties: weight, + * priority, absorb, and limit. *

    - * There are two sets of metrics: growing and shrinking. - * Growing metrics are used when the glyphs are to be spread apart - * to fit a larger width. Shrinking metrics are used when the glyphs - * are to be moved together to fit a smaller width. + * There are two sets of metrics: growing and shrinking. Growing metrics are + * used when the glyphs are to be spread apart to fit a larger width. Shrinking + * metrics are used when the glyphs are to be moved together to fit a smaller + * width. + *

    + * + * @since Android 1.0 */ public final class GlyphJustificationInfo { - /** - * The Constant PRIORITY_KASHIDA indicates the highest - * justification priority. + /** + * The Constant PRIORITY_KASHIDA indicates the highest justification + * priority. */ public static final int PRIORITY_KASHIDA = 0; /** - * The Constant PRIORITY_WHITESPACE indicates the second highest - * justification priority. + * The Constant PRIORITY_WHITESPACE indicates the second highest + * justification priority. */ public static final int PRIORITY_WHITESPACE = 1; - /** - * The Constant PRIORITY_INTERCHAR indicates the second lowest - * justification priority. + /** + * The Constant PRIORITY_INTERCHAR indicates the second lowest justification + * priority. */ public static final int PRIORITY_INTERCHAR = 2; /** - * The Constant PRIORITY_NONE indicates the lowest justification - * priority. + * The Constant PRIORITY_NONE indicates the lowest justification priority. */ public static final int PRIORITY_NONE = 3; - /** - * The grow absorb flag indicates if this glyph absorbs all extra - * space at this and lower priority levels when it grows. + /** + * The grow absorb flag indicates if this glyph absorbs all extra space at + * this and lower priority levels when it grows. */ public final boolean growAbsorb; - /** - * The grow left limit value represents the maximum value by which - * the left side of this glyph grows. + /** + * The grow left limit value represents the maximum value by which the left + * side of this glyph grows. */ public final float growLeftLimit; - /** - * The grow right limit value repesents the maximum value by which - * the right side of this glyph grows. + /** + * The grow right limit value repesents the maximum value by which the right + * side of this glyph grows. */ public final float growRightLimit; - /** - * The grow priority value represents the priority level of this - * glyph as it is growing. + /** + * The grow priority value represents the priority level of this glyph as it + * is growing. */ public final int growPriority; - /** - * The shrink absorb fleg indicates this glyph absorbs all remaining - * shrinkage at this and lower priority levels as it shrinks. + /** + * The shrink absorb fleg indicates this glyph absorbs all remaining + * shrinkage at this and lower priority levels as it shrinks. */ public final boolean shrinkAbsorb; - /** - * The shrink left limit value represents the maximum value by which - * the left side of this glyph shrinks. + /** + * The shrink left limit value represents the maximum value by which the + * left side of this glyph shrinks. */ public final float shrinkLeftLimit; - /** - * The shrink right limit value represents the maximum value by which - * the right side of this glyph shrinks. + /** + * The shrink right limit value represents the maximum value by which the + * right side of this glyph shrinks. */ public final float shrinkRightLimit; /** - * The shrink priority represents the glyth's priority level - * as it is shrinking. + * The shrink priority represents the glyth's priority level as it is + * shrinking. */ public final int shrinkPriority; - /** - * The weight of the glyph. + /** + * The weight of the glyph. */ public final float weight; /** - * Instantiates a new GlyphJustificationInfo object which contains - * glyph's justification properties. + * Instantiates a new GlyphJustificationInfo object which contains glyph's + * justification properties. * - * @param weight the weight of glyph. - * @param growAbsorb indicates if this glyph contais all space - * at this priority and lower priority levels when it grows. - * @param growPriority indicates the priority level of this glyph - * when it grows. - * @param growLeftLimit indicates the maximum value of which the - * left side of this glyph can grow. - * @param growRightLimit the maximum value of which the right side of - * this glyph can grow. - * @param shrinkAbsorb indicates if this glyph contains all remaining - * shrinkage at this and lower priority levels when it shrinks. - * @param shrinkPriority indicates the glyph's priority level when - * it shrinks. - * @param shrinkLeftLimit indicates the maximum value of which - * the left side of this glyph can shrink. - * @param shrinkRightLimit indicates the maximum amount by which - * the right side of this glyph can shrink. + * @param weight + * the weight of glyph. + * @param growAbsorb + * indicates if this glyph contais all space at this priority and + * lower priority levels when it grows. + * @param growPriority + * indicates the priority level of this glyph when it grows. + * @param growLeftLimit + * indicates the maximum value of which the left side of this + * glyph can grow. + * @param growRightLimit + * the maximum value of which the right side of this glyph can + * grow. + * @param shrinkAbsorb + * indicates if this glyph contains all remaining shrinkage at + * this and lower priority levels when it shrinks. + * @param shrinkPriority + * indicates the glyph's priority level when it shrinks. + * @param shrinkLeftLimit + * indicates the maximum value of which the left side of this + * glyph can shrink. + * @param shrinkRightLimit + * indicates the maximum amount by which the right side of this + * glyph can shrink. */ public GlyphJustificationInfo(float weight, boolean growAbsorb, int growPriority, - float growLeftLimit, float growRightLimit, boolean shrinkAbsorb, - int shrinkPriority, float shrinkLeftLimit, float shrinkRightLimit) { + float growLeftLimit, float growRightLimit, boolean shrinkAbsorb, int shrinkPriority, + float shrinkLeftLimit, float shrinkRightLimit) { if (weight < 0) { // awt.19C=weight must be a positive number @@ -156,13 +166,15 @@ public final class GlyphJustificationInfo { this.growRightLimit = growRightLimit; if ((shrinkPriority < 0) || (shrinkPriority > PRIORITY_NONE)) { - // awt.19F=incorrect value for shrinkPriority, more than PRIORITY_NONE or less than PRIORITY_KASHIDA value + // awt.19F=incorrect value for shrinkPriority, more than + // PRIORITY_NONE or less than PRIORITY_KASHIDA value throw new IllegalArgumentException(Messages.getString("awt.19F")); //$NON-NLS-1$ } this.shrinkPriority = shrinkPriority; if ((growPriority < 0) || (growPriority > PRIORITY_NONE)) { - // awt.200=incorrect value for growPriority, more than PRIORITY_NONE or less than PRIORITY_KASHIDA value + // awt.200=incorrect value for growPriority, more than PRIORITY_NONE + // or less than PRIORITY_KASHIDA value throw new IllegalArgumentException(Messages.getString("awt.200")); //$NON-NLS-1$ } this.growPriority = growPriority; diff --git a/awt/java/awt/font/GlyphMetrics.java b/awt/java/awt/font/GlyphMetrics.java index d96ef18157..287172231b 100644 --- a/awt/java/awt/font/GlyphMetrics.java +++ b/awt/java/awt/font/GlyphMetrics.java @@ -18,82 +18,98 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; import java.awt.geom.Rectangle2D; /** - * The GlyphMetrics class provides information about the size and shape - * of a single glyph. - * Each glyph has information to specify whether its baseline is horizontal - * or vertical as well as information on how it interacts with - * other characters in a text, given as one of the - * following types: STANDARD, LIGATURE, COMBINING, or COMPONENT. + * The GlyphMetrics class provides information about the size and shape of a + * single glyph. Each glyph has information to specify whether its baseline is + * horizontal or vertical as well as information on how it interacts with other + * characters in a text, given as one of the following types: STANDARD, + * LIGATURE, COMBINING, or COMPONENT. + * + * @since Android 1.0 */ public final class GlyphMetrics { // advance width of the glyph character cell - /** The advance x. */ + /** + * The advance x. + */ private float advanceX; - + // advance height of the glyph character cell - /** The advance y. */ + /** + * The advance y. + */ private float advanceY; // flag if the glyph horizontal - /** The horizontal. */ + /** + * The horizontal. + */ private boolean horizontal; - // glyph type code - /** The glyph type. */ + // glyph type code + /** + * The glyph type. + */ private byte glyphType; - + // bounding box for outline of the glyph - /** The bounds. */ + /** + * The bounds. + */ private Rectangle2D.Float bounds; - /** - * The Constant STANDARD indicates a glyph that represents a single - * character. + /** + * The Constant STANDARD indicates a glyph that represents a single + * character. */ public static final byte STANDARD = 0; - /** - * The Constant LIGATURE indicates a glyph that represents multiple - * characters as a ligature. + /** + * The Constant LIGATURE indicates a glyph that represents multiple + * characters as a ligature. */ public static final byte LIGATURE = 1; - /** - * The Constant COMBINING indicates a glyph which has no caret position + /** + * The Constant COMBINING indicates a glyph which has no caret position * between glyphs (for example umlaut). */ public static final byte COMBINING = 2; - /** - * The Constant COMPONENT indicates a glyph with no corresponding character + /** + * The Constant COMPONENT indicates a glyph with no corresponding character * in the backing store. */ public static final byte COMPONENT = 3; - /** - * The Constant WHITESPACE indicates a glyph without visual - * representation. + /** + * The Constant WHITESPACE indicates a glyph without visual representation. */ public static final byte WHITESPACE = 4; /** * Instantiates a new GlyphMetrics object with the specified parameters. * - * @param horizontal specifies if metrics are for a horizontal baseline - * (true value), or a vertical baseline (false value). - * @param advanceX the X component of the glyph's advance. - * @param advanceY the Y component of the glyph's advance. - * @param bounds the glyph's bounds. - * @param glyphType the glyph's type. - */ - public GlyphMetrics(boolean horizontal, float advanceX, float advanceY, - Rectangle2D bounds, byte glyphType) { + * @param horizontal + * specifies if metrics are for a horizontal baseline (true + * value), or a vertical baseline (false value). + * @param advanceX + * the X component of the glyph's advance. + * @param advanceY + * the Y component of the glyph's advance. + * @param bounds + * the glyph's bounds. + * @param glyphType + * the glyph's type. + */ + public GlyphMetrics(boolean horizontal, float advanceX, float advanceY, Rectangle2D bounds, + byte glyphType) { this.horizontal = horizontal; this.advanceX = advanceX; this.advanceY = advanceY; @@ -107,9 +123,12 @@ public final class GlyphMetrics { /** * Instantiates a new horizontal GlyphMetrics with the specified parameters. * - * @param advanceX the X component of the glyph's advance. - * @param bounds the glyph's bounds. - * @param glyphType the glyph's type. + * @param advanceX + * the X component of the glyph's advance. + * @param bounds + * the glyph's bounds. + * @param glyphType + * the glyph's type. */ public GlyphMetrics(float advanceX, Rectangle2D bounds, byte glyphType) { this.advanceX = advanceX; @@ -129,7 +148,7 @@ public final class GlyphMetrics { * @return glyph's bounds. */ public Rectangle2D getBounds2D() { - return (Rectangle2D.Float) this.bounds.clone(); + return (Rectangle2D.Float)this.bounds.clone(); } /** @@ -187,11 +206,11 @@ public final class GlyphMetrics { } /** - * Gets the distance from the right (for horizontal) or - * bottom (for vertical) of the glyph bounds to the advance. + * Gets the distance from the right (for horizontal) or bottom (for + * vertical) of the glyph bounds to the advance. * - * @return the distance from the right (for horizontal) or - * bottom (for vertical) of the glyph bounds to the advance. + * @return the distance from the right (for horizontal) or bottom (for + * vertical) of the glyph bounds to the advance. */ public float getRSB() { if (this.horizontal) { @@ -201,11 +220,11 @@ public final class GlyphMetrics { } /** - * Gets the distance from 0, 0 to the left (for horizontal) - * or top (for vertical) of the glyph bounds. + * Gets the distance from 0, 0 to the left (for horizontal) or top (for + * vertical) of the glyph bounds. * - * @return the distance from 0, 0 to the left (for horizontal) - * or top (for vertical) of the glyph bounds. + * @return the distance from 0, 0 to the left (for horizontal) or top (for + * vertical) of the glyph bounds. */ public float getLSB() { if (this.horizontal) { @@ -245,4 +264,3 @@ public final class GlyphMetrics { } } - diff --git a/awt/java/awt/font/GlyphVector.java b/awt/java/awt/font/GlyphVector.java index b3c9406a9b..a72b774bfa 100644 --- a/awt/java/awt/font/GlyphVector.java +++ b/awt/java/awt/font/GlyphVector.java @@ -18,6 +18,7 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; import java.awt.Font; @@ -32,45 +33,47 @@ import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; /** - * The GlyphVector class contains a collection of glyphs with geometric - * information and each glyph's location. Each GlyphVector can be associated - * with only one Font. GlyphVector contains the following properties for - * each glyph: + * The GlyphVector class contains a collection of glyphs with geometric + * information and each glyph's location. Each GlyphVector can be associated + * with only one Font. GlyphVector contains the following properties for each + * glyph: *
      *
    • the glyph position;
    • *
    • the transform of the glyph;
    • *
    • the metrics of the glyph in the context of the GlyphVector.
    • *
    + * + * @since Android 1.0 */ public abstract class GlyphVector implements Cloneable { - /** - * The Constant FLAG_HAS_TRANSFORMS indicates that this GlyphVector - * has per-glyph transforms. + /** + * The Constant FLAG_HAS_TRANSFORMS indicates that this GlyphVector has + * per-glyph transforms. */ public static final int FLAG_HAS_TRANSFORMS = 1; - /** - * The Constant FLAG_HAS_POSITION_ADJUSTMENTS indicates that - * the GlyphVector has per-glyph position adjustments. + /** + * The Constant FLAG_HAS_POSITION_ADJUSTMENTS indicates that the GlyphVector + * has per-glyph position adjustments. */ public static final int FLAG_HAS_POSITION_ADJUSTMENTS = 2; - /** - * The Constant FLAG_RUN_RTL indicates that this GlyphVector has a - * right to left run direction. + /** + * The Constant FLAG_RUN_RTL indicates that this GlyphVector has a right to + * left run direction. */ public static final int FLAG_RUN_RTL = 4; - /** - * The Constant FLAG_COMPLEX_GLYPHS indicates that this GlyphVector - * has a complex glyph to char mapping. + /** + * The Constant FLAG_COMPLEX_GLYPHS indicates that this GlyphVector has a + * complex glyph to char mapping. */ public static final int FLAG_COMPLEX_GLYPHS = 8; - /** - * The Constant FLAG_MASK indicates a mask for supported flags - * from getLayoutFlags. + /** + * The Constant FLAG_MASK indicates a mask for supported flags from + * getLayoutFlags. */ public static final int FLAG_MASK = 15; // (|) mask of other flags @@ -81,17 +84,19 @@ public abstract class GlyphVector implements Cloneable { } /** - * Gets the pixel bounds of the GlyphVector when rendered - * at the specified location with the specified FontRenderContext. - * - * @param frc the FontRenderContext. - * @param x the X coordinate of the GlyphVector's location. - * @param y the Y coordinate of the GlyphVector's location. - * + * Gets the pixel bounds of the GlyphVector when rendered at the specified + * location with the specified FontRenderContext. + * + * @param frc + * the FontRenderContext. + * @param x + * the X coordinate of the GlyphVector's location. + * @param y + * the Y coordinate of the GlyphVector's location. * @return the pixel bounds */ public Rectangle getPixelBounds(FontRenderContext frc, float x, float y) { - // default implementation - integer Rectangle, that encloses visual + // default implementation - integer Rectangle, that encloses visual // bounds rectangle Rectangle2D visualRect = getVisualBounds(); @@ -104,19 +109,21 @@ public abstract class GlyphVector implements Cloneable { } /** - * Gets the pixel bounds of the glyph with the specified index in - * this GlyphVector which is rendered with the specified - * FontRenderContext at the specified location. - * - * @param index the glyph index in this GlyphVector. - * @param frc the FontRenderContext. - * @param x the X coordinate of the GlyphVector's location. - * @param y the Y coordinate of the GlyphVector's location. - * + * Gets the pixel bounds of the glyph with the specified index in this + * GlyphVector which is rendered with the specified FontRenderContext at the + * specified location. + * + * @param index + * the glyph index in this GlyphVector. + * @param frc + * the FontRenderContext. + * @param x + * the X coordinate of the GlyphVector's location. + * @param y + * the Y coordinate of the GlyphVector's location. * @return a Rectangle bounds. */ - public Rectangle getGlyphPixelBounds(int index, FontRenderContext frc, - float x, float y) { + public Rectangle getGlyphPixelBounds(int index, FontRenderContext frc, float x, float y) { Rectangle2D visualRect = getGlyphVisualBounds(index).getBounds2D(); int minX = (int)Math.floor(visualRect.getMinX() + x); @@ -128,14 +135,14 @@ public abstract class GlyphVector implements Cloneable { } /** - * Gets the visual bounds of the GlyphVector. + * Gets the visual bounds of the GlyphVector. * * @return the visual bounds of the GlyphVector. */ public abstract Rectangle2D getVisualBounds(); /** - * Gets the logical bounds of the GlyphVector. + * Gets the logical bounds of the GlyphVector. * * @return the logical bounds of the GlyphVector. */ @@ -144,36 +151,38 @@ public abstract class GlyphVector implements Cloneable { /** * Sets the position of the specified glyph in this GlyphVector. * - * @param glyphIndex the glyph index in this GlyphVector. - * @param newPos the new position of the glyph at the specified glyphIndex. + * @param glyphIndex + * the glyph index in this GlyphVector. + * @param newPos + * the new position of the glyph at the specified glyphIndex. */ public abstract void setGlyphPosition(int glyphIndex, Point2D newPos); /** * Gets the position of the specified glyph in this GlyphVector. * - * @param glyphIndex the glyph index in this GlyphVector. - * + * @param glyphIndex + * the glyph index in this GlyphVector. * @return the position of the specified glyph in this GlyphVector. */ public abstract Point2D getGlyphPosition(int glyphIndex); /** - * Sets the affine transform to a glyph with the specified index - * in this GlyphVector. + * Sets the affine transform to a glyph with the specified index in this + * GlyphVector. * - * @param glyphIndex the glyth index in this GlyphVector. - * @param trans the AffineTransform to be assigned to the - * specified glyph. + * @param glyphIndex + * the glyth index in this GlyphVector. + * @param trans + * the AffineTransform to be assigned to the specified glyph. */ - public abstract void setGlyphTransform(int glyphIndex, - AffineTransform trans); + public abstract void setGlyphTransform(int glyphIndex, AffineTransform trans); /** * Gets the transform of the specified glyph in this GlyphVector. * - * @param glyphIndex the glyph index in this GlyphVector. - * + * @param glyphIndex + * the glyph index in this GlyphVector. * @return the new transform of the glyph. */ public abstract AffineTransform getGlyphTransform(int glyphIndex); @@ -181,34 +190,32 @@ public abstract class GlyphVector implements Cloneable { /** * Compares this GlyphVector with the specified GlyphVector objects. * - * @param glyphVector the GlyphVector object to be compared. - * + * @param glyphVector + * the GlyphVector object to be compared. * @return true, if this GlyphVector is equal to the specified GlyphVector - * object, false otherwise. + * object, false otherwise. */ public abstract boolean equals(GlyphVector glyphVector); /** - * Gets the metrics of the glyph with the specified index - * in this GlyphVector. - * - * @param glyphIndex index in this GlyphVector. + * Gets the metrics of the glyph with the specified index in this + * GlyphVector. * - * @return the metrics of the glyph with the specified index - * in this GlyphVector. + * @param glyphIndex + * index in this GlyphVector. + * @return the metrics of the glyph with the specified index in this + * GlyphVector. */ public abstract GlyphMetrics getGlyphMetrics(int glyphIndex); /** - * Gets the justification information of the glyph - * whose index is specified. + * Gets the justification information of the glyph whose index is specified. * - * @param glyphIndex the glyph index. - * - * @return the GlyphJustificationInfo for the specified glyph. + * @param glyphIndex + * the glyph index. + * @return the GlyphJustificationInfo for the specified glyph. */ - public abstract GlyphJustificationInfo getGlyphJustificationInfo( - int glyphIndex); + public abstract GlyphJustificationInfo getGlyphJustificationInfo(int glyphIndex); /** * Gets the FontRenderContext of this GlyphVector. @@ -218,18 +225,20 @@ public abstract class GlyphVector implements Cloneable { public abstract FontRenderContext getFontRenderContext(); /** - * Gets a Shape object which defines the visual representation - * of the specified glyph in this GlyphVector, translated a - * distance of x in the X direction and y in the Y direction. - * - * @param glyphIndex the glyth index in this GlyphVector. - * @param x the distance in the X direction to translate the - * shape object before returning it. - * @param y the distance in the Y direction to translate the - * shape object before returning it. - * - * @return a Shape object which represents the visual representation - * of the specified glyph in this GlyphVector - glyph outline. + * Gets a Shape object which defines the visual representation of the + * specified glyph in this GlyphVector, translated a distance of x in the X + * direction and y in the Y direction. + * + * @param glyphIndex + * the glyth index in this GlyphVector. + * @param x + * the distance in the X direction to translate the shape object + * before returning it. + * @param y + * the distance in the Y direction to translate the shape object + * before returning it. + * @return a Shape object which represents the visual representation of the + * specified glyph in this GlyphVector - glyph outline. */ public Shape getGlyphOutline(int glyphIndex, float x, float y) { Shape initialShape = getGlyphOutline(glyphIndex); @@ -240,43 +249,42 @@ public abstract class GlyphVector implements Cloneable { /** * Gets the visual bounds of the specified glyph in the GlyphVector. * - * @param glyphIndex the glyph index in this GlyphVector. - * - * @return the glyph visual bounds of the glyph with the specified - * index in the GlyphVector. + * @param glyphIndex + * the glyph index in this GlyphVector. + * @return the glyph visual bounds of the glyph with the specified index in + * the GlyphVector. */ public abstract Shape getGlyphVisualBounds(int glyphIndex); /** - * Gets a Shape object which defines the visual representation - * of the specified glyph in this GlyphVector. - * - * @param glyphIndex the glyth index in this GlyphVector. + * Gets a Shape object which defines the visual representation of the + * specified glyph in this GlyphVector. * - * @return a Shape object which represents the visual representation - * of the specified glyph in this GlyphVector - glyph outline. + * @param glyphIndex + * the glyth index in this GlyphVector. + * @return a Shape object which represents the visual representation of the + * specified glyph in this GlyphVector - glyph outline. */ public abstract Shape getGlyphOutline(int glyphIndex); /** - * Gets the logical bounds of the specified glyph in - * the GlyphVector. + * Gets the logical bounds of the specified glyph in the GlyphVector. * - * @param glyphIndex the index in this GlyphVector of the glyph from which - * to retrieve its logical bounds - * - * @return the logical bounds of the specified glyph in - * the GlyphVector. + * @param glyphIndex + * the index in this GlyphVector of the glyph from which to + * retrieve its logical bounds + * @return the logical bounds of the specified glyph in the GlyphVector. */ public abstract Shape getGlyphLogicalBounds(int glyphIndex); /** - * Gets the visual representation of this GlyphVector rendered in - * x, y location as a Shape object. - * - * @param x the x coordinate of the GlyphVector. - * @param y the y coordinate of the GlyphVector. + * Gets the visual representation of this GlyphVector rendered in x, y + * location as a Shape object. * + * @param x + * the x coordinate of the GlyphVector. + * @param y + * the y coordinate of the GlyphVector. * @return the visual representation of this GlyphVector as a Shape object. */ public abstract Shape getOutline(float x, float y); @@ -298,77 +306,79 @@ public abstract class GlyphVector implements Cloneable { /** * Gets an array of the glyph codes of the specified glyphs. * - * @param beginGlyphIndex the index into this GlyphVector at which - * to start retrieving glyph codes. - * @param numEntries the number of glyph codes. - * @param codeReturn the array into which the resulting - * glyphcodes will be written. - * + * @param beginGlyphIndex + * the index into this GlyphVector at which to start retrieving + * glyph codes. + * @param numEntries + * the number of glyph codes. + * @param codeReturn + * the array into which the resulting glyphcodes will be written. * @return the array of the glyph codes. */ - public abstract int[] getGlyphCodes(int beginGlyphIndex, int numEntries, - int[] codeReturn); + public abstract int[] getGlyphCodes(int beginGlyphIndex, int numEntries, int[] codeReturn); /** - * Gets an array of the character indices of - * the specified glyphs. - * - * @param beginGlyphIndex the index of the first glyph to return information for. - * @param numEntries the number of glyph indices to return. - * @param codeReturn the array into which the resulting character - * indices will be written. - * + * Gets an array of the character indices of the specified glyphs. + * + * @param beginGlyphIndex + * the index of the first glyph to return information for. + * @param numEntries + * the number of glyph indices to return. + * @param codeReturn + * the array into which the resulting character indices will be + * written. * @return an array of character indices for the specifies glyphs. */ - public int[] getGlyphCharIndices(int beginGlyphIndex, int numEntries, - int[] codeReturn) { + public int[] getGlyphCharIndices(int beginGlyphIndex, int numEntries, int[] codeReturn) { if (codeReturn == null) { codeReturn = new int[numEntries]; } - for (int i = 0; i < numEntries; i++){ - codeReturn[i] = getGlyphCharIndex(i+beginGlyphIndex); + for (int i = 0; i < numEntries; i++) { + codeReturn[i] = getGlyphCharIndex(i + beginGlyphIndex); } return codeReturn; } /** - * Gets an array of the positions of the specified glyphs in - * this GlyphVector. - * - * @param beginGlyphIndex the index of the first glyph to return information for. - * @param numEntries the number of glyphs to return information for. - * @param positionReturn the array where the result will be stored. - * + * Gets an array of the positions of the specified glyphs in this + * GlyphVector. + * + * @param beginGlyphIndex + * the index of the first glyph to return information for. + * @param numEntries + * the number of glyphs to return information for. + * @param positionReturn + * the array where the result will be stored. * @return an array of glyph positions. */ - public abstract float[] getGlyphPositions(int beginGlyphIndex, - int numEntries, float[] positionReturn); + public abstract float[] getGlyphPositions(int beginGlyphIndex, int numEntries, + float[] positionReturn); /** * Gets the glyph code of the specified glyph. * - * @param glyphIndex the index in this GlyphVector which corresponds - * to the glyph from which to retrieve the glyphcode. - * + * @param glyphIndex + * the index in this GlyphVector which corresponds to the glyph + * from which to retrieve the glyphcode. * @return the glyphcode of the specified glyph. */ public abstract int getGlyphCode(int glyphIndex); /** - * Gets the first logical character's index of the specified glyph. - * - * @param glyphIndex the glyph index. + * Gets the first logical character's index of the specified glyph. * + * @param glyphIndex + * the glyph index. * @return the the first logical character's index. */ - public int getGlyphCharIndex(int glyphIndex){ + public int getGlyphCharIndex(int glyphIndex) { // default implemetation one-to-one return glyphIndex; } /** - * Sets default layout to this GlyphVector. + * Sets default layout to this GlyphVector. */ public abstract void performDefaultLayout(); @@ -380,15 +390,14 @@ public abstract class GlyphVector implements Cloneable { public abstract int getNumGlyphs(); /** - * Gets flags which describe the global state of the GlyphVector. - * The default implementation returns 0. + * Gets flags which describe the global state of the GlyphVector. The + * default implementation returns 0. * * @return the layout flags */ - public int getLayoutFlags(){ + public int getLayoutFlags() { // default implementation - returned value is 0 return 0; } } - diff --git a/awt/java/awt/font/GraphicAttribute.java b/awt/java/awt/font/GraphicAttribute.java index 2f41951c65..8480e0f6a1 100644 --- a/awt/java/awt/font/GraphicAttribute.java +++ b/awt/java/awt/font/GraphicAttribute.java @@ -18,6 +18,7 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; import java.awt.Graphics2D; @@ -26,49 +27,54 @@ import java.awt.geom.Rectangle2D; import org.apache.harmony.awt.internal.nls.Messages; /** - * The GraphicAttribute abstract class provides an opportunity to - * insert graphical elements in printed text. + * The GraphicAttribute abstract class provides an opportunity to insert + * graphical elements in printed text. + * + * @since Android 1.0 */ public abstract class GraphicAttribute { - /** - * The Constant TOP_ALIGNMENT indicates using the top line to - * calculate placement of graphics. + /** + * The Constant TOP_ALIGNMENT indicates using the top line to calculate + * placement of graphics. */ public static final int TOP_ALIGNMENT = -1; - /** - * The Constant BOTTOM_ALIGNMENT indicates using the bottom line to - * calculate placement of graphics. + /** + * The Constant BOTTOM_ALIGNMENT indicates using the bottom line to + * calculate placement of graphics. */ public static final int BOTTOM_ALIGNMENT = -2; - /** - * The Constant ROMAN_BASELINE indicates the placement of the roman - * baseline with respect to the graphics origin. + /** + * The Constant ROMAN_BASELINE indicates the placement of the roman baseline + * with respect to the graphics origin. */ public static final int ROMAN_BASELINE = 0; - /** - * The Constant CENTER_BASELINE indicates the placement of the center + /** + * The Constant CENTER_BASELINE indicates the placement of the center * baseline with respect to the graphics origin. */ public static final int CENTER_BASELINE = 1; - /** - * The Constant HANGING_BASELINE indicates the placement of the hanging - * baseline with respect to the graphics origin. + /** + * The Constant HANGING_BASELINE indicates the placement of the hanging + * baseline with respect to the graphics origin. */ public static final int HANGING_BASELINE = 2; // the alignment of this GraphicAttribute - /** The alignment. */ + /** + * The alignment. + */ private int alignment; /** * Instantiates a new graphic attribute with the specified alignment. * - * @param align the specified alignment. + * @param align + * the specified alignment. */ protected GraphicAttribute(int align) { if ((align < BOTTOM_ALIGNMENT) || (align > HANGING_BASELINE)) { @@ -81,16 +87,19 @@ public abstract class GraphicAttribute { /** * Draws the GraphicAttribute at the specified location. * - * @param graphics the Graphics. - * @param x the X coordinate of GraphicAttribute location. - * @param y the Y coordinate of GraphicAttribute location. + * @param graphics + * the Graphics. + * @param x + * the X coordinate of GraphicAttribute location. + * @param y + * the Y coordinate of GraphicAttribute location. */ public abstract void draw(Graphics2D graphics, float x, float y); /** - * Gets the GraphicAttribute's advance. It's the distance from the point - * at which the graphic is rendered and the point where the next character - * or graphic is rendered. + * Gets the GraphicAttribute's advance. It's the distance from the point at + * which the graphic is rendered and the point where the next character or + * graphic is rendered. * * @return the GraphicAttribute's advance. */ @@ -139,58 +148,32 @@ public abstract class GraphicAttribute { * @return the GlyphJustificationInfo of this GraphicAttribute. */ public GlyphJustificationInfo getJustificationInfo() { - - /* Default implementation. - * Since documentation doesn't describe default values, - * they were calculated based on 1.5 release - * behavior and can be obtained using next test sample: - * - * // Create GraphicAttribute class implementation - * public class MyGraphicAttribute extends GraphicAttribute { - * protected MyGraphicAttribute(int align) { - * super(align); - * } - * - * public float getDescent() { - * return 0; - * } - * - * public float getAdvance() { - * return 1; - * } - * - * public void draw(Graphics2D g2, float x, float y) { - * } - * - * public float getAscent() { - * return 0; - * } - * } - * - * MyGraphicAttribute myGA = gat.new MyGraphicAttribute(0); - * // print justification parameters - * System.out.println(myGA.getJustificationInfo().growAbsorb); - * System.out.println(myGA.getJustificationInfo().shrinkAbsorb); - * System.out.println(myGA.getJustificationInfo().growLeftLimit); - * System.out.println(myGA.getJustificationInfo().growPriority); - * System.out.println(myGA.getJustificationInfo().growRightLimit); - * System.out.println(myGA.getJustificationInfo().shrinkLeftLimit); - * System.out.println(myGA.getJustificationInfo().shrinkPriority); - * System.out.println(myGA.getJustificationInfo().shrinkRightLimit); - * System.out.println(myGA.getJustificationInfo().weight); + + /* + * Default implementation. Since documentation doesn't describe default + * values, they were calculated based on 1.5 release behavior and can be + * obtained using next test sample: // Create GraphicAttribute class + * implementation public class MyGraphicAttribute extends + * GraphicAttribute { protected MyGraphicAttribute(int align) { + * super(align); } public float getDescent() { return 0; } public float + * getAdvance() { return 1; } public void draw(Graphics2D g2, float x, + * float y) { } public float getAscent() { return 0; } } + * MyGraphicAttribute myGA = gat.new MyGraphicAttribute(0); // print + * justification parameters + * System.out.println(myGA.getJustificationInfo().growAbsorb); + * System.out.println(myGA.getJustificationInfo().shrinkAbsorb); + * System.out.println(myGA.getJustificationInfo().growLeftLimit); + * System.out.println(myGA.getJustificationInfo().growPriority); + * System.out.println(myGA.getJustificationInfo().growRightLimit); + * System.out.println(myGA.getJustificationInfo().shrinkLeftLimit); + * System.out.println(myGA.getJustificationInfo().shrinkPriority); + * System.out.println(myGA.getJustificationInfo().shrinkRightLimit); + * System.out.println(myGA.getJustificationInfo().weight); */ float advance = getAdvance(); - return new GlyphJustificationInfo( - advance, - false, - GlyphJustificationInfo.PRIORITY_INTERCHAR, - advance / 3, - advance / 3, - false, - GlyphJustificationInfo.PRIORITY_WHITESPACE, - 0, - 0); + return new GlyphJustificationInfo(advance, false, + GlyphJustificationInfo.PRIORITY_INTERCHAR, advance / 3, advance / 3, false, + GlyphJustificationInfo.PRIORITY_WHITESPACE, 0, 0); } } - diff --git a/awt/java/awt/font/ImageGraphicAttribute.java b/awt/java/awt/font/ImageGraphicAttribute.java index 41f90b8e81..d6d4758d35 100644 --- a/awt/java/awt/font/ImageGraphicAttribute.java +++ b/awt/java/awt/font/ImageGraphicAttribute.java @@ -18,6 +18,7 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; import java.awt.Graphics2D; @@ -27,44 +28,57 @@ import java.awt.geom.Rectangle2D; import org.apache.harmony.misc.HashCode; /** - * The ImageGraphicAttribute class provides an opportunity to insert - * images to a text. + * The ImageGraphicAttribute class provides an opportunity to insert images to a + * text. + * + * @since Android 1.0 */ public final class ImageGraphicAttribute extends GraphicAttribute { // Image object rendered by this ImageGraphicAttribute - /** The image. */ + /** + * The image. + */ private Image fImage; // X coordinate of the origin point - /** The origin x. */ + /** + * The origin x. + */ private float fOriginX; // Y coordinate of the origin point - /** The origin y. */ + /** + * The origin y. + */ private float fOriginY; // the width of the image object - /** The img width. */ + /** + * The img width. + */ private float fImgWidth; // the height of the image object - /** The img height. */ + /** + * The img height. + */ private float fImgHeight; /** * Instantiates a new ImageGraphicAttribute with the specified image, * alignment and origins. * - * @param image the Image to be rendered by ImageGraphicAttribute. - * @param alignment the alignment of the ImageGraphicAttribute. - * @param originX the origin X coordinate in the image of - * ImageGraphicAttribute. - * @param originY the origin Y coordinate in the image of - * ImageGraphicAttribute. + * @param image + * the Image to be rendered by ImageGraphicAttribute. + * @param alignment + * the alignment of the ImageGraphicAttribute. + * @param originX + * the origin X coordinate in the image of ImageGraphicAttribute. + * @param originY + * the origin Y coordinate in the image of ImageGraphicAttribute. */ - public ImageGraphicAttribute(Image image, int alignment, float originX, - float originY) { + public ImageGraphicAttribute(Image image, int alignment, float originX, float originY) { super(alignment); this.fImage = image; @@ -80,8 +94,10 @@ public final class ImageGraphicAttribute extends GraphicAttribute { * Instantiates a new ImageGraphicAttribute with the specified image and * alignment. * - * @param image the Image to be rendered by ImageGraphicAttribute. - * @param alignment the alignment of the ImageGraphicAttribute. + * @param image + * the Image to be rendered by ImageGraphicAttribute. + * @param alignment + * the alignment of the ImageGraphicAttribute. */ public ImageGraphicAttribute(Image image, int alignment) { this(image, alignment, 0, 0); @@ -105,10 +121,10 @@ public final class ImageGraphicAttribute extends GraphicAttribute { * Compares the specified ImageGraphicAttribute object with this * ImageGraphicAttribute object. * - * @param iga the ImageGraphicAttribute object to be compared. - * + * @param iga + * the ImageGraphicAttribute object to be compared. * @return true, if the specified ImageGraphicAttribute object is equal to - * this ImageGraphicAttribute object, false otherwise. + * this ImageGraphicAttribute object, false otherwise. */ public boolean equals(ImageGraphicAttribute iga) { if (iga == null) { @@ -119,26 +135,23 @@ public final class ImageGraphicAttribute extends GraphicAttribute { return true; } - return (fOriginX == iga.fOriginX && - fOriginY == iga.fOriginY && - getAlignment() == iga.getAlignment() && - fImage.equals(iga.fImage)); + return (fOriginX == iga.fOriginX && fOriginY == iga.fOriginY + && getAlignment() == iga.getAlignment() && fImage.equals(iga.fImage)); } /** * Compares the specified Object with this ImageGraphicAttribute object. - * - * @param obj the Object to be compared. * + * @param obj + * the Object to be compared. * @return true, if the specified Object is equal to this - * ImageGraphicAttribute object, false otherwise. + * ImageGraphicAttribute object, false otherwise. */ @Override public boolean equals(Object obj) { try { - return equals((ImageGraphicAttribute) obj); - } - catch(ClassCastException e) { + return equals((ImageGraphicAttribute)obj); + } catch (ClassCastException e) { return false; } @@ -149,9 +162,6 @@ public final class ImageGraphicAttribute extends GraphicAttribute { g2.drawImage(fImage, (int)(x - fOriginX), (int)(y - fOriginY), null); } - /** - * @see java.awt.font.GraphicAttribute#getAdvance() - */ @Override public float getAdvance() { return Math.max(0, fImgWidth - fOriginX); @@ -167,13 +177,9 @@ public final class ImageGraphicAttribute extends GraphicAttribute { return new Rectangle2D.Float(-fOriginX, -fOriginY, fImgWidth, fImgHeight); } - /** - * @see java.awt.font.GraphicAttribute#getDescent() - */ @Override public float getDescent() { return Math.max(0, fImgHeight - fOriginY); } } - diff --git a/awt/java/awt/font/LineBreakMeasurer.java b/awt/java/awt/font/LineBreakMeasurer.java index efce615944..4800093f63 100644 --- a/awt/java/awt/font/LineBreakMeasurer.java +++ b/awt/java/awt/font/LineBreakMeasurer.java @@ -21,64 +21,69 @@ package java.awt.font; -import java.text.AttributedCharacterIterator; -//???AWT: import java.text.BreakIterator; +import java.text.AttributedCharacterIterator; //???AWT: import java.text.BreakIterator; import org.apache.harmony.awt.internal.nls.Messages; /** - * The class LineBreakMeasurer provides methods to measure the graphical - * representation of a text in order to determine where to add line - * breaks so the resulting line of text fits its wrapping width. - * The wrapping width defines the visual width of the paragraph. + * The class LineBreakMeasurer provides methods to measure the graphical + * representation of a text in order to determine where to add line breaks so + * the resulting line of text fits its wrapping width. The wrapping width + * defines the visual width of the paragraph. + * + * @since Android 1.0 */ public final class LineBreakMeasurer { - - /** The tm. */ + + /** + * The tm. + */ private TextMeasurer tm = null; - //???AWT private BreakIterator bi = null; - /** The position. */ + + // ???AWT private BreakIterator bi = null; + /** + * The position. + */ private int position = 0; - - /** The maxpos. */ + + /** + * The maxpos. + */ int maxpos = 0; /** * Instantiates a new LineBreakMeasurer object for the specified text. * - * @param text the AttributedCharacterIterator object which contains - * text with at least one character. - * @param frc the FontRenderContext represented information - * about graphic device. + * @param text + * the AttributedCharacterIterator object which contains text + * with at least one character. + * @param frc + * the FontRenderContext represented information about graphic + * device. */ public LineBreakMeasurer(AttributedCharacterIterator text, FontRenderContext frc) { - //???AWT: this(text, BreakIterator.getLineInstance(), frc); + // ???AWT: this(text, BreakIterator.getLineInstance(), frc); } - /* ???AWT - public LineBreakMeasurer( - AttributedCharacterIterator text, - BreakIterator bi, - FontRenderContext frc - ) { - tm = new TextMeasurer(text, frc); - this.bi = bi; - this.bi.setText(text); - position = text.getBeginIndex(); - maxpos = tm.aci.getEndIndex(); - } - */ + /* + * ???AWT public LineBreakMeasurer( AttributedCharacterIterator text, + * BreakIterator bi, FontRenderContext frc ) { tm = new TextMeasurer(text, + * frc); this.bi = bi; this.bi.setText(text); position = + * text.getBeginIndex(); maxpos = tm.aci.getEndIndex(); } + */ /** - * Deletes a character from the specified position of the text, - * updates this LineBreakMeasurer object. + * Deletes a character from the specified position of the text, updates this + * LineBreakMeasurer object. * - * @param newText the new text. - * @param pos the posion of the character which is deleted. + * @param newText + * the new text. + * @param pos + * the position of the character which is deleted. */ public void deleteChar(AttributedCharacterIterator newText, int pos) { tm.deleteChar(newText, pos); - //???AWT: bi.setText(newText); + // ???AWT: bi.setText(newText); position = newText.getBeginIndex(); @@ -88,22 +93,24 @@ public final class LineBreakMeasurer { /** * Gets current position of this LineBreakMeasurer. * - * @return current position of this LineBreakMeasurer + * @return the current position of this LineBreakMeasurer */ public int getPosition() { return position; } /** - * Insertes a character at the specified position in the text, - * updates this LineBreakMeasurer object. + * Inserts a character at the specified position in the text, updates this + * LineBreakMeasurer object. * - * @param newText the new text. - * @param pos the posion of the character which is inserted. + * @param newText + * the new text. + * @param pos + * the position of the character which is inserted. */ public void insertChar(AttributedCharacterIterator newText, int pos) { tm.insertChar(newText, pos); -// ???AWT: bi.setText(newText); + // ???AWT: bi.setText(newText); position = newText.getBeginIndex(); @@ -111,21 +118,23 @@ public final class LineBreakMeasurer { } /** - * Returns the next line of text, updates current position in this + * Returns the next line of text, updates current position in this * LineBreakMeasurer. * - * @param wrappingWidth the maximum visible line width. - * @param offsetLimit the limit point withing the text indicating - * that no further text should be included on the line; the paragraph break. - * @param requireNextWord if true, null is returned (the entire word at the current - * position does not fit within the wrapping width); - * if false, a valid layout is returned that includes at least the - * character at the current position. - * - * @return the next TextLayout which begins at the current position and - * represents the next line of text with width wrappingWidth, null is - * returned if the entire word at the current position does not fit within - * the wrapping width. + * @param wrappingWidth + * the maximum visible line width. + * @param offsetLimit + * the limit point within the text indicating that no further + * text should be included on the line; the paragraph break. + * @param requireNextWord + * if true, null is returned (the entire word at the current + * position does not fit within the wrapping width); if false, a + * valid layout is returned that includes at least the character + * at the current position. + * @return the next TextLayout which begins at the current position and + * represents the next line of text with width wrappingWidth, null + * is returned if the entire word at the current position does not + * fit within the wrapping width. */ public TextLayout nextLayout(float wrappingWidth, int offsetLimit, boolean requireNextWord) { if (position == maxpos) { @@ -145,8 +154,8 @@ public final class LineBreakMeasurer { /** * Returns the next line of text. * - * @param wrappingWidth the maximum visible line width. - * + * @param wrappingWidth + * the maximum visible line width. * @return the next line of text. */ public TextLayout nextLayout(float wrappingWidth) { @@ -156,8 +165,8 @@ public final class LineBreakMeasurer { /** * Returns the end position of the next line of text. * - * @param wrappingWidth the maximum visible line width. - * + * @param wrappingWidth + * the maximum visible line width. * @return the end position of the next line of text. */ public int nextOffset(float wrappingWidth) { @@ -167,22 +176,22 @@ public final class LineBreakMeasurer { /** * Returns the end position of the next line of text. * - * @param wrappingWidth the maximum visible line width. - * @param offsetLimit the limit point withing the text indicating - * that no further text should be included on the line; the paragraph break. - * @param requireNextWord if true, the current position is returned - * if the entire next word does not fit within wrappingWidth; - * if false, the offset returned is at least one greater than the current - * position. - * + * @param wrappingWidth + * the maximum visible line width. + * @param offsetLimit + * the limit point withing the text indicating that no further + * text should be included on the line; the paragraph break. + * @param requireNextWord + * if true, the current position is returned if the entire next + * word does not fit within wrappingWidth; if false, the offset + * returned is at least one greater than the current position. * @return the end position of the next line of text. - * - * @throws IllegalArgumentException if the offsetLimit is less than - * the current position. + * @throws IllegalArgumentException + * if the offsetLimit is less than the current position. */ public int nextOffset(float wrappingWidth, int offsetLimit, boolean requireNextWord) { if (offsetLimit <= position) { - // awt.203=Offset limit should be greater than current position. + // awt.203=Offset limit should be greater than current position. throw new IllegalArgumentException(Messages.getString("awt.203")); //$NON-NLS-1$ } @@ -193,22 +202,20 @@ public final class LineBreakMeasurer { int breakPos = tm.getLineBreakIndex(position, wrappingWidth); int correctedPos = breakPos; - // This check is required because bi.preceding(maxpos) throws an exception - /* ???AWT - if (breakPos == maxpos) { - correctedPos = maxpos; - } else if (Character.isWhitespace(bi.getText().setIndex(breakPos))) { - correctedPos = bi.following(breakPos); - } else { - correctedPos = bi.preceding(breakPos); - } - */ - + // This check is required because bi.preceding(maxpos) throws an + // exception + /* + * ???AWT if (breakPos == maxpos) { correctedPos = maxpos; } else if + * (Character.isWhitespace(bi.getText().setIndex(breakPos))) { + * correctedPos = bi.following(breakPos); } else { correctedPos = + * bi.preceding(breakPos); } + */ + if (position >= correctedPos) { if (requireNextWord) { correctedPos = position; } else { - correctedPos = Math.max(position+1, breakPos); + correctedPos = Math.max(position + 1, breakPos); } } @@ -218,7 +225,8 @@ public final class LineBreakMeasurer { /** * Sets the new position of this LineBreakMeasurer. * - * @param pos the new position of this LineBreakMeasurer. + * @param pos + * the new position of this LineBreakMeasurer. */ public void setPosition(int pos) { if (tm.aci.getBeginIndex() > pos || maxpos < pos) { @@ -228,4 +236,3 @@ public final class LineBreakMeasurer { position = pos; } } - diff --git a/awt/java/awt/font/LineMetrics.java b/awt/java/awt/font/LineMetrics.java index 2857187104..4b03e5db2b 100644 --- a/awt/java/awt/font/LineMetrics.java +++ b/awt/java/awt/font/LineMetrics.java @@ -18,22 +18,24 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; /** - * The LineMetrics class provides information such as concerning how the text - * is positioned with respect to the base line, such as ascent, descent, - * and leading. + * The LineMetrics class provides information such as concerning how the text is + * positioned with respect to the base line, such as ascent, descent, and + * leading. * + * @since Android 1.0 */ public abstract class LineMetrics { /** - * Gets the baseline offsets of the text according to the - * the baseline of this text. + * Gets the baseline offsets of the text according to the the baseline of + * this text. * - * @return the baseline offsets of the text according to the - * the baseline of this text. + * @return the baseline offsets of the text according to the the baseline of + * this text. */ public abstract float[] getBaselineOffsets(); @@ -45,11 +47,11 @@ public abstract class LineMetrics { public abstract int getNumChars(); /** - * Gets the baseline index, returns one of the following - * index: ROMAN_BASELINE, CENTER_BASELINE, HANGING_BASELINE. + * Gets the baseline index, returns one of the following index: + * ROMAN_BASELINE, CENTER_BASELINE, HANGING_BASELINE. * - * @return the baseline index: ROMAN_BASELINE, CENTER_BASELINE - * or HANGING_BASELINE. + * @return the baseline index: ROMAN_BASELINE, CENTER_BASELINE or + * HANGING_BASELINE. */ public abstract int getBaselineIndex(); @@ -89,11 +91,11 @@ public abstract class LineMetrics { public abstract float getLeading(); /** - * Gets the height of the text as a sum of the ascent, the descent - * and the leading. + * Gets the height of the text as a sum of the ascent, the descent and the + * leading. * - * @return the height of the text as a sum of the ascent, the descent - * and the leading. + * @return the height of the text as a sum of the ascent, the descent and + * the leading. */ public abstract float getHeight(); @@ -112,4 +114,3 @@ public abstract class LineMetrics { public abstract float getAscent(); } - diff --git a/awt/java/awt/font/MultipleMaster.java b/awt/java/awt/font/MultipleMaster.java index 773bfcfbf3..d264f24833 100644 --- a/awt/java/awt/font/MultipleMaster.java +++ b/awt/java/awt/font/MultipleMaster.java @@ -18,38 +18,44 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; import java.awt.Font; /** - * The MultipleMaster interface provides methods to manipulate MultipleMaster + * The MultipleMaster interface provides methods to manipulate MultipleMaster * type fonts and retrieve graphical and design data from them. + * + * @since Android 1.0 */ public interface MultipleMaster { /** - * Derives a new multiple master font based on the specified - * parameters. - * - * @param glyphWidths float array which represents width of each glyph - * in font space. - * @param avgStemWidth the average stem width in font space. - * @param typicalCapHeight the typical upper case char height. - * @param typicalXHeight the typical lower case char height. - * @param italicAngle the slope angle for italics. + * Derives a new multiple master font based on the specified parameters. * + * @param glyphWidths + * float array which represents width of each glyph in font + * space. + * @param avgStemWidth + * the average stem width in font space. + * @param typicalCapHeight + * the typical upper case char height. + * @param typicalXHeight + * the typical lower case char height. + * @param italicAngle + * the slope angle for italics. * @return a MultipleMaster font. */ - public Font deriveMMFont(float[] glyphWidths, float avgStemWidth, - float typicalCapHeight, float typicalXHeight, float italicAngle); + public Font deriveMMFont(float[] glyphWidths, float avgStemWidth, float typicalCapHeight, + float typicalXHeight, float italicAngle); /** - * Derives a new multiple master font based on the design axis values - * contained in the specified array. - * - * @param axes an float array which contains axis values. + * Derives a new multiple master font based on the design axis values + * contained in the specified array. * + * @param axes + * an float array which contains axis values. * @return a MultipleMaster font. */ public Font deriveMMFont(float[] axes); @@ -62,25 +68,24 @@ public interface MultipleMaster { public float[] getDesignAxisDefaults(); /** - * Gets the array of design axis names. + * Gets the array of design axis names. * - * @return the array of design axis names. + * @return the array of design axis names. */ public String[] getDesignAxisNames(); /** - * Gets the array of design axis ranges. + * Gets the array of design axis ranges. * * @return the array of design axis ranges. */ public float[] getDesignAxisRanges(); /** - * Gets the number of multiple master design controls. + * Gets the number of multiple master design controls. * * @return the number of multiple master design controls. */ public int getNumDesignAxes(); } - diff --git a/awt/java/awt/font/OpenType.java b/awt/java/awt/font/OpenType.java index 53cb6c0d55..db66911c49 100644 --- a/awt/java/awt/font/OpenType.java +++ b/awt/java/awt/font/OpenType.java @@ -18,318 +18,323 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; /** - * The OpenType interface provides constants and methods for getting - * instance data for fonts of type OpenType and TrueType. For more information, - * see the OpenType specification. + * The OpenType interface provides constants and methods for getting instance + * data for fonts of type OpenType and TrueType. For more information, see the + * + * OpenType specification. + * + * @since Android 1.0 */ public interface OpenType { - /** - * The Constant TAG_ACNT indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_ACNT indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_ACNT = 1633906292; - /** - * The Constant TAG_AVAR indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_AVAR indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_AVAR = 1635148146; - /** - * The Constant TAG_BASE indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_BASE indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_BASE = 1111577413; - /** - * The Constant TAG_BDAT indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_BDAT indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_BDAT = 1650745716; - /** - * The Constant TAG_BLOC indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_BLOC indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_BLOC = 1651273571; - /** - * The Constant TAG_BSLN indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_BSLN indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_BSLN = 1651731566; - /** - * The Constant TAG_CFF indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_CFF indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_CFF = 1128678944; - /** - * The Constant TAG_CMAP indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_CMAP indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_CMAP = 1668112752; - /** - * The Constant TAG_CVAR indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_CVAR indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_CVAR = 1668702578; - /** - * The Constant TAG_CVT indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_CVT indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_CVT = 1668707360; - /** - * The Constant TAG_DSIG indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_DSIG indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_DSIG = 1146308935; - /** - * The Constant TAG_EBDT indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_EBDT indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_EBDT = 1161970772; - /** - * The Constant TAG_EBLC indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_EBLC indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_EBLC = 1161972803; - /** - * The Constant TAG_EBSC indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_EBSC indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_EBSC = 1161974595; - /** - * The Constant TAG_FDSC indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_FDSC indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_FDSC = 1717859171; - /** - * The Constant TAG_FEAT indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_FEAT indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_FEAT = 1717920116; - /** - * The Constant TAG_FMTX indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_FMTX indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_FMTX = 1718449272; - /** - * The Constant TAG_FPGM indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_FPGM indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_FPGM = 1718642541; - /** - * The Constant TAG_FVAR indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_FVAR indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_FVAR = 1719034226; - /** - * The Constant TAG_GASP indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_GASP indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_GASP = 1734439792; - /** - * The Constant TAG_GDEF indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_GDEF indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_GDEF = 1195656518; - /** - * The Constant TAG_GLYF indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_GLYF indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_GLYF = 1735162214; - /** - * The Constant TAG_GPOS indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_GPOS indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_GPOS = 1196445523; - /** - * The Constant TAG_GSUB indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_GSUB indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_GSUB = 1196643650; - /** - * The Constant TAG_GVAR indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_GVAR indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_GVAR = 1735811442; - /** - * The Constant TAG_HDMX indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_HDMX indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_HDMX = 1751412088; - /** - * The Constant TAG_HEAD indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_HEAD indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_HEAD = 1751474532; - /** - * The Constant TAG_HHEA indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_HHEA indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_HHEA = 1751672161; - /** - * The Constant TAG_HMTX indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_HMTX indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_HMTX = 1752003704; - /** - * The Constant TAG_JSTF indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_JSTF indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_JSTF = 1246975046; - /** - * The Constant TAG_JUST indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_JUST indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_JUST = 1786082164; - /** - * The Constant TAG_KERN indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_KERN indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_KERN = 1801810542; - /** - * The Constant TAG_LCAR indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_LCAR indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_LCAR = 1818452338; - /** - * The Constant TAG_LOCA indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_LOCA indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_LOCA = 1819239265; - /** - * The Constant TAG_LTSH indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_LTSH indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_LTSH = 1280594760; - /** - * The Constant TAG_MAXP indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_MAXP indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_MAXP = 1835104368; - /** - * The Constant TAG_MMFX indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_MMFX indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_MMFX = 1296909912; - /** - * The Constant TAG_MMSD indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_MMSD indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_MMSD = 1296913220; - /** - * The Constant TAG_MORT indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_MORT indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_MORT = 1836020340; - /** - * The Constant TAG_NAME indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_NAME indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_NAME = 1851878757; - /** - * The Constant TAG_OPBD indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_OPBD indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_OPBD = 1836020340; - /** - * The Constant TAG_OS2 indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_OS2 indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_OS2 = 1330851634; - /** - * The Constant TAG_PCLT indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_PCLT indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_PCLT = 1346587732; - /** - * The Constant TAG_POST indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_POST indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_POST = 1886352244; - /** - * The Constant TAG_PREP indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_PREP indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_PREP = 1886545264; - /** - * The Constant TAG_PROP indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_PROP indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_PROP = 1886547824; - /** - * The Constant TAG_TRAK indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_TRAK indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_TRAK = 1953653099; - /** - * The Constant TAG_TYP1 indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_TYP1 indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_TYP1 = 1954115633; - /** - * The Constant TAG_VDMX indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_VDMX indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_VDMX = 1447316824; - /** - * The Constant TAG_VHEA indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_VHEA indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_VHEA = 1986553185; - /** - * The Constant TAG_VMTX indicates corresponding table tag - * in the Open Type Specification. + /** + * The Constant TAG_VMTX indicates corresponding table tag in the Open Type + * Specification. */ public static final int TAG_VMTX = 1986884728; @@ -341,70 +346,73 @@ public interface OpenType { public int getVersion(); /** - * Gets the table for a specified tag. - * Sfnt tables include cmap, name and head items. - * - * @param sfntTag the sfnt tag. + * Gets the table for a specified tag. Sfnt tables include cmap, name and + * head items. * - * @return a byte array contains the font data corresponding - * to the specified tag. + * @param sfntTag + * the sfnt tag. + * @return a byte array contains the font data corresponding to the + * specified tag. */ public byte[] getFontTable(int sfntTag); /** - * Gets the table for a specified tag. - * Sfnt tables include cmap, name and head items. - * - * @param sfntTag the sfnt tag. - * @param offset the offset of the returned table. - * @param count the number of returned table. + * Gets the table for a specified tag. Sfnt tables include cmap, name and + * head items. * - * @return the table corresponding to sfntTag and containing - * the bytes starting at offset byte and including count bytes. + * @param sfntTag + * the sfnt tag. + * @param offset + * the offset of the returned table. + * @param count + * the number of returned table. + * @return the table corresponding to sfntTag and containing the bytes + * starting at offset byte and including count bytes. */ public byte[] getFontTable(int sfntTag, int offset, int count); /** - * Gets the table for a specified tag. - * Sfnt tables include cmap, name and head items. - * - * @param strSfntTag the str sfnt tag as a String. + * Gets the table for a specified tag. Sfnt tables include cmap, name and + * head items. * - * @return a byte array contains the font data corresponding - * to the specified tag. + * @param strSfntTag + * the str sfnt tag as a String. + * @return a byte array contains the font data corresponding to the + * specified tag. */ public byte[] getFontTable(String strSfntTag); /** - * Gets the table for a specified tag. - * Sfnt tables include cmap, name and head items. - * - * @param strSfntTag the sfnt tag as a String. - * @param offset the offset of the returned table. - * @param count the number of returned table. + * Gets the table for a specified tag. Sfnt tables include cmap, name and + * head items. * - * @return the table corresponding to sfntTag and containing - * the bytes starting at offset byte and including count bytes. + * @param strSfntTag + * the sfnt tag as a String. + * @param offset + * the offset of the returned table. + * @param count + * the number of returned table. + * @return the table corresponding to sfntTag and containing the bytes + * starting at offset byte and including count bytes. */ public byte[] getFontTable(String strSfntTag, int offset, int count); /** - * Gets the table size for a specified tag. - * - * @param strSfntTag the sfnt tag as a String. + * Gets the table size for a specified tag. * + * @param strSfntTag + * the sfnt tag as a String. * @return the table size for a specified tag. */ public int getFontTableSize(String strSfntTag); /** - * Gets the table size for a specified tag. - * - * @param sfntTag the sfnt tag. + * Gets the table size for a specified tag. * + * @param sfntTag + * the sfnt tag. * @return the table size for a specified tag. */ public int getFontTableSize(int sfntTag); } - diff --git a/awt/java/awt/font/ShapeGraphicAttribute.java b/awt/java/awt/font/ShapeGraphicAttribute.java index 45199fd3f3..182bffddc2 100644 --- a/awt/java/awt/font/ShapeGraphicAttribute.java +++ b/awt/java/awt/font/ShapeGraphicAttribute.java @@ -18,6 +18,7 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; import java.awt.BasicStroke; @@ -29,61 +30,75 @@ import java.awt.geom.Rectangle2D; import org.apache.harmony.misc.HashCode; - /** - * The ShapeGraphicAttribute class provides an opportunity to insert - * shapes to a text. + * The ShapeGraphicAttribute class provides an opportunity to insert shapes to a + * text. + * + * @since Android 1.0 */ public final class ShapeGraphicAttribute extends GraphicAttribute { // shape to render - /** The shape. */ + /** + * The shape. + */ private Shape fShape; - + // flag, if the shape should be stroked (true) or filled (false) - /** The stroke. */ + /** + * The stroke. + */ private boolean fStroke; // bounds of the shape - /** The bounds. */ + /** + * The bounds. + */ private Rectangle2D fBounds; - + // X coordinate of the origin point - /** The origin x. */ + /** + * The origin x. + */ private float fOriginX; - + // Y coordinate of the origin point - /** The origin y. */ + /** + * The origin y. + */ private float fOriginY; // width of the shape - /** The shape width. */ + /** + * The shape width. + */ private float fShapeWidth; - + // height of the shape - /** The shape height. */ + /** + * The shape height. + */ private float fShapeHeight; - /** - * The Constant STROKE indicates whether the Shape is stroked - * or not. + /** + * The Constant STROKE indicates whether the Shape is stroked or not. */ public static final boolean STROKE = true; - /** - * The Constant FILL indicates whether the Shape is filled - * or not. */ + /** + * The Constant FILL indicates whether the Shape is filled or not. + */ public static final boolean FILL = false; /** - * Instantiates a new ShapeGraphicAttribute object for the specified - * Shape. + * Instantiates a new ShapeGraphicAttribute object for the specified Shape. * - * @param shape the shape to be rendered by this - * ShapeGraphicAttribute. - * @param alignment the alignment of this ShapeGraphicAttribute. - * @param stroke true if the Shape is stroked, - * false if the Shape is filled. + * @param shape + * the shape to be rendered by this ShapeGraphicAttribute. + * @param alignment + * the alignment of this ShapeGraphicAttribute. + * @param stroke + * true if the Shape is stroked, false if the Shape is filled. */ public ShapeGraphicAttribute(Shape shape, int alignment, boolean stroke) { super(alignment); @@ -91,7 +106,7 @@ public final class ShapeGraphicAttribute extends GraphicAttribute { this.fShape = shape; this.fStroke = stroke; - this.fBounds = fShape.getBounds2D(); + this.fBounds = fShape.getBounds2D(); this.fOriginX = (float)fBounds.getMinX(); this.fOriginY = (float)fBounds.getMinY(); @@ -118,10 +133,10 @@ public final class ShapeGraphicAttribute extends GraphicAttribute { * Compares this ShapeGraphicAttribute object to the specified * ShapeGraphicAttribute object. * - * @param sga the ShapeGraphicAttribute object to be compared. - * - * @return true, if this ShapeGraphicAttribute object is equal - * to the specified ShapeGraphicAttribute object, false otherwise. + * @param sga + * the ShapeGraphicAttribute object to be compared. + * @return true, if this ShapeGraphicAttribute object is equal to the + * specified ShapeGraphicAttribute object, false otherwise. */ public boolean equals(ShapeGraphicAttribute sga) { if (sga == null) { @@ -132,27 +147,24 @@ public final class ShapeGraphicAttribute extends GraphicAttribute { return true; } - return ( fStroke == sga.fStroke && - getAlignment() == sga.getAlignment() && - fShape.equals(sga.fShape)); + return (fStroke == sga.fStroke && getAlignment() == sga.getAlignment() && fShape + .equals(sga.fShape)); } /** - * Compares this ShapeGraphicAttribute object to the specified - * Object. + * Compares this ShapeGraphicAttribute object to the specified Object. * - * @param obj the Object to be compared. - * - * @return true, if this ShapeGraphicAttribute object is equal - * to the specified Object, false otherwise. + * @param obj + * the Object to be compared. + * @return true, if this ShapeGraphicAttribute object is equal to the + * specified Object, false otherwise. */ @Override public boolean equals(Object obj) { try { - return equals((ShapeGraphicAttribute) obj); - } - catch(ClassCastException e) { + return equals((ShapeGraphicAttribute)obj); + } catch (ClassCastException e) { return false; } } @@ -160,7 +172,7 @@ public final class ShapeGraphicAttribute extends GraphicAttribute { @Override public void draw(Graphics2D g2, float x, float y) { AffineTransform at = AffineTransform.getTranslateInstance(x, y); - if (fStroke == STROKE){ + if (fStroke == STROKE) { Stroke oldStroke = g2.getStroke(); g2.setStroke(new BasicStroke()); g2.draw(at.createTransformedShape(fShape)); @@ -192,4 +204,3 @@ public final class ShapeGraphicAttribute extends GraphicAttribute { } } - diff --git a/awt/java/awt/font/TextHitInfo.java b/awt/java/awt/font/TextHitInfo.java index 17bbf717ce..6460ebacee 100644 --- a/awt/java/awt/font/TextHitInfo.java +++ b/awt/java/awt/font/TextHitInfo.java @@ -23,29 +23,36 @@ package java.awt.font; import org.apache.harmony.misc.HashCode; - /** - * The TextHitInfo class provides information about a caret position - * in a text model for insertion or deletion of a character in a text. - * The TextHitInfo defines two biases of the character: leading or trailing. - * Leading position means the left edge of the specified character - * (TextHitInfo.leading(2) method for "text" returns the left side of "x"). - * Trailing position means the right edge of the specified character - * (TextHitInfo.trailing(2) method for "text" returns the right side of "x"). + * The TextHitInfo class provides information about a caret position in a text + * model for insertion or deletion of a character in a text. The TextHitInfo + * defines two biases of the character: leading or trailing. Leading position + * means the left edge of the specified character (TextHitInfo.leading(2) method + * for "text" returns the left side of "x"). Trailing position means the right + * edge of the specified character (TextHitInfo.trailing(2) method for "text" + * returns the right side of "x"). + * + * @since Android 1.0 */ public final class TextHitInfo { - - /** The char idx. */ + + /** + * The char idx. + */ private int charIdx; // Represents character index in the line - - /** The is trailing. */ + + /** + * The is trailing. + */ private boolean isTrailing; /** * Instantiates a new text hit info. * - * @param idx the idx - * @param isTrailing the is trailing + * @param idx + * the idx. + * @param isTrailing + * the is trailing. */ private TextHitInfo(int idx, boolean isTrailing) { charIdx = idx; @@ -53,90 +60,82 @@ public final class TextHitInfo { } /** - * To string. + * Returns the textual string representation of this TextHitInfo instance. * - * @return the string + * @return the string representation. */ @Override public String toString() { - return new String( - "TextHitInfo[" + charIdx + ", " + //$NON-NLS-1$ //$NON-NLS-2$ - (isTrailing?"Trailing":"Leading") + "]" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + return new String("TextHitInfo[" + charIdx + ", " + //$NON-NLS-1$ //$NON-NLS-2$ + (isTrailing ? "Trailing" : "Leading") + "]" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ ); } /** * Compares this TextHitInfo object with the specified object. * - * @param obj the Object to be compared. - * - * @return true, if the specified object is a TextHitInfo object - * with the same data values as this TextHitInfo, false otherwise. + * @param obj + * the Object to be compared. + * @return true, if the specified object is a TextHitInfo object with the + * same data values as this TextHitInfo, false otherwise. */ @Override public boolean equals(Object obj) { if (obj instanceof TextHitInfo) { - return equals((TextHitInfo) obj); + return equals((TextHitInfo)obj); } return false; } /** - * Compares this TextHitInfo object with the specified TextHitInfo - * object. - * - * @param thi the TextHitInfo object to be compared. + * Compares this TextHitInfo object with the specified TextHitInfo object. * + * @param thi + * the TextHitInfo object to be compared. * @return true, if this TextHitInfo object has the same data values as the - * specified TextHitInfo object, false otherwise. + * specified TextHitInfo object, false otherwise. */ public boolean equals(TextHitInfo thi) { - return - thi != null && - thi.charIdx == charIdx && - thi.isTrailing == isTrailing; + return thi != null && thi.charIdx == charIdx && thi.isTrailing == isTrailing; } /** - * Gets a TextHitInfo object with its character index - * at the specified offset from the character index of - * this TextHitInfo. + * Gets a TextHitInfo object with its character index at the specified + * offset from the character index of this TextHitInfo. * - * @param offset the offset. - * - * @return the TextHitInfo. + * @param offset + * the offset. + * @return the TextHitInfo. */ public TextHitInfo getOffsetHit(int offset) { return new TextHitInfo(charIdx + offset, isTrailing); } /** - * Gets a TextHitInfo associated with the other side of - * the insertion point. - * + * Gets a TextHitInfo associated with the other side of the insertion point. + * * @return the other hit. */ public TextHitInfo getOtherHit() { - return isTrailing ? - new TextHitInfo(charIdx+1, false) : - new TextHitInfo(charIdx-1, true); + return isTrailing ? new TextHitInfo(charIdx + 1, false) + : new TextHitInfo(charIdx - 1, true); } /** - * Returns true if the leading edge of the character is hit, - * false if the trailing edge of the character is hit. + * Returns true if the leading edge of the character is hit, false if the + * trailing edge of the character is hit. * - * @return true if the leading edge of the character is hit, - * false if the trailing edge of the character is hit. + * @return true if the leading edge of the character is hit, false if the + * trailing edge of the character is hit. */ public boolean isLeadingEdge() { return !isTrailing; } /** - * Hash code. + * Returns the hash code value of this TextHitInfo instance. * - * @return the int + * @return the hash code value. */ @Override public int hashCode() { @@ -146,11 +145,11 @@ public final class TextHitInfo { /** * Gets the insertion index. * - * @return the insertion index: character index if the leading edge - * is hit, or character index + 1 if the trailing edge is hit. + * @return the insertion index: character index if the leading edge is hit, + * or character index + 1 if the trailing edge is hit. */ public int getInsertionIndex() { - return isTrailing ? charIdx+1 : charIdx; + return isTrailing ? charIdx + 1 : charIdx; } /** @@ -163,52 +162,52 @@ public final class TextHitInfo { } /** - * Returns a TextHitInfo associated with the trailing edge of - * the character at the specified char index. + * Returns a TextHitInfo associated with the trailing edge of the character + * at the specified char index. * - * @param charIndex the char index. - * - * @return the TextHitInfo associated with the trailing edge of - * the character at the specified char index. + * @param charIndex + * the char index. + * @return the TextHitInfo associated with the trailing edge of the + * character at the specified char index. */ public static TextHitInfo trailing(int charIndex) { return new TextHitInfo(charIndex, true); } /** - * Returns a TextHitInfo object associated with the leading edge - * of the character at the specified char index. - * - * @param charIndex the char index. + * Returns a TextHitInfo object associated with the leading edge of the + * character at the specified char index. * - * @return the TextHitInfo object associated with the leading edge - * of the character at the specified char index. + * @param charIndex + * the char index. + * @return the TextHitInfo object associated with the leading edge of the + * character at the specified char index. */ public static TextHitInfo leading(int charIndex) { return new TextHitInfo(charIndex, false); } /** - * Returns a (trailing) TextHitInfo object associated with the character + * Returns a (trailing) TextHitInfo object associated with the character * before the specified offset. * - * @param offset the offset. - * - * @return the TextHitInfo object associated with the character - * before the specified offset. + * @param offset + * the offset. + * @return the TextHitInfo object associated with the character before the + * specified offset. */ public static TextHitInfo beforeOffset(int offset) { - return new TextHitInfo(offset-1, true); + return new TextHitInfo(offset - 1, true); } /** - * Returns a (leading) TextHitInfo object associated with the character + * Returns a (leading) TextHitInfo object associated with the character * after the specified offset. * - * @param offset the offset. - * - * @return the TextHitInfo object associated with the character - * after the specified offset. + * @param offset + * the offset. + * @return the TextHitInfo object associated with the character after the + * specified offset. */ public static TextHitInfo afterOffset(int offset) { return new TextHitInfo(offset, false); diff --git a/awt/java/awt/font/TextLayout.java b/awt/java/awt/font/TextLayout.java index e80afd091e..cc6f0ba3af 100644 --- a/awt/java/awt/font/TextLayout.java +++ b/awt/java/awt/font/TextLayout.java @@ -39,18 +39,19 @@ import org.apache.harmony.awt.internal.nls.Messages; /** * The TextLayout class defines the graphical representation of character data. - * This class provides method for obtaining information about cursor - * positioning and movement, split cursors for text with different directions, - * logical and visual highlighting, multiple baselines, hits, justification, - * ascent, descent, and advance, and rendering. A TextLayout object can be - * rendered using Graphics context. + * This class provides method for obtaining information about cursor positioning + * and movement, split cursors for text with different directions, logical and + * visual highlighting, multiple baselines, hits, justification, ascent, + * descent, and advance, and rendering. A TextLayout object can be rendered + * using Graphics context. + * + * @since Android 1.0 */ public final class TextLayout implements Cloneable { /** - * The CaretPolicy class provides a policy for obtaining the - * caret location. The single getStrongCaret method specifies - * the policy. + * The CaretPolicy class provides a policy for obtaining the caret location. + * The single getStrongCaret method specifies the policy. */ public static class CaretPolicy { @@ -62,14 +63,15 @@ public final class TextLayout implements Cloneable { } /** - * Returns whichever of the two specified TextHitInfo objects - * has the stronger caret (higher character level) in the - * specified TextLayout. - * - * @param hit1 the first TextHitInfo of the specified TextLayout. - * @param hit2 the second TextHitInfo of the specified TextLayout. - * @param layout the TextLayout. + * Returns whichever of the two specified TextHitInfo objects has the + * stronger caret (higher character level) in the specified TextLayout. * + * @param hit1 + * the first TextHitInfo of the specified TextLayout. + * @param hit2 + * the second TextHitInfo of the specified TextLayout. + * @param layout + * the TextLayout. * @return the TextHitInfo with the stronger caret. */ public TextHitInfo getStrongCaret(TextHitInfo hit1, TextHitInfo hit2, TextLayout layout) { @@ -87,50 +89,64 @@ public final class TextLayout implements Cloneable { } - /** + /** * The Constant DEFAULT_CARET_POLICY indicates the default caret policy. */ public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY = new CaretPolicy(); - /** The breaker. */ + /** + * The breaker. + */ private TextRunBreaker breaker; - - /** The metrics valid. */ + + /** + * The metrics valid. + */ private boolean metricsValid = false; - - /** The tmc. */ + + /** + * The tmc. + */ private TextMetricsCalculator tmc; - - /** The metrics. */ + + /** + * The metrics. + */ private BasicMetrics metrics; - - /** The caret manager. */ + + /** + * The caret manager. + */ private CaretManager caretManager; - - /** The justification width. */ + + /** + * The justification width. + */ float justificationWidth = -1; /** - * Instantiates a new TextLayout object from the specified string - * and Font. + * Instantiates a new TextLayout object from the specified string and Font. * - * @param string the string to be displayed. - * @param font the font of the text. - * @param frc the FontRenderContext object for obtaining - * information about a graphics device. + * @param string + * the string to be displayed. + * @param font + * the font of the text. + * @param frc + * the FontRenderContext object for obtaining information about a + * graphics device. */ public TextLayout(String string, Font font, FontRenderContext frc) { - if (string == null){ + if (string == null) { // awt.01='{0}' parameter is null throw new IllegalArgumentException(Messages.getString("awt.01", "string")); //$NON-NLS-1$ //$NON-NLS-2$ } - - if (font == null){ + + if (font == null) { // awt.01='{0}' parameter is null throw new IllegalArgumentException(Messages.getString("awt.01", "font")); //$NON-NLS-1$ //$NON-NLS-2$ } - if (string.length() == 0){ + if (string.length() == 0) { // awt.02='{0}' parameter has zero length throw new IllegalArgumentException(Messages.getString("awt.02", "string")); //$NON-NLS-1$ //$NON-NLS-2$ } @@ -142,35 +158,35 @@ public final class TextLayout implements Cloneable { } /** - * Instantiates a new TextLayout from the specified text and - * a map of attributes. + * Instantiates a new TextLayout from the specified text and a map of + * attributes. * - * @param string the string to be displayed. - * @param attributes the attributes to be used for obtaining the text - * style. - * @param frc the FontRenderContext object for obtaining - * information about a graphics device. + * @param string + * the string to be displayed. + * @param attributes + * the attributes to be used for obtaining the text style. + * @param frc + * the FontRenderContext object for obtaining information about a + * graphics device. */ - public TextLayout( - String string, + public TextLayout(String string, Map attributes, - FontRenderContext frc ) { - if (string == null){ + FontRenderContext frc) { + if (string == null) { // awt.01='{0}' parameter is null throw new IllegalArgumentException(Messages.getString("awt.01", "string")); //$NON-NLS-1$ //$NON-NLS-2$ } - - if (attributes == null){ + + if (attributes == null) { // awt.01='{0}' parameter is null throw new IllegalArgumentException(Messages.getString("awt.01", "attributes")); //$NON-NLS-1$ //$NON-NLS-2$ } - - if (string.length() == 0){ + + if (string.length() == 0) { // awt.02='{0}' parameter has zero length throw new IllegalArgumentException(Messages.getString("awt.02", "string")); //$NON-NLS-1$ //$NON-NLS-2$ } - - + AttributedString as = new AttributedString(string); as.addAttributes(attributes, 0, string.length()); this.breaker = new TextRunBreaker(as.getIterator(), frc); @@ -180,17 +196,19 @@ public final class TextLayout implements Cloneable { /** * Instantiates a new TextLayout from the AttributedCharacterIterator. * - * @param text the AttributedCharacterIterator. - * @param frc the FontRenderContext object for obtaining - * information about a graphics device. + * @param text + * the AttributedCharacterIterator. + * @param frc + * the FontRenderContext object for obtaining information about a + * graphics device. */ public TextLayout(AttributedCharacterIterator text, FontRenderContext frc) { - if (text == null){ + if (text == null) { // awt.03='{0}' iterator parameter is null throw new IllegalArgumentException(Messages.getString("awt.03", "text")); //$NON-NLS-1$ //$NON-NLS-2$ } - - if (text.getBeginIndex() == text.getEndIndex()){ + + if (text.getBeginIndex() == text.getEndIndex()) { // awt.04='{0}' iterator parameter has zero length throw new IllegalArgumentException(Messages.getString("awt.04", "text")); //$NON-NLS-1$ //$NON-NLS-2$ } @@ -202,7 +220,8 @@ public final class TextLayout implements Cloneable { /** * Instantiates a new text layout. * - * @param breaker the breaker + * @param breaker + * the breaker. */ TextLayout(TextRunBreaker breaker) { this.breaker = breaker; @@ -226,7 +245,7 @@ public final class TextLayout implements Cloneable { */ @Override protected Object clone() { - TextLayout res = new TextLayout((TextRunBreaker) breaker.clone()); + TextLayout res = new TextLayout((TextRunBreaker)breaker.clone()); if (justificationWidth >= 0) { res.handleJustify(justificationWidth); @@ -238,10 +257,10 @@ public final class TextLayout implements Cloneable { /** * Compares this TextLayout object to the specified TextLayout object. * - * @param layout the TextLayout object to be compared. - * - * @return true, if this TextLayout object is equal to - * the specified TextLayout object, false otherwise. + * @param layout + * the TextLayout object to be compared. + * @return true, if this TextLayout object is equal to the specified + * TextLayout object, false otherwise. */ public boolean equals(TextLayout layout) { if (layout == null) { @@ -253,14 +272,14 @@ public final class TextLayout implements Cloneable { /** * Compares this TextLayout object to the specified Object. * - * @param obj the Object to be compared. - * - * @return true, if this TextLayout object is equal to - * the specified Object, false otherwise. + * @param obj + * the Object to be compared. + * @return true, if this TextLayout object is equal to the specified Object, + * false otherwise. */ @Override public boolean equals(Object obj) { - return obj instanceof TextLayout ? equals((TextLayout) obj) : false; + return obj instanceof TextLayout ? equals((TextLayout)obj) : false; } /** @@ -274,16 +293,19 @@ public final class TextLayout implements Cloneable { } /** - * Draws this TextLayout at the specified location with the - * specified Graphics2D context. + * Draws this TextLayout at the specified location with the specified + * Graphics2D context. * - * @param g2d the Graphics2D object which renders this TextLayout. - * @param x the X coordinate of the TextLayout origin. - * @param y the Y coordinate of the TextLayout origin. + * @param g2d + * the Graphics2D object which renders this TextLayout. + * @param x + * the X coordinate of the TextLayout origin. + * @param y + * the Y coordinate of the TextLayout origin. */ public void draw(Graphics2D g2d, float x, float y) { updateMetrics(); - breaker.drawSegments(g2d, x ,y); + breaker.drawSegments(g2d, x, y); } /** @@ -325,15 +347,15 @@ public final class TextLayout implements Cloneable { */ public byte getBaseline() { updateMetrics(); - return (byte) metrics.getBaseLineIndex(); + return (byte)metrics.getBaseLineIndex(); } /** - * Gets the float array of offsets for the baselines which - * are used in this TextLayout. + * Gets the float array of offsets for the baselines which are used in this + * TextLayout. * - * @return the float array of offsets for the baselines which - * are used in this TextLayout. + * @return the float array of offsets for the baselines which are used in + * this TextLayout. */ public float[] getBaselineOffsets() { updateMetrics(); @@ -341,14 +363,15 @@ public final class TextLayout implements Cloneable { } /** - * Gets the black box bounds of the characters in the specified area. - * The black box bounds is an Shape which contains all - * bounding boxes of all the glyphs of the characters - * between firstEndpoint and secondEndpoint parameters values. - * - * @param firstEndpoint the first point of the area. - * @param secondEndpoint the second point of the area. + * Gets the black box bounds of the characters in the specified area. The + * black box bounds is an Shape which contains all bounding boxes of all the + * glyphs of the characters between firstEndpoint and secondEndpoint + * parameters values. * + * @param firstEndpoint + * the first point of the area. + * @param secondEndpoint + * the second point of the area. * @return the Shape which contains black box bounds. */ public Shape getBlackBoxBounds(int firstEndpoint, int secondEndpoint) { @@ -372,8 +395,8 @@ public final class TextLayout implements Cloneable { /** * Gets information about the caret of the specified TextHitInfo. * - * @param hitInfo the TextHitInfo. - * + * @param hitInfo + * the TextHitInfo. * @return the information about the caret of the specified TextHitInfo. */ public float[] getCaretInfo(TextHitInfo hitInfo) { @@ -382,12 +405,13 @@ public final class TextLayout implements Cloneable { } /** - * Gets information about the caret of the specified TextHitInfo - * of a character in this TextLayout. - * - * @param hitInfo the TextHitInfo of a character in this TextLayout. - * @param bounds the bounds to which the caret info is constructed. + * Gets information about the caret of the specified TextHitInfo of a + * character in this TextLayout. * + * @param hitInfo + * the TextHitInfo of a character in this TextLayout. + * @param bounds + * the bounds to which the caret info is constructed. * @return the caret of the specified TextHitInfo. */ public float[] getCaretInfo(TextHitInfo hitInfo, Rectangle2D bounds) { @@ -396,12 +420,13 @@ public final class TextLayout implements Cloneable { } /** - * Gets a Shape which represents the caret of the specified TextHitInfo - * in the bounds of this TextLayout. - * - * @param hitInfo the TextHitInfo. - * @param bounds the bounds to which the caret info is constructed. + * Gets a Shape which represents the caret of the specified TextHitInfo in + * the bounds of this TextLayout. * + * @param hitInfo + * the TextHitInfo. + * @param bounds + * the bounds to which the caret info is constructed. * @return the Shape which represents the caret. */ public Shape getCaretShape(TextHitInfo hitInfo, Rectangle2D bounds) { @@ -410,11 +435,11 @@ public final class TextLayout implements Cloneable { } /** - * Gets a Shape which represents the caret of the specified TextHitInfo - * in the bounds of this TextLayout. - * - * @param hitInfo the TextHitInfo. + * Gets a Shape which represents the caret of the specified TextHitInfo in + * the bounds of this TextLayout. * + * @param hitInfo + * the TextHitInfo. * @return the Shape which represents the caret. */ public Shape getCaretShape(TextHitInfo hitInfo) { @@ -423,45 +448,47 @@ public final class TextLayout implements Cloneable { } /** - * Gets two Shapes for the strong and weak carets with - * default caret policy and null bounds: the first element - * is the strong caret, the second is the weak caret or null. + * Gets two Shapes for the strong and weak carets with default caret policy + * and null bounds: the first element is the strong caret, the second is the + * weak caret or null. * - * @param offset an offset in the TextLayout. - * - * @return an array of two Shapes corresponded to the strong - * and weak carets. + * @param offset + * an offset in the TextLayout. + * @return an array of two Shapes corresponded to the strong and weak + * carets. */ public Shape[] getCaretShapes(int offset) { return getCaretShapes(offset, null, TextLayout.DEFAULT_CARET_POLICY); } /** - * Gets two Shapes for the strong and weak carets with - * the default caret policy: the first element is the strong - * caret, the second is the weak caret or null. - * - * @param offset an offset in the TextLayout. - * @param bounds the bounds to which to extend the carets. + * Gets two Shapes for the strong and weak carets with the default caret + * policy: the first element is the strong caret, the second is the weak + * caret or null. * - * @return an array of two Shapes corresponded to the strong - * and weak carets. + * @param offset + * an offset in the TextLayout. + * @param bounds + * the bounds to which to extend the carets. + * @return an array of two Shapes corresponded to the strong and weak + * carets. */ public Shape[] getCaretShapes(int offset, Rectangle2D bounds) { return getCaretShapes(offset, bounds, TextLayout.DEFAULT_CARET_POLICY); } /** - * Gets two Shapes for the strong and weak carets: the first - * element is the strong caret, the second is the weak caret - * or null. - * - * @param offset an offset in the TextLayout. - * @param bounds the bounds to which to extend the carets. - * @param policy the specified CaretPolicy. + * Gets two Shapes for the strong and weak carets: the first element is the + * strong caret, the second is the weak caret or null. * - * @return an array of two Shapes corresponded to the strong - * and weak carets. + * @param offset + * an offset in the TextLayout. + * @param bounds + * the bounds to which to extend the carets. + * @param policy + * the specified CaretPolicy. + * @return an array of two Shapes corresponded to the strong and weak + * carets. */ public Shape[] getCaretShapes(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy) { if (offset < 0 || offset > breaker.getCharCount()) { @@ -483,15 +510,15 @@ public final class TextLayout implements Cloneable { } /** - * Gets the level of the character with the specified index. - * - * @param index the specified index of the character. + * Gets the level of the character with the specified index. * + * @param index + * the specified index of the character. * @return the level of the character. */ public byte getCharacterLevel(int index) { if (index == -1 || index == getCharacterCount()) { - return (byte) breaker.getBaseLevel(); + return (byte)breaker.getBaseLevel(); } return breaker.getLevel(index); } @@ -507,16 +534,15 @@ public final class TextLayout implements Cloneable { } /** - * Gets the TextLayout wich is justified with the specified - * width related to this TextLayout. - * - * @param justificationWidth the width which is used - * for justification. + * Gets the TextLayout wich is justified with the specified width related to + * this TextLayout. * + * @param justificationWidth + * the width which is used for justification. * @return a TextLayout justified to the specified width. - * - * @throws Error the error occures if this TextLayout has been - * already justified. + * @throws Error + * the error occures if this TextLayout has been already + * justified. */ public TextLayout getJustifiedLayout(float justificationWidth) throws Error { float justification = breaker.getJustification(); @@ -528,7 +554,7 @@ public final class TextLayout implements Cloneable { return this; } - TextLayout justifiedLayout = new TextLayout((TextRunBreaker) breaker.clone()); + TextLayout justifiedLayout = new TextLayout((TextRunBreaker)breaker.clone()); justifiedLayout.handleJustify(justificationWidth); return justifiedLayout; } @@ -544,15 +570,15 @@ public final class TextLayout implements Cloneable { } /** - * Gets a Shape representing the logical selection betweeen - * the specified endpoints and extended to the natural - * bounds of this TextLayout. - * - * @param firstEndpoint the first selected endpoint within the area of characters - * @param secondEndpoint the second selected endpoint within the area of characters + * Gets a Shape representing the logical selection betweeen the specified + * endpoints and extended to the natural bounds of this TextLayout. * - * @return a Shape represented the logical selection betweeen - * the specified endpoints. + * @param firstEndpoint + * the first selected endpoint within the area of characters + * @param secondEndpoint + * the second selected endpoint within the area of characters + * @return a Shape represented the logical selection betweeen the specified + * endpoints. */ public Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint) { updateMetrics(); @@ -560,22 +586,19 @@ public final class TextLayout implements Cloneable { } /** - * Gets a Shape representing the logical selection betweeen - * the specified endpoints and extended to the specified - * bounds of this TextLayout. + * Gets a Shape representing the logical selection betweeen the specified + * endpoints and extended to the specified bounds of this TextLayout. * - * @param firstEndpoint the first selected endpoint within the area of characters - * @param secondEndpoint the second selected endpoint within the area of characters - * @param bounds the specified bounds of this TextLayout. - * - * @return a Shape represented the logical selection betweeen - * the specified endpoints. + * @param firstEndpoint + * the first selected endpoint within the area of characters + * @param secondEndpoint + * the second selected endpoint within the area of characters + * @param bounds + * the specified bounds of this TextLayout. + * @return a Shape represented the logical selection betweeen the specified + * endpoints. */ - public Shape getLogicalHighlightShape( - int firstEndpoint, - int secondEndpoint, - Rectangle2D bounds - ) { + public Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D bounds) { updateMetrics(); if (firstEndpoint > secondEndpoint) { @@ -583,62 +606,51 @@ public final class TextLayout implements Cloneable { // awt.197=Endpoints are out of range throw new IllegalArgumentException(Messages.getString("awt.197")); //$NON-NLS-1$ } - return caretManager.getLogicalHighlightShape( - secondEndpoint, - firstEndpoint, - bounds, - this - ); + return caretManager.getLogicalHighlightShape(secondEndpoint, firstEndpoint, bounds, + this); } if (firstEndpoint < 0 || secondEndpoint > breaker.getCharCount()) { // awt.197=Endpoints are out of range throw new IllegalArgumentException(Messages.getString("awt.197")); //$NON-NLS-1$ } - return caretManager.getLogicalHighlightShape( - firstEndpoint, - secondEndpoint, - bounds, - this - ); + return caretManager.getLogicalHighlightShape(firstEndpoint, secondEndpoint, bounds, this); } /** - * Gets the logical ranges of text which corresponds to a visual - * selection. - * - * @param hit1 the first endpoint of the visual range. - * @param hit2 the second endpoint of the visual range. + * Gets the logical ranges of text which corresponds to a visual selection. * - * @return the logical ranges of text which corresponds to a visual - * selection. + * @param hit1 + * the first endpoint of the visual range. + * @param hit2 + * the second endpoint of the visual range. + * @return the logical ranges of text which corresponds to a visual + * selection. */ public int[] getLogicalRangesForVisualSelection(TextHitInfo hit1, TextHitInfo hit2) { return caretManager.getLogicalRangesForVisualSelection(hit1, hit2); } /** - * Gets the TextHitInfo for the next caret to the left (or - * up at the end of the line) of the specified offset. - * - * @param offset the offset in this TextLayout. + * Gets the TextHitInfo for the next caret to the left (or up at the end of + * the line) of the specified offset. * - * @return the TextHitInfo for the next caret to the left (or - * up at the end of the line) of the specified hit, or null - * if there is no hit. + * @param offset + * the offset in this TextLayout. + * @return the TextHitInfo for the next caret to the left (or up at the end + * of the line) of the specified hit, or null if there is no hit. */ public TextHitInfo getNextLeftHit(int offset) { return getNextLeftHit(offset, DEFAULT_CARET_POLICY); } /** - * Gets the TextHitInfo for the next caret to the left (or - * up at the end of the line) of the specified hit. + * Gets the TextHitInfo for the next caret to the left (or up at the end of + * the line) of the specified hit. * - * @param hitInfo the initial hit. - * - * @return the TextHitInfo for the next caret to the left (or - * up at the end of the line) of the specified hit, or null - * if there is no hit. + * @param hitInfo + * the initial hit. + * @return the TextHitInfo for the next caret to the left (or up at the end + * of the line) of the specified hit, or null if there is no hit. */ public TextHitInfo getNextLeftHit(TextHitInfo hitInfo) { breaker.createAllSegments(); @@ -646,15 +658,15 @@ public final class TextLayout implements Cloneable { } /** - * Gets the TextHitInfo for the next caret to the left (or - * up at the end of the line) of the specified offset, given the - * specified caret policy. - * - * @param offset the offset in this TextLayout. - * @param policy the policy to be used for obtaining the strong caret. + * Gets the TextHitInfo for the next caret to the left (or up at the end of + * the line) of the specified offset, given the specified caret policy. * - * @return the TextHitInfo for the next caret to the left of the - * specified offset, or null if there is no hit. + * @param offset + * the offset in this TextLayout. + * @param policy + * the policy to be used for obtaining the strong caret. + * @return the TextHitInfo for the next caret to the left of the specified + * offset, or null if there is no hit. */ public TextHitInfo getNextLeftHit(int offset, TextLayout.CaretPolicy policy) { if (offset < 0 || offset > breaker.getCharCount()) { @@ -673,14 +685,14 @@ public final class TextLayout implements Cloneable { } /** - * Gets the TextHitInfo for the next caret to the right (or - * down at the end of the line) of the specified hit. - * - * @param hitInfo the initial hit. + * Gets the TextHitInfo for the next caret to the right (or down at the end + * of the line) of the specified hit. * - * @return the TextHitInfo for the next caret to the right (or - * down at the end of the line) of the specified hit, or null - * if there is no hit. + * @param hitInfo + * the initial hit. + * @return the TextHitInfo for the next caret to the right (or down at the + * end of the line) of the specified hit, or null if there is no + * hit. */ public TextHitInfo getNextRightHit(TextHitInfo hitInfo) { breaker.createAllSegments(); @@ -688,28 +700,28 @@ public final class TextLayout implements Cloneable { } /** - * Gets the TextHitInfo for the next caret to the right (or - * down at the end of the line) of the specified offset. + * Gets the TextHitInfo for the next caret to the right (or down at the end + * of the line) of the specified offset. * - * @param offset the offset in this TextLayout. - * - * @return the TextHitInfo for the next caret to the right of the - * specified offset, or null if there is no hit. + * @param offset + * the offset in this TextLayout. + * @return the TextHitInfo for the next caret to the right of the specified + * offset, or null if there is no hit. */ public TextHitInfo getNextRightHit(int offset) { return getNextRightHit(offset, DEFAULT_CARET_POLICY); } /** - * Gets the TextHitInfo for the next caret to the right (or - * down at the end of the line) of the specified offset, given the - * specified caret policy. - * - * @param offset the offset in this TextLayout. - * @param policy the policy to be used for obtaining the strong caret. + * Gets the TextHitInfo for the next caret to the right (or down at the end + * of the line) of the specified offset, given the specified caret policy. * - * @return the TextHitInfo for the next caret to the right of the - * specified offset, or null if there is no hit. + * @param offset + * the offset in this TextLayout. + * @param policy + * the policy to be used for obtaining the strong caret. + * @return the TextHitInfo for the next caret to the right of the specified + * offset, or null if there is no hit. */ public TextHitInfo getNextRightHit(int offset, TextLayout.CaretPolicy policy) { if (offset < 0 || offset > breaker.getCharCount()) { @@ -730,10 +742,9 @@ public final class TextLayout implements Cloneable { /** * Gets the outline of this TextLayout as a Shape. * - * @param xform the AffineTransform to be used to transform - * the outline before returning it, or null if no transformation - * is desired. - * + * @param xform + * the AffineTransform to be used to transform the outline before + * returning it, or null if no transformation is desired. * @return the outline of this TextLayout as a Shape. */ public Shape getOutline(AffineTransform xform) { @@ -749,8 +760,8 @@ public final class TextLayout implements Cloneable { } /** - * Gets the visible advance of this TextLayout which is defined as - * diffence between leading (advance) and trailing whitespace. + * Gets the visible advance of this TextLayout which is defined as diffence + * between leading (advance) and trailing whitespace. * * @return the visible advance of this TextLayout. */ @@ -764,15 +775,13 @@ public final class TextLayout implements Cloneable { if (lastNonWhitespace < 0) { return 0; - } else if (lastNonWhitespace == getCharacterCount()-1) { + } else if (lastNonWhitespace == getCharacterCount() - 1) { return getAdvance(); } else if (justificationWidth >= 0) { // Layout is justified return justificationWidth; } else { - breaker.pushSegments( - breaker.getACI().getBeginIndex(), - lastNonWhitespace + breaker.getACI().getBeginIndex() + 1 - ); + breaker.pushSegments(breaker.getACI().getBeginIndex(), lastNonWhitespace + + breaker.getACI().getBeginIndex() + 1); breaker.createAllSegments(); @@ -784,14 +793,16 @@ public final class TextLayout implements Cloneable { } /** - * Gets a Shape which corresponds to the highlighted (selected) area - * based on two hit locations within the text and extends to the bounds. - * - * @param hit1 the first text hit location. - * @param hit2 the second text hit location. - * @param bounds the rectangle that the highlighted area should be - * extended or restricted to. + * Gets a Shape which corresponds to the highlighted (selected) area based + * on two hit locations within the text and extends to the bounds. * + * @param hit1 + * the first text hit location. + * @param hit2 + * the second text hit location. + * @param bounds + * the rectangle that the highlighted area should be extended or + * restricted to. * @return a Shape which corresponds to the highlighted (selected) area. */ public Shape getVisualHighlightShape(TextHitInfo hit1, TextHitInfo hit2, Rectangle2D bounds) { @@ -799,12 +810,13 @@ public final class TextLayout implements Cloneable { } /** - * Gets a Shape which corresponds to the highlighted (selected) area - * based on two hit locations within the text. - * - * @param hit1 the first text hit location. - * @param hit2 the second text hit location. + * Gets a Shape which corresponds to the highlighted (selected) area based + * on two hit locations within the text. * + * @param hit1 + * the first text hit location. + * @param hit2 + * the second text hit location. * @return a Shape which corresponds to the highlighted (selected) area. */ public Shape getVisualHighlightShape(TextHitInfo hit1, TextHitInfo hit2) { @@ -813,23 +825,23 @@ public final class TextLayout implements Cloneable { } /** - * Gets the TextHitInfo for a hit on the opposite side of the - * specified hit's caret. - * - * @param hitInfo the specified TextHitInfo. + * Gets the TextHitInfo for a hit on the opposite side of the specified + * hit's caret. * - * @return the TextHitInfo for a hit on the opposite side of the - * specified hit's caret. + * @param hitInfo + * the specified TextHitInfo. + * @return the TextHitInfo for a hit on the opposite side of the specified + * hit's caret. */ public TextHitInfo getVisualOtherHit(TextHitInfo hitInfo) { return caretManager.getVisualOtherHit(hitInfo); } /** - * Justifies the text; this method should be overridden - * by subclasses. + * Justifies the text; this method should be overridden by subclasses. * - * @param justificationWidth the width for justification. + * @param justificationWidth + * the width for justification. */ protected void handleJustify(float justificationWidth) { float justification = breaker.getJustification(); @@ -851,54 +863,54 @@ public final class TextLayout implements Cloneable { } /** - * Returns a TextHitInfo object that gives information on which - * division point (between two characters) is corresponds to a - * hit (such as a mouse click) at the specified coordinates. + * Returns a TextHitInfo object that gives information on which division + * point (between two characters) is corresponds to a hit (such as a mouse + * click) at the specified coordinates. * - * @param x the X coordinate in this TextLayout. - * @param y the Y coordinate in this TextLayout. - * - * TextHitInfo object cooresponding to the given coordinates - * within the text. + * @param x + * the X coordinate in this TextLayout. + * @param y + * the Y coordinate in this TextLayout. TextHitInfo object + * corresponding to the given coordinates within the text. + * @return the information about the character at the specified position. */ public TextHitInfo hitTestChar(float x, float y) { return hitTestChar(x, y, getBounds()); } /** - * Returns a TextHitInfo object that gives information on which - * division point (between two characters) is corresponds to a - * hit (such as a mouse click) at the specified coordinates within - * the specified text rectangle. - * - * @param x the X coordinate in this TextLayout. - * @param y the Y coordinate in this TextLayout. - * @param bounds the bounds of the text area. + * Returns a TextHitInfo object that gives information on which division + * point (between two characters) is corresponds to a hit (such as a mouse + * click) at the specified coordinates within the specified text rectangle. * - * TextHitInfo object cooresponding to the given coordinates - * within the text. + * @param x + * the X coordinate in this TextLayout. + * @param y + * the Y coordinate in this TextLayout. + * @param bounds + * the bounds of the text area. TextHitInfo object corresponding + * to the given coordinates within the text. + * @return the information about the character at the specified position. */ public TextHitInfo hitTestChar(float x, float y, Rectangle2D bounds) { if (x > bounds.getMaxX()) { - return breaker.isLTR() ? - TextHitInfo.trailing(breaker.getCharCount() - 1) : TextHitInfo.leading(0); + return breaker.isLTR() ? TextHitInfo.trailing(breaker.getCharCount() - 1) : TextHitInfo + .leading(0); } if (x < bounds.getMinX()) { - return breaker.isLTR() ? - TextHitInfo.leading(0) : TextHitInfo.trailing(breaker.getCharCount() - 1); + return breaker.isLTR() ? TextHitInfo.leading(0) : TextHitInfo.trailing(breaker + .getCharCount() - 1); } return breaker.hitTest(x, y); } /** - * Returns true if this TextLayout has a "left to right" - * direction. + * Returns true if this TextLayout has a "left to right" direction. * - * @return true if this TextLayout has a "left to right" - * direction, false if this TextLayout has a "right to left" - * direction. + * @return true if this TextLayout has a "left to right" direction, false if + * this TextLayout has a "right to left" direction. */ public boolean isLeftToRight() { return breaker.isLTR(); @@ -913,4 +925,3 @@ public final class TextLayout implements Cloneable { return false; } } - diff --git a/awt/java/awt/font/TextMeasurer.java b/awt/java/awt/font/TextMeasurer.java index 017f3d9c2e..9741f59c40 100644 --- a/awt/java/awt/font/TextMeasurer.java +++ b/awt/java/awt/font/TextMeasurer.java @@ -21,7 +21,6 @@ package java.awt.font; - import java.text.AttributedCharacterIterator; import org.apache.harmony.awt.gl.font.TextMetricsCalculator; @@ -29,26 +28,38 @@ import org.apache.harmony.awt.gl.font.TextRunBreaker; /** * The TextMeasurer class provides utilities for line break operations. + * + * @since Android 1.0 */ public final class TextMeasurer implements Cloneable { - - /** The aci. */ + + /** + * The aci. + */ AttributedCharacterIterator aci; - - /** The frc. */ + + /** + * The frc. + */ FontRenderContext frc; - - /** The breaker. */ + + /** + * The breaker. + */ TextRunBreaker breaker = null; - - /** The tmc. */ + + /** + * The tmc. + */ TextMetricsCalculator tmc = null; /** * Instantiates a new text measurer from the specified text. * - * @param text the source text. - * @param frc the FontRenderContext. + * @param text + * the source text. + * @param frc + * the FontRenderContext. */ public TextMeasurer(AttributedCharacterIterator text, FontRenderContext frc) { this.aci = text; @@ -58,17 +69,19 @@ public final class TextMeasurer implements Cloneable { } /** - * Replaces the current text with the new text, inserting a break - * character at the specified insert position. + * Replaces the current text with the new text, inserting a break character + * at the specified insert position. * - * @param newParagraph the new paragraph text. - * @param insertPos the position in the text where the character is inserted. + * @param newParagraph + * the new paragraph text. + * @param insertPos + * the position in the text where the character is inserted. */ public void insertChar(AttributedCharacterIterator newParagraph, int insertPos) { AttributedCharacterIterator oldAci = aci; aci = newParagraph; - if ((oldAci.getEndIndex() - oldAci.getBeginIndex()) - - (aci.getEndIndex() - aci.getBeginIndex()) != -1) { + if ((oldAci.getEndIndex() - oldAci.getBeginIndex()) + - (aci.getEndIndex() - aci.getBeginIndex()) != -1) { breaker = new TextRunBreaker(aci, this.frc); tmc = new TextMetricsCalculator(breaker); } else { @@ -77,17 +90,19 @@ public final class TextMeasurer implements Cloneable { } /** - * Replaces the current text with the new text and deletes a - * character at the specified position. + * Replaces the current text with the new text and deletes a character at + * the specified position. * - * @param newParagraph the paragraph text after deletion. - * @param deletePos the position in the text where the character is removed. + * @param newParagraph + * the paragraph text after deletion. + * @param deletePos + * the position in the text where the character is removed. */ public void deleteChar(AttributedCharacterIterator newParagraph, int deletePos) { AttributedCharacterIterator oldAci = aci; aci = newParagraph; - if ((oldAci.getEndIndex() - oldAci.getBeginIndex()) - - (aci.getEndIndex() - aci.getBeginIndex()) != 1) { + if ((oldAci.getEndIndex() - oldAci.getBeginIndex()) + - (aci.getEndIndex() - aci.getBeginIndex()) != 1) { breaker = new TextRunBreaker(aci, this.frc); tmc = new TextMetricsCalculator(breaker); } else { @@ -102,39 +117,39 @@ public final class TextMeasurer implements Cloneable { */ @Override protected Object clone() { - return new TextMeasurer((AttributedCharacterIterator) aci.clone(), frc); + return new TextMeasurer((AttributedCharacterIterator)aci.clone(), frc); } /** * Returns a TextLayout of the specified character range. * - * @param start the index of the first character. - * @param limit the index after the last character. - * - * @return a TextLayout for the characters beginning at "start" up - * to "end". + * @param start + * the index of the first character. + * @param limit + * the index after the last character. + * @return a TextLayout for the characters beginning at "start" up to "end". */ public TextLayout getLayout(int start, int limit) { breaker.pushSegments(start - aci.getBeginIndex(), limit - aci.getBeginIndex()); breaker.createAllSegments(); - TextLayout layout = new TextLayout((TextRunBreaker) breaker.clone()); + TextLayout layout = new TextLayout((TextRunBreaker)breaker.clone()); breaker.popSegments(); return layout; } /** - * Returns the graphical width of a line beginning at "start" - * parameter and including characters up to "end" parameter. - * "start" and "end" are absolute indices, not relative to the - * "start" of the paragraph. - * - * @param start the character index at which to start measuring. - * @param end the character index at which to stop measuring. + * Returns the graphical width of a line beginning at "start" parameter and + * including characters up to "end" parameter. "start" and "end" are + * absolute indices, not relative to the "start" of the paragraph. * - * @return the graphical width of a line beginning at "start" - * and including characters up to "end". + * @param start + * the character index at which to start measuring. + * @param end + * the character index at which to stop measuring. + * @return the graphical width of a line beginning at "start" and including + * characters up to "end". */ public float getAdvanceBetween(int start, int end) { breaker.pushSegments(start - aci.getBeginIndex(), end - aci.getBeginIndex()); @@ -147,21 +162,21 @@ public final class TextMeasurer implements Cloneable { } /** - * Returns the index of the first character which is not fit on - * a line beginning at start and possible measuring up to maxAdvance - * in graphical width. - * - * @param start he character index at which to start measuring. - * @param maxAdvance the graphical width in which the line must fit. - * - * @return the index after the last character that is fit on a line - * beginning at start, which is not longer than maxAdvance in graphical + * Returns the index of the first character which is not fit on a line + * beginning at start and possible measuring up to maxAdvance in graphical * width. + * + * @param start + * he character index at which to start measuring. + * @param maxAdvance + * the graphical width in which the line must fit. + * @return the index after the last character that is fit on a line + * beginning at start, which is not longer than maxAdvance in + * graphical width. */ public int getLineBreakIndex(int start, float maxAdvance) { breaker.createAllSegments(); - return breaker.getLineBreakIndex( - start - aci.getBeginIndex(), maxAdvance) + aci.getBeginIndex(); + return breaker.getLineBreakIndex(start - aci.getBeginIndex(), maxAdvance) + + aci.getBeginIndex(); } } - diff --git a/awt/java/awt/font/TransformAttribute.java b/awt/java/awt/font/TransformAttribute.java index 7c9b0bd97a..ff2caa2511 100644 --- a/awt/java/awt/font/TransformAttribute.java +++ b/awt/java/awt/font/TransformAttribute.java @@ -18,6 +18,7 @@ * @author Ilya S. Okomin * @version $Revision$ */ + package java.awt.font; import java.awt.geom.AffineTransform; @@ -28,28 +29,34 @@ import org.apache.harmony.awt.internal.nls.Messages; /** * The TransformAttribute class is a wrapper for the AffineTransform class in * order to use it as attribute. + * + * @since Android 1.0 */ public final class TransformAttribute implements Serializable { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 3356247357827709530L; // affine transform of this TransformAttribute instance - /** The transform. */ + /** + * The transform. + */ private AffineTransform fTransform; /** - * Instantiates a new TransformAttribute from the specified - * AffineTransform. + * Instantiates a new TransformAttribute from the specified AffineTransform. * - * @param transform the AffineTransform to be wrapped. + * @param transform + * the AffineTransform to be wrapped. */ public TransformAttribute(AffineTransform transform) { if (transform == null) { // awt.94=transform can not be null throw new IllegalArgumentException(Messages.getString("awt.94")); //$NON-NLS-1$ } - if (!transform.isIdentity()){ + if (!transform.isIdentity()) { this.fTransform = new AffineTransform(transform); } } @@ -60,7 +67,7 @@ public final class TransformAttribute implements Serializable { * @return the initial AffineTransform which is wrapped. */ public AffineTransform getTransform() { - if (fTransform != null){ + if (fTransform != null) { return new AffineTransform(fTransform); } return new AffineTransform(); @@ -69,12 +76,11 @@ public final class TransformAttribute implements Serializable { /** * Checks if this transform is an identity transform. * - * @return true, if this transform is an identity transform, - * false otherwise. + * @return true, if this transform is an identity transform, false + * otherwise. */ public boolean isIdentity() { return (fTransform == null); } } - diff --git a/awt/java/awt/font/package.html b/awt/java/awt/font/package.html new file mode 100644 index 0000000000..788dcc0a05 --- /dev/null +++ b/awt/java/awt/font/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes to support the representation of different types of fonts for example TrueType fonts. +

    + @since Android 1.0 + + diff --git a/awt/java/awt/geom/AffineTransform.java b/awt/java/awt/geom/AffineTransform.java index 5fd3934308..8a6938cf05 100644 --- a/awt/java/awt/geom/AffineTransform.java +++ b/awt/java/awt/geom/AffineTransform.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.awt.Shape; @@ -28,76 +29,118 @@ import org.apache.harmony.awt.internal.nls.Messages; import org.apache.harmony.misc.HashCode; /** - * The Class AffineTransform represents a linear transformation - * (rotation, scaling, or shear) followed by a translation that - * acts on a coordinate space. It preserves colinearity of points - * and ratios of distances between collinear points: so if A, B, - * and C are on a line, then after the space has been transformed - * via the affine transform, the images of the three points will - * still be on a line, and the ratio of the distance from A to B - * with the distance from B to C will be the same as the corresponding - * ratio in the image space. + * The Class AffineTransform represents a linear transformation (rotation, + * scaling, or shear) followed by a translation that acts on a coordinate space. + * It preserves collinearity of points and ratios of distances between collinear + * points: so if A, B, and C are on a line, then after the space has been + * transformed via the affine transform, the images of the three points will + * still be on a line, and the ratio of the distance from A to B with the + * distance from B to C will be the same as the corresponding ratio in the image + * space. + * + * @since Android 1.0 */ public class AffineTransform implements Cloneable, Serializable { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 1330973210523860834L; - /** The Constant TYPE_IDENTITY. */ + /** + * The Constant TYPE_IDENTITY. + */ public static final int TYPE_IDENTITY = 0; - - /** The Constant TYPE_TRANSLATION. */ + + /** + * The Constant TYPE_TRANSLATION. + */ public static final int TYPE_TRANSLATION = 1; - - /** The Constant TYPE_UNIFORM_SCALE. */ + + /** + * The Constant TYPE_UNIFORM_SCALE. + */ public static final int TYPE_UNIFORM_SCALE = 2; - - /** The Constant TYPE_GENERAL_SCALE. */ + + /** + * The Constant TYPE_GENERAL_SCALE. + */ public static final int TYPE_GENERAL_SCALE = 4; - - /** The Constant TYPE_QUADRANT_ROTATION. */ + + /** + * The Constant TYPE_QUADRANT_ROTATION. + */ public static final int TYPE_QUADRANT_ROTATION = 8; - - /** The Constant TYPE_GENERAL_ROTATION. */ + + /** + * The Constant TYPE_GENERAL_ROTATION. + */ public static final int TYPE_GENERAL_ROTATION = 16; - - /** The Constant TYPE_GENERAL_TRANSFORM. */ + + /** + * The Constant TYPE_GENERAL_TRANSFORM. + */ public static final int TYPE_GENERAL_TRANSFORM = 32; - - /** The Constant TYPE_FLIP. */ + + /** + * The Constant TYPE_FLIP. + */ public static final int TYPE_FLIP = 64; - - /** The Constant TYPE_MASK_SCALE. */ + + /** + * The Constant TYPE_MASK_SCALE. + */ public static final int TYPE_MASK_SCALE = TYPE_UNIFORM_SCALE | TYPE_GENERAL_SCALE; - - /** The Constant TYPE_MASK_ROTATION. */ + + /** + * The Constant TYPE_MASK_ROTATION. + */ public static final int TYPE_MASK_ROTATION = TYPE_QUADRANT_ROTATION | TYPE_GENERAL_ROTATION; - /** The TYPE_UNKNOWN is an initial type value. */ + /** + * The TYPE_UNKNOWN is an initial type value. + */ static final int TYPE_UNKNOWN = -1; - - /** The min value equivalent to zero. If absolute value less then ZERO it considered as zero. */ + + /** + * The min value equivalent to zero. If absolute value less then ZERO it + * considered as zero. + */ static final double ZERO = 1E-10; - - /** The values of transformation matrix. */ + + /** + * The values of transformation matrix. + */ double m00; - - /** The m10. */ + + /** + * The m10. + */ double m10; - - /** The m01. */ + + /** + * The m01. + */ double m01; - - /** The m11. */ + + /** + * The m11. + */ double m11; - - /** The m02. */ + + /** + * The m02. + */ double m02; - - /** The m12. */ + + /** + * The m12. + */ double m12; - /** The transformation type. */ + /** + * The transformation type. + */ transient int type; /** @@ -111,10 +154,11 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Instantiates a new affine transform that has the same data as - * the given AffineTransform. + * Instantiates a new affine transform that has the same data as the given + * AffineTransform. * - * @param t the transform to copy. + * @param t + * the transform to copy. */ public AffineTransform(AffineTransform t) { this.type = t.type; @@ -128,15 +172,21 @@ public class AffineTransform implements Cloneable, Serializable { /** * Instantiates a new affine transform by specifying the values of the 2x3 - * transformation matrix as floats. The type is set to the default - * type: TYPE_UNKNOWN - * - * @param m00 the m00 entry in the transformation matrix. - * @param m10 the m10 entry in the transformation matrix. - * @param m01 the m01 entry in the transformation matrix. - * @param m11 the m11 entry in the transformation matrix. - * @param m02 the m02 entry in the transformation matrix. - * @param m12 the m12 entry in the transformation matrix. + * transformation matrix as floats. The type is set to the default type: + * TYPE_UNKNOWN + * + * @param m00 + * the m00 entry in the transformation matrix. + * @param m10 + * the m10 entry in the transformation matrix. + * @param m01 + * the m01 entry in the transformation matrix. + * @param m11 + * the m11 entry in the transformation matrix. + * @param m02 + * the m02 entry in the transformation matrix. + * @param m12 + * the m12 entry in the transformation matrix. */ public AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12) { this.type = TYPE_UNKNOWN; @@ -150,15 +200,21 @@ public class AffineTransform implements Cloneable, Serializable { /** * Instantiates a new affine transform by specifying the values of the 2x3 - * transformation matrix as doubles. The type is set to the default - * type: TYPE_UNKNOWN - * - * @param m00 the m00 entry in the transformation matrix. - * @param m10 the m10 entry in the transformation matrix. - * @param m01 the m01 entry in the transformation matrix. - * @param m11 the m11 entry in the transformation matrix. - * @param m02 the m02 entry in the transformation matrix. - * @param m12 the m12 entry in the transformation matrix. + * transformation matrix as doubles. The type is set to the default type: + * TYPE_UNKNOWN + * + * @param m00 + * the m00 entry in the transformation matrix. + * @param m10 + * the m10 entry in the transformation matrix. + * @param m01 + * the m01 entry in the transformation matrix. + * @param m11 + * the m11 entry in the transformation matrix. + * @param m02 + * the m02 entry in the transformation matrix. + * @param m12 + * the m12 entry in the transformation matrix. */ public AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12) { this.type = TYPE_UNKNOWN; @@ -171,20 +227,20 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Instantiates a new affine transform by reading the values of the - * transformation matrix from an array of floats. The mapping from the - * array to the matrix starts with matrix[0] giving the - * top-left entry of the matrix and - * proceeds with the usual left-to-right and top-down ordering. + * Instantiates a new affine transform by reading the values of the + * transformation matrix from an array of floats. The mapping from the array + * to the matrix starts with matrix[0] giving the top-left + * entry of the matrix and proceeds with the usual left-to-right and + * top-down ordering. *

    - * If the array has only four entries, then the two entries of the - * last row of the transformation matrix default to zero. - * - * @param matrix the array of four or six floats giving the values - * of the matrix. - * - * @throws ArrayIndexOutOfBoundsException if the size of the array - * is 0, 1, 2, 3, or 5. + * If the array has only four entries, then the two entries of the last row + * of the transformation matrix default to zero. + * + * @param matrix + * the array of four or six floats giving the values of the + * matrix. + * @throws ArrayIndexOutOfBoundsException + * if the size of the array is 0, 1, 2, 3, or 5. */ public AffineTransform(float[] matrix) { this.type = TYPE_UNKNOWN; @@ -199,20 +255,20 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Instantiates a new affine transform by reading the values of the + * Instantiates a new affine transform by reading the values of the * transformation matrix from an array of doubles. The mapping from the - * array to the matrix starts with matrix[0] giving the - * top-left entry of the matrix and - * proceeds with the usual left-to-right and top-down ordering. + * array to the matrix starts with matrix[0] giving the + * top-left entry of the matrix and proceeds with the usual left-to-right + * and top-down ordering. *

    - * If the array has only four entries, then the two entries of the - * last row of the transformation matrix default to zero. - * - * @param matrix the array of four or six doubles giving the values - * of the matrix. - * - * @throws ArrayIndexOutOfBoundsException if the size of the array - * is 0, 1, 2, 3, or 5. + * If the array has only four entries, then the two entries of the last row + * of the transformation matrix default to zero. + * + * @param matrix + * the array of four or six doubles giving the values of the + * matrix. + * @throws ArrayIndexOutOfBoundsException + * if the size of the array is 0, 1, 2, 3, or 5. */ public AffineTransform(double[] matrix) { this.type = TYPE_UNKNOWN; @@ -226,27 +282,26 @@ public class AffineTransform implements Cloneable, Serializable { } } - /** * Returns type of the affine transformation. *

    - * The type is computed as follows: Label the entries of the - * transformation matrix as three rows (m00, m01), (m10, m11), and - * (m02, m12). Then if the original basis vectors are (1, 0) and (0, 1), - * the new basis vectors after transformation are given by (m00, m01) - * and (m10, m11), and the translation vector is (m02, m12). + * The type is computed as follows: Label the entries of the transformation + * matrix as three rows (m00, m01), (m10, m11), and (m02, m12). Then if the + * original basis vectors are (1, 0) and (0, 1), the new basis vectors after + * transformation are given by (m00, m01) and (m10, m11), and the + * translation vector is (m02, m12). + *

    + * The types are classified as follows:
    TYPE_IDENTITY - no change
    + * TYPE_TRANSLATION - The translation vector isn't zero
    + * TYPE_UNIFORM_SCALE - The new basis vectors have equal length
    + * TYPE_GENERAL_SCALE - The new basis vectors dont' have equal length
    + * TYPE_FLIP - The new basis vector orientation differs from the original + * one
    TYPE_QUADRANT_ROTATION - The new basis is a rotation of the + * original by 90, 180, 270, or 360 degrees
    TYPE_GENERAL_ROTATION - The + * new basis is a rotation of the original by an arbitrary angle
    + * TYPE_GENERAL_TRANSFORM - The transformation can't be inverted.
    *

    - * The types are classified as follows:
    - * TYPE_IDENTITY - no change
    - * TYPE_TRANSLATION - The translation vector isn't zero
    - * TYPE_UNIFORM_SCALE - The new basis vectors have equal length
    - * TYPE_GENERAL_SCALE - The new basis vectors dont' have equal length
    - * TYPE_FLIP - The new basis vector orientation differs from the original one
    - * TYPE_QUADRANT_ROTATION - The new basis is a rotation of the original by 90, 180, 270, or 360 degrees
    - * TYPE_GENERAL_ROTATION - The new basis is a rotation of the original by an arbitrary angle
    - * TYPE_GENERAL_TRANSFORM - The transformation can't be inverted.
    - *

    - * Note that multiple types are possible, thus the types can be combined + * Note that multiple types are possible, thus the types can be combined * using bitwise combinations. * * @return the type of the Affine Transform. @@ -265,11 +320,10 @@ public class AffineTransform implements Cloneable, Serializable { if (m02 != 0.0 || m12 != 0.0) { type |= TYPE_TRANSLATION; - } else - if (m00 == 1.0 && m11 == 1.0 && m01 == 0.0 && m10 == 0.0) { - type = TYPE_IDENTITY; - return type; - } + } else if (m00 == 1.0 && m11 == 1.0 && m01 == 0.0 && m10 == 0.0) { + type = TYPE_IDENTITY; + return type; + } if (m00 * m11 - m01 * m10 < 0.0) { type |= TYPE_FLIP; @@ -279,26 +333,22 @@ public class AffineTransform implements Cloneable, Serializable { double dy = m01 * m01 + m11 * m11; if (dx != dy) { type |= TYPE_GENERAL_SCALE; - } else - if (dx != 1.0) { - type |= TYPE_UNIFORM_SCALE; - } + } else if (dx != 1.0) { + type |= TYPE_UNIFORM_SCALE; + } - if ((m00 == 0.0 && m11 == 0.0) || - (m10 == 0.0 && m01 == 0.0 && (m00 < 0.0 || m11 < 0.0))) - { + if ((m00 == 0.0 && m11 == 0.0) || (m10 == 0.0 && m01 == 0.0 && (m00 < 0.0 || m11 < 0.0))) { type |= TYPE_QUADRANT_ROTATION; - } else - if (m01 != 0.0 || m10 != 0.0) { - type |= TYPE_GENERAL_ROTATION; - } + } else if (m01 != 0.0 || m10 != 0.0) { + type |= TYPE_GENERAL_ROTATION; + } return type; } /** - * Gets the scale x entry of the transformation matrix - * (the upper left matrix entry). + * Gets the scale x entry of the transformation matrix (the upper left + * matrix entry). * * @return the scale x value. */ @@ -307,8 +357,8 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Gets the scale y entry of the transformation matrix - * (the lower right entry of the linear transformation). + * Gets the scale y entry of the transformation matrix (the lower right + * entry of the linear transformation). * * @return the scale y value. */ @@ -317,8 +367,8 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Gets the shear x entry of the transformation matrix - * (the upper right entry of the linear transformation). + * Gets the shear x entry of the transformation matrix (the upper right + * entry of the linear transformation). * * @return the shear x value. */ @@ -327,8 +377,8 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Gets the shear y entry of the transformation matrix - * (the lower left entry of the linear transformation). + * Gets the shear y entry of the transformation matrix (the lower left entry + * of the linear transformation). * * @return the shear y value. */ @@ -364,15 +414,15 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Writes the values of the transformation matrix into the given - * array of doubles. If the array has length 4, only the linear - * transformation part will be written into it. If it has length - * greater than 4, the translation vector will be included as well. - * - * @param matrix the array to fill with the values of the matrix. - * - * @throws ArrayIndexOutOfBoundsException if the size of the array - * is 0, 1, 2, 3, or 5. + * Writes the values of the transformation matrix into the given array of + * doubles. If the array has length 4, only the linear transformation part + * will be written into it. If it has length greater than 4, the translation + * vector will be included as well. + * + * @param matrix + * the array to fill with the values of the matrix. + * @throws ArrayIndexOutOfBoundsException + * if the size of the array is 0, 1, 2, 3, or 5. */ public void getMatrix(double[] matrix) { matrix[0] = m00; @@ -397,12 +447,18 @@ public class AffineTransform implements Cloneable, Serializable { /** * Sets the transform in terms of a list of double values. * - * @param m00 the m00 coordinate of the transformation matrix. - * @param m10 the m10 coordinate of the transformation matrix. - * @param m01 the m01 coordinate of the transformation matrix. - * @param m11 the m11 coordinate of the transformation matrix. - * @param m02 the m02 coordinate of the transformation matrix. - * @param m12 the m12 coordinate of the transformation matrix. + * @param m00 + * the m00 coordinate of the transformation matrix. + * @param m10 + * the m10 coordinate of the transformation matrix. + * @param m01 + * the m01 coordinate of the transformation matrix. + * @param m11 + * the m11 coordinate of the transformation matrix. + * @param m02 + * the m02 coordinate of the transformation matrix. + * @param m12 + * the m12 coordinate of the transformation matrix. */ public void setTransform(double m00, double m10, double m01, double m11, double m02, double m12) { this.type = TYPE_UNKNOWN; @@ -415,10 +471,11 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Sets the transform's data to match the data of the transform - * sent as a parameter. + * Sets the transform's data to match the data of the transform sent as a + * parameter. * - * @param t the transform that gives the new values. + * @param t + * the transform that gives the new values. */ public void setTransform(AffineTransform t) { type = t.type; @@ -435,15 +492,16 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Sets the transformation to a translation alone. - * Sets the linear part of the transformation to identity - * and the translation vector to the values sent as parameters. - * Sets the type to TYPE_IDENTITY - * if the resulting AffineTransformation is the identity - * transformation, otherwise sets it to TYPE_TRANSLATION. - * - * @param mx the distance to translate in the x direction. - * @param my the distance to translate in the y direction. + * Sets the transformation to a translation alone. Sets the linear part of + * the transformation to identity and the translation vector to the values + * sent as parameters. Sets the type to TYPE_IDENTITY if the + * resulting AffineTransformation is the identity transformation, otherwise + * sets it to TYPE_TRANSLATION. + * + * @param mx + * the distance to translate in the x direction. + * @param my + * the distance to translate in the y direction. */ public void setToTranslation(double mx, double my) { m00 = m11 = 1.0; @@ -458,14 +516,15 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Sets the transformation to being a scale alone, eliminating - * rotation, shear, and translation elements. - * Sets the type to TYPE_IDENTITY - * if the resulting AffineTransformation is the identity - * transformation, otherwise sets it to TYPE_UNKNOWN. - * - * @param scx the scaling factor in the x direction. - * @param scy the scaling factor in the y direction. + * Sets the transformation to being a scale alone, eliminating rotation, + * shear, and translation elements. Sets the type to + * TYPE_IDENTITY if the resulting AffineTransformation is the + * identity transformation, otherwise sets it to TYPE_UNKNOWN. + * + * @param scx + * the scaling factor in the x direction. + * @param scy + * the scaling factor in the y direction. */ public void setToScale(double scx, double scy) { m00 = scx; @@ -479,14 +538,15 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Sets the transformation to being a shear alone, eliminating - * rotation, scaling, and translation elements. - * Sets the type to TYPE_IDENTITY - * if the resulting AffineTransformation is the identity - * transformation, otherwise sets it to TYPE_UNKNOWN. - * - * @param shx the shearing factor in the x direction. - * @param shy the shearing factor in the y direction. + * Sets the transformation to being a shear alone, eliminating rotation, + * scaling, and translation elements. Sets the type to + * TYPE_IDENTITY if the resulting AffineTransformation is the + * identity transformation, otherwise sets it to TYPE_UNKNOWN. + * + * @param shx + * the shearing factor in the x direction. + * @param shy + * the shearing factor in the y direction. */ public void setToShear(double shx, double shy) { m00 = m11 = 1.0; @@ -501,13 +561,13 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Sets the transformation to being a rotation alone, eliminating - * shearing, scaling, and translation elements. - * Sets the type to TYPE_IDENTITY - * if the resulting AffineTransformation is the identity - * transformation, otherwise sets it to TYPE_UNKNOWN. + * Sets the transformation to being a rotation alone, eliminating shearing, + * scaling, and translation elements. Sets the type to + * TYPE_IDENTITY if the resulting AffineTransformation is the + * identity transformation, otherwise sets it to TYPE_UNKNOWN. * - * @param angle the angle of rotation in radians. + * @param angle + * the angle of rotation in radians. */ public void setToRotation(double angle) { double sin = Math.sin(angle); @@ -515,11 +575,10 @@ public class AffineTransform implements Cloneable, Serializable { if (Math.abs(cos) < ZERO) { cos = 0.0; sin = sin > 0.0 ? 1.0 : -1.0; - } else - if (Math.abs(sin) < ZERO) { - sin = 0.0; - cos = cos > 0.0 ? 1.0 : -1.0; - } + } else if (Math.abs(sin) < ZERO) { + sin = 0.0; + cos = cos > 0.0 ? 1.0 : -1.0; + } m00 = m11 = cos; m01 = -sin; m10 = sin; @@ -528,13 +587,15 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Sets the transformation to being a rotation followed by a - * translation. + * Sets the transformation to being a rotation followed by a translation. * Sets the type to TYPE_UNKNOWN. * - * @param angle the angle of rotation in radians. - * @param px the distance to translate in the x direction. - * @param py the distance to translate in the y direction. + * @param angle + * the angle of rotation in radians. + * @param px + * the distance to translate in the x direction. + * @param py + * the distance to translate in the y direction. */ public void setToRotation(double angle, double px, double py) { setToRotation(angle); @@ -544,15 +605,16 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Creates a new AffineTransformation that is a translation alone - * with the translation vector given by the values sent as parameters. - * The new transformation's type is TYPE_IDENTITY - * if the AffineTransformation is the identity - * transformation, otherwise it's TYPE_TRANSLATION. - * - * @param mx the distance to translate in the x direction. - * @param my the distance to translate in the y direction. - + * Creates a new AffineTransformation that is a translation alone with the + * translation vector given by the values sent as parameters. The new + * transformation's type is TYPE_IDENTITY if the + * AffineTransformation is the identity transformation, otherwise it's + * TYPE_TRANSLATION. + * + * @param mx + * the distance to translate in the x direction. + * @param my + * the distance to translate in the y direction. * @return the new AffineTransformation. */ public static AffineTransform getTranslateInstance(double mx, double my) { @@ -562,14 +624,15 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Creates a new AffineTransformation that is a scale alone. - * The new transformation's type is TYPE_IDENTITY - * if the AffineTransformation is the identity - * transformation, otherwise it's TYPE_UNKNOWN. - * - * @param scx the scaling factor in the x direction. - * @param scY the scaling factor in the y direction. - * + * Creates a new AffineTransformation that is a scale alone. The new + * transformation's type is TYPE_IDENTITY if the + * AffineTransformation is the identity transformation, otherwise it's + * TYPE_UNKNOWN. + * + * @param scx + * the scaling factor in the x direction. + * @param scY + * the scaling factor in the y direction. * @return the new AffineTransformation. */ public static AffineTransform getScaleInstance(double scx, double scY) { @@ -579,14 +642,15 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Creates a new AffineTransformation that is a shear alone. - * The new transformation's type is TYPE_IDENTITY - * if the AffineTransformation is the identity - * transformation, otherwise it's TYPE_UNKNOWN. - * - * @param shx the shearing factor in the x direction. - * @param shy the shearing factor in the y direction. - * + * Creates a new AffineTransformation that is a shear alone. The new + * transformation's type is TYPE_IDENTITY if the + * AffineTransformation is the identity transformation, otherwise it's + * TYPE_UNKNOWN. + * + * @param shx + * the shearing factor in the x direction. + * @param shy + * the shearing factor in the y direction. * @return the new AffineTransformation. */ public static AffineTransform getShearInstance(double shx, double shy) { @@ -596,13 +660,13 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Creates a new AffineTransformation that is a rotation alone. - * The new transformation's type is TYPE_IDENTITY - * if the AffineTransformation is the identity - * transformation, otherwise it's TYPE_UNKNOWN. - * - * @param angle the angle of rotation in radians. + * Creates a new AffineTransformation that is a rotation alone. The new + * transformation's type is TYPE_IDENTITY if the + * AffineTransformation is the identity transformation, otherwise it's + * TYPE_UNKNOWN. * + * @param angle + * the angle of rotation in radians. * @return the new AffineTransformation. */ public static AffineTransform getRotateInstance(double angle) { @@ -612,14 +676,15 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Creates a new AffineTransformation that is a rotation followed by a - * translation. - * Sets the type to TYPE_UNKNOWN. - * - * @param angle the angle of rotation in radians. - * @param x the distance to translate in the x direction. - * @param y the distance to translate in the y direction. - * + * Creates a new AffineTransformation that is a rotation followed by a + * translation. Sets the type to TYPE_UNKNOWN. + * + * @param angle + * the angle of rotation in radians. + * @param x + * the distance to translate in the x direction. + * @param y + * the distance to translate in the y direction. * @return the new AffineTransformation. */ public static AffineTransform getRotateInstance(double angle, double x, double y) { @@ -631,8 +696,10 @@ public class AffineTransform implements Cloneable, Serializable { /** * Applies a translation to this AffineTransformation. * - * @param mx the distance to translate in the x direction. - * @param my the distance to translate in the y direction. + * @param mx + * the distance to translate in the x direction. + * @param my + * the distance to translate in the y direction. */ public void translate(double mx, double my) { concatenate(AffineTransform.getTranslateInstance(mx, my)); @@ -641,8 +708,10 @@ public class AffineTransform implements Cloneable, Serializable { /** * Applies a scaling transformation to this AffineTransformation. * - * @param scx the scaling factor in the x direction. - * @param scy the scaling factor in the y direction. + * @param scx + * the scaling factor in the x direction. + * @param scy + * the scaling factor in the y direction. */ public void scale(double scx, double scy) { concatenate(AffineTransform.getScaleInstance(scx, scy)); @@ -651,8 +720,10 @@ public class AffineTransform implements Cloneable, Serializable { /** * Applies a shearing transformation to this AffineTransformation. * - * @param shx the shearing factor in the x direction. - * @param shy the shearing factor in the y direction. + * @param shx + * the shearing factor in the x direction. + * @param shy + * the shearing factor in the y direction. */ public void shear(double shx, double shy) { concatenate(AffineTransform.getShearInstance(shx, shy)); @@ -661,19 +732,23 @@ public class AffineTransform implements Cloneable, Serializable { /** * Applies a rotation transformation to this AffineTransformation. * - * @param angle the angle of rotation in radians. + * @param angle + * the angle of rotation in radians. */ public void rotate(double angle) { concatenate(AffineTransform.getRotateInstance(angle)); } /** - * Applies a rotation and translation transformation to this + * Applies a rotation and translation transformation to this * AffineTransformation. * - * @param angle the angle of rotation in radians. - * @param px the distance to translate in the x direction. - * @param py the distance to translate in the y direction. + * @param angle + * the angle of rotation in radians. + * @param px + * the distance to translate in the x direction. + * @param py + * the distance to translate in the y direction. */ public void rotate(double angle, double px, double py) { concatenate(AffineTransform.getRotateInstance(angle, px, py)); @@ -682,36 +757,40 @@ public class AffineTransform implements Cloneable, Serializable { /** * Multiplies the matrix representations of two AffineTransform objects. * - * @param t1 - the AffineTransform object is a multiplicand - * @param t2 - the AffineTransform object is a multiplier - * - * @return an AffineTransform object that is the result of t1 multiplied by the matrix t2. + * @param t1 + * - the AffineTransform object is a multiplicand + * @param t2 + * - the AffineTransform object is a multiplier + * @return an AffineTransform object that is the result of t1 multiplied by + * the matrix t2. */ AffineTransform multiply(AffineTransform t1, AffineTransform t2) { - return new AffineTransform( - t1.m00 * t2.m00 + t1.m10 * t2.m01, // m00 - t1.m00 * t2.m10 + t1.m10 * t2.m11, // m01 - t1.m01 * t2.m00 + t1.m11 * t2.m01, // m10 - t1.m01 * t2.m10 + t1.m11 * t2.m11, // m11 + return new AffineTransform(t1.m00 * t2.m00 + t1.m10 * t2.m01, // m00 + t1.m00 * t2.m10 + t1.m10 * t2.m11, // m01 + t1.m01 * t2.m00 + t1.m11 * t2.m01, // m10 + t1.m01 * t2.m10 + t1.m11 * t2.m11, // m11 t1.m02 * t2.m00 + t1.m12 * t2.m01 + t2.m02, // m02 t1.m02 * t2.m10 + t1.m12 * t2.m11 + t2.m12);// m12 } /** - * Applies the given AffineTransform to this AffineTransform - * via matrix multiplication. + * Applies the given AffineTransform to this AffineTransform via matrix + * multiplication. * - * @param t the AffineTransform to apply to this AffineTransform. + * @param t + * the AffineTransform to apply to this AffineTransform. */ public void concatenate(AffineTransform t) { setTransform(multiply(t, this)); } /** - * Changes the current AffineTransform the one obtained by - * taking the transform t and applying this AffineTransform to it. + * Changes the current AffineTransform the one obtained by taking the + * transform t and applying this AffineTransform to it. * - * @param t the AffineTransform that this AffineTransform is multiplied by. + * @param t + * the AffineTransform that this AffineTransform is multiplied + * by. */ public void preConcatenate(AffineTransform t) { setTransform(multiply(this, t)); @@ -721,9 +800,9 @@ public class AffineTransform implements Cloneable, Serializable { * Creates an AffineTransform that is the inverse of this transform. * * @return the affine transform that is the inverse of this AffineTransform. - * - * @throws NoninvertibleTransformException if this AffineTransform cannot be - * inverted (the determinant of the linear transformation part is zero). + * @throws NoninvertibleTransformException + * if this AffineTransform cannot be inverted (the determinant + * of the linear transformation part is zero). */ public AffineTransform createInverse() throws NoninvertibleTransformException { double det = getDeterminant(); @@ -731,25 +810,26 @@ public class AffineTransform implements Cloneable, Serializable { // awt.204=Determinant is zero throw new NoninvertibleTransformException(Messages.getString("awt.204")); //$NON-NLS-1$ } - return new AffineTransform( - m11 / det, // m00 + return new AffineTransform(m11 / det, // m00 -m10 / det, // m10 -m01 / det, // m01 - m00 / det, // m11 + m00 / det, // m11 (m01 * m12 - m11 * m02) / det, // m02 - (m10 * m02 - m00 * m12) / det // m12 + (m10 * m02 - m00 * m12) / det // m12 ); } /** * Apply the current AffineTransform to the point. * - * @param src the original point. - * @param dst Point2D object to be filled with the destination - * coordinates (where the original point is sent by this AffineTransform). May be null. - * - * @return the point in the AffineTransform's image space where the - * original point is sent. + * @param src + * the original point. + * @param dst + * Point2D object to be filled with the destination coordinates + * (where the original point is sent by this AffineTransform). + * May be null. + * @return the point in the AffineTransform's image space where the original + * point is sent. */ public Point2D transform(Point2D src, Point2D dst) { if (dst == null) { @@ -770,25 +850,29 @@ public class AffineTransform implements Cloneable, Serializable { /** * Applies this AffineTransform to an array of points. * - * @param src the array of points to be transformed. - * @param srcOff the offset in the source point array of the first point - * to be transformed. - * @param dst the point array where the images of the points (after - * applying the AffineTransformation) should be placed. - * @param dstOff the offset in the destination array where the new - * values should be written. - * @param length the number of points to transform. - * - * @throws ArrayIndexOutOfBoundsException if - * srcOff + length > src.length or - * dstOff + length > dst.length. + * @param src + * the array of points to be transformed. + * @param srcOff + * the offset in the source point array of the first point to be + * transformed. + * @param dst + * the point array where the images of the points (after applying + * the AffineTransformation) should be placed. + * @param dstOff + * the offset in the destination array where the new values + * should be written. + * @param length + * the number of points to transform. + * @throws ArrayIndexOutOfBoundsException + * if srcOff + length > src.length or + * dstOff + length > dst.length. */ public void transform(Point2D[] src, int srcOff, Point2D[] dst, int dstOff, int length) { while (--length >= 0) { - Point2D srcPoint = src[srcOff++]; + Point2D srcPoint = src[srcOff++]; double x = srcPoint.getX(); double y = srcPoint.getY(); - Point2D dstPoint = dst[dstOff]; + Point2D dstPoint = dst[dstOff]; if (dstPoint == null) { if (srcPoint instanceof Point2D.Double) { dstPoint = new Point2D.Double(); @@ -800,27 +884,31 @@ public class AffineTransform implements Cloneable, Serializable { dst[dstOff++] = dstPoint; } } - + /** - * Applies this AffineTransform to a set of points given - * as an array of double values where every two values in the array - * give the coordinates of a point; the even-indexed values giving the - * x coordinates and the odd-indexed values giving the y coordinates. - * - * @param src the array of points to be transformed. - * @param srcOff the offset in the source point array of the first point - * to be transformed. - * @param dst the point array where the images of the points (after - * applying the AffineTransformation) should be placed. - * @param dstOff the offset in the destination array where the new - * values should be written. - * @param length the number of points to transform. - * - * @throws ArrayIndexOutOfBoundsException if - * srcOff + length*2 > src.length or - * dstOff + length*2 > dst.length. + * Applies this AffineTransform to a set of points given as an array of + * double values where every two values in the array give the coordinates of + * a point; the even-indexed values giving the x coordinates and the + * odd-indexed values giving the y coordinates. + * + * @param src + * the array of points to be transformed. + * @param srcOff + * the offset in the source point array of the first point to be + * transformed. + * @param dst + * the point array where the images of the points (after applying + * the AffineTransformation) should be placed. + * @param dstOff + * the offset in the destination array where the new values + * should be written. + * @param length + * the number of points to transform. + * @throws ArrayIndexOutOfBoundsException + * if srcOff + length*2 > src.length or + * dstOff + length*2 > dst.length. */ - public void transform(double[] src, int srcOff, double[] dst, int dstOff, int length) { + public void transform(double[] src, int srcOff, double[] dst, int dstOff, int length) { int step = 2; if (src == dst && srcOff < dstOff && dstOff < srcOff + length * 2) { srcOff = srcOff + length * 2 - 2; @@ -838,23 +926,27 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Applies this AffineTransform to a set of points given - * as an array of float values where every two values in the array - * give the coordinates of a point; the even-indexed values giving the - * x coordinates and the odd-indexed values giving the y coordinates. - * - * @param src the array of points to be transformed. - * @param srcOff the offset in the source point array of the first point - * to be transformed. - * @param dst the point array where the images of the points (after - * applying the AffineTransformation) should be placed. - * @param dstOff the offset in the destination array where the new - * values should be written. - * @param length the number of points to transform. - * - * @throws ArrayIndexOutOfBoundsException if - * srcOff + length*2 > src.length or - * dstOff + length*2 > dst.length. + * Applies this AffineTransform to a set of points given as an array of + * float values where every two values in the array give the coordinates of + * a point; the even-indexed values giving the x coordinates and the + * odd-indexed values giving the y coordinates. + * + * @param src + * the array of points to be transformed. + * @param srcOff + * the offset in the source point array of the first point to be + * transformed. + * @param dst + * the point array where the images of the points (after applying + * the AffineTransformation) should be placed. + * @param dstOff + * the offset in the destination array where the new values + * should be written. + * @param length + * the number of points to transform. + * @throws ArrayIndexOutOfBoundsException + * if srcOff + length*2 > src.length or + * dstOff + length*2 > dst.length. */ public void transform(float[] src, int srcOff, float[] dst, int dstOff, int length) { int step = 2; @@ -872,26 +964,30 @@ public class AffineTransform implements Cloneable, Serializable { dstOff += step; } } - + /** - * Applies this AffineTransform to a set of points given - * as an array of float values where every two values in the array - * give the coordinates of a point; the even-indexed values giving the - * x coordinates and the odd-indexed values giving the y coordinates. - * The destination coordinates are given as values of type double. - * - * @param src the array of points to be transformed. - * @param srcOff the offset in the source point array of the first point - * to be transformed. - * @param dst the point array where the images of the points (after - * applying the AffineTransformation) should be placed. - * @param dstOff the offset in the destination array where the new - * values should be written. - * @param length the number of points to transform. - * - * @throws ArrayIndexOutOfBoundsException if - * srcOff + length*2 > src.length or - * dstOff + length*2 > dst.length. + * Applies this AffineTransform to a set of points given as an array of + * float values where every two values in the array give the coordinates of + * a point; the even-indexed values giving the x coordinates and the + * odd-indexed values giving the y coordinates. The destination coordinates + * are given as values of type double. + * + * @param src + * the array of points to be transformed. + * @param srcOff + * the offset in the source point array of the first point to be + * transformed. + * @param dst + * the point array where the images of the points (after applying + * the AffineTransformation) should be placed. + * @param dstOff + * the offset in the destination array where the new values + * should be written. + * @param length + * the number of points to transform. + * @throws ArrayIndexOutOfBoundsException + * if srcOff + length*2 > src.length or + * dstOff + length*2 > dst.length. */ public void transform(float[] src, int srcOff, double[] dst, int dstOff, int length) { while (--length >= 0) { @@ -903,24 +999,28 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Applies this AffineTransform to a set of points given - * as an array of double values where every two values in the array - * give the coordinates of a point; the even-indexed values giving the - * x coordinates and the odd-indexed values giving the y coordinates. - * The destination coordinates are given as values of type float. - * - * @param src the array of points to be transformed. - * @param srcOff the offset in the source point array of the first point - * to be transformed. - * @param dst the point array where the images of the points (after - * applying the AffineTransformation) should be placed. - * @param dstOff the offset in the destination array where the new - * values should be written. - * @param length the number of points to transform. - * - * @throws ArrayIndexOutOfBoundsException if - * srcOff + length*2 > src.length or - * dstOff + length*2 > dst.length. + * Applies this AffineTransform to a set of points given as an array of + * double values where every two values in the array give the coordinates of + * a point; the even-indexed values giving the x coordinates and the + * odd-indexed values giving the y coordinates. The destination coordinates + * are given as values of type float. + * + * @param src + * the array of points to be transformed. + * @param srcOff + * the offset in the source point array of the first point to be + * transformed. + * @param dst + * the point array where the images of the points (after applying + * the AffineTransformation) should be placed. + * @param dstOff + * the offset in the destination array where the new values + * should be written. + * @param length + * the number of points to transform. + * @throws ArrayIndexOutOfBoundsException + * if srcOff + length*2 > src.length or + * dstOff + length*2 > dst.length. */ public void transform(double[] src, int srcOff, float[] dst, int dstOff, int length) { while (--length >= 0) { @@ -932,15 +1032,16 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Transforms the point according to the linear transformation - * part of this AffineTransformation (without applying the translation). - * - * @param src the original point. - * @param dst the point object where the result of the delta transform - * is written. - * - * @return the result of applying the delta transform (linear part - * only) to the original point. + * Transforms the point according to the linear transformation part of this + * AffineTransformation (without applying the translation). + * + * @param src + * the original point. + * @param dst + * the point object where the result of the delta transform is + * written. + * @return the result of applying the delta transform (linear part only) to + * the original point. */ // TODO: is this right? if dst is null, we check what it's an // instance of? Shouldn't it be src instanceof Point2D.Double? @@ -961,24 +1062,28 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Applies the linear transformation part of this AffineTransform - * (ignoring the translation part) to a set of points given - * as an array of double values where every two values in the array - * give the coordinates of a point; the even-indexed values giving the - * x coordinates and the odd-indexed values giving the y coordinates. - * - * @param src the array of points to be transformed. - * @param srcOff the offset in the source point array of the first point - * to be transformed. - * @param dst the point array where the images of the points (after - * applying the delta transformation) should be placed. - * @param dstOff the offset in the destination array where the new - * values should be written. - * @param length the number of points to transform. - * - * @throws ArrayIndexOutOfBoundsException if - * srcOff + length*2 > src.length or - * dstOff + length*2 > dst.length. + * Applies the linear transformation part of this AffineTransform (ignoring + * the translation part) to a set of points given as an array of double + * values where every two values in the array give the coordinates of a + * point; the even-indexed values giving the x coordinates and the + * odd-indexed values giving the y coordinates. + * + * @param src + * the array of points to be transformed. + * @param srcOff + * the offset in the source point array of the first point to be + * transformed. + * @param dst + * the point array where the images of the points (after applying + * the delta transformation) should be placed. + * @param dstOff + * the offset in the destination array where the new values + * should be written. + * @param length + * the number of points to transform. + * @throws ArrayIndexOutOfBoundsException + * if srcOff + length*2 > src.length or + * dstOff + length*2 > dst.length. */ public void deltaTransform(double[] src, int srcOff, double[] dst, int dstOff, int length) { while (--length >= 0) { @@ -990,19 +1095,21 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Transforms the point according to the inverse of this AffineTransformation. - * - * @param src the original point. - * @param dst the point object where the result of the inverse transform - * is written (may be null). - * - * @return the result of applying the inverse transform. - * Inverse transform. + * Transforms the point according to the inverse of this + * AffineTransformation. * - * @throws NoninvertibleTransformException if this AffineTransform cannot be - * inverted (the determinant of the linear transformation part is zero). + * @param src + * the original point. + * @param dst + * the point object where the result of the inverse transform is + * written (may be null). + * @return the result of applying the inverse transform. Inverse transform. + * @throws NoninvertibleTransformException + * if this AffineTransform cannot be inverted (the determinant + * of the linear transformation part is zero). */ - public Point2D inverseTransform(Point2D src, Point2D dst) throws NoninvertibleTransformException { + public Point2D inverseTransform(Point2D src, Point2D dst) + throws NoninvertibleTransformException { double det = getDeterminant(); if (Math.abs(det) < ZERO) { // awt.204=Determinant is zero @@ -1025,29 +1132,33 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Applies the inverse of this AffineTransform to a set of points given - * as an array of double values where every two values in the array - * give the coordinates of a point; the even-indexed values giving the - * x coordinates and the odd-indexed values giving the y coordinates. - * - * @param src the array of points to be transformed. - * @param srcOff the offset in the source point array of the first point - * to be transformed. - * @param dst the point array where the images of the points (after - * applying the inverse of the AffineTransformation) should be placed. - * @param dstOff the offset in the destination array where the new - * values should be written. - * @param length the number of points to transform. - * - * @throws ArrayIndexOutOfBoundsException if - * srcOff + length*2 > src.length or - * dstOff + length*2 > dst.length. - * @throws NoninvertibleTransformException if this AffineTransform cannot be - * inverted (the determinant of the linear transformation part is zero). + * Applies the inverse of this AffineTransform to a set of points given as + * an array of double values where every two values in the array give the + * coordinates of a point; the even-indexed values giving the x coordinates + * and the odd-indexed values giving the y coordinates. + * + * @param src + * the array of points to be transformed. + * @param srcOff + * the offset in the source point array of the first point to be + * transformed. + * @param dst + * the point array where the images of the points (after applying + * the inverse of the AffineTransformation) should be placed. + * @param dstOff + * the offset in the destination array where the new values + * should be written. + * @param length + * the number of points to transform. + * @throws ArrayIndexOutOfBoundsException + * if srcOff + length*2 > src.length or + * dstOff + length*2 > dst.length. + * @throws NoninvertibleTransformException + * if this AffineTransform cannot be inverted (the determinant + * of the linear transformation part is zero). */ public void inverseTransform(double[] src, int srcOff, double[] dst, int dstOff, int length) - throws NoninvertibleTransformException - { + throws NoninvertibleTransformException { double det = getDeterminant(); if (Math.abs(det) < ZERO) { // awt.204=Determinant is zero @@ -1063,13 +1174,13 @@ public class AffineTransform implements Cloneable, Serializable { } /** - * Creates a new shape whose data is given by applying this - * AffineTransform to the specified shape. - * - * @param src the original shape whose data is to be transformed. + * Creates a new shape whose data is given by applying this AffineTransform + * to the specified shape. * - * @return the new shape found by applying this AffineTransform to - * the original shape. + * @param src + * the original shape whose data is to be transformed. + * @return the new shape found by applying this AffineTransform to the + * original shape. */ public Shape createTransformedShape(Shape src) { if (src == null) { @@ -1086,9 +1197,7 @@ public class AffineTransform implements Cloneable, Serializable { @Override public String toString() { - return - getClass().getName() + - "[[" + m00 + ", " + m01 + ", " + m02 + "], [" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + return getClass().getName() + "[[" + m00 + ", " + m01 + ", " + m02 + "], [" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + m10 + ", " + m11 + ", " + m12 + "]]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } @@ -1120,39 +1229,39 @@ public class AffineTransform implements Cloneable, Serializable { } if (obj instanceof AffineTransform) { AffineTransform t = (AffineTransform)obj; - return - m00 == t.m00 && m01 == t.m01 && - m02 == t.m02 && m10 == t.m10 && - m11 == t.m11 && m12 == t.m12; + return m00 == t.m00 && m01 == t.m01 && m02 == t.m02 && m10 == t.m10 && m11 == t.m11 + && m12 == t.m12; } return false; } - /** * Writes the AffineTrassform object to the output steam. * - * @param stream - the output stream - * - * @throws IOException - if there are I/O errors while writing to the output strem + * @param stream + * - the output stream. + * @throws IOException + * - if there are I/O errors while writing to the output stream. */ private void writeObject(java.io.ObjectOutputStream stream) throws IOException { stream.defaultWriteObject(); } - /** * Read the AffineTransform object from the input stream. * - * @param stream - the input steam - * - * @throws IOException - if there are I/O errors while reading from the input strem - * @throws ClassNotFoundException - if class could not be found + * @param stream + * - the input stream. + * @throws IOException + * - if there are I/O errors while reading from the input + * stream. + * @throws ClassNotFoundException + * - if class could not be found. */ - private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { + private void readObject(java.io.ObjectInputStream stream) throws IOException, + ClassNotFoundException { stream.defaultReadObject(); type = TYPE_UNKNOWN; } } - diff --git a/awt/java/awt/geom/Arc2D.java b/awt/java/awt/geom/Arc2D.java index bc1e95c643..56f5cd392d 100644 --- a/awt/java/awt/geom/Arc2D.java +++ b/awt/java/awt/geom/Arc2D.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.util.NoSuchElementException; @@ -25,59 +26,77 @@ import java.util.NoSuchElementException; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class Arc2D represents a segment of a curve inscribed - * in a rectangle. The curve is defined by a start angle and an - * extent angle (the end angle minus the start angle) as - * a pie wedge whose point is in the center of the rectangle. - * The Arc2D as a shape may be either OPEN (including nothing - * but the curved arc segment itself), CHORD (the curved arc - * segment closed by a connecting segment from the end to the - * beginning of the arc, or PIE (the segments from the end - * of the arc to the center of the rectangle and from the - * center of the rectangle back to the arc's start point are - * included). + * The Class Arc2D represents a segment of a curve inscribed in a rectangle. The + * curve is defined by a start angle and an extent angle (the end angle minus + * the start angle) as a pie wedge whose point is in the center of the + * rectangle. The Arc2D as a shape may be either OPEN (including nothing but the + * curved arc segment itself), CHORD (the curved arc segment closed by a + * connecting segment from the end to the beginning of the arc, or PIE (the + * segments from the end of the arc to the center of the rectangle and from the + * center of the rectangle back to the arc's start point are included). + * + * @since Android 1.0 */ public abstract class Arc2D extends RectangularShape { - /** The arc type OPEN indicates that the shape includes only the - * curved arc segment. */ + /** + * The arc type OPEN indicates that the shape includes only the curved arc + * segment. + */ public final static int OPEN = 0; - - /** The arc type CHORD indicates that as a shape the connecting - * segment from the end point of the curved arc to the beginning - * point is included. */ + + /** + * The arc type CHORD indicates that as a shape the connecting segment from + * the end point of the curved arc to the beginning point is included. + */ public final static int CHORD = 1; - - /** The arc type PIE indicates that as a shape the two segments - * from the arc's endpoint to the center of the rectangle and from - * the center of the rectangle to the arc's endpoint are included. */ + + /** + * The arc type PIE indicates that as a shape the two segments from the + * arc's endpoint to the center of the rectangle and from the center of the + * rectangle to the arc's endpoint are included. + */ public final static int PIE = 2; /** - * The Class Float is a subclass of Arc2D in which all of the - * data values are given as floats. + * The Class Float is a subclass of Arc2D in which all of the data values + * are given as floats. + * * @see Arc2D.Double + * @since Android 1.0 */ public static class Float extends Arc2D { - /** The x coordinate of the upper left corner of the rectangle that - * contains the arc. */ + /** + * The x coordinate of the upper left corner of the rectangle that + * contains the arc. + */ public float x; - - /** The y coordinate of the upper left corner of the rectangle that - * contains the arc. */ + + /** + * The y coordinate of the upper left corner of the rectangle that + * contains the arc. + */ public float y; - - /** The width of the rectangle that contains the arc. */ + + /** + * The width of the rectangle that contains the arc. + */ public float width; - - /** The height of the rectangle that contains the arc. */ + + /** + * The height of the rectangle that contains the arc. + */ public float height; - - /** The start angle of the arc in degrees. */ + + /** + * The start angle of the arc in degrees. + */ public float start; - - /** The width angle of the arc in degrees. */ + + /** + * The width angle of the arc in degrees. + */ public float extent; /** @@ -90,8 +109,9 @@ public abstract class Arc2D extends RectangularShape { /** * Instantiates a new Arc2D of the specified type with float values. * - * @param type the type of the new Arc2D, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param type + * the type of the new Arc2D, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ public Float(int type) { super(type); @@ -100,20 +120,26 @@ public abstract class Arc2D extends RectangularShape { /** * Instantiates a Arc2D with the specified float-valued data. * - * @param x the x coordinate of the upper left corner of the rectangle that - * contains the arc. - * @param y the y coordinate of the upper left corner of the rectangle that - * contains the arc. - * @param width the width of the rectangle that - * contains the arc. - * @param height the height of the rectangle that - * contains the arc. - * @param start the start angle of the arc in degrees. - * @param extent the width angle of the arc in degrees. - * @param type the type of the new Arc2D, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param x + * the x coordinate of the upper left corner of the rectangle + * that contains the arc. + * @param y + * the y coordinate of the upper left corner of the rectangle + * that contains the arc. + * @param width + * the width of the rectangle that contains the arc. + * @param height + * the height of the rectangle that contains the arc. + * @param start + * the start angle of the arc in degrees. + * @param extent + * the width angle of the arc in degrees. + * @param type + * the type of the new Arc2D, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ - public Float(float x, float y, float width, float height, float start, float extent, int type) { + public Float(float x, float y, float width, float height, float start, float extent, + int type) { super(type); this.x = x; this.y = y; @@ -124,14 +150,18 @@ public abstract class Arc2D extends RectangularShape { } /** - * Instantiates a new Angle2D with the specified float-valued data - * and the bounding rectangle given by the parameter bounds. + * Instantiates a new Angle2D with the specified float-valued data and + * the bounding rectangle given by the parameter bounds. * - * @param bounds the bounding rectangle of the Angle2D. - * @param start the start angle of the arc in degrees. - * @param extent the width angle of the arc in degrees. - * @param type the type of the new Arc2D, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param bounds + * the bounding rectangle of the Angle2D. + * @param start + * the start angle of the arc in degrees. + * @param extent + * the width angle of the arc in degrees. + * @param type + * the type of the new Arc2D, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ public Float(Rectangle2D bounds, float start, float extent, int type) { super(type); @@ -148,8 +178,8 @@ public abstract class Arc2D extends RectangularShape { return x; } - @Override - public double getY() { + @Override + public double getY() { return y; } @@ -179,9 +209,8 @@ public abstract class Arc2D extends RectangularShape { } @Override - public void setArc(double x, double y, double width, double height, - double start, double extent, int type) - { + public void setArc(double x, double y, double width, double height, double start, + double extent, int type) { this.setArcType(type); this.x = (float)x; this.y = (float)y; @@ -209,30 +238,44 @@ public abstract class Arc2D extends RectangularShape { } /** - * The Class Double is a subclass of Arc2D in which all of the - * data values are given as doubles. + * The Class Double is a subclass of Arc2D in which all of the data values + * are given as doubles. + * * @see Arc2D.Float + * @since Android 1.0 */ public static class Double extends Arc2D { - /** The x coordinate of the upper left corner of the rectangle that - * contains the arc. */ + /** + * The x coordinate of the upper left corner of the rectangle that + * contains the arc. + */ public double x; - - /** The y coordinate of the upper left corner of the rectangle that - * contains the arc. */ + + /** + * The y coordinate of the upper left corner of the rectangle that + * contains the arc. + */ public double y; - - /** The width of the rectangle that contains the arc. */ + + /** + * The width of the rectangle that contains the arc. + */ public double width; - - /** The height of the rectangle that contains the arc. */ + + /** + * The height of the rectangle that contains the arc. + */ public double height; - - /** The start angle of the arc in degrees. */ + + /** + * The start angle of the arc in degrees. + */ public double start; - - /** The width angle of the arc in degrees. */ + + /** + * The width angle of the arc in degrees. + */ public double extent; /** @@ -245,8 +288,9 @@ public abstract class Arc2D extends RectangularShape { /** * Instantiates a new Arc2D of the specified type with double values. * - * @param type the type of the new Arc2D, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param type + * the type of the new Arc2D, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ public Double(int type) { super(type); @@ -255,22 +299,26 @@ public abstract class Arc2D extends RectangularShape { /** * Instantiates a Arc2D with the specified double-valued data. * - * @param x the x coordinate of the upper left corner of the rectangle that - * contains the arc. - * @param y the y coordinate of the upper left corner of the rectangle that - * contains the arc. - * @param width the width of the rectangle that - * contains the arc. - * @param height the height of the rectangle that - * contains the arc. - * @param start the start angle of the arc in degrees. - * @param extent the width angle of the arc in degrees. - * @param type the type of the new Arc2D, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param x + * the x coordinate of the upper left corner of the rectangle + * that contains the arc. + * @param y + * the y coordinate of the upper left corner of the rectangle + * that contains the arc. + * @param width + * the width of the rectangle that contains the arc. + * @param height + * the height of the rectangle that contains the arc. + * @param start + * the start angle of the arc in degrees. + * @param extent + * the width angle of the arc in degrees. + * @param type + * the type of the new Arc2D, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ - public Double(double x, double y, double width, double height, - double start, double extent, int type) - { + public Double(double x, double y, double width, double height, double start, double extent, + int type) { super(type); this.x = x; this.y = y; @@ -281,14 +329,18 @@ public abstract class Arc2D extends RectangularShape { } /** - * Instantiates a new Angle2D with the specified float-valued data - * and the bounding rectangle given by the parameter bounds. + * Instantiates a new Angle2D with the specified float-valued data and + * the bounding rectangle given by the parameter bounds. * - * @param bounds the bounding rectangle of the Angle2D. - * @param start the start angle of the arc in degrees. - * @param extent the width angle of the arc in degrees. - * @param type the type of the new Arc2D, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param bounds + * the bounding rectangle of the Angle2D. + * @param start + * the start angle of the arc in degrees. + * @param extent + * the width angle of the arc in degrees. + * @param type + * the type of the new Arc2D, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ public Double(Rectangle2D bounds, double start, double extent, int type) { super(type); @@ -336,9 +388,8 @@ public abstract class Arc2D extends RectangularShape { } @Override - public void setArc(double x, double y, double width, double height, - double start, double extent, int type) - { + public void setArc(double x, double y, double width, double height, double start, + double extent, int type) { this.setArcType(type); this.x = x; this.y = y; @@ -366,73 +417,116 @@ public abstract class Arc2D extends RectangularShape { } /** - * The Class Iterator is the subclass of PathIterator that is used to + * The Class Iterator is the subclass of PathIterator that is used to * traverse the boundary of a shape of type Arc2D. */ class Iterator implements PathIterator { - /** The x coordinate of the center of the arc's bounding rectangle. */ + /** + * The x coordinate of the center of the arc's bounding rectangle. + */ double x; - /** The y coordinate of the center of the arc's bounding rectangle. */ + /** + * The y coordinate of the center of the arc's bounding rectangle. + */ double y; - /** Half of the width of the arc's bounding rectangle (the radius in the case of a circular arc). */ + /** + * Half of the width of the arc's bounding rectangle (the radius in the + * case of a circular arc). + */ double width; - - /** Half of the height of the arc's bounding rectangle (the radius in the case of a circular arc). */ + + /** + * Half of the height of the arc's bounding rectangle (the radius in the + * case of a circular arc). + */ double height; - - /** The start angle of the arc in degrees. */ + + /** + * The start angle of the arc in degrees. + */ double angle; - - /** The angle extent in degrees. */ + + /** + * The angle extent in degrees. + */ double extent; - - /** The closure type of the arc. */ + + /** + * The closure type of the arc. + */ int type; - - /** The path iterator transformation. */ + + /** + * The path iterator transformation. + */ AffineTransform t; - - /** The current segment index. */ + + /** + * The current segment index. + */ int index; - - /** The number of arc segments the source arc subdivided to be approximated by Bezier curves. Depends on extent value. */ + + /** + * The number of arc segments the source arc subdivided to be + * approximated by Bezier curves. Depends on extent value. + */ int arcCount; - - /** The number of line segments. Depends on closure type. */ + + /** + * The number of line segments. Depends on closure type. + */ int lineCount; - - /** The step to calculate next arc subdivision point. */ + + /** + * The step to calculate next arc subdivision point. + */ double step; - - /** The temporary value of cosinus of the current angle. */ + + /** + * The temporary value of cosinus of the current angle. + */ double cos; - /** The temporary value of sinus of the current angle. */ + /** + * The temporary value of sinus of the current angle. + */ double sin; - + /** The coefficient to calculate control points of Bezier curves. */ double k; - - /** The temporary value of x coordinate of the Bezier curve control vector. */ + + /** + * The temporary value of x coordinate of the Bezier curve control + * vector. + */ double kx; - /** The temporary value of y coordinate of the Bezier curve control vector. */ + /** + * The temporary value of y coordinate of the Bezier curve control + * vector. + */ double ky; - - /** The x coordinate of the first path point (MOVE_TO). */ + + /** + * The x coordinate of the first path point (MOVE_TO). + */ double mx; - - /** The y coordinate of the first path point (MOVE_TO). */ + + /** + * The y coordinate of the first path point (MOVE_TO). + */ double my; /** * Constructs a new Arc2D.Iterator for given line and transformation * - * @param a - the source Arc2D object - * @param t the AffineTransformation. + * @param a + * the source Arc2D object. + * @param t + * the AffineTransformation. */ Iterator(Arc2D a, AffineTransform t) { if (width < 0 || height < 0) { @@ -462,8 +556,7 @@ public abstract class Arc2D extends RectangularShape { } else { arcCount = (int)Math.rint(Math.abs(extent) / 90.0); step = Math.toRadians(extent / arcCount); - k = 4.0 / 3.0 * (1.0 - Math.cos(step / 2.0)) - / Math.sin(step / 2.0); + k = 4.0 / 3.0 * (1.0 - Math.cos(step / 2.0)) / Math.sin(step / 2.0); } lineCount = 0; @@ -578,13 +671,16 @@ public abstract class Arc2D extends RectangularShape { } - /** The closure type of the arc. */ + /** + * The closure type of the arc. + */ private int type; /** * Instantiates a new arc2D. * - * @param type the closure type. + * @param type + * the closure type. */ protected Arc2D(int type) { setArcType(type); @@ -595,11 +691,16 @@ public abstract class Arc2D extends RectangularShape { * object with values either of type float or of type double depending on * whether this Arc2D instance is of type Float or Double. * - * @param x the x coordinate of the upper left corner of the bounding rectangle. - * @param y the y coordinate of the upper left corner of the bounding rectangle. - * @param width the width of the bounding rectangle. - * @param height the height of the bounding rectangle. - * + * @param x + * the x coordinate of the upper left corner of the bounding + * rectangle. + * @param y + * the y coordinate of the upper left corner of the bounding + * rectangle. + * @param width + * the width of the bounding rectangle. + * @param height + * the height of the bounding rectangle. * @return the corresponding Rectangle2D object. */ protected abstract Rectangle2D makeBounds(double x, double y, double width, double height); @@ -621,39 +722,46 @@ public abstract class Arc2D extends RectangularShape { /** * Sets the start angle. * - * @param start the new start angle. + * @param start + * the new start angle. */ public abstract void setAngleStart(double start); /** * Sets the width angle. * - * @param extent the new width angle. + * @param extent + * the new width angle. */ public abstract void setAngleExtent(double extent); /** * Sets the data values that define the arc. * - * @param x the x coordinate of the upper left corner of the rectangle that - * contains the arc. - * @param y the y coordinate of the upper left corner of the rectangle that - * contains the arc. - * @param width the width of the rectangle that - * contains the arc. - * @param height the height of the rectangle that - * contains the arc. - * @param start the start angle of the arc in degrees. - * @param extent the width angle of the arc in degrees. - * @param type the type of the new Arc2D, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param x + * the x coordinate of the upper left corner of the rectangle + * that contains the arc. + * @param y + * the y coordinate of the upper left corner of the rectangle + * that contains the arc. + * @param width + * the width of the rectangle that contains the arc. + * @param height + * the height of the rectangle that contains the arc. + * @param start + * the start angle of the arc in degrees. + * @param extent + * the width angle of the arc in degrees. + * @param type + * the type of the new Arc2D, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ - public abstract void setArc(double x, double y, double width, - double height, double start, double extent, int type); + public abstract void setArc(double x, double y, double width, double height, double start, + double extent, int type); /** - * Gets the arc type, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * Gets the arc type, either {@link Arc2D#OPEN}, {@link Arc2D#CHORD}, or + * {@link Arc2D#PIE}. * * @return the arc type. */ @@ -662,10 +770,11 @@ public abstract class Arc2D extends RectangularShape { } /** - * Sets the arc type, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * Sets the arc type, either {@link Arc2D#OPEN}, {@link Arc2D#CHORD}, or + * {@link Arc2D#PIE}. * - * @param type the new arc type. + * @param type + * the new arc type. */ public void setArcType(int type) { if (type != OPEN && type != CHORD && type != PIE) { @@ -682,9 +791,8 @@ public abstract class Arc2D extends RectangularShape { */ public Point2D getStartPoint() { double a = Math.toRadians(getAngleStart()); - return new Point2D.Double( - getX() + (1.0 + Math.cos(a)) * getWidth() / 2.0, - getY() + (1.0 - Math.sin(a)) * getHeight() / 2.0); + return new Point2D.Double(getX() + (1.0 + Math.cos(a)) * getWidth() / 2.0, getY() + + (1.0 - Math.sin(a)) * getHeight() / 2.0); } /** @@ -694,9 +802,8 @@ public abstract class Arc2D extends RectangularShape { */ public Point2D getEndPoint() { double a = Math.toRadians(getAngleStart() + getAngleExtent()); - return new Point2D.Double( - getX() + (1.0 + Math.cos(a)) * getWidth() / 2.0, - getY() + (1.0 - Math.sin(a)) * getHeight() / 2.0); + return new Point2D.Double(getX() + (1.0 + Math.cos(a)) * getWidth() / 2.0, getY() + + (1.0 - Math.sin(a)) * getHeight() / 2.0); } public Rectangle2D getBounds2D() { @@ -712,8 +819,8 @@ public abstract class Arc2D extends RectangularShape { Point2D p2 = getEndPoint(); double bx1 = containsAngle(180.0) ? rx1 : Math.min(p1.getX(), p2.getX()); - double by1 = containsAngle(90.0) ? ry1 : Math.min(p1.getY(), p2.getY()); - double bx2 = containsAngle(0.0) ? rx2 : Math.max(p1.getX(), p2.getX()); + double by1 = containsAngle(90.0) ? ry1 : Math.min(p1.getY(), p2.getY()); + double bx2 = containsAngle(0.0) ? rx2 : Math.max(p1.getX(), p2.getX()); double by2 = containsAngle(270.0) ? ry2 : Math.max(p1.getY(), p2.getY()); if (type == PIE) { @@ -735,12 +842,17 @@ public abstract class Arc2D extends RectangularShape { /** * Sets the data that defines the arc. * - * @param point the upper left corner of the bounding rectangle. - * @param size the size of the bounding rectangle. - * @param start the start angle of the arc in degrees. - * @param extent the angle witdth of the arc in degrees. - * @param type the closure type, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param point + * the upper left corner of the bounding rectangle. + * @param size + * the size of the bounding rectangle. + * @param start + * the start angle of the arc in degrees. + * @param extent + * the angle width of the arc in degrees. + * @param type + * the closure type, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ public void setArc(Point2D point, Dimension2D size, double start, double extent, int type) { setArc(point.getX(), point.getY(), size.getWidth(), size.getHeight(), start, extent, type); @@ -749,11 +861,15 @@ public abstract class Arc2D extends RectangularShape { /** * Sets the data that defines the arc. * - * @param rect the arc's bounding rectangle. - * @param start the start angle of the arc in degrees. - * @param extent the angle witdth of the arc in degrees. - * @param type the closure type, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param rect + * the arc's bounding rectangle. + * @param start + * the start angle of the arc in degrees. + * @param extent + * the angle width of the arc in degrees. + * @param type + * the closure type, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ public void setArc(Rectangle2D rect, double start, double extent, int type) { setArc(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight(), start, extent, type); @@ -762,47 +878,60 @@ public abstract class Arc2D extends RectangularShape { /** * Sets the data that defines the arc by copying it from another Arc2D. * - * @param arc the arc whose data is copied into this arc. + * @param arc + * the arc whose data is copied into this arc. */ public void setArc(Arc2D arc) { - setArc(arc.getX(), arc.getY(), arc.getWidth(), arc.getHeight(), arc - .getAngleStart(), arc.getAngleExtent(), arc.getArcType()); + setArc(arc.getX(), arc.getY(), arc.getWidth(), arc.getHeight(), arc.getAngleStart(), arc + .getAngleExtent(), arc.getArcType()); } /** * Sets the data for a circular arc by giving its center and radius. * - * @param x the x coordinate of the center of the circle. - * @param y the y coordinate of the center of the circle. - * @param radius the radius of the circle. - * @param start the start angle of the arc in degrees. - * @param extent the angle witdth of the arc in degrees. - * @param type the closure type, either {@link Arc2D#OPEN}, - * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. + * @param x + * the x coordinate of the center of the circle. + * @param y + * the y coordinate of the center of the circle. + * @param radius + * the radius of the circle. + * @param start + * the start angle of the arc in degrees. + * @param extent + * the angle width of the arc in degrees. + * @param type + * the closure type, either {@link Arc2D#OPEN}, + * {@link Arc2D#CHORD}, or {@link Arc2D#PIE}. */ - public void setArcByCenter(double x, double y, double radius, double start, double extent, int type) { + public void setArcByCenter(double x, double y, double radius, double start, double extent, + int type) { setArc(x - radius, y - radius, radius * 2.0, radius * 2.0, start, extent, type); } /** - * Sets the arc data for a circular arc based on two tangent lines - * and the radius. The two tangent lines are the lines from p1 - * to p2 and from p2 to p3, which determine a unique circle - * with the given radius. The start and end points of the arc - * are the points where the circle touches the two lines, and - * the arc itself is the shorter of the two circle segments - * determined by the two points (in other words, it is the - * piece of the circle that is closer to the lines' intersection - * point p2 and forms a concave shape with the segments from p1 to p2 - * and from p2 to p3). + * Sets the arc data for a circular arc based on two tangent lines and the + * radius. The two tangent lines are the lines from p1 to p2 and from p2 to + * p3, which determine a unique circle with the given radius. The start and + * end points of the arc are the points where the circle touches the two + * lines, and the arc itself is the shorter of the two circle segments + * determined by the two points (in other words, it is the piece of the + * circle that is closer to the lines' intersection point p2 and forms a + * concave shape with the segments from p1 to p2 and from p2 to p3). * - * @param p1 a point which determines one of the two tanget lines (with p2). - * @param p2 the point of intersection of the two tangent lines. - * @param p3 a point which determines one of the two tanget lines (with p2). - * @param radius the radius of the circular arc. + * @param p1 + * a point which determines one of the two tangent lines (with + * p2). + * @param p2 + * the point of intersection of the two tangent lines. + * @param p3 + * a point which determines one of the two tangent lines (with + * p2). + * @param radius + * the radius of the circular arc. */ public void setArcByTangent(Point2D p1, Point2D p2, Point2D p3, double radius) { - // Used simple geometric calculations of arc center, radius and angles by tangents + // Used simple geometric calculations of arc center, radius and angles + // by tangents double a1 = -Math.atan2(p1.getY() - p2.getY(), p1.getX() - p2.getX()); double a2 = -Math.atan2(p3.getY() - p2.getY(), p3.getX() - p2.getX()); double am = (a1 + a2) / 2.0; @@ -821,10 +950,11 @@ public abstract class Arc2D extends RectangularShape { } /** - * Sets a new start angle to be the angle given by the the vector - * from the current center point to the specified point. + * Sets a new start angle to be the angle given by the the vector from the + * current center point to the specified point. * - * @param point the point that determines the new start angle. + * @param point + * the point that determines the new start angle. */ public void setAngleStart(Point2D point) { double angle = Math.atan2(point.getY() - getCenterY(), point.getX() - getCenterX()); @@ -832,20 +962,23 @@ public abstract class Arc2D extends RectangularShape { } /** - * Sets the angles in terms of vectors from the current arc center - * to the points (x1, y1) and (x2, y2). The start angle is given - * by the vector from the current center to the point (x1, y1) and - * the end angle is given by the vector from the center to the point - * (x2, y2). + * Sets the angles in terms of vectors from the current arc center to the + * points (x1, y1) and (x2, y2). The start angle is given by the vector from + * the current center to the point (x1, y1) and the end angle is given by + * the vector from the center to the point (x2, y2). * - * @param x1 the x coordinate of the point whose vector from the center - * point determines the new start angle of the arc. - * @param y1 the y coordinate of the point whose vector from the center - * point determines the new start angle of the arc. - * @param x2 the x coordinate of the point whose vector from the center - * point determines the new end angle of the arc. - * @param y2 the y coordinate of the point whose vector from the center - * point determines the new end angle of the arc. + * @param x1 + * the x coordinate of the point whose vector from the center + * point determines the new start angle of the arc. + * @param y1 + * the y coordinate of the point whose vector from the center + * point determines the new start angle of the arc. + * @param x2 + * the x coordinate of the point whose vector from the center + * point determines the new end angle of the arc. + * @param y2 + * the y coordinate of the point whose vector from the center + * point determines the new end angle of the arc. */ public void setAngles(double x1, double y1, double x2, double y2) { double cx = getCenterX(); @@ -861,29 +994,30 @@ public abstract class Arc2D extends RectangularShape { } /** - * Sets the angles in terms of vectors from the current arc center - * to the points p1 and p2. The start angle is given - * by the vector from the current center to the point p1 and - * the end angle is given by the vector from the center to the point - * p2. + * Sets the angles in terms of vectors from the current arc center to the + * points p1 and p2. The start angle is given by the vector from the current + * center to the point p1 and the end angle is given by the vector from the + * center to the point p2. * - * @param p1 the point whose vector from the center - * point determines the new start angle of the arc. - * @param p2 the point whose vector from the center - * point determines the new end angle of the arc. + * @param p1 + * the point whose vector from the center point determines the + * new start angle of the arc. + * @param p2 + * the point whose vector from the center point determines the + * new end angle of the arc. */ public void setAngles(Point2D p1, Point2D p2) { setAngles(p1.getX(), p1.getY(), p2.getX(), p2.getY()); } /** - * Normalizes the angle by removing extra winding (past 360 degrees) - * and placing it in the positive degree range. + * Normalizes the angle by removing extra winding (past 360 degrees) and + * placing it in the positive degree range. * - * @param angle - the source angle in degrees - * - * @return an angle between 0 and 360 degrees which corresponds - * to the same direction vector as the source angle. + * @param angle + * the source angle in degrees. + * @return an angle between 0 and 360 degrees which corresponds to the same + * direction vector as the source angle. */ double getNormAngle(double angle) { double n = Math.floor(angle / 360.0); @@ -893,10 +1027,10 @@ public abstract class Arc2D extends RectangularShape { /** * Determines whether the given angle is contained in the span of the arc. * - * @param angle the angle to test in degrees. - * - * @return true, if the given angle is between the start angle and - * the end angle of the arc. + * @param angle + * the angle to test in degrees. + * @return true, if the given angle is between the start angle and the end + * angle of the arc. */ public boolean containsAngle(double angle) { double extent = getAngleExtent(); @@ -912,8 +1046,7 @@ public abstract class Arc2D extends RectangularShape { if (a2 < 0.0) { return angle >= a2 + 360.0 || angle <= a1; } - return extent > 0.0 ? a1 <= angle && angle <= a2 : a2 <= angle - && angle <= a1; + return extent > 0.0 ? a1 <= angle && angle <= a2 : a2 <= angle && angle <= a1; } public boolean contains(double px, double py) { @@ -931,8 +1064,7 @@ public abstract class Arc2D extends RectangularShape { return true; } - boolean containsAngle = containsAngle(Math.toDegrees(-Math - .atan2(ny, nx))); + boolean containsAngle = containsAngle(Math.toDegrees(-Math.atan2(ny, nx))); if (type == PIE) { return containsAngle; } @@ -943,14 +1075,13 @@ public abstract class Arc2D extends RectangularShape { Line2D l = new Line2D.Double(getStartPoint(), getEndPoint()); int ccw1 = l.relativeCCW(px, py); int ccw2 = l.relativeCCW(getCenterX(), getCenterY()); - return ccw1 == 0 || ccw2 == 0 - || ((ccw1 + ccw2) == 0 ^ absExtent > 180.0); + return ccw1 == 0 || ccw2 == 0 || ((ccw1 + ccw2) == 0 ^ absExtent > 180.0); } public boolean contains(double rx, double ry, double rw, double rh) { - if (!(contains(rx, ry) && contains(rx + rw, ry) - && contains(rx + rw, ry + rh) && contains(rx, ry + rh))) { + if (!(contains(rx, ry) && contains(rx + rw, ry) && contains(rx + rw, ry + rh) && contains( + rx, ry + rh))) { return false; } @@ -1003,9 +1134,8 @@ public abstract class Arc2D extends RectangularShape { } if (type == PIE) { - if (r.intersectsLine(p1.getX(), p1.getY(), cx, cy) || - r.intersectsLine(p2.getX(), p2.getY(), cx, cy)) - { + if (r.intersectsLine(p1.getX(), p1.getY(), cx, cy) + || r.intersectsLine(p2.getX(), p2.getY(), cx, cy)) { return true; } } else { @@ -1025,4 +1155,3 @@ public abstract class Arc2D extends RectangularShape { } } - diff --git a/awt/java/awt/geom/Area.java b/awt/java/awt/geom/Area.java index bc27d4e248..e6619e349c 100644 --- a/awt/java/awt/geom/Area.java +++ b/awt/java/awt/geom/Area.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.awt.Rectangle; @@ -27,13 +28,18 @@ import java.awt.geom.Rectangle2D; import java.util.NoSuchElementException; import org.apache.harmony.awt.internal.nls.Messages; +import org.apache.harmony.luni.util.NotImplementedException; /** * The Class Area provides a minimal implementation for a generic shape. + * + * @since Android 1.0 */ public class Area implements Shape, Cloneable { - /** The source Shape object. */ + /** + * The source Shape object. + */ Shape s; /** @@ -80,7 +86,8 @@ public class Area implements Shape, Cloneable { /** * Instantiates a new area with data given by the specified shape. * - * @param s the shape that gives the data for this Area + * @param s + * the shape that gives the data for this Area. */ public Area(Shape s) { if (s == null) { @@ -114,11 +121,11 @@ public class Area implements Shape, Cloneable { /** * Tests whether the object is equal to this Area. * - * @param obj the object to compare - * - * @return true, if successful - * - * @throws NotImplementedException if this method is not implemented + * @param obj + * the object to compare. + * @return true, if successful. + * @throws NotImplementedException + * if this method is not implemented. */ public boolean equals(Area obj) throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ @@ -140,7 +147,7 @@ public class Area implements Shape, Cloneable { } public Rectangle2D getBounds2D() { - return s == null ? new Rectangle2D.Double(): s.getBounds2D(); + return s == null ? new Rectangle2D.Double() : s.getBounds2D(); } public PathIterator getPathIterator(AffineTransform t) { @@ -154,32 +161,34 @@ public class Area implements Shape, Cloneable { /** * Adds the specified area to this area. * - * @param area the area to add to this area - * - * @throws NotImplementedException if this method is not implemented + * @param area + * the area to add to this area. + * @throws NotImplementedException + * if this method is not implemented. */ public void add(Area area) throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ } /** - * Performs an exclusive or operation between this shape and the - * specified shape. + * Performs an exclusive or operation between this shape and the specified + * shape. * - * @param area the area to XOR against this area - * - * @throws NotImplementedException if this method is not implemented + * @param area + * the area to XOR against this area. + * @throws NotImplementedException + * if this method is not implemented. */ public void exclusiveOr(Area area) throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ } /** - * Extracts a Rectangle2D from the source shape if the underlying shape - * data describes a rectangle. + * Extracts a Rectangle2D from the source shape if the underlying shape data + * describes a rectangle. * - * @return a Rectangle2D object if the source shape is rectangle, - * or null if shape is empty or not rectangle. + * @return a Rectangle2D object if the source shape is rectangle, or null if + * shape is empty or not rectangle. */ Rectangle2D extractRectangle() { if (s == null) { @@ -189,7 +198,7 @@ public class Area implements Shape, Cloneable { int count = 0; PathIterator p = s.getPathIterator(null); float[] coords = new float[6]; - while(!p.isDone()) { + while (!p.isDone()) { int type = p.currentSegment(coords); if (count > 12 || type == PathIterator.SEG_QUADTO || type == PathIterator.SEG_CUBICTO) { return null; @@ -198,21 +207,22 @@ public class Area implements Shape, Cloneable { points[count++] = coords[1]; p.next(); } - if (points[0] == points[6] && points[6] == points[8] && points[2] == points[4] && - points[1] == points[3] && points[3] == points[9] && points[5] == points[7]) - { - return new Rectangle2D.Float(points[0], points[1], points[2] - points[0], points[7] - points[1]); + if (points[0] == points[6] && points[6] == points[8] && points[2] == points[4] + && points[1] == points[3] && points[3] == points[9] && points[5] == points[7]) { + return new Rectangle2D.Float(points[0], points[1], points[2] - points[0], points[7] + - points[1]); } return null; } - + /** - * Reduces the size of this Area by intersecting it with the - * specified Area if they are both rectangles. + * Reduces the size of this Area by intersecting it with the specified Area + * if they are both rectangles. * - * @see java.awt.geom.Rectangle2D#intersect(Rectangle2D, Rectangle2D, Rectangle2D) - * - * @param area the area + * @see java.awt.geom.Rectangle2D#intersect(Rectangle2D, Rectangle2D, + * Rectangle2D) + * @param area + * the area. */ public void intersect(Area area) { Rectangle2D src1 = extractRectangle(); @@ -225,9 +235,10 @@ public class Area implements Shape, Cloneable { /** * Subtract the specified area from this area. * - * @param area the area to subtract - * - * @throws NotImplementedException if this method is not implemented + * @param area + * the area to subtract. + * @throws NotImplementedException + * if this method is not implemented. */ public void subtract(Area area) throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ @@ -236,9 +247,9 @@ public class Area implements Shape, Cloneable { /** * Checks if this Area is empty. * - * @return true, if this Area is empty - * - * @throws NotImplementedException if this method is not implemented + * @return true, if this Area is empty. + * @throws NotImplementedException + * if this method is not implemented. */ public boolean isEmpty() throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ @@ -247,9 +258,9 @@ public class Area implements Shape, Cloneable { /** * Checks if this Area is polygonal. * - * @return true, if this Area is polygonal - * - * @throws NotImplementedException if this method is not implemented + * @return true, if this Area is polygonal. + * @throws NotImplementedException + * if this method is not implemented. */ public boolean isPolygonal() throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ @@ -258,9 +269,9 @@ public class Area implements Shape, Cloneable { /** * Checks if this Area is rectangular. * - * @return true, if this Area is rectangular - * - * @throws NotImplementedException if this method is not implemented + * @return true, if this Area is rectangular. + * @throws NotImplementedException + * if this method is not implemented. */ public boolean isRectangular() throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ @@ -269,9 +280,9 @@ public class Area implements Shape, Cloneable { /** * Checks if this Area is singular. * - * @return true, if this Area is singular - * - * @throws NotImplementedException if this method is not implemented + * @return true, if this Area is singular. + * @throws NotImplementedException + * if this method is not implemented. */ public boolean isSingular() throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ @@ -280,30 +291,32 @@ public class Area implements Shape, Cloneable { /** * Resets the data of this Area. * - * @throws NotImplementedException if this method is not implemented + * @throws NotImplementedException + * if this method is not implemented. */ public void reset() throws org.apache.harmony.luni.util.NotImplementedException { throw new RuntimeException("Not implemented"); //$NON-NLS-1$ } /** - * Transforms the data of this Area according to the specified + * Transforms the data of this Area according to the specified * AffineTransform. * - * @param t the transform to use to transform the data + * @param t + * the transform to use to transform the data. */ public void transform(AffineTransform t) { s = t.createTransformedShape(s); } /** - * Creates a new Area that is the result of transforming the data - * of this Area according to the specified AffineTransform. - * - * @param t the transform to use to transform the data + * Creates a new Area that is the result of transforming the data of this + * Area according to the specified AffineTransform. * - * @return the new Area that is the result of transforming the data - * of this Area according to the specified AffineTransform. + * @param t + * the transform to use to transform the data. + * @return the new Area that is the result of transforming the data of this + * Area according to the specified AffineTransform. */ public Area createTransformedArea(AffineTransform t) { return s == null ? new Area() : new Area(t.createTransformedShape(s)); diff --git a/awt/java/awt/geom/CubicCurve2D.java b/awt/java/awt/geom/CubicCurve2D.java index 3e440c8b6c..1ddedf39a4 100644 --- a/awt/java/awt/geom/CubicCurve2D.java +++ b/awt/java/awt/geom/CubicCurve2D.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.awt.Rectangle; @@ -28,49 +29,69 @@ import org.apache.harmony.awt.gl.Crossing; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class CubicCurve2D is a Shape that represents a segment of a - * quadratic (Bezier) curve. The curved segment is determined by four points: - * a start point, an end point, and two control points. - * The control points give information about the tangent and next - * derivative at the endpoints according to the standard theory of - * Bezier curves. For more information on Bezier curves, - * see this article. + * The Class CubicCurve2D is a Shape that represents a segment of a quadratic + * (Bezier) curve. The curved segment is determined by four points: a start + * point, an end point, and two control points. The control points give + * information about the tangent and next derivative at the endpoints according + * to the standard theory of Bezier curves. For more information on Bezier + * curves, see this + * article. + * + * @since Android 1.0 */ public abstract class CubicCurve2D implements Shape, Cloneable { /** - * The Class Float is the subclass of CubicCurve2D that has all - * of its data values stored with float-level precision. + * The Class Float is the subclass of CubicCurve2D that has all of its data + * values stored with float-level precision. + * + * @since Android 1.0 */ public static class Float extends CubicCurve2D { - /** The x coordinate of the starting point. */ + /** + * The x coordinate of the starting point. + */ public float x1; - - /** The y coordinate of the starting point. */ + + /** + * The y coordinate of the starting point. + */ public float y1; - - /** The x coordinate of the first control point. */ + + /** + * The x coordinate of the first control point. + */ public float ctrlx1; - - /** The y coordinate of the first control point. */ + + /** + * The y coordinate of the first control point. + */ public float ctrly1; - - /** The x coordinate of the second control point. */ + + /** + * The x coordinate of the second control point. + */ public float ctrlx2; - - /** The y coordinate of the second control point. */ + + /** + * The y coordinate of the second control point. + */ public float ctrly2; - - /** The x coordinate of the end point. */ + + /** + * The x coordinate of the end point. + */ public float x2; - - /** The y coordinate of the end point. */ + + /** + * The y coordinate of the end point. + */ public float y2; /** - * Instantiates a new float-valued CubicCurve2D with all coordinate values - * set to zero. + * Instantiates a new float-valued CubicCurve2D with all coordinate + * values set to zero. */ public Float() { } @@ -79,16 +100,25 @@ public abstract class CubicCurve2D implements Shape, Cloneable { * Instantiates a new float-valued CubicCurve2D with the specified * coordinate values. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param ctrlx1 the x coordinate of the first control point - * @param ctrly1 the y coordinate of the first control point - * @param ctrlx2 the x coordinate of the second control point - * @param ctrly2 the y coordinate of the second control point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param ctrlx1 + * the x coordinate of the first control point. + * @param ctrly1 + * the y coordinate of the first control point. + * @param ctrlx2 + * the x coordinate of the second control point. + * @param ctrly2 + * the y coordinate of the second control point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. */ - public Float(float x1, float y1, float ctrlx1, float ctrly1, float ctrlx2, float ctrly2, float x2, float y2) { + public Float(float x1, float y1, float ctrlx1, float ctrly1, float ctrlx2, float ctrly2, + float x2, float y2) { setCurve(x1, y1, ctrlx1, ctrly1, ctrlx2, ctrly2, x2, y2); } @@ -153,9 +183,8 @@ public abstract class CubicCurve2D implements Shape, Cloneable { } @Override - public void setCurve(double x1, double y1, double ctrlx1, double ctrly1, - double ctrlx2, double ctrly2, double x2, double y2) - { + public void setCurve(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, + double ctrly2, double x2, double y2) { this.x1 = (float)x1; this.y1 = (float)y1; this.ctrlx1 = (float)ctrlx1; @@ -169,18 +198,25 @@ public abstract class CubicCurve2D implements Shape, Cloneable { /** * Sets the data values of the curve. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param ctrlx1 the x coordinate of the first control point - * @param ctrly1 the y coordinate of the first control point - * @param ctrlx2 the x coordinate of the second control point - * @param ctrly2 the y coordinate of the second control point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param ctrlx1 + * the x coordinate of the first control point. + * @param ctrly1 + * the y coordinate of the first control point. + * @param ctrlx2 + * the x coordinate of the second control point. + * @param ctrly2 + * the y coordinate of the second control point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. */ - public void setCurve(float x1, float y1, float ctrlx1, float ctrly1, - float ctrlx2, float ctrly2, float x2, float y2) - { + public void setCurve(float x1, float y1, float ctrlx1, float ctrly1, float ctrlx2, + float ctrly2, float x2, float y2) { this.x1 = x1; this.y1 = y1; this.ctrlx1 = ctrlx1; @@ -201,38 +237,56 @@ public abstract class CubicCurve2D implements Shape, Cloneable { } /** - * The Class Double is the subclass of CubicCurve2D that has all - * of its data values stored with double-level precision. + * The Class Double is the subclass of CubicCurve2D that has all of its data + * values stored with double-level precision. + * + * @since Android 1.0 */ public static class Double extends CubicCurve2D { - /** The x coordinate of the starting point. */ + /** + * The x coordinate of the starting point. + */ public double x1; - - /** The y coordinate of the starting point. */ + + /** + * The y coordinate of the starting point. + */ public double y1; - - /** The x coordinate of the first control point. */ + + /** + * The x coordinate of the first control point. + */ public double ctrlx1; - - /** The y coordinate of the first control point. */ + + /** + * The y coordinate of the first control point. + */ public double ctrly1; - - /** The x coordinate of the second control point. */ + + /** + * The x coordinate of the second control point. + */ public double ctrlx2; - - /** The y coordinate of the second control point. */ + + /** + * The y coordinate of the second control point. + */ public double ctrly2; - - /** The x coordinate of the end point. */ + + /** + * The x coordinate of the end point. + */ public double x2; - - /** The y coordinate of the end point. */ + + /** + * The y coordinate of the end point. + */ public double y2; /** - * Instantiates a new double-valued CubicCurve2D with all coordinate values - * set to zero. + * Instantiates a new double-valued CubicCurve2D with all coordinate + * values set to zero. */ public Double() { } @@ -241,17 +295,25 @@ public abstract class CubicCurve2D implements Shape, Cloneable { * Instantiates a new double-valued CubicCurve2D with the specified * coordinate values. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param ctrlx1 the x coordinate of the first control point - * @param ctrly1 the y coordinate of the first control point - * @param ctrlx2 the x coordinate of the second control point - * @param ctrly2 the y coordinate of the second control point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param ctrlx1 + * the x coordinate of the first control point. + * @param ctrly1 + * the y coordinate of the first control point. + * @param ctrlx2 + * the x coordinate of the second control point. + * @param ctrly2 + * the y coordinate of the second control point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. */ - public Double(double x1, double y1, double ctrlx1, double ctrly1, - double ctrlx2, double ctrly2, double x2, double y2) { + public Double(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, + double ctrly2, double x2, double y2) { setCurve(x1, y1, ctrlx1, ctrly1, ctrlx2, ctrly2, x2, y2); } @@ -316,9 +378,8 @@ public abstract class CubicCurve2D implements Shape, Cloneable { } @Override - public void setCurve(double x1, double y1, double ctrlx1, double ctrly1, - double ctrlx2, double ctrly2, double x2, double y2) - { + public void setCurve(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, + double ctrly2, double x2, double y2) { this.x1 = x1; this.y1 = y1; this.ctrlx1 = ctrlx1; @@ -339,27 +400,36 @@ public abstract class CubicCurve2D implements Shape, Cloneable { } /* - * CubicCurve2D path iterator + * CubicCurve2D path iterator */ /** * The Iterator class for the Shape CubicCurve2D. */ class Iterator implements PathIterator { - /** The source CubicCurve2D object. */ + /** + * The source CubicCurve2D object. + */ CubicCurve2D c; - - /** The path iterator transformation. */ + + /** + * The path iterator transformation. + */ AffineTransform t; - - /** The current segmenet index. */ + + /** + * The current segment index. + */ int index; /** - * Constructs a new CubicCurve2D.Iterator for given line and transformation + * Constructs a new CubicCurve2D.Iterator for given line and + * transformation * - * @param c - the source CubicCurve2D object - * @param t the t + * @param c + * the source CubicCurve2D object. + * @param t + * the affine transformation object. */ Iterator(CubicCurve2D c, AffineTransform t) { this.c = c; @@ -443,42 +513,42 @@ public abstract class CubicCurve2D implements Shape, Cloneable { /** * Gets the x coordinate of the starting point. * - * @return the x coordinate of the starting point + * @return the x coordinate of the starting point. */ public abstract double getX1(); /** * Gets the y coordinate of the starting point. * - * @return the y coordinate of the starting point + * @return the y coordinate of the starting point. */ public abstract double getY1(); /** * Gets the starting point. * - * @return the starting point + * @return the starting point. */ public abstract Point2D getP1(); /** * Gets the x coordinate of the first control point. * - * @return the x coordinate of the first control point + * @return the x coordinate of the first control point. */ public abstract double getCtrlX1(); /** * Gets the y coordinate of the first control point. * - * @return the y coordinate of the first control point + * @return the y coordinate of the first control point. */ public abstract double getCtrlY1(); /** * Gets the second control point. * - * @return the second control point + * @return the second control point. */ public abstract Point2D getCtrlP1(); @@ -499,42 +569,50 @@ public abstract class CubicCurve2D implements Shape, Cloneable { /** * Gets the second control point. * - * @return the second control point + * @return the second control point. */ public abstract Point2D getCtrlP2(); /** * Gets the x coordinate of the end point. * - * @return the x coordinate of the end point + * @return the x coordinate of the end point. */ public abstract double getX2(); /** * Gets the y coordinate of the end point. * - * @return the y coordinate of the end point + * @return the y coordinate of the end point. */ public abstract double getY2(); /** * Gets the end point. * - * @return the end point + * @return the end point. */ public abstract Point2D getP2(); /** * Sets the data of the curve. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param ctrlx1 the x coordinate of the first control point - * @param ctrly1 the y coordinate of the first control point - * @param ctrlx2 the x coordinate of the second control point - * @param ctrly2 the y coordinate of the second control point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param ctrlx1 + * the x coordinate of the first control point. + * @param ctrly1 + * the y coordinate of the first control point. + * @param ctrlx2 + * the x coordinate of the second control point. + * @param ctrly2 + * the y coordinate of the second control point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. */ public abstract void setCurve(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2); @@ -542,224 +620,238 @@ public abstract class CubicCurve2D implements Shape, Cloneable { /** * Sets the data of the curve as point objects. * - * @param p1 the starting point - * @param cp1 the first control point - * @param cp2 the second control point - * @param p2 the end point - * - * @throws NullPointerException if any of the points is null. + * @param p1 + * the starting point. + * @param cp1 + * the first control point. + * @param cp2 + * the second control point. + * @param p2 + * the end point. + * @throws NullPointerException + * if any of the points is null. */ public void setCurve(Point2D p1, Point2D cp1, Point2D cp2, Point2D p2) { - setCurve( - p1.getX(), p1.getY(), - cp1.getX(), cp1.getY(), - cp2.getX(), cp2.getY(), - p2.getX(), p2.getY()); + setCurve(p1.getX(), p1.getY(), cp1.getX(), cp1.getY(), cp2.getX(), cp2.getY(), p2.getX(), + p2.getY()); } /** - * Sets the data of the curve by reading the data from an array - * of values. The values are read in the same order as the arguments - * of the method {@link CubicCurve2D#setCurve(double, double, double, double, double, double, double, double)}. - * - * @param coords the array of values containing the new coordinates - * @param offset the offset of the data to read within the array + * Sets the data of the curve by reading the data from an array of values. + * The values are read in the same order as the arguments of the method + * {@link CubicCurve2D#setCurve(double, double, double, double, double, double, double, double)} + * . * - * @throws ArrayIndexOutOfBoundsException if coords.length < offset + 8. - * @throws NullPointerException if the coordinate array is null. + * @param coords + * the array of values containing the new coordinates. + * @param offset + * the offset of the data to read within the array. + * @throws ArrayIndexOutOfBoundsException + * if {@code coords.length} < offset + 8. + * @throws NullPointerException + * if the coordinate array is null. */ public void setCurve(double[] coords, int offset) { - setCurve( - coords[offset + 0], coords[offset + 1], - coords[offset + 2], coords[offset + 3], - coords[offset + 4], coords[offset + 5], - coords[offset + 6], coords[offset + 7]); + setCurve(coords[offset + 0], coords[offset + 1], coords[offset + 2], coords[offset + 3], + coords[offset + 4], coords[offset + 5], coords[offset + 6], coords[offset + 7]); } /** - * Sets the data of the curve by reading the data from an array - * of points. The values are read in the same order as the arguments - * of the method {@link CubicCurve2D#setCurve(Point2D, Point2D, Point2D, Point2D)} + * Sets the data of the curve by reading the data from an array of points. + * The values are read in the same order as the arguments of the method + * {@link CubicCurve2D#setCurve(Point2D, Point2D, Point2D, Point2D)} * - * @param points the array of points containing the new coordinates - * @param offset the offset of the data to read within the array - * - * @throws ArrayIndexOutOfBoundsException if points.length < offset + . - * @throws NullPointerException if the point array is null. + * @param points + * the array of points containing the new coordinates. + * @param offset + * the offset of the data to read within the array. + * @throws ArrayIndexOutOfBoundsException + * if {@code points.length} < offset + . + * @throws NullPointerException + * if the point array is null. */ public void setCurve(Point2D[] points, int offset) { - setCurve( - points[offset + 0].getX(), points[offset + 0].getY(), - points[offset + 1].getX(), points[offset + 1].getY(), - points[offset + 2].getX(), points[offset + 2].getY(), + setCurve(points[offset + 0].getX(), points[offset + 0].getY(), points[offset + 1].getX(), + points[offset + 1].getY(), points[offset + 2].getX(), points[offset + 2].getY(), points[offset + 3].getX(), points[offset + 3].getY()); } /** * Sets the data of the curve by copying it from another CubicCurve2D. * - * @param curve the curve to copy the data points from - * - * @throws NullPointerException if the curve is null. + * @param curve + * the curve to copy the data points from. + * @throws NullPointerException + * if the curve is null. */ public void setCurve(CubicCurve2D curve) { - setCurve( - curve.getX1(), curve.getY1(), - curve.getCtrlX1(), curve.getCtrlY1(), - curve.getCtrlX2(), curve.getCtrlY2(), - curve.getX2(), curve.getY2()); + setCurve(curve.getX1(), curve.getY1(), curve.getCtrlX1(), curve.getCtrlY1(), curve + .getCtrlX2(), curve.getCtrlY2(), curve.getX2(), curve.getY2()); } /** - * Gets the square of the flatness of this curve, where the flatness is the - * maximum distance from the curves control points to the - * line segment connecting the two points. + * Gets the square of the flatness of this curve, where the flatness is the + * maximum distance from the curves control points to the line segment + * connecting the two points. * - * @return the square of the flatness + * @return the square of the flatness. */ public double getFlatnessSq() { - return getFlatnessSq( - getX1(), getY1(), - getCtrlX1(), getCtrlY1(), - getCtrlX2(), getCtrlY2(), + return getFlatnessSq(getX1(), getY1(), getCtrlX1(), getCtrlY1(), getCtrlX2(), getCtrlY2(), getX2(), getY2()); } /** - * Gets the square of the flatness of the cubic curve segment - * defined by the specified values. + * Gets the square of the flatness of the cubic curve segment defined by the + * specified values. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param ctrlx1 the x coordinate of the first control point - * @param ctrly1 the y coordinate of the first control point - * @param ctrlx2 the x coordinate of the second control point - * @param ctrly2 the y coordinate of the second control point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point - * - * @return the square of the flatness + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param ctrlx1 + * the x coordinate of the first control point. + * @param ctrly1 + * the y coordinate of the first control point. + * @param ctrlx2 + * the x coordinate of the second control point. + * @param ctrly2 + * the y coordinate of the second control point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. + * @return the square of the flatness. */ public static double getFlatnessSq(double x1, double y1, double ctrlx1, double ctrly1, - double ctrlx2, double ctrly2, double x2, double y2) - { - return Math.max( - Line2D.ptSegDistSq(x1, y1, x2, y2, ctrlx1, ctrly1), - Line2D.ptSegDistSq(x1, y1, x2, y2, ctrlx2, ctrly2)); + double ctrlx2, double ctrly2, double x2, double y2) { + return Math.max(Line2D.ptSegDistSq(x1, y1, x2, y2, ctrlx1, ctrly1), Line2D.ptSegDistSq(x1, + y1, x2, y2, ctrlx2, ctrly2)); } /** - * Gets the square of the flatness of the cubic curve segment - * defined by the specified values. The values are read in the same order as the arguments - * of the method {@link CubicCurve2D#getFlatnessSq(double, double, double, double, double, double, double, double)}. - * - * @param coords the array of points containing the new coordinates - * @param offset the offset of the data to read within the array + * Gets the square of the flatness of the cubic curve segment defined by the + * specified values. The values are read in the same order as the arguments + * of the method + * {@link CubicCurve2D#getFlatnessSq(double, double, double, double, double, double, double, double)} + * . * - * @return the square of the flatness - * - * @throws ArrayIndexOutOfBoundsException if points.length < offset + . - * @throws NullPointerException if the point array is null. + * @param coords + * the array of points containing the new coordinates. + * @param offset + * the offset of the data to read within the array. + * @return the square of the flatness. + * @throws ArrayIndexOutOfBoundsException + * if points.length < offset + . + * @throws NullPointerException + * if the point array is null. */ public static double getFlatnessSq(double coords[], int offset) { - return getFlatnessSq( - coords[offset + 0], coords[offset + 1], - coords[offset + 2], coords[offset + 3], - coords[offset + 4], coords[offset + 5], - coords[offset + 6], coords[offset + 7]); + return getFlatnessSq(coords[offset + 0], coords[offset + 1], coords[offset + 2], + coords[offset + 3], coords[offset + 4], coords[offset + 5], coords[offset + 6], + coords[offset + 7]); } /** - * Gets the flatness of this curve, where the flatness is the - * maximum distance from the curves control points to the - * line segment connecting the two points. + * Gets the flatness of this curve, where the flatness is the maximum + * distance from the curves control points to the line segment connecting + * the two points. * - * @return the flatness of this curve + * @return the flatness of this curve. */ public double getFlatness() { - return getFlatness( - getX1(), getY1(), - getCtrlX1(), getCtrlY1(), - getCtrlX2(), getCtrlY2(), + return getFlatness(getX1(), getY1(), getCtrlX1(), getCtrlY1(), getCtrlX2(), getCtrlY2(), getX2(), getY2()); } /** - * Gets the flatness of the cubic curve segment - * defined by the specified values. - * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param ctrlx1 the x coordinate of the first control point - * @param ctrly1 the y coordinate of the first control point - * @param ctrlx2 the x coordinate of the second control point - * @param ctrly2 the y coordinate of the second control point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * Gets the flatness of the cubic curve segment defined by the specified + * values. * - * @return the flatness + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param ctrlx1 + * the x coordinate of the first control point. + * @param ctrly1 + * the y coordinate of the first control point. + * @param ctrlx2 + * the x coordinate of the second control point. + * @param ctrly2 + * the y coordinate of the second control point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. + * @return the flatness. */ public static double getFlatness(double x1, double y1, double ctrlx1, double ctrly1, - double ctrlx2, double ctrly2, double x2, double y2) - { + double ctrlx2, double ctrly2, double x2, double y2) { return Math.sqrt(getFlatnessSq(x1, y1, ctrlx1, ctrly1, ctrlx2, ctrly2, x2, y2)); } /** - * Gets the flatness of the cubic curve segment - * defined by the specified values. The values are read in the same order as the arguments - * of the method {@link CubicCurve2D#getFlatness(double, double, double, double, double, double, double, double)}. + * Gets the flatness of the cubic curve segment defined by the specified + * values. The values are read in the same order as the arguments of the + * method + * {@link CubicCurve2D#getFlatness(double, double, double, double, double, double, double, double)} + * . * - * @param coords the array of points containing the new coordinates - * @param offset the offset of the data to read within the array - * - * @return the flatness - * - * @throws ArrayIndexOutOfBoundsException if points.length < offset + . - * @throws NullPointerException if the point array is null. + * @param coords + * the array of points containing the new coordinates. + * @param offset + * the offset of the data to read within the array. + * @return the flatness. + * @throws ArrayIndexOutOfBoundsException + * if points.length < offset + . + * @throws NullPointerException + * if the point array is null. */ public static double getFlatness(double coords[], int offset) { - return getFlatness( - coords[offset + 0], coords[offset + 1], - coords[offset + 2], coords[offset + 3], - coords[offset + 4], coords[offset + 5], - coords[offset + 6], coords[offset + 7]); + return getFlatness(coords[offset + 0], coords[offset + 1], coords[offset + 2], + coords[offset + 3], coords[offset + 4], coords[offset + 5], coords[offset + 6], + coords[offset + 7]); } /** - * Creates the data for two cubic curves by dividing this - * curve in two. The division point is the point on the curve - * that is closest to the average of curve's two control points. - * The two new control points (nearest the new endpoint) are computed - * by averaging the original control points with the new endpoint. - * The data of this curve is left unchanged. - * - * @param left the CubicCurve2D where the left (start) segment's - * data is written - * @param right the CubicCurve2D where the right (end) segment's - * data is written + * Creates the data for two cubic curves by dividing this curve in two. The + * division point is the point on the curve that is closest to the average + * of curve's two control points. The two new control points (nearest the + * new endpoint) are computed by averaging the original control points with + * the new endpoint. The data of this curve is left unchanged. * - * @throws NullPointerException if either curve is null. + * @param left + * the CubicCurve2D where the left (start) segment's data is + * written. + * @param right + * the CubicCurve2D where the right (end) segment's data is + * written. + * @throws NullPointerException + * if either curve is null. */ public void subdivide(CubicCurve2D left, CubicCurve2D right) { subdivide(this, left, right); } /** - * Creates the data for two cubic curves by dividing the specified - * curve in two. The division point is the point on the curve - * that is closest to the average of curve's two control points. - * The two new control points (nearest the new endpoint) are computed - * by averaging the original control points with the new endpoint. - * The data of the source curve is left unchanged. + * Creates the data for two cubic curves by dividing the specified curve in + * two. The division point is the point on the curve that is closest to the + * average of curve's two control points. The two new control points + * (nearest the new endpoint) are computed by averaging the original control + * points with the new endpoint. The data of the source curve is left + * unchanged. * - * @param src the original curve to be divided in two - * @param left the CubicCurve2D where the left (start) segment's - * data is written - * @param right the CubicCurve2D where the right (end) segment's - * data is written - * - * @throws NullPointerException if either curve is null. + * @param src + * the original curve to be divided in two. + * @param left + * the CubicCurve2D where the left (start) segment's data is + * written. + * @param right + * the CubicCurve2D where the right (end) segment's data is + * written. + * @throws NullPointerException + * if either curve is null. */ public static void subdivide(CubicCurve2D src, CubicCurve2D left, CubicCurve2D right) { double x1 = src.getX1(); @@ -791,27 +883,36 @@ public abstract class CubicCurve2D implements Shape, Cloneable { } /** - * Creates the data for two cubic curves by dividing the specified - * curve in two. The division point is the point on the curve - * that is closest to the average of curve's two control points. - * The two new control points (nearest the new endpoint) are computed - * by averaging the original control points with the new endpoint. - * The data of the source curve is left unchanged. The data for the - * three curves is read/written in the usual order: { x1, y1, - * ctrlx1, ctrly1, ctrlx2, crtry2, x2, y3 } - * - * @param src the array that gives the data values for the source curve - * @param srcOff the offset in the src array to read the values from - * @param left the array where the coordinates of the start curve should be written - * @param leftOff the offset in the left array to start writing the values - * @param right the array where the coordinates of the end curve should be written - * @param rightOff the offset in the right array to start writing the values + * Creates the data for two cubic curves by dividing the specified curve in + * two. The division point is the point on the curve that is closest to the + * average of curve's two control points. The two new control points + * (nearest the new endpoint) are computed by averaging the original control + * points with the new endpoint. The data of the source curve is left + * unchanged. The data for the three curves is read/written in the usual + * order: { x1, y1, ctrlx1, ctrly1, ctrlx2, crtry2, x2, y3 } * - * @throws ArrayIndexOutOfBoundsException if src.length < srcoff + 8 - * or if left.length < leftOff + 8 or if right.length < rightOff + 8. - * @throws NullPointerException if one of the arrays is null. + * @param src + * the array that gives the data values for the source curve. + * @param srcOff + * the offset in the src array to read the values from. + * @param left + * the array where the coordinates of the start curve should be + * written. + * @param leftOff + * the offset in the left array to start writing the values. + * @param right + * the array where the coordinates of the end curve should be + * written. + * @param rightOff + * the offset in the right array to start writing the values. + * @throws ArrayIndexOutOfBoundsException + * if src.length < srcoff + 8 or if left.length < leftOff + 8 or + * if right.length < rightOff + 8. + * @throws NullPointerException + * if one of the arrays is null. */ - public static void subdivide(double src[], int srcOff, double left[], int leftOff, double right[], int rightOff) { + public static void subdivide(double src[], int srcOff, double left[], int leftOff, + double right[], int rightOff) { double x1 = src[srcOff + 0]; double y1 = src[srcOff + 1]; double cx1 = src[srcOff + 2]; @@ -855,42 +956,43 @@ public abstract class CubicCurve2D implements Shape, Cloneable { } /** - * Finds the roots of the cubic polynomial. This is - * accomplished by finding the (real) values of x that solve - * the following equation: eqn[3]*x*x*x + eqn[2]*x*x + eqn[1]*x + eqn[0] = 0. - * The solutions are written back into the array eqn starting - * from the index 0 in the array. The return value tells how - * many array elements have been changed by this method call. + * Finds the roots of the cubic polynomial. This is accomplished by finding + * the (real) values of x that solve the following equation: eqn[3]*x*x*x + + * eqn[2]*x*x + eqn[1]*x + eqn[0] = 0. The solutions are written back into + * the array eqn starting from the index 0 in the array. The return value + * tells how many array elements have been changed by this method call. * - * @param eqn an array containing the coefficients of the - * cubic polynomial to solve. - * - * @return the number of roots of the cubic polynomial - * - * @throws ArrayIndexOutOfBoundsException if eqn.length < 4. - * @throws NullPointerException if the array is null. + * @param eqn + * an array containing the coefficients of the cubic polynomial + * to solve. + * @return the number of roots of the cubic polynomial. + * @throws ArrayIndexOutOfBoundsException + * if eqn.length < 4. + * @throws NullPointerException + * if the array is null. */ public static int solveCubic(double eqn[]) { return solveCubic(eqn, eqn); } /** - * Finds the roots of the cubic polynomial. This is - * accomplished by finding the (real) values of x that solve - * the following equation: eqn[3]*x*x*x + eqn[2]*x*x + eqn[1]*x + eqn[0] = 0. - * The solutions are written into the array res starting - * from the index 0 in the array. The return value tells how - * many array elements have been changed by this method call. - * - * @param eqn an array containing the coefficients of the - * cubic polynomial to solve. - * @param res the array that this method writes the results into - * - * @return the number of roots of the cubic polynomial + * Finds the roots of the cubic polynomial. This is accomplished by finding + * the (real) values of x that solve the following equation: eqn[3]*x*x*x + + * eqn[2]*x*x + eqn[1]*x + eqn[0] = 0. The solutions are written into the + * array res starting from the index 0 in the array. The return value tells + * how many array elements have been changed by this method call. * - * @throws ArrayIndexOutOfBoundsException if eqn.length < 4 or - * if res.length is less than the number of roots. - * @throws NullPointerException if either array is null. + * @param eqn + * an array containing the coefficients of the cubic polynomial + * to solve. + * @param res + * the array that this method writes the results into. + * @return the number of roots of the cubic polynomial. + * @throws ArrayIndexOutOfBoundsException + * if eqn.length < 4 or if res.length is less than the number of + * roots. + * @throws NullPointerException + * if either array is null. */ public static int solveCubic(double eqn[], double res[]) { return Crossing.solveCubic(eqn, res); diff --git a/awt/java/awt/geom/Dimension2D.java b/awt/java/awt/geom/Dimension2D.java index eef63e67c3..ea081c517c 100644 --- a/awt/java/awt/geom/Dimension2D.java +++ b/awt/java/awt/geom/Dimension2D.java @@ -18,12 +18,15 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; /** - * The Class Dimension2D represents a size (width and height) of a - * geometric object. It stores double-valued data in order to be compatible - * with high-precision geometric operations. + * The Class Dimension2D represents a size (width and height) of a geometric + * object. It stores double-valued data in order to be compatible with + * high-precision geometric operations. + * + * @since Android 1.0 */ public abstract class Dimension2D implements Cloneable { @@ -36,31 +39,34 @@ public abstract class Dimension2D implements Cloneable { /** * Gets the width. * - * @return the width + * @return the width. */ public abstract double getWidth(); /** * Gets the height. * - * @return the height + * @return the height. */ public abstract double getHeight(); /** * Sets the width and height. * - * @param width the width - * @param height the height + * @param width + * the width. + * @param height + * the height. */ public abstract void setSize(double width, double height); /** - * Sets the width and height based on the data of another - * Dimension2D object. + * Sets the width and height based on the data of another Dimension2D + * object. * - * @param d the Dimension2D object providing the data to copy - * into this Dimension2D object + * @param d + * the Dimension2D object providing the data to copy into this + * Dimension2D object. */ public void setSize(Dimension2D d) { setSize(d.getWidth(), d.getHeight()); @@ -75,4 +81,3 @@ public abstract class Dimension2D implements Cloneable { } } } - diff --git a/awt/java/awt/geom/Ellipse2D.java b/awt/java/awt/geom/Ellipse2D.java index 33464afe74..89fd0d0661 100644 --- a/awt/java/awt/geom/Ellipse2D.java +++ b/awt/java/awt/geom/Ellipse2D.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.util.NoSuchElementException; @@ -25,29 +26,41 @@ import java.util.NoSuchElementException; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class Ellipse2D describes an ellipse defined by a rectangular - * area in which it is inscribed. + * The Class Ellipse2D describes an ellipse defined by a rectangular area in + * which it is inscribed. + * + * @since Android 1.0 */ public abstract class Ellipse2D extends RectangularShape { /** - * The Class Float is the subclass of Ellipse2D that has all - * of its data values stored with float-level precision. + * The Class Float is the subclass of Ellipse2D that has all of its data + * values stored with float-level precision. + * + * @since Android 1.0 */ public static class Float extends Ellipse2D { - /** The x coordinate of the upper left corner of the ellipse's - * bounding rectangle. */ + /** + * The x coordinate of the upper left corner of the ellipse's bounding + * rectangle. + */ public float x; - - /** The y coordinate of the upper left corner of the ellipse's - * bounding rectangle. */ + + /** + * The y coordinate of the upper left corner of the ellipse's bounding + * rectangle. + */ public float y; - - /** The width of the ellipse's bounding rectangle. */ + + /** + * The width of the ellipse's bounding rectangle. + */ public float width; - - /** The height of the ellipse's bounding rectangle. */ + + /** + * The height of the ellipse's bounding rectangle. + */ public float height; /** @@ -59,12 +72,16 @@ public abstract class Ellipse2D extends RectangularShape { /** * Instantiates a new float-valued Ellipse2D with the specified data. * - * @param x the x coordinate of the upper left corner of the ellipse's - * bounding rectangle - * @param y the y coordinate of the upper left corner of the ellipse's - * bounding rectangle - * @param width the width of the ellipse's bounding rectangle - * @param height the height of the ellipse's bounding rectangle + * @param x + * the x coordinate of the upper left corner of the ellipse's + * bounding rectangle. + * @param y + * the y coordinate of the upper left corner of the ellipse's + * bounding rectangle. + * @param width + * the width of the ellipse's bounding rectangle. + * @param height + * the height of the ellipse's bounding rectangle. */ public Float(float x, float y, float width, float height) { setFrame(x, y, width, height); @@ -98,12 +115,16 @@ public abstract class Ellipse2D extends RectangularShape { /** * Sets the data of the ellipse's bounding rectangle. * - * @param x the x coordinate of the upper left corner of the ellipse's - * bounding rectangle - * @param y the y coordinate of the upper left corner of the ellipse's - * bounding rectangle - * @param width the width of the ellipse's bounding rectangle - * @param height the height of the ellipse's bounding rectangle + * @param x + * the x coordinate of the upper left corner of the ellipse's + * bounding rectangle. + * @param y + * the y coordinate of the upper left corner of the ellipse's + * bounding rectangle. + * @param width + * the width of the ellipse's bounding rectangle. + * @param height + * the height of the ellipse's bounding rectangle. */ public void setFrame(float x, float y, float width, float height) { this.x = x; @@ -126,23 +147,33 @@ public abstract class Ellipse2D extends RectangularShape { } /** - * The Class Double is the subclass of Ellipse2D that has all - * of its data values stored with double-level precision. + * The Class Double is the subclass of Ellipse2D that has all of its data + * values stored with double-level precision. + * + * @since Android 1.0 */ public static class Double extends Ellipse2D { - /** The x coordinate of the upper left corner of the ellipse's - * bounding rectangle. */ + /** + * The x coordinate of the upper left corner of the ellipse's bounding + * rectangle. + */ public double x; - - /** The y coordinate of the upper left corner of the ellipse's - * bounding rectangle. */ + + /** + * The y coordinate of the upper left corner of the ellipse's bounding + * rectangle. + */ public double y; - - /** The width of the ellipse's bounding rectangle. */ + + /** + * The width of the ellipse's bounding rectangle. + */ public double width; - - /** The height of the ellipse's bounding rectangle. */ + + /** + * The height of the ellipse's bounding rectangle. + */ public double height; /** @@ -152,15 +183,18 @@ public abstract class Ellipse2D extends RectangularShape { } /** - * Instantiates a new double-valued Ellipse2D with the specified - * data. + * Instantiates a new double-valued Ellipse2D with the specified data. * - * @param x the x coordinate of the upper left corner of the ellipse's - * bounding rectangle - * @param y the y coordinate of the upper left corner of the ellipse's - * bounding rectangle - * @param width the width of the ellipse's bounding rectangle - * @param height the height of the ellipse's bounding rectangle + * @param x + * the x coordinate of the upper left corner of the ellipse's + * bounding rectangle. + * @param y + * the y coordinate of the upper left corner of the ellipse's + * bounding rectangle. + * @param width + * the width of the ellipse's bounding rectangle. + * @param height + * the height of the ellipse's bounding rectangle. */ public Double(double x, double y, double width, double height) { setFrame(x, y, width, height); @@ -205,7 +239,7 @@ public abstract class Ellipse2D extends RectangularShape { } /* - * Ellipse2D path iterator + * Ellipse2D path iterator */ /** * The subclass of PathIterator to traverse an Ellipse2D. @@ -213,46 +247,72 @@ public abstract class Ellipse2D extends RectangularShape { class Iterator implements PathIterator { /* - * Ellipse is subdivided into four quarters by x and y axis. Each part approximated by - * cubic Bezier curve. Arc in first quarter is started in (a, 0) and finished in (0, b) points. - * Control points for cubic curve wiil be (a, 0), (a, m), (n, b) and (0, b) where n and m are - * calculated based on requirement Bezier curve in point 0.5 should lay on the arc. + * Ellipse is subdivided into four quarters by x and y axis. Each part + * approximated by cubic Bezier curve. Arc in first quarter is started + * in (a, 0) and finished in (0, b) points. Control points for cubic + * curve wiil be (a, 0), (a, m), (n, b) and (0, b) where n and m are + * calculated based on requirement Bezier curve in point 0.5 should lay + * on the arc. */ - /** The coefficient to calculate control points of Bezier curves. */ + /** + * The coefficient to calculate control points of Bezier curves. + */ final double u = 2.0 / 3.0 * (Math.sqrt(2.0) - 1.0); - /** The points coordinates calculation table. */ + /** + * The points coordinates calculation table. + */ final double points[][] = { - { 1.0, 0.5 + u, 0.5 + u, 1.0, 0.5, 1.0 }, - { 0.5 - u, 1.0, 0.0, 0.5 + u, 0.0, 0.5 }, - { 0.0, 0.5 - u, 0.5 - u, 0.0, 0.5, 0.0 }, - { 0.5 + u, 0.0, 1.0, 0.5 - u, 1.0, 0.5 } + { + 1.0, 0.5 + u, 0.5 + u, 1.0, 0.5, 1.0 + }, { + 0.5 - u, 1.0, 0.0, 0.5 + u, 0.0, 0.5 + }, { + 0.0, 0.5 - u, 0.5 - u, 0.0, 0.5, 0.0 + }, { + 0.5 + u, 0.0, 1.0, 0.5 - u, 1.0, 0.5 + } }; - /** The x coordinate of left-upper corner of the ellipse bounds. */ + /** + * The x coordinate of left-upper corner of the ellipse bounds. + */ double x; - - /** The y coordinate of left-upper corner of the ellipse bounds. */ + + /** + * The y coordinate of left-upper corner of the ellipse bounds. + */ double y; - - /** The width of the ellipse bounds. */ + + /** + * The width of the ellipse bounds. + */ double width; - - /** The height of the ellipse bounds. */ + + /** + * The height of the ellipse bounds. + */ double height; - /** The path iterator transformation. */ + /** + * The path iterator transformation. + */ AffineTransform t; - /** The current segmenet index. */ + /** + * The current segment index. + */ int index; /** - * Constructs a new Ellipse2D.Iterator for given ellipse and transformation + * Constructs a new Ellipse2D.Iterator for given ellipse and + * transformation * - * @param e - the source Ellipse2D object - * @param t the t + * @param e + * the source Ellipse2D object. + * @param t + * the affine transformation object. */ Iterator(Ellipse2D e, AffineTransform t) { this.x = e.getX(); @@ -389,15 +449,10 @@ public abstract class Ellipse2D extends RectangularShape { double rx2 = rx + rw; double ry2 = ry + rh; - return - contains(rx1, ry1) && - contains(rx2, ry1) && - contains(rx2, ry2) && - contains(rx1, ry2); + return contains(rx1, ry1) && contains(rx2, ry1) && contains(rx2, ry2) && contains(rx1, ry2); } public PathIterator getPathIterator(AffineTransform at) { return new Iterator(this, at); } } - diff --git a/awt/java/awt/geom/FlatteningPathIterator.java b/awt/java/awt/geom/FlatteningPathIterator.java index ca5c7c2f9b..8208f39635 100644 --- a/awt/java/awt/geom/FlatteningPathIterator.java +++ b/awt/java/awt/geom/FlatteningPathIterator.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.util.NoSuchElementException; @@ -25,104 +26,139 @@ import java.util.NoSuchElementException; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class FlatteningPathIterator takes a PathIterator for traversing - * a curved shape and flattens it by estimating the curve as a series - * of line segments. The flattening factor indicates how far the - * estimating line segments are allowed to be from the actual curve: - * the FlatteningPathIterator will keep dividing each curved segment - * into smaller and smaller flat segments until either the segments - * are withing the flattening factor of the curve or until the buffer - * limit is reached. + * The Class FlatteningPathIterator takes a PathIterator for traversing a curved + * shape and flattens it by estimating the curve as a series of line segments. + * The flattening factor indicates how far the estimating line segments are + * allowed to be from the actual curve: the FlatteningPathIterator will keep + * dividing each curved segment into smaller and smaller flat segments until + * either the segments are within the flattening factor of the curve or until + * the buffer limit is reached. + * + * @since Android 1.0 */ public class FlatteningPathIterator implements PathIterator { - /** The default points buffer size. */ + /** + * The default points buffer size. + */ private static final int BUFFER_SIZE = 16; - - /** The default curve subdivision limit. */ + + /** + * The default curve subdivision limit. + */ private static final int BUFFER_LIMIT = 16; - /** The points buffer capacity. */ + /** + * The points buffer capacity. + */ private static final int BUFFER_CAPACITY = 16; - - /** The type of current segment to be flat. */ + + /** + * The type of current segment to be flat. + */ int bufType; - - /** The curve subdivision limit. */ + + /** + * The curve subdivision limit. + */ int bufLimit; - - /** The current points buffer size. */ + + /** + * The current points buffer size. + */ int bufSize; - - /** The inner cursor position in points buffer. */ + + /** + * The inner cursor position in points buffer. + */ int bufIndex; - - /** The current subdivision count. */ + + /** + * The current subdivision count. + */ int bufSubdiv; - /** The points buffer. */ + /** + * The points buffer. + */ double buf[]; - - /** The indicator of empty points buffer. */ + + /** + * The indicator of empty points buffer. + */ boolean bufEmpty = true; - - /** The source PathIterator. */ + + /** + * The source PathIterator. + */ PathIterator p; - - /** The flatness of new path. */ + + /** + * The flatness of new path. + */ double flatness; - - /** The square of flatness. */ + + /** + * The square of flatness. + */ double flatness2; - - /** The x coordinate of previous path segment. */ + + /** + * The x coordinate of previous path segment. + */ double px; - /** The y coordinate of previous path segment. */ + /** + * The y coordinate of previous path segment. + */ double py; - - /** The tamporary buffer for getting points from PathIterator. */ + + /** + * The temporary buffer for getting points from PathIterator. + */ double coords[] = new double[6]; /** - * Instantiates a new flattening path iterator given the path - * iterator for a (possibly) curved path and a flattening factor - * which indicates how close together the points on the curve - * should be chosen. The buffer limit defaults to 16 which means - * that each curve will be divided into no more than 16 segments - * regardless of the flattening factor. - * - * @param path the path iterator of the original curve - * @param flatness the flattening factor that indicates how far the - * flat path is allowed to be from the actual curve in order to - * decide when to stop dividing the path into smaller and smaller - * segments. + * Instantiates a new flattening path iterator given the path iterator for a + * (possibly) curved path and a flattening factor which indicates how close + * together the points on the curve should be chosen. The buffer limit + * defaults to 16 which means that each curve will be divided into no more + * than 16 segments regardless of the flattening factor. * - * @throws IllegalArgumentException if the flatness is less than zero. - * @throws NullPointerException if the path is null. + * @param path + * the path iterator of the original curve. + * @param flatness + * the flattening factor that indicates how far the flat path is + * allowed to be from the actual curve in order to decide when to + * stop dividing the path into smaller and smaller segments. + * @throws IllegalArgumentException + * if the flatness is less than zero. + * @throws NullPointerException + * if the path is null. */ public FlatteningPathIterator(PathIterator path, double flatness) { this(path, flatness, BUFFER_LIMIT); } /** - * Instantiates a new flattening path iterator given the path - * iterator for a (possibly) curved path and a flattening factor - * and a buffer limit. The FlatteningPathIterator will keep - * dividing each curved segment into smaller and smaller flat segments - * until either the segments are withing the flattening factor of the - * curve or until the buffer limit is reached. + * Instantiates a new flattening path iterator given the path iterator for a + * (possibly) curved path and a flattening factor and a buffer limit. The + * FlatteningPathIterator will keep dividing each curved segment into + * smaller and smaller flat segments until either the segments are within + * the flattening factor of the curve or until the buffer limit is reached. * - * @param path the path iterator of the original curve - * @param flatness the flattening factor that indicates how far the - * flat path is allowed to be from the actual curve in order to - * decide when to stop dividing the path into smaller and smaller - * segments. - * @param limit the maximum number of flat segments to divide each - * curve into - * - * @throws IllegalArgumentException if the flatness or limit is less than zero. - * @throws NullPointerException if the path is null. + * @param path + * the path iterator of the original curve. + * @param flatness + * the flattening factor that indicates how far the flat path is + * allowed to be from the actual curve in order to decide when to + * stop dividing the path into smaller and smaller segments. + * @param limit + * the maximum number of flat segments to divide each curve into. + * @throws IllegalArgumentException + * if the flatness or limit is less than zero. + * @throws NullPointerException + * if the path is null. */ public FlatteningPathIterator(PathIterator path, double flatness, int limit) { if (flatness < 0.0) { @@ -149,7 +185,7 @@ public class FlatteningPathIterator implements PathIterator { /** * Gets the flattening factor. * - * @return the flattening factor + * @return the flattening factor. */ public double getFlatness() { return flatness; @@ -158,7 +194,7 @@ public class FlatteningPathIterator implements PathIterator { /** * Gets the maximum number of subdivisions per curved segment. * - * @return the maximum number of subdivisions per curved segment + * @return the maximum number of subdivisions per curved segment. */ public int getRecursionLimit() { return bufLimit; @@ -173,12 +209,13 @@ public class FlatteningPathIterator implements PathIterator { } /** - * Calculates flat path points for current segment of the source shape. - * - * Line segment is flat by itself. Flatness of quad and cubic curves evaluated by getFlatnessSq() method. - * Curves subdivided until current flatness is bigger than user defined and subdivision limit isn't exhausted. - * Single source segment translated to series of buffer points. The less flatness the bigger serries. - * Every currentSegment() call extract one point from the buffer. When series completed evaluate() takes next source shape segment. + * Calculates flat path points for current segment of the source shape. Line + * segment is flat by itself. Flatness of quad and cubic curves evaluated by + * getFlatnessSq() method. Curves subdivided until current flatness is + * bigger than user defined and subdivision limit isn't exhausted. Single + * source segment translated to series of buffer points. The less flatness + * the bigger series. Every currentSegment() call extract one point from the + * buffer. When series completed evaluate() takes next source shape segment. */ void evaluate() { if (bufEmpty) { @@ -186,99 +223,95 @@ public class FlatteningPathIterator implements PathIterator { } switch (bufType) { - case SEG_MOVETO: - case SEG_LINETO: - px = coords[0]; - py = coords[1]; - break; - case SEG_QUADTO: - if (bufEmpty) { - bufIndex -= 6; - buf[bufIndex + 0] = px; - buf[bufIndex + 1] = py; - System.arraycopy(coords, 0, buf, bufIndex + 2, 4); - bufSubdiv = 0; - } - - while (bufSubdiv < bufLimit) { - if (QuadCurve2D.getFlatnessSq(buf, bufIndex) < flatness2) { - break; + case SEG_MOVETO: + case SEG_LINETO: + px = coords[0]; + py = coords[1]; + break; + case SEG_QUADTO: + if (bufEmpty) { + bufIndex -= 6; + buf[bufIndex + 0] = px; + buf[bufIndex + 1] = py; + System.arraycopy(coords, 0, buf, bufIndex + 2, 4); + bufSubdiv = 0; } - // Realloc buffer - if (bufIndex <= 4) { - double tmp[] = new double[bufSize + BUFFER_CAPACITY]; - System.arraycopy( - buf, bufIndex, - tmp, bufIndex + BUFFER_CAPACITY, - bufSize - bufIndex); - buf = tmp; - bufSize += BUFFER_CAPACITY; - bufIndex += BUFFER_CAPACITY; + while (bufSubdiv < bufLimit) { + if (QuadCurve2D.getFlatnessSq(buf, bufIndex) < flatness2) { + break; + } + + // Realloc buffer + if (bufIndex <= 4) { + double tmp[] = new double[bufSize + BUFFER_CAPACITY]; + System.arraycopy(buf, bufIndex, tmp, bufIndex + BUFFER_CAPACITY, bufSize + - bufIndex); + buf = tmp; + bufSize += BUFFER_CAPACITY; + bufIndex += BUFFER_CAPACITY; + } + + QuadCurve2D.subdivide(buf, bufIndex, buf, bufIndex - 4, buf, bufIndex); + + bufIndex -= 4; + bufSubdiv++; } - QuadCurve2D.subdivide(buf, bufIndex, buf, bufIndex - 4, buf, bufIndex); - - bufIndex -= 4; - bufSubdiv++; - } - - bufIndex += 4; - px = buf[bufIndex]; - py = buf[bufIndex + 1]; - - bufEmpty = (bufIndex == bufSize - 2); - if (bufEmpty) { - bufIndex = bufSize; - bufType = SEG_LINETO; - } else { - bufSubdiv--; - } - break; - case SEG_CUBICTO: - if (bufEmpty) { - bufIndex -= 8; - buf[bufIndex + 0] = px; - buf[bufIndex + 1] = py; - System.arraycopy(coords, 0, buf, bufIndex + 2, 6); - bufSubdiv = 0; - } + bufIndex += 4; + px = buf[bufIndex]; + py = buf[bufIndex + 1]; - while (bufSubdiv < bufLimit) { - if (CubicCurve2D.getFlatnessSq(buf, bufIndex) < flatness2) { - break; + bufEmpty = (bufIndex == bufSize - 2); + if (bufEmpty) { + bufIndex = bufSize; + bufType = SEG_LINETO; + } else { + bufSubdiv--; } - - // Realloc buffer - if (bufIndex <= 6) { - double tmp[] = new double[bufSize + BUFFER_CAPACITY]; - System.arraycopy( - buf, bufIndex, - tmp, bufIndex + BUFFER_CAPACITY, - bufSize - bufIndex); - buf = tmp; - bufSize += BUFFER_CAPACITY; - bufIndex += BUFFER_CAPACITY; + break; + case SEG_CUBICTO: + if (bufEmpty) { + bufIndex -= 8; + buf[bufIndex + 0] = px; + buf[bufIndex + 1] = py; + System.arraycopy(coords, 0, buf, bufIndex + 2, 6); + bufSubdiv = 0; } - CubicCurve2D.subdivide(buf, bufIndex, buf, bufIndex - 6, buf, bufIndex); - - bufIndex -= 6; - bufSubdiv++; - } + while (bufSubdiv < bufLimit) { + if (CubicCurve2D.getFlatnessSq(buf, bufIndex) < flatness2) { + break; + } + + // Realloc buffer + if (bufIndex <= 6) { + double tmp[] = new double[bufSize + BUFFER_CAPACITY]; + System.arraycopy(buf, bufIndex, tmp, bufIndex + BUFFER_CAPACITY, bufSize + - bufIndex); + buf = tmp; + bufSize += BUFFER_CAPACITY; + bufIndex += BUFFER_CAPACITY; + } + + CubicCurve2D.subdivide(buf, bufIndex, buf, bufIndex - 6, buf, bufIndex); + + bufIndex -= 6; + bufSubdiv++; + } - bufIndex += 6; - px = buf[bufIndex]; - py = buf[bufIndex + 1]; + bufIndex += 6; + px = buf[bufIndex]; + py = buf[bufIndex + 1]; - bufEmpty = (bufIndex == bufSize - 2); - if (bufEmpty) { - bufIndex = bufSize; - bufType = SEG_LINETO; - } else { - bufSubdiv--; - } - break; + bufEmpty = (bufIndex == bufSize - 2); + if (bufEmpty) { + bufIndex = bufSize; + bufType = SEG_LINETO; + } else { + bufSubdiv--; + } + break; } } @@ -323,4 +356,3 @@ public class FlatteningPathIterator implements PathIterator { return type; } } - diff --git a/awt/java/awt/geom/GeneralPath.java b/awt/java/awt/geom/GeneralPath.java index 36b01c40a0..0669bc77b0 100644 --- a/awt/java/awt/geom/GeneralPath.java +++ b/awt/java/awt/geom/GeneralPath.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.awt.Rectangle; @@ -28,81 +29,116 @@ import org.apache.harmony.awt.gl.Crossing; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class GeneralPath represents a shape whose outline is given - * by different types of curved and straight segments. + * The class GeneralPath represents a shape whose outline is given by different + * types of curved and straight segments. + * + * @since Android 1.0 */ public final class GeneralPath implements Shape, Cloneable { - /** The Constant WIND_EVEN_ODD see {@link PathIterator#WIND_EVEN_ODD}. */ + /** + * The Constant WIND_EVEN_ODD see {@link PathIterator#WIND_EVEN_ODD}. + */ public static final int WIND_EVEN_ODD = PathIterator.WIND_EVEN_ODD; - - /** The Constant WIND_NON_ZERO see {@link PathIterator#WIND_NON_ZERO}. */ + + /** + * The Constant WIND_NON_ZERO see {@link PathIterator#WIND_NON_ZERO}. + */ public static final int WIND_NON_ZERO = PathIterator.WIND_NON_ZERO; - /** The buffers size. */ + /** + * The buffers size. + */ private static final int BUFFER_SIZE = 10; - - /** The buffers capacity. */ + + /** + * The buffers capacity. + */ private static final int BUFFER_CAPACITY = 10; - /** The point's types buffer. */ + /** + * The point's types buffer. + */ byte[] types; - - /** The points buffer. */ + + /** + * The points buffer. + */ float[] points; - - /** The point's type buffer size. */ + + /** + * The point's type buffer size. + */ int typeSize; - - /** The points buffer size. */ + + /** + * The points buffer size. + */ int pointSize; - - /** The path rule. */ + + /** + * The path rule. + */ int rule; - /** The space amount in points buffer for different segmenet's types. */ + /** + * The space amount in points buffer for different segmenet's types. + */ static int pointShift[] = { - 2, // MOVETO - 2, // LINETO - 4, // QUADTO - 6, // CUBICTO - 0}; // CLOSE + 2, // MOVETO + 2, // LINETO + 4, // QUADTO + 6, // CUBICTO + 0 + }; // CLOSE /* - * GeneralPath path iterator + * GeneralPath path iterator */ /** - * The Class Iterator is the subclass of Iterator for traversing the - * outline of a GeneralPath. + * The Class Iterator is the subclass of Iterator for traversing the outline + * of a GeneralPath. */ class Iterator implements PathIterator { - /** The current cursor position in types buffer. */ + /** + * The current cursor position in types buffer. + */ int typeIndex; - - /** The current cursor position in points buffer. */ + + /** + * The current cursor position in points buffer. + */ int pointIndex; - - /** The source GeneralPath object. */ + + /** + * The source GeneralPath object. + */ GeneralPath p; - - /** The path iterator transformation. */ + + /** + * The path iterator transformation. + */ AffineTransform t; /** - * Constructs a new GeneralPath.Iterator for given general path + * Constructs a new GeneralPath.Iterator for given general path. * - * @param path - the source GeneralPath object + * @param path + * the source GeneralPath object. */ Iterator(GeneralPath path) { this(path, null); } /** - * Constructs a new GeneralPath.Iterator for given general path and transformation + * Constructs a new GeneralPath.Iterator for given general path and + * transformation. * - * @param path - the source GeneralPath object - * @param at - the AffineTransform object to apply rectangle path + * @param path + * the source GeneralPath object. + * @param at + * the AffineTransform object to apply rectangle path. */ Iterator(GeneralPath path, AffineTransform at) { this.p = path; @@ -156,33 +192,35 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Instantiates a new general path with the winding rule set - * to {@link PathIterator#WIND_NON_ZERO} and the initial capacity - * (number of segments) set to the default value 10. + * Instantiates a new general path with the winding rule set to + * {@link PathIterator#WIND_NON_ZERO} and the initial capacity (number of + * segments) set to the default value 10. */ public GeneralPath() { this(WIND_NON_ZERO, BUFFER_SIZE); } /** - * Instantiates a new general path with the given winding rule - * and the initial capacity (number of segments) set to the - * default value 10. + * Instantiates a new general path with the given winding rule and the + * initial capacity (number of segments) set to the default value 10. * - * @param rule the winding rule, either {@link PathIterator#WIND_EVEN_ODD} - * or {@link PathIterator#WIND_NON_ZERO} + * @param rule + * the winding rule, either {@link PathIterator#WIND_EVEN_ODD} or + * {@link PathIterator#WIND_NON_ZERO}. */ public GeneralPath(int rule) { this(rule, BUFFER_SIZE); } /** - * Instantiates a new general path with the given winding rule - * and initial capacity (number of segments). + * Instantiates a new general path with the given winding rule and initial + * capacity (number of segments). * - * @param rule the winding rule, either {@link PathIterator#WIND_EVEN_ODD} - * or {@link PathIterator#WIND_NON_ZERO} - * @param initialCapacity the number of segments the path is set to hold + * @param rule + * the winding rule, either {@link PathIterator#WIND_EVEN_ODD} or + * {@link PathIterator#WIND_NON_ZERO}. + * @param initialCapacity + * the number of segments the path is set to hold. */ public GeneralPath(int rule, int initialCapacity) { setWindingRule(rule); @@ -193,7 +231,8 @@ public final class GeneralPath implements Shape, Cloneable { /** * Creates a new GeneralPath from the outline of the given shape. * - * @param shape the shape + * @param shape + * the shape. */ public GeneralPath(Shape shape) { this(WIND_NON_ZERO, BUFFER_SIZE); @@ -203,14 +242,15 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Sets the winding rule, which determines how to decide whether - * a point that isn't on the path itself is inside or outside of - * the shape. - * - * @param rule the new winding rule + * Sets the winding rule, which determines how to decide whether a point + * that isn't on the path itself is inside or outside of the shape. * - * @throws IllegalArgumentException if the winding rule is neither - * {@link PathIterator#WIND_EVEN_ODD} nor {@link PathIterator#WIND_NON_ZERO}. + * @param rule + * the new winding rule. + * @throws IllegalArgumentException + * if the winding rule is neither + * {@link PathIterator#WIND_EVEN_ODD} nor + * {@link PathIterator#WIND_NON_ZERO}. */ public void setWindingRule(int rule) { if (rule != WIND_EVEN_ODD && rule != WIND_NON_ZERO) { @@ -223,8 +263,8 @@ public final class GeneralPath implements Shape, Cloneable { /** * Gets the winding rule. * - * @return the winding rule, either {@link PathIterator#WIND_EVEN_ODD} - * or {@link PathIterator#WIND_NON_ZERO} + * @return the winding rule, either {@link PathIterator#WIND_EVEN_ODD} or + * {@link PathIterator#WIND_NON_ZERO}. */ public int getWindingRule() { return rule; @@ -232,15 +272,16 @@ public final class GeneralPath implements Shape, Cloneable { /** * Checks the point data buffer sizes to see whether pointCount additional - * point-data elements can fit. (Note that the number of point data - * elements to add is more than one per point -- it depends on the type - * of point being added.) Reallocates the buffers to enlarge the size if necessary. + * point-data elements can fit. (Note that the number of point data elements + * to add is more than one per point -- it depends on the type of point + * being added.) Reallocates the buffers to enlarge the size if necessary. * - * @param pointCount - the number of point data elements to be added - * @param checkMove whether to check for existing points - * - * @throws IllegalPathStateException checkMove is true and the - * path is currently empty. + * @param pointCount + * the number of point data elements to be added. + * @param checkMove + * whether to check for existing points. + * @throws IllegalPathStateException + * checkMove is true and the path is currently empty. */ void checkBuf(int pointCount, boolean checkMove) { if (checkMove && typeSize == 0) { @@ -260,11 +301,13 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Appends a new point to the end of this general path, disconnected - * from the existing path. + * Appends a new point to the end of this general path, disconnected from + * the existing path. * - * @param x the x coordinate of the next point to append - * @param y the y coordinate of the next point to append + * @param x + * the x coordinate of the next point to append. + * @param y + * the y coordinate of the next point to append. */ public void moveTo(float x, float y) { if (typeSize > 0 && types[typeSize - 1] == PathIterator.SEG_MOVETO) { @@ -279,12 +322,13 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Appends a new segment to the end of this general path by making - * a straight line segment from the current endpoint to the - * given new point. + * Appends a new segment to the end of this general path by making a + * straight line segment from the current endpoint to the given new point. * - * @param x the x coordinate of the next point to append - * @param y the y coordinate of the next point to append + * @param x + * the x coordinate of the next point to append. + * @param y + * the y coordinate of the next point to append. */ public void lineTo(float x, float y) { checkBuf(2, true); @@ -294,14 +338,18 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Appends a new segment to the end of this general path by making - * a quadratic curve from the current endpoint to the point (x2, y2) - * using the point (x1, y1) as the quadratic curve's control point. + * Appends a new segment to the end of this general path by making a + * quadratic curve from the current endpoint to the point (x2, y2) using the + * point (x1, y1) as the quadratic curve's control point. * - * @param x1 the x coordinate of the quadratic curve's control point - * @param y1 the y coordinate of the quadratic curve's control point - * @param x2 the x coordinate of the quadratic curve's end point - * @param y2 the y coordinate of the quadratic curve's end point + * @param x1 + * the x coordinate of the quadratic curve's control point. + * @param y1 + * the y coordinate of the quadratic curve's control point. + * @param x2 + * the x coordinate of the quadratic curve's end point. + * @param y2 + * the y coordinate of the quadratic curve's end point. */ public void quadTo(float x1, float y1, float x2, float y2) { checkBuf(4, true); @@ -313,18 +361,27 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Appends a new segment to the end of this general path by making - * a cubic curve from the current endpoint to the point (x3, y3) - * using (x1, y1) and (x2, y2) as control points. + * Appends a new segment to the end of this general path by making a cubic + * curve from the current endpoint to the point (x3, y3) using (x1, y1) and + * (x2, y2) as control points. * * @see java.awt.geom.CubicCurve2D - * - * @param x1 the x coordinate of the new cubic segment's first control point - * @param y1 the y coordinate of the new cubic segment's first control point - * @param x2 the x coordinate of the new cubic segment's second control point - * @param y2 the y coordinate of the new cubic segment's second control point - * @param x3 the x coordinate of the new cubic segment's end point - * @param y3 the y coordinate of the new cubic segment's end point + * @param x1 + * the x coordinate of the new cubic segment's first control + * point. + * @param y1 + * the y coordinate of the new cubic segment's first control + * point. + * @param x2 + * the x coordinate of the new cubic segment's second control + * point. + * @param y2 + * the y coordinate of the new cubic segment's second control + * point. + * @param x3 + * the x coordinate of the new cubic segment's end point. + * @param y3 + * the y coordinate of the new cubic segment's end point. */ public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3) { checkBuf(6, true); @@ -338,8 +395,8 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Appends the type information to declare that the current - * endpoint closes the curve. + * Appends the type information to declare that the current endpoint closes + * the curve. */ public void closePath() { if (typeSize == 0 || types[typeSize - 1] != PathIterator.SEG_CLOSE) { @@ -349,15 +406,17 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Appends the outline of the specified shape onto the end - * of this GeneralPath. - * - * @param shape the shape whose outline is to be appended - * @param connect true to connect this path's current - * endpoint to the first point of the shape's outline or - * false to append the shape's outline without connecting it + * Appends the outline of the specified shape onto the end of this + * GeneralPath. * - * @throws NullPointerException if the shape parameter is null + * @param shape + * the shape whose outline is to be appended. + * @param connect + * true to connect this path's current endpoint to the first + * point of the shape's outline or false to append the shape's + * outline without connecting it. + * @throws NullPointerException + * if the shape parameter is null. */ public void append(Shape shape, boolean connect) { PathIterator p = shape.getPathIterator(null); @@ -365,42 +424,43 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Appends the path defined by the specified PathIterator onto the end - * of this GeneralPath. + * Appends the path defined by the specified PathIterator onto the end of + * this GeneralPath. * - * @param path the PathIterator that defines the new path to append - * @param connect true to connect this path's current - * endpoint to the first point of the shape's outline or - * false to append the shape's outline without connecting it + * @param path + * the PathIterator that defines the new path to append. + * @param connect + * true to connect this path's current endpoint to the first + * point of the shape's outline or false to append the shape's + * outline without connecting it. */ public void append(PathIterator path, boolean connect) { while (!path.isDone()) { float coords[] = new float[6]; switch (path.currentSegment(coords)) { - case PathIterator.SEG_MOVETO: - if (!connect || typeSize == 0) { - moveTo(coords[0], coords[1]); + case PathIterator.SEG_MOVETO: + if (!connect || typeSize == 0) { + moveTo(coords[0], coords[1]); + break; + } + if (types[typeSize - 1] != PathIterator.SEG_CLOSE + && points[pointSize - 2] == coords[0] + && points[pointSize - 1] == coords[1]) { + break; + } + // NO BREAK; + case PathIterator.SEG_LINETO: + lineTo(coords[0], coords[1]); break; - } - if (types[typeSize - 1] != PathIterator.SEG_CLOSE && - points[pointSize - 2] == coords[0] && - points[pointSize - 1] == coords[1]) - { + case PathIterator.SEG_QUADTO: + quadTo(coords[0], coords[1], coords[2], coords[3]); + break; + case PathIterator.SEG_CUBICTO: + curveTo(coords[0], coords[1], coords[2], coords[3], coords[4], coords[5]); + break; + case PathIterator.SEG_CLOSE: + closePath(); break; - } - // NO BREAK; - case PathIterator.SEG_LINETO: - lineTo(coords[0], coords[1]); - break; - case PathIterator.SEG_QUADTO: - quadTo(coords[0], coords[1], coords[2], coords[3]); - break; - case PathIterator.SEG_CUBICTO: - curveTo(coords[0], coords[1], coords[2], coords[3], coords[4], coords[5]); - break; - case PathIterator.SEG_CLOSE: - closePath(); - break; } path.next(); connect = false; @@ -410,7 +470,7 @@ public final class GeneralPath implements Shape, Cloneable { /** * Gets the current end point of the path. * - * @return the current end point of the path + * @return the current end point of the path. */ public Point2D getCurrentPoint() { if (typeSize == 0) { @@ -431,9 +491,9 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Resets the GeneralPath to being an empty path. The underlying - * point and segment data is not deleted but rather the end indices - * of the data arrays are set to zero. + * Resets the GeneralPath to being an empty path. The underlying point and + * segment data is not deleted but rather the end indices of the data arrays + * are set to zero. */ public void reset() { typeSize = 0; @@ -441,23 +501,24 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Transform all of the coordinates of this path according to the - * specified AffineTransform. + * Transform all of the coordinates of this path according to the specified + * AffineTransform. * - * @param t the AffineTransform + * @param t + * the AffineTransform. */ public void transform(AffineTransform t) { t.transform(points, 0, points, 0, pointSize / 2); } /** - * Creates a new GeneralPath whose data is given by this path's - * data transformed according to the specified AffineTransform. - * - * @param t the AffineTransform + * Creates a new GeneralPath whose data is given by this path's data + * transformed according to the specified AffineTransform. * - * @return the new GeneralPath whose data is given by this path's - * data transformed according to the specified AffineTransform + * @param t + * the AffineTransform. + * @return the new GeneralPath whose data is given by this path's data + * transformed according to the specified AffineTransform. */ public Shape createTransformedShape(AffineTransform t) { GeneralPath p = (GeneralPath)clone(); @@ -480,16 +541,14 @@ public final class GeneralPath implements Shape, Cloneable { float x = points[i--]; if (x < rx1) { rx1 = x; - } else - if (x > rx2) { - rx2 = x; - } + } else if (x > rx2) { + rx2 = x; + } if (y < ry1) { ry1 = y; - } else - if (y > ry2) { - ry2 = y; - } + } else if (y > ry2) { + ry2 = y; + } } } return new Rectangle2D.Float(rx1, ry1, rx2 - rx1, ry2 - ry1); @@ -500,14 +559,14 @@ public final class GeneralPath implements Shape, Cloneable { } /** - * Checks the cross count (number of times a ray from the point - * crosses the shape's boundary) to determine whether the number - * of crossings corresponds to a point inside the shape or not - * (according to the shape's path rule). - * - * @param cross - the point's cross count + * Checks the cross count (number of times a ray from the point crosses the + * shape's boundary) to determine whether the number of crossings + * corresponds to a point inside the shape or not (according to the shape's + * path rule). * - * @return true if the point is inside the path, or false otherwise + * @param cross + * the point's cross count. + * @return true if the point is inside the path, or false otherwise. */ boolean isInside(int cross) { if (rule == WIND_NON_ZERO) { @@ -553,7 +612,7 @@ public final class GeneralPath implements Shape, Cloneable { @Override public Object clone() { try { - GeneralPath p = (GeneralPath) super.clone(); + GeneralPath p = (GeneralPath)super.clone(); p.types = types.clone(); p.points = points.clone(); return p; @@ -563,4 +622,3 @@ public final class GeneralPath implements Shape, Cloneable { } } - diff --git a/awt/java/awt/geom/IllegalPathStateException.java b/awt/java/awt/geom/IllegalPathStateException.java index 7f459e77ff..750ba29fe6 100644 --- a/awt/java/awt/geom/IllegalPathStateException.java +++ b/awt/java/awt/geom/IllegalPathStateException.java @@ -18,16 +18,21 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; /** - * The Class IllegalPathStateException indicates errors where the - * current state of a path object is imcompatible with the desired - * action, such as performing non-trivial actions on an empty path. + * The Class IllegalPathStateException indicates errors where the current state + * of a path object is incompatible with the desired action, such as performing + * non-trivial actions on an empty path. + * + * @since Android 1.0 */ public class IllegalPathStateException extends RuntimeException { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -5158084205220481094L; /** @@ -37,14 +42,14 @@ public class IllegalPathStateException extends RuntimeException { } /** - * Instantiates a new illegal path state exception with the - * specified detail message. + * Instantiates a new illegal path state exception with the specified detail + * message. * - * @param s the details of the error + * @param s + * the details of the error. */ public IllegalPathStateException(String s) { super(s); } } - diff --git a/awt/java/awt/geom/Line2D.java b/awt/java/awt/geom/Line2D.java index a53c470901..fcd51b6dd1 100644 --- a/awt/java/awt/geom/Line2D.java +++ b/awt/java/awt/geom/Line2D.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.awt.Rectangle; @@ -27,55 +28,71 @@ import java.util.NoSuchElementException; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class Line2D represents a line whose data is given in - * high-precision values appropriate for graphical operations. + * The Class Line2D represents a line whose data is given in high-precision + * values appropriate for graphical operations. + * + * @since Android 1.0 */ public abstract class Line2D implements Shape, Cloneable { /** - * The Class Float is the subclass of Line2D that has all - * of its data values stored with float-level precision. + * The Class Float is the subclass of Line2D that has all of its data values + * stored with float-level precision. + * + * @since Android 1.0 */ public static class Float extends Line2D { - /** The x coordinate of the starting point. */ + /** + * The x coordinate of the starting point. + */ public float x1; - - /** The y coordinate of the starting point. */ + + /** + * The y coordinate of the starting point. + */ public float y1; - - /** The x coordinate of the end point. */ + + /** + * The x coordinate of the end point. + */ public float x2; - - /** The y coordinate of the end point. */ + + /** + * The y coordinate of the end point. + */ public float y2; /** - * Instantiates a new float-valued Line2D with - * its data values set to zero. + * Instantiates a new float-valued Line2D with its data values set to + * zero. */ public Float() { } /** - * Instantiates a new float-valued Line2D with - * the specified endpoints. + * Instantiates a new float-valued Line2D with the specified endpoints. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. */ public Float(float x1, float y1, float x2, float y2) { setLine(x1, y1, x2, y2); } /** - * Instantiates a new float-valued Line2D with - * the specified endpoints. + * Instantiates a new float-valued Line2D with the specified endpoints. * - * @param p1 the starting point - * @param p2 the end point + * @param p1 + * the starting point. + * @param p2 + * the end point. */ public Float(Point2D p1, Point2D p2) { setLine(p1, p2); @@ -122,10 +139,14 @@ public abstract class Line2D implements Shape, Cloneable { /** * Sets the data values that define the line. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. */ public void setLine(float x1, float y1, float x2, float y2) { this.x1 = x1; @@ -155,49 +176,63 @@ public abstract class Line2D implements Shape, Cloneable { } /** - * The Class Double is the subclass of Line2D that has all - * of its data values stored with double-level precision. + * The Class Double is the subclass of Line2D that has all of its data + * values stored with double-level precision. + * + * @since Android 1.0 */ public static class Double extends Line2D { - /** The x coordinate of the starting point. */ + /** + * The x coordinate of the starting point. + */ public double x1; - - /** The y coordinate of the starting point. */ + + /** + * The y coordinate of the starting point. + */ public double y1; - - /** The x coordinate of the end point. */ + + /** + * The x coordinate of the end point. + */ public double x2; - - /** The y coordinate of the end point. */ + + /** + * The y coordinate of the end point. + */ public double y2; /** - * Instantiates a new double-valued Line2D with - * its data values set to zero. + * Instantiates a new double-valued Line2D with its data values set to + * zero. */ public Double() { } /** - * Instantiates a new double-valued Line2D with - * the specified endpoints. + * Instantiates a new double-valued Line2D with the specified endpoints. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. */ public Double(double x1, double y1, double x2, double y2) { setLine(x1, y1, x2, y2); } /** - * Instantiates a new double-valued Line2D with - * the specified endpoints. + * Instantiates a new double-valued Line2D with the specified endpoints. * - * @param p1 the starting point - * @param p2 the end point + * @param p1 + * the starting point. + * @param p2 + * the end point. */ public Double(Point2D p1, Point2D p2) { setLine(p1, p2); @@ -262,36 +297,50 @@ public abstract class Line2D implements Shape, Cloneable { } /* - * Line2D path iterator + * Line2D path iterator */ /** * The subclass of PathIterator to traverse a Line2D. */ class Iterator implements PathIterator { - /** The x coordinate of the start line point. */ + /** + * The x coordinate of the start line point. + */ double x1; - - /** The y coordinate of the start line point. */ + + /** + * The y coordinate of the start line point. + */ double y1; - - /** The x coordinate of the end line point. */ + + /** + * The x coordinate of the end line point. + */ double x2; - - /** The y coordinate of the end line point. */ + + /** + * The y coordinate of the end line point. + */ double y2; - /** The path iterator transformation. */ + /** + * The path iterator transformation. + */ AffineTransform t; - /** The current segmenet index. */ + /** + * The current segment index. + */ int index; /** - * Constructs a new Line2D.Iterator for given line and transformation + * Constructs a new Line2D.Iterator for given line and transformation. * - * @param l - the source Line2D object - * @param at - the AffineTransform object to apply rectangle path + * @param l + * the source Line2D object. + * @param at + * the AffineTransform object to apply rectangle path. */ Iterator(Line2D l, AffineTransform at) { this.x1 = l.getX1(); @@ -366,60 +415,66 @@ public abstract class Line2D implements Shape, Cloneable { /** * Gets the x coordinate of the starting point. * - * @return the x coordinate of the starting point + * @return the x coordinate of the starting point. */ public abstract double getX1(); /** * Gets the y coordinate of the starting point. * - * @return the y coordinate of the starting point + * @return the y coordinate of the starting point. */ public abstract double getY1(); /** * Gets the x coordinate of the end point. * - * @return the x2 + * @return the x2. */ public abstract double getX2(); /** * Gets the y coordinate of the end point. * - * @return the y coordinate of the end point + * @return the y coordinate of the end point. */ public abstract double getY2(); /** * Gets the p the starting point. * - * @return the p the starting point + * @return the p the starting point. */ public abstract Point2D getP1(); /** * Gets the p end point. * - * @return the p end point + * @return the p end point. */ public abstract Point2D getP2(); /** * Sets the line's endpoints. * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point + * @param x1 + * the x coordinate of the starting point. + * @param y1 + * the y coordinate of the starting point. + * @param x2 + * the x coordinate of the end point. + * @param y2 + * the y coordinate of the end point. */ public abstract void setLine(double x1, double y1, double x2, double y2); /** * Sets the line's endpoints. * - * @param p1 the starting point - * @param p2 the end point + * @param p1 + * the starting point. + * @param p2 + * the end point. */ public void setLine(Point2D p1, Point2D p2) { setLine(p1.getX(), p1.getY(), p2.getX(), p2.getY()); @@ -428,39 +483,44 @@ public abstract class Line2D implements Shape, Cloneable { /** * Sets the line's endpoints by copying the data from another Line2D. * - * @param line the Line2D to copy the endpoint data from + * @param line + * the Line2D to copy the endpoint data from. */ public void setLine(Line2D line) { setLine(line.getX1(), line.getY1(), line.getX2(), line.getY2()); } public Rectangle getBounds() { - return getBounds2D().getBounds(); + return getBounds2D().getBounds(); } /** - * Tells where the point is with respect to the line segment, - * given the orientation of the line segment. If the ray - * found by extending the line segment from its starting point - * is rotated, this method tells whether the ray - * should rotate in a clockwise direction or a counter-clockwise - * direction to hit the point first. The return value is 0 if the - * point is on the line segment, it's 1 if the point is on the ray - * or if the ray should rotate in a counter-clockwise direction to get to the - * point, and it's -1 if the ray should rotate in a clockwise - * direction to get to the point or if the point is on the line - * determined by the line segment but not on the ray from the - * segment's starting point and through its end point. - * - * @param x1 the x coordinate of the starting point of the line segment - * @param y1 the y coordinate of the starting point of the line segment - * @param x2 the x coordinate of the end point of the line segment - * @param y2 the y coordinate of the end point of the line segment - * @param px the x coordinate of the test point - * @param py the p coordinate of the test point - * - * @return the value that describes where the point is with respect to the line segment, - * given the orientation of the line segment + * Tells where the point is with respect to the line segment, given the + * orientation of the line segment. If the ray found by extending the line + * segment from its starting point is rotated, this method tells whether the + * ray should rotate in a clockwise direction or a counter-clockwise + * direction to hit the point first. The return value is 0 if the point is + * on the line segment, it's 1 if the point is on the ray or if the ray + * should rotate in a counter-clockwise direction to get to the point, and + * it's -1 if the ray should rotate in a clockwise direction to get to the + * point or if the point is on the line determined by the line segment but + * not on the ray from the segment's starting point and through its end + * point. + * + * @param x1 + * the x coordinate of the starting point of the line segment. + * @param y1 + * the y coordinate of the starting point of the line segment. + * @param x2 + * the x coordinate of the end point of the line segment. + * @param y2 + * the y coordinate of the end point of the line segment. + * @param px + * the x coordinate of the test point. + * @param py + * the p coordinate of the test point. + * @return the value that describes where the point is with respect to the + * line segment, given the orientation of the line segment. */ public static int relativeCCW(double x1, double y1, double x2, double y2, double px, double py) { /* @@ -487,47 +547,46 @@ public abstract class Line2D implements Shape, Cloneable { } /** - * Tells where the point is with respect to this line segment, - * given the orientation of this line segment. If the ray - * found by extending the line segment from its starting point - * is rotated, this method tells whether the ray - * should rotate in a clockwise direction or a counter-clockwise - * direction to hit the point first. The return value is 0 if the - * point is on the line segment, it's 1 if the point is on the ray - * or if the ray should rotate in a counter-clockwise direction to get to the - * point, and it's -1 if the ray should rotate in a clockwise - * direction to get to the point or if the point is on the line - * determined by the line segment but not on the ray from the - * segment's starting point and through its end point. - * - * @param px the x coordinate of the test point - * @param py the p coordinate of the test point - * - * @return the value that describes where the point is with respect to - * this line segment, given the orientation of this line segment + * Tells where the point is with respect to this line segment, given the + * orientation of this line segment. If the ray found by extending the line + * segment from its starting point is rotated, this method tells whether the + * ray should rotate in a clockwise direction or a counter-clockwise + * direction to hit the point first. The return value is 0 if the point is + * on the line segment, it's 1 if the point is on the ray or if the ray + * should rotate in a counter-clockwise direction to get to the point, and + * it's -1 if the ray should rotate in a clockwise direction to get to the + * point or if the point is on the line determined by the line segment but + * not on the ray from the segment's starting point and through its end + * point. + * + * @param px + * the x coordinate of the test point. + * @param py + * the p coordinate of the test point. + * @return the value that describes where the point is with respect to this + * line segment, given the orientation of this line segment. */ public int relativeCCW(double px, double py) { return relativeCCW(getX1(), getY1(), getX2(), getY2(), px, py); } /** - * Tells where the point is with respect to this line segment, - * given the orientation of this line segment. If the ray - * found by extending the line segment from its starting point - * is rotated, this method tells whether the ray - * should rotate in a clockwise direction or a counter-clockwise - * direction to hit the point first. The return value is 0 if the - * point is on the line segment, it's 1 if the point is on the ray - * or if the ray should rotate in a counter-clockwise direction to get to the - * point, and it's -1 if the ray should rotate in a clockwise - * direction to get to the point or if the point is on the line - * determined by the line segment but not on the ray from the - * segment's starting point and through its end point. - * - * @param p the test point - * - * @return the value that describes where the point is with respect to - * this line segment, given the orientation of this line segment + * Tells where the point is with respect to this line segment, given the + * orientation of this line segment. If the ray found by extending the line + * segment from its starting point is rotated, this method tells whether the + * ray should rotate in a clockwise direction or a counter-clockwise + * direction to hit the point first. The return value is 0 if the point is + * on the line segment, it's 1 if the point is on the ray or if the ray + * should rotate in a counter-clockwise direction to get to the point, and + * it's -1 if the ray should rotate in a clockwise direction to get to the + * point or if the point is on the line determined by the line segment but + * not on the ray from the segment's starting point and through its end + * point. + * + * @param p + * the test point. + * @return the value that describes where the point is with respect to this + * line segment, given the orientation of this line segment. */ public int relativeCCW(Point2D p) { return relativeCCW(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); @@ -536,28 +595,31 @@ public abstract class Line2D implements Shape, Cloneable { /** * Tells whether the two line segments cross. * - * @param x1 the x coordinate of the starting point of the first segment - * @param y1 the y coordinate of the starting point of the first segment - * @param x2 the x coordinate of the end point of the first segment - * @param y2 the y coordinate of the end point of the first segment - * @param x3 the x coordinate of the starting point of the second segment - * @param y3 the y coordinate of the starting point of the second segment - * @param x4 the x coordinate of the end point of the second segment - * @param y4 the y coordinate of the end point of the second segment - * - * @return true, if the two line segments cross - */ - public static boolean linesIntersect(double x1, double y1, double x2, - double y2, double x3, double y3, double x4, double y4) - { + * @param x1 + * the x coordinate of the starting point of the first segment. + * @param y1 + * the y coordinate of the starting point of the first segment. + * @param x2 + * the x coordinate of the end point of the first segment. + * @param y2 + * the y coordinate of the end point of the first segment. + * @param x3 + * the x coordinate of the starting point of the second segment. + * @param y3 + * the y coordinate of the starting point of the second segment. + * @param x4 + * the x coordinate of the end point of the second segment. + * @param y4 + * the y coordinate of the end point of the second segment. + * @return true, if the two line segments cross. + */ + public static boolean linesIntersect(double x1, double y1, double x2, double y2, double x3, + double y3, double x4, double y4) { /* * A = (x2-x1, y2-y1) B = (x3-x1, y3-y1) C = (x4-x1, y4-y1) D = (x4-x3, - * y4-y3) = C-B E = (x1-x3, y1-y3) = -B F = (x2-x3, y2-y3) = A-B - * - * Result is ((AxB) * (AxC) <=0) and ((DxE) * (DxF) <= 0) - * - * DxE = (C-B)x(-B) = BxB-CxB = BxC DxF = (C-B)x(A-B) = CxA-CxB-BxA+BxB = - * AxB+BxC-AxC + * y4-y3) = C-B E = (x1-x3, y1-y3) = -B F = (x2-x3, y2-y3) = A-B Result + * is ((AxB) (AxC) <=0) and ((DxE) (DxF) <= 0) DxE = (C-B)x(-B) = + * BxB-CxB = BxC DxF = (C-B)x(A-B) = CxA-CxB-BxA+BxB = AxB+BxC-AxC */ x2 -= x1; // A @@ -573,16 +635,14 @@ public abstract class Line2D implements Shape, Cloneable { // Online if (AvB == 0.0 && AvC == 0.0) { if (x2 != 0.0) { - return - (x4 * x3 <= 0.0) || - ((x3 * x2 >= 0.0) && - (x2 > 0.0 ? x3 <= x2 || x4 <= x2 : x3 >= x2 || x4 >= x2)); + return (x4 * x3 <= 0.0) + || ((x3 * x2 >= 0.0) && (x2 > 0.0 ? x3 <= x2 || x4 <= x2 : x3 >= x2 + || x4 >= x2)); } if (y2 != 0.0) { - return - (y4 * y3 <= 0.0) || - ((y3 * y2 >= 0.0) && - (y2 > 0.0 ? y3 <= y2 || y4 <= y2 : y3 >= y2 || y4 >= y2)); + return (y4 * y3 <= 0.0) + || ((y3 * y2 >= 0.0) && (y2 > 0.0 ? y3 <= y2 || y4 <= y2 : y3 >= y2 + || y4 >= y2)); } return false; } @@ -595,12 +655,15 @@ public abstract class Line2D implements Shape, Cloneable { /** * Tells whether the specified line segments crosses this line segment. * - * @param x1 the x coordinate of the starting point of the test segment - * @param y1 the y coordinate of the starting point of the test segment - * @param x2 the x coordinate of the end point of the test segment - * @param y2 the y coordinate of the end point of the test segment - * - * @return true, if the specified line segments crosses this line segment + * @param x1 + * the x coordinate of the starting point of the test segment. + * @param y1 + * the y coordinate of the starting point of the test segment. + * @param x2 + * the x coordinate of the end point of the test segment. + * @param y2 + * the y coordinate of the end point of the test segment. + * @return true, if the specified line segments crosses this line segment. */ public boolean intersectsLine(double x1, double y1, double x2, double y2) { return linesIntersect(x1, y1, x2, y2, getX1(), getY1(), getX2(), getY2()); @@ -609,31 +672,37 @@ public abstract class Line2D implements Shape, Cloneable { /** * Tells whether the specified line segments crosses this line segment. * - * @param l the test segment - * - * @return true, if the specified line segments crosses this line segment - * - * @throws NullPointerException if l is null + * @param l + * the test segment. + * @return true, if the specified line segments crosses this line segment. + * @throws NullPointerException + * if l is null. */ public boolean intersectsLine(Line2D l) { - return linesIntersect(l.getX1(), l.getY1(), l.getX2(), l.getY2(), getX1(), getY1(), getX2(), getY2()); + return linesIntersect(l.getX1(), l.getY1(), l.getX2(), l.getY2(), getX1(), getY1(), + getX2(), getY2()); } /** - * Gives the square of the distance between the point and the - * line segment. - * - * @param x1 the x coordinate of the starting point of the line segment - * @param y1 the y coordinate of the starting point of the line segment - * @param x2 the x coordinate of the end point of the line segment - * @param y2 the y coordinate of the end point of the line segment - * @param px the x coordinate of the test point - * @param py the y coordinate of the test point - * - * @return the the square of the distance between the point and the - * line segment - */ - public static double ptSegDistSq(double x1, double y1, double x2, double y2, double px, double py) { + * Gives the square of the distance between the point and the line segment. + * + * @param x1 + * the x coordinate of the starting point of the line segment. + * @param y1 + * the y coordinate of the starting point of the line segment. + * @param x2 + * the x coordinate of the end point of the line segment. + * @param y2 + * the y coordinate of the end point of the line segment. + * @param px + * the x coordinate of the test point. + * @param py + * the y coordinate of the test point. + * @return the the square of the distance between the point and the line + * segment. + */ + public static double ptSegDistSq(double x1, double y1, double x2, double y2, double px, + double py) { /* * A = (x2 - x1, y2 - y1) P = (px - x1, py - y1) */ @@ -661,92 +730,95 @@ public abstract class Line2D implements Shape, Cloneable { } /** - * Gives the distance between the point and the - * line segment. - * - * @param x1 the x coordinate of the starting point of the line segment - * @param y1 the y coordinate of the starting point of the line segment - * @param x2 the x coordinate of the end point of the line segment - * @param y2 the y coordinate of the end point of the line segment - * @param px the x coordinate of the test point - * @param py the y coordinate of the test point - * - * @return the the distance between the point and the - * line segment + * Gives the distance between the point and the line segment. + * + * @param x1 + * the x coordinate of the starting point of the line segment. + * @param y1 + * the y coordinate of the starting point of the line segment. + * @param x2 + * the x coordinate of the end point of the line segment. + * @param y2 + * the y coordinate of the end point of the line segment. + * @param px + * the x coordinate of the test point. + * @param py + * the y coordinate of the test point. + * @return the the distance between the point and the line segment. */ public static double ptSegDist(double x1, double y1, double x2, double y2, double px, double py) { return Math.sqrt(ptSegDistSq(x1, y1, x2, y2, px, py)); } /** - * Gives the square of the distance between the point and this - * line segment. - * - * @param px the x coordinate of the test point - * @param py the y coordinate of the test point + * Gives the square of the distance between the point and this line segment. * - * @return the the square of the distance between the point and this - * line segment + * @param px + * the x coordinate of the test point. + * @param py + * the y coordinate of the test point. + * @return the the square of the distance between the point and this line + * segment. */ public double ptSegDistSq(double px, double py) { return ptSegDistSq(getX1(), getY1(), getX2(), getY2(), px, py); } /** - * Gives the square of the distance between the point and this - * line segment. + * Gives the square of the distance between the point and this line segment. * - * @param p the test point - * - * @return the square of the distance between the point and this - * line segment + * @param p + * the test point. + * @return the square of the distance between the point and this line + * segment. */ public double ptSegDistSq(Point2D p) { return ptSegDistSq(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); } /** - * Gives the distance between the point and this - * line segment. - * - * @param px the x coordinate of the test point - * @param py the y coordinate of the test point + * Gives the distance between the point and this line segment. * - * @return the distance between the point and this - * line segment + * @param px + * the x coordinate of the test point. + * @param py + * the y coordinate of the test point. + * @return the distance between the point and this line segment. */ public double ptSegDist(double px, double py) { return ptSegDist(getX1(), getY1(), getX2(), getY2(), px, py); } /** - * Gives the distance between the point and this - * line segment. + * Gives the distance between the point and this line segment. * - * @param p the test point - * - * @return the distance between the point and this - * line segment + * @param p + * the test point. + * @return the distance between the point and this line segment. */ public double ptSegDist(Point2D p) { return ptSegDist(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); } /** - * Gives the square of the distance between the point and the - * line. - * - * @param x1 the x coordinate of the starting point of the line segment - * @param y1 the y coordinate of the starting point of the line segment - * @param x2 the x coordinate of the end point of the line segment - * @param y2 the y coordinate of the end point of the line segment - * @param px the x coordinate of the test point - * @param py the y coordinate of the test point - * - * @return the square of the distance between the point and the - * line - */ - public static double ptLineDistSq(double x1, double y1, double x2, double y2, double px, double py) { + * Gives the square of the distance between the point and the line. + * + * @param x1 + * the x coordinate of the starting point of the line segment. + * @param y1 + * the y coordinate of the starting point of the line segment. + * @param x2 + * the x coordinate of the end point of the line segment. + * @param y2 + * the y coordinate of the end point of the line segment. + * @param px + * the x coordinate of the test point. + * @param py + * the y coordinate of the test point. + * @return the square of the distance between the point and the line. + */ + public static double ptLineDistSq(double x1, double y1, double x2, double y2, double px, + double py) { x2 -= x1; y2 -= y1; px -= x1; @@ -756,72 +828,77 @@ public abstract class Line2D implements Shape, Cloneable { } /** - * Gives the square of the distance between the point and the - * line. - * - * @param x1 the x coordinate of the starting point of the line segment - * @param y1 the y coordinate of the starting point of the line segment - * @param x2 the x coordinate of the end point of the line segment - * @param y2 the y coordinate of the end point of the line segment - * @param px the x coordinate of the test point - * @param py the y coordinate of the test point - * - * @return the square of the distance between the point and the - * line + * Gives the square of the distance between the point and the line. + * + * @param x1 + * the x coordinate of the starting point of the line segment. + * @param y1 + * the y coordinate of the starting point of the line segment. + * @param x2 + * the x coordinate of the end point of the line segment. + * @param y2 + * the y coordinate of the end point of the line segment. + * @param px + * the x coordinate of the test point. + * @param py + * the y coordinate of the test point. + * @return the square of the distance between the point and the line. */ public static double ptLineDist(double x1, double y1, double x2, double y2, double px, double py) { return Math.sqrt(ptLineDistSq(x1, y1, x2, y2, px, py)); } /** - * Gives the square of the distance between the point and the - * line determined by this Line2D. + * Gives the square of the distance between the point and the line + * determined by this Line2D. * - * @param px the x coordinate of the test point - * @param py the y coordinate of the test point - * - * @return the square of the distance between the point and the - * line determined by this Line2D + * @param px + * the x coordinate of the test point. + * @param py + * the y coordinate of the test point. + * @return the square of the distance between the point and the line + * determined by this Line2D. */ public double ptLineDistSq(double px, double py) { return ptLineDistSq(getX1(), getY1(), getX2(), getY2(), px, py); } /** - * Gives the square of the distance between the point and the - * line determined by this Line2D. - * - * @param p the test point + * Gives the square of the distance between the point and the line + * determined by this Line2D. * - * @return the square of the distance between the point and the - * line determined by this Line2D + * @param p + * the test point. + * @return the square of the distance between the point and the line + * determined by this Line2D. */ public double ptLineDistSq(Point2D p) { return ptLineDistSq(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); } /** - * Gives the distance between the point and the - * line determined by this Line2D. + * Gives the distance between the point and the line determined by this + * Line2D. * - * @param px the x coordinate of the test point - * @param py the y coordinate of the test point - * - * @return the distance between the point and the - * line determined by this Line2D + * @param px + * the x coordinate of the test point. + * @param py + * the y coordinate of the test point. + * @return the distance between the point and the line determined by this + * Line2D. */ public double ptLineDist(double px, double py) { return ptLineDist(getX1(), getY1(), getX2(), getY2(), px, py); } /** - * Gives the distance between the point and the - * line determined by this Line2D. - * - * @param p the test point + * Gives the distance between the point and the line determined by this + * Line2D. * - * @return the distance between the point and the - * line determined by this Line2D + * @param p + * the test point. + * @return the distance between the point and the line determined by this + * Line2D. */ public double ptLineDist(Point2D p) { return ptLineDist(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); diff --git a/awt/java/awt/geom/NoninvertibleTransformException.java b/awt/java/awt/geom/NoninvertibleTransformException.java index 2b7b542476..a4e6f0f859 100644 --- a/awt/java/awt/geom/NoninvertibleTransformException.java +++ b/awt/java/awt/geom/NoninvertibleTransformException.java @@ -18,26 +18,31 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; /** - * The Class NoninvertibleTransformException is the exception that is thrown - * when an action requires inverting an {@link AffineTransform} that is - * not invertible (has determinant 0). + * The Class NoninvertibleTransformException is the exception that is thrown + * when an action requires inverting an {@link AffineTransform} that is not + * invertible (has determinant 0). + * + * @since Android 1.0 */ public class NoninvertibleTransformException extends java.lang.Exception { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 6137225240503990466L; /** - * Instantiates a new noninvertible transform exception. + * Instantiates a new non-invertible transform exception. * - * @param s the error message + * @param s + * the error message. */ public NoninvertibleTransformException(String s) { super(s); } } - diff --git a/awt/java/awt/geom/PathIterator.java b/awt/java/awt/geom/PathIterator.java index 5a98083473..2d1c0ffa64 100644 --- a/awt/java/awt/geom/PathIterator.java +++ b/awt/java/awt/geom/PathIterator.java @@ -18,72 +18,87 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; /** - * The Interface PathIterator represents an iterator object that can - * be used to traverse the outline of a {@link java.awt.Shape}. - * It returns points along the boundary of the Shape - * which may be actual vertices (in the case of a shape made of line - * segments) or may be points on a curved segment with the distance - * between the points determined by a chosen flattening factor. + * The Interface PathIterator represents an iterator object that can be used to + * traverse the outline of a {@link java.awt.Shape}. It returns points along the + * boundary of the Shape which may be actual vertices (in the case of a shape + * made of line segments) or may be points on a curved segment with the distance + * between the points determined by a chosen flattening factor. *

    - * If the shape is closed, the outline is traversed in the counter-clockwise - * direction. That means that moving forward along the boundary is to travel - * in such a way that the interior of the shape is to the left of the - * outline path and the exterior of the shape is to the right of the outline - * path. The interior and exterior of the shape are determined by a - * winding rule. + * If the shape is closed, the outline is traversed in the counter-clockwise + * direction. That means that moving forward along the boundary is to travel in + * such a way that the interior of the shape is to the left of the outline path + * and the exterior of the shape is to the right of the outline path. The + * interior and exterior of the shape are determined by a winding rule. + *

    + * + * @since Android 1.0 */ public interface PathIterator { - /** The Constant WIND_EVEN_ODD indicates the winding rule that says - * that a point is outside the shape if any infinite ray from the point - * crosses the outline of the shape an even number of times, otherwise - * it is inside. */ + /** + * The Constant WIND_EVEN_ODD indicates the winding rule that says that a + * point is outside the shape if any infinite ray from the point crosses the + * outline of the shape an even number of times, otherwise it is inside. + */ public static final int WIND_EVEN_ODD = 0; - - /** The Constant WIND_NON_ZERO indicates the winding rule that says that - * a point is inside the shape if every infinite ray starting from that - * point crosses the outline of the shape a non-zero number of times. */ + + /** + * The Constant WIND_NON_ZERO indicates the winding rule that says that a + * point is inside the shape if every infinite ray starting from that point + * crosses the outline of the shape a non-zero number of times. + */ public static final int WIND_NON_ZERO = 1; - /** The Constant SEG_MOVETO indicates that to follow the shape's outline - * from the previous point to the current point, the cursor (traversal - * point) should be placed directly on the current point. */ - public static final int SEG_MOVETO = 0; - - /** The Constant SEG_LINETO indicates that to follow the shape's outline - * from the previous point to the current point, the cursor (traversal - * point) should follow a straight line. */ - public static final int SEG_LINETO = 1; - - /** The Constant SEG_QUADTO indicates that to follow the shape's outline - * from the previous point to the current point, the cursor (traversal - * point) should follow a quadratic curve. */ - public static final int SEG_QUADTO = 2; - - /** The Constant SEG_CUBICTO indicates that to follow the shape's outline - * from the previous point to the current point, the cursor (traversal - * point) should follow a cubic curve. */ + /** + * The Constant SEG_MOVETO indicates that to follow the shape's outline from + * the previous point to the current point, the cursor (traversal point) + * should be placed directly on the current point. + */ + public static final int SEG_MOVETO = 0; + + /** + * The Constant SEG_LINETO indicates that to follow the shape's outline from + * the previous point to the current point, the cursor (traversal point) + * should follow a straight line. + */ + public static final int SEG_LINETO = 1; + + /** + * The Constant SEG_QUADTO indicates that to follow the shape's outline from + * the previous point to the current point, the cursor (traversal point) + * should follow a quadratic curve. + */ + public static final int SEG_QUADTO = 2; + + /** + * The Constant SEG_CUBICTO indicates that to follow the shape's outline + * from the previous point to the current point, the cursor (traversal + * point) should follow a cubic curve. + */ public static final int SEG_CUBICTO = 3; - - /** The Constant SEG_CLOSE indicates that the previous point was the end - * of the shape's outline. */ - public static final int SEG_CLOSE = 4; + + /** + * The Constant SEG_CLOSE indicates that the previous point was the end of + * the shape's outline. + */ + public static final int SEG_CLOSE = 4; /** * Gets the winding rule, either {@link PathIterator#WIND_EVEN_ODD} or * {@link PathIterator#WIND_NON_ZERO}. * - * @return the winding rule + * @return the winding rule. */ public int getWindingRule(); /** * Checks if this PathIterator has been completely traversed. * - * @return true, if this PathIterator has been completely traversed + * @return true, if this PathIterator has been completely traversed. */ public boolean isDone(); @@ -93,40 +108,39 @@ public interface PathIterator { public void next(); /** - * Gets the coordinates of the next vertex point along the shape's outline - * and a flag that indicates what kind of segment to use in order to - * connect the previous vertex point to the current vertex point to form - * the current segment. - * - * @param coords the array that the coordinates of the end point of the current - * segment are written into. + * Gets the coordinates of the next vertex point along the shape's outline + * and a flag that indicates what kind of segment to use in order to connect + * the previous vertex point to the current vertex point to form the current + * segment. * - * @return the flag that indicates how to follow the shape's outline - * from the previous point to the current one, chosen from - * the following constants: - * {@link PathIterator#SEG_MOVETO}, {@link PathIterator#SEG_LINETO}, - * {@link PathIterator#SEG_QUADTO}, {@link PathIterator#SEG_CUBICTO}, - * or {@link PathIterator#SEG_CLOSE} + * @param coords + * the array that the coordinates of the end point of the current + * segment are written into. + * @return the flag that indicates how to follow the shape's outline from + * the previous point to the current one, chosen from the following + * constants: {@link PathIterator#SEG_MOVETO}, + * {@link PathIterator#SEG_LINETO}, {@link PathIterator#SEG_QUADTO}, + * {@link PathIterator#SEG_CUBICTO}, or + * {@link PathIterator#SEG_CLOSE}. */ public int currentSegment(float[] coords); /** - * Gets the coordinates of the next vertex point along the shape's outline - * and a flag that indicates what kind of segment to use in order to - * connect the previous vertex point to the current vertex point to form - * the current segment. + * Gets the coordinates of the next vertex point along the shape's outline + * and a flag that indicates what kind of segment to use in order to connect + * the previous vertex point to the current vertex point to form the current + * segment. * - * @param coords the array that the coordinates of the end point of the current - * segment are written into. - * - * @return the flag that indicates how to follow the shape's outline - * from the previous point to the current one, chosen from - * the following constants: - * {@link PathIterator#SEG_MOVETO}, {@link PathIterator#SEG_LINETO}, - * {@link PathIterator#SEG_QUADTO}, {@link PathIterator#SEG_CUBICTO}, - * or {@link PathIterator#SEG_CLOSE} + * @param coords + * the array that the coordinates of the end point of the current + * segment are written into. + * @return the flag that indicates how to follow the shape's outline from + * the previous point to the current one, chosen from the following + * constants: {@link PathIterator#SEG_MOVETO}, + * {@link PathIterator#SEG_LINETO}, {@link PathIterator#SEG_QUADTO}, + * {@link PathIterator#SEG_CUBICTO}, or + * {@link PathIterator#SEG_CLOSE}. */ public int currentSegment(double[] coords); } - diff --git a/awt/java/awt/geom/Point2D.java b/awt/java/awt/geom/Point2D.java index 7719e674e6..f7026c8c6a 100644 --- a/awt/java/awt/geom/Point2D.java +++ b/awt/java/awt/geom/Point2D.java @@ -18,40 +18,51 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import org.apache.harmony.misc.HashCode; /** - * The Class Point2D represents a point whose data is given in - * high-precision values appropriate for graphical operations. + * The Class Point2D represents a point whose data is given in high-precision + * values appropriate for graphical operations. + * + * @since Android 1.0 */ public abstract class Point2D implements Cloneable { /** - * The Class Float is the subclass of Point2D that has all - * of its data values stored with float-level precision. + * The Class Float is the subclass of Point2D that has all of its data + * values stored with float-level precision. + * + * @since Android 1.0 */ public static class Float extends Point2D { - /** The x coordinate. */ + /** + * The x coordinate. + */ public float x; - - /** The y coordinate. */ + + /** + * The y coordinate. + */ public float y; /** - * Instantiates a new float-valued Point2D with its data - * set to zero. + * Instantiates a new float-valued Point2D with its data set to zero. */ public Float() { } /** - * Instantiates a new float-valued Point2D with the specified coordinates. + * Instantiates a new float-valued Point2D with the specified + * coordinates. * - * @param x the x coordinate - * @param y the y coordinate + * @param x + * the x coordinate. + * @param y + * the y coordinate. */ public Float(float x, float y) { this.x = x; @@ -71,8 +82,10 @@ public abstract class Point2D implements Cloneable { /** * Sets the point's coordinates. * - * @param x the x coordinate - * @param y the y coordinate + * @param x + * the x coordinate. + * @param y + * the y coordinate. */ public void setLocation(float x, float y) { this.x = x; @@ -92,29 +105,37 @@ public abstract class Point2D implements Cloneable { } /** - * The Class Double is the subclass of Point2D that has all - * of its data values stored with double-level precision. + * The Class Double is the subclass of Point2D that has all of its data + * values stored with double-level precision. + * + * @since Android 1.0 */ public static class Double extends Point2D { - /** The x coordinate. */ + /** + * The x coordinate. + */ public double x; - - /** The y coordinate. */ + + /** + * The y coordinate. + */ public double y; /** - * Instantiates a new double-valued Point2D with its data - * set to zero. + * Instantiates a new double-valued Point2D with its data set to zero. */ public Double() { } /** - * Instantiates a new double-valued Point2D with the specified coordinates. + * Instantiates a new double-valued Point2D with the specified + * coordinates. * - * @param x the x coordinate - * @param y the y coordinate + * @param x + * the x coordinate. + * @param y + * the y coordinate. */ public Double(double x, double y) { this.x = x; @@ -152,29 +173,32 @@ public abstract class Point2D implements Cloneable { /** * Gets the x coordinate. * - * @return the x coordinate + * @return the x coordinate. */ public abstract double getX(); /** * Gets the y coordinate. * - * @return the y coordinate + * @return the y coordinate. */ public abstract double getY(); /** * Sets the point's coordinates. * - * @param x the x coordinate - * @param y the y coordinate + * @param x + * the x coordinate. + * @param y + * the y coordinate. */ public abstract void setLocation(double x, double y); /** * Sets the point's coordinates by copying them from another point. * - * @param p the point to copy the data from + * @param p + * the point to copy the data from. */ public void setLocation(Point2D p) { setLocation(p.getX(), p.getY()); @@ -183,12 +207,15 @@ public abstract class Point2D implements Cloneable { /** * Finds the square of the distance between the two specified points. * - * @param x1 the x coordinate of the first point - * @param y1 the y coordinate of the first point - * @param x2 the x coordinate of the second point - * @param y2 the y coordinate of the second point - * - * @return the square of the distance between the two specified points + * @param x1 + * the x coordinate of the first point. + * @param y1 + * the y coordinate of the first point. + * @param x2 + * the x coordinate of the second point. + * @param y2 + * the y coordinate of the second point. + * @return the square of the distance between the two specified points. */ public static double distanceSq(double x1, double y1, double x2, double y2) { x2 -= x1; @@ -197,23 +224,28 @@ public abstract class Point2D implements Cloneable { } /** - * Finds the square of the distance between this point and the specified point. - * - * @param px the x coordinate of the point - * @param py the y coordinate of the point + * Finds the square of the distance between this point and the specified + * point. * - * @return the square of the distance between this point and the specified point + * @param px + * the x coordinate of the point. + * @param py + * the y coordinate of the point. + * @return the square of the distance between this point and the specified + * point. */ public double distanceSq(double px, double py) { return Point2D.distanceSq(getX(), getY(), px, py); } /** - * Finds the square of the distance between this point and the specified point. + * Finds the square of the distance between this point and the specified + * point. * - * @param p the other point - * - * @return the square of the distance between this point and the specified point + * @param p + * the other point. + * @return the square of the distance between this point and the specified + * point. */ public double distanceSq(Point2D p) { return Point2D.distanceSq(getX(), getY(), p.getX(), p.getY()); @@ -222,12 +254,15 @@ public abstract class Point2D implements Cloneable { /** * Finds the distance between the two specified points. * - * @param x1 the x coordinate of the first point - * @param y1 the y coordinate of the first point - * @param x2 the x coordinate of the second point - * @param y2 the y coordinate of the second point - * - * @return the distance between the two specified points + * @param x1 + * the x coordinate of the first point. + * @param y1 + * the y coordinate of the first point. + * @param x2 + * the x coordinate of the second point. + * @param y2 + * the y coordinate of the second point. + * @return the distance between the two specified points. */ public static double distance(double x1, double y1, double x2, double y2) { return Math.sqrt(distanceSq(x1, y1, x2, y2)); @@ -236,10 +271,11 @@ public abstract class Point2D implements Cloneable { /** * Finds the distance between this point and the specified point. * - * @param px the x coordinate of the point - * @param py the y coordinate of the point - * - * @return the distance between this point and the specified point + * @param px + * the x coordinate of the point. + * @param py + * the y coordinate of the point. + * @return the distance between this point and the specified point. */ public double distance(double px, double py) { return Math.sqrt(distanceSq(px, py)); @@ -248,9 +284,9 @@ public abstract class Point2D implements Cloneable { /** * Finds the distance between this point and the specified point. * - * @param p the other point - * - * @return the distance between this point and the specified point + * @param p + * the other point. + * @return the distance between this point and the specified point. */ public double distance(Point2D p) { return Math.sqrt(distanceSq(p)); @@ -279,10 +315,9 @@ public abstract class Point2D implements Cloneable { return true; } if (obj instanceof Point2D) { - Point2D p = (Point2D) obj; + Point2D p = (Point2D)obj; return getX() == p.getX() && getY() == p.getY(); } return false; } } - diff --git a/awt/java/awt/geom/QuadCurve2D.java b/awt/java/awt/geom/QuadCurve2D.java index 64ea6d68b8..7a86a4840f 100644 --- a/awt/java/awt/geom/QuadCurve2D.java +++ b/awt/java/awt/geom/QuadCurve2D.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.awt.Rectangle; @@ -28,42 +29,58 @@ import org.apache.harmony.awt.gl.Crossing; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class QuadCurve2D is a Shape that represents a segment of a - * quadratic (Bezier) curve. The curved segment is determined by three points: - * a start point, an end point, and a control point. The line from the control - * point to the starting point gives the tangent to the curve at the - * starting point, and the line from the control point to the end point - * gives the tangent to the curve at the end point. + * The Class QuadCurve2D is a Shape that represents a segment of a quadratic + * (Bezier) curve. The curved segment is determined by three points: a start + * point, an end point, and a control point. The line from the control point to + * the starting point gives the tangent to the curve at the starting point, and + * the line from the control point to the end point gives the tangent to the + * curve at the end point. + * + * @since Android 1.0 */ public abstract class QuadCurve2D implements Shape, Cloneable { /** - * The Class Float is the subclass of QuadCurve2D that has all - * of its data values stored with float-level precision. + * The Class Float is the subclass of QuadCurve2D that has all of its data + * values stored with float-level precision. + * + * @since Android 1.0 */ public static class Float extends QuadCurve2D { - /** The x coordinate of the starting point of the curved segment. */ + /** + * The x coordinate of the starting point of the curved segment. + */ public float x1; - - /** The y coordinate of the starting point of the curved segment. */ + + /** + * The y coordinate of the starting point of the curved segment. + */ public float y1; - - /** The x coordinate of the control point. */ + + /** + * The x coordinate of the control point. + */ public float ctrlx; - - /** The y coordinate of the control point. */ + + /** + * The y coordinate of the control point. + */ public float ctrly; - - /** The x coordinate of the end point of the curved segment. */ + + /** + * The x coordinate of the end point of the curved segment. + */ public float x2; - - /** The y coordinate of the end point of the curved segment. */ + + /** + * The y coordinate of the end point of the curved segment. + */ public float y2; /** - * Instantiates a new float-valued QuadCurve2D with all coordinate values - * set to zero. + * Instantiates a new float-valued QuadCurve2D with all coordinate + * values set to zero. */ public Float() { } @@ -72,12 +89,20 @@ public abstract class QuadCurve2D implements Shape, Cloneable { * Instantiates a new float-valued QuadCurve2D with the specified * coordinate values. * - * @param x1 the x coordinate of the starting point of the curved segment - * @param y1 the y coordinate of the starting point of the curved segment - * @param ctrlx the x coordinate of the control point - * @param ctrly the y coordinate of the control point - * @param x2 the x coordinate of the end point of the curved segment - * @param y2 the y coordinate of the end point of the curved segment + * @param x1 + * the x coordinate of the starting point of the curved + * segment. + * @param y1 + * the y coordinate of the starting point of the curved + * segment. + * @param ctrlx + * the x coordinate of the control point. + * @param ctrly + * the y coordinate of the control point. + * @param x2 + * the x coordinate of the end point of the curved segment. + * @param y2 + * the y coordinate of the end point of the curved segment. */ public Float(float x1, float y1, float ctrlx, float ctrly, float x2, float y2) { setCurve(x1, y1, ctrlx, ctrly, x2, y2); @@ -141,12 +166,20 @@ public abstract class QuadCurve2D implements Shape, Cloneable { /** * Sets the data values of the curve. * - * @param x1 the x coordinate of the starting point of the curved segment - * @param y1 the y coordinate of the starting point of the curved segment - * @param ctrlx the x coordinate of the control point - * @param ctrly the y coordinate of the control point - * @param x2 the x coordinate of the end point of the curved segment - * @param y2 the y coordinate of the end point of the curved segment + * @param x1 + * the x coordinate of the starting point of the curved + * segment. + * @param y1 + * the y coordinate of the starting point of the curved + * segment. + * @param ctrlx + * the x coordinate of the control point. + * @param ctrly + * the y coordinate of the control point. + * @param x2 + * the x coordinate of the end point of the curved segment. + * @param y2 + * the y coordinate of the end point of the curved segment. */ public void setCurve(float x1, float y1, float ctrlx, float ctrly, float x2, float y2) { this.x1 = x1; @@ -167,32 +200,46 @@ public abstract class QuadCurve2D implements Shape, Cloneable { } /** - * The Class Double is the subclass of QuadCurve2D that has all - * of its data values stored with double-level precision. + * The Class Double is the subclass of QuadCurve2D that has all of its data + * values stored with double-level precision. + * + * @since Android 1.0 */ public static class Double extends QuadCurve2D { - /** The x coordinate of the starting point of the curved segment. */ + /** + * The x coordinate of the starting point of the curved segment. + */ public double x1; - - /** The y coordinate of the starting point of the curved segment. */ + + /** + * The y coordinate of the starting point of the curved segment. + */ public double y1; - - /** The x coordinate of the control point. */ + + /** + * The x coordinate of the control point. + */ public double ctrlx; - - /** The y coordinate of the control point. */ + + /** + * The y coordinate of the control point. + */ public double ctrly; - - /** The x coordinate of the end point of the curved segment. */ + + /** + * The x coordinate of the end point of the curved segment. + */ public double x2; - - /** The y coordinate of the end point of the curved segment. */ + + /** + * The y coordinate of the end point of the curved segment. + */ public double y2; /** - * Instantiates a new double-valued QuadCurve2D with all coordinate values - * set to zero. + * Instantiates a new double-valued QuadCurve2D with all coordinate + * values set to zero. */ public Double() { } @@ -201,12 +248,20 @@ public abstract class QuadCurve2D implements Shape, Cloneable { * Instantiates a new double-valued QuadCurve2D with the specified * coordinate values. * - * @param x1 the x coordinate of the starting point of the curved segment - * @param y1 the y coordinate of the starting point of the curved segment - * @param ctrlx the x coordinate of the control point - * @param ctrly the y coordinate of the control point - * @param x2 the x coordinate of the end point of the curved segment - * @param y2 the y coordinate of the end point of the curved segment + * @param x1 + * the x coordinate of the starting point of the curved + * segment. + * @param y1 + * the y coordinate of the starting point of the curved + * segment. + * @param ctrlx + * the x coordinate of the control point. + * @param ctrly + * the y coordinate of the control point. + * @param x2 + * the x coordinate of the end point of the curved segment. + * @param y2 + * the y coordinate of the end point of the curved segment. */ public Double(double x1, double y1, double ctrlx, double ctrly, double x2, double y2) { setCurve(x1, y1, ctrlx, ctrly, x2, y2); @@ -277,28 +332,37 @@ public abstract class QuadCurve2D implements Shape, Cloneable { } /* - * QuadCurve2D path iterator + * QuadCurve2D path iterator */ /** * The PathIterator for a Quad2D curve. */ class Iterator implements PathIterator { - /** The source QuadCurve2D object. */ + /** + * The source QuadCurve2D object. + */ QuadCurve2D c; - /** The path iterator transformation. */ + /** + * The path iterator transformation. + */ AffineTransform t; - /** The current segment index. */ + /** + * The current segment index. + */ int index; /** - * Constructs a new QuadCurve2D.Iterator for given curve and transformation + * Constructs a new QuadCurve2D.Iterator for given curve and + * transformation * - * @param q - the source QuadCurve2D object - * @param t the AffineTransform that acts on the coordinates before - * returning them (or null) + * @param q + * the source QuadCurve2D object. + * @param t + * the AffineTransform that acts on the coordinates before + * returning them (or null). */ Iterator(QuadCurve2D q, AffineTransform t) { this.c = q; @@ -380,284 +444,307 @@ public abstract class QuadCurve2D implements Shape, Cloneable { /** * Gets the x coordinate of the starting point. * - * @return the x coordinate of the starting point + * @return the x coordinate of the starting point. */ public abstract double getX1(); /** * Gets the y coordinate of the starting point. * - * @return the y coordinate of the starting point + * @return the y coordinate of the starting point. */ public abstract double getY1(); /** * Gets the starting point. * - * @return the starting point + * @return the starting point. */ public abstract Point2D getP1(); /** * Gets the x coordinate of the control point. * - * @return the x coordinate of the control point + * @return the x coordinate of the control point. */ public abstract double getCtrlX(); /** * Gets the y coordinate of the control point. * - * @return y coordinate of the control point + * @return y coordinate of the control point. */ public abstract double getCtrlY(); /** * Gets the control point. * - * @return the control point + * @return the control point. */ public abstract Point2D getCtrlPt(); /** * Gets the x coordinate of the end point. * - * @return the x coordinate of the end point + * @return the x coordinate of the end point. */ public abstract double getX2(); /** * Gets the y coordinate of the end point. * - * @return the y coordinate of the end point + * @return the y coordinate of the end point. */ public abstract double getY2(); /** * Gets the end point. * - * @return the end point + * @return the end point. */ public abstract Point2D getP2(); /** * Sets the data of the curve. * - * @param x1 the x coordinate of the starting point of the curved segment - * @param y1 the y coordinate of the starting point of the curved segment - * @param ctrlx the x coordinate of the control point - * @param ctrly the y coordinate of the control point - * @param x2 the x coordinate of the end point of the curved segment - * @param y2 the y coordinate of the end point of the curved segment + * @param x1 + * the x coordinate of the starting point of the curved segment. + * @param y1 + * the y coordinate of the starting point of the curved segment. + * @param ctrlx + * the x coordinate of the control point. + * @param ctrly + * the y coordinate of the control point. + * @param x2 + * the x coordinate of the end point of the curved segment. + * @param y2 + * the y coordinate of the end point of the curved segment. */ - public abstract void setCurve(double x1, double y1, double ctrlx, double ctrly, double x2, double y2); + public abstract void setCurve(double x1, double y1, double ctrlx, double ctrly, double x2, + double y2); /** * Sets the data of the curve. * - * @param p1 the starting point of the curved segment - * @param cp the control point - * @param p2 the end point of the curved segment - * - * @throws NullPointerException if any of the three points is null. + * @param p1 + * the starting point of the curved segment. + * @param cp + * the control point. + * @param p2 + * the end point of the curved segment. + * @throws NullPointerException + * if any of the three points is null. */ public void setCurve(Point2D p1, Point2D cp, Point2D p2) { setCurve(p1.getX(), p1.getY(), cp.getX(), cp.getY(), p2.getX(), p2.getY()); } /** - * Sets the data of the curve by reading the data from an array - * of values. The values are read in the same order as the arguments - * of the method {@link QuadCurve2D#setCurve(double, double, double, double, double, double)}. - * - * @param coords the array of values containing the new coordinates - * @param offset the offset of the data to read within the array - * - * @throws ArrayIndexOutOfBoundsException if coords.length < offset + 6. - * @throws NullPointerException if the coordinate array is null. + * Sets the data of the curve by reading the data from an array of values. + * The values are read in the same order as the arguments of the method + * {@link QuadCurve2D#setCurve(double, double, double, double, double, double)} + * . + * + * @param coords + * the array of values containing the new coordinates. + * @param offset + * the offset of the data to read within the array. + * @throws ArrayIndexOutOfBoundsException + * if {@code coords.length} < offset + 6. + * @throws NullPointerException + * if the coordinate array is null. */ public void setCurve(double[] coords, int offset) { - setCurve( - coords[offset + 0], coords[offset + 1], - coords[offset + 2], coords[offset + 3], + setCurve(coords[offset + 0], coords[offset + 1], coords[offset + 2], coords[offset + 3], coords[offset + 4], coords[offset + 5]); } /** - * Sets the data of the curve by reading the data from an array - * of points. The values are read in the same order as the arguments - * of the method {@link QuadCurve2D#setCurve(Point2D, Point2D, Point2D)} - * - * @param points the array of points containing the new coordinates - * @param offset the offset of the data to read within the array - * - * @throws ArrayIndexOutOfBoundsException if points.length < offset + 3. - * @throws NullPointerException if the point array is null. + * Sets the data of the curve by reading the data from an array of points. + * The values are read in the same order as the arguments of the method + * {@link QuadCurve2D#setCurve(Point2D, Point2D, Point2D)}. + * + * @param points + * the array of points containing the new coordinates. + * @param offset + * the offset of the data to read within the array. + * @throws ArrayIndexOutOfBoundsException + * if points.length < offset + 3. + * @throws NullPointerException + * if the point array is null. */ public void setCurve(Point2D[] points, int offset) { - setCurve( - points[offset + 0].getX(), points[offset + 0].getY(), - points[offset + 1].getX(), points[offset + 1].getY(), - points[offset + 2].getX(), points[offset + 2].getY()); + setCurve(points[offset + 0].getX(), points[offset + 0].getY(), points[offset + 1].getX(), + points[offset + 1].getY(), points[offset + 2].getX(), points[offset + 2].getY()); } /** * Sets the data of the curve by copying it from another QuadCurve2D. * - * @param curve the curve to copy the data points from - * - * @throws NullPointerException if the curve is null. + * @param curve + * the curve to copy the data points from. + * @throws NullPointerException + * if the curve is null. */ public void setCurve(QuadCurve2D curve) { - setCurve( - curve.getX1(), curve.getY1(), - curve.getCtrlX(), curve.getCtrlY(), - curve.getX2(), curve.getY2()); + setCurve(curve.getX1(), curve.getY1(), curve.getCtrlX(), curve.getCtrlY(), curve.getX2(), + curve.getY2()); } /** - * Gets the square of the distance from the control point to the - * straight line segment connecting the start point and the end point - * for this curve. + * Gets the square of the distance from the control point to the straight + * line segment connecting the start point and the end point for this curve. * - * @return the square of the distance from the control point to the - * straight line segment connecting the start point and the end point. + * @return the square of the distance from the control point to the straight + * line segment connecting the start point and the end point. */ public double getFlatnessSq() { - return Line2D.ptSegDistSq( - getX1(), getY1(), - getX2(), getY2(), - getCtrlX(), getCtrlY()); + return Line2D.ptSegDistSq(getX1(), getY1(), getX2(), getY2(), getCtrlX(), getCtrlY()); } /** - * Gets the square of the distance from the control point to the - * straight line segment connecting the start point and the end point. - * - * @param x1 the x coordinate of the starting point of the curved segment - * @param y1 the y coordinate of the starting point of the curved segment - * @param ctrlx the x coordinate of the control point - * @param ctrly the y coordinate of the control point - * @param x2 the x coordinate of the end point of the curved segment - * @param y2 the y coordinate of the end point of the curved segment - * - * @return the square of the distance from the control point to the - * straight line segment connecting the start point and the end point. + * Gets the square of the distance from the control point to the straight + * line segment connecting the start point and the end point. + * + * @param x1 + * the x coordinate of the starting point of the curved segment. + * @param y1 + * the y coordinate of the starting point of the curved segment. + * @param ctrlx + * the x coordinate of the control point. + * @param ctrly + * the y coordinate of the control point. + * @param x2 + * the x coordinate of the end point of the curved segment. + * @param y2 + * the y coordinate of the end point of the curved segment. + * @return the square of the distance from the control point to the straight + * line segment connecting the start point and the end point. */ - public static double getFlatnessSq(double x1, double y1, double ctrlx, double ctrly, double x2, double y2) { + public static double getFlatnessSq(double x1, double y1, double ctrlx, double ctrly, double x2, + double y2) { return Line2D.ptSegDistSq(x1, y1, x2, y2, ctrlx, ctrly); } /** - * Gets the square of the distance from the control point to the - * straight line segment connecting the start point and the end point - * by reading the coordinates of the points from an array of values. - * The values are read in the same order as the arguments - * of the method {@link QuadCurve2D#getFlatnessSq(double, double, double, double, double, double)}. - * - * @param coords the array of points containing the coordinates to use for - * the calculation - * @param offset the offset of the data to read within the array - * - * @return the square of the distance from the control point to the - * straight line segment connecting the start point and the end point. - * - * @throws ArrayIndexOutOfBoundsException if coords.length < offset + 6. - * @throws NullPointerException if the coordinate array is null. + * Gets the square of the distance from the control point to the straight + * line segment connecting the start point and the end point by reading the + * coordinates of the points from an array of values. The values are read in + * the same order as the arguments of the method + * {@link QuadCurve2D#getFlatnessSq(double, double, double, double, double, double)} + * . + * + * @param coords + * the array of points containing the coordinates to use for the + * calculation + * @param offset + * the offset of the data to read within the array + * @return the square of the distance from the control point to the straight + * line segment connecting the start point and the end point. + * @throws ArrayIndexOutOfBoundsException + * if {@code coords.length} < offset + 6. + * @throws NullPointerException + * if the coordinate array is null. */ public static double getFlatnessSq(double coords[], int offset) { - return Line2D.ptSegDistSq( - coords[offset + 0], coords[offset + 1], - coords[offset + 4], coords[offset + 5], - coords[offset + 2], coords[offset + 3]); + return Line2D.ptSegDistSq(coords[offset + 0], coords[offset + 1], coords[offset + 4], + coords[offset + 5], coords[offset + 2], coords[offset + 3]); } /** - * Gets the distance from the control point to the - * straight line segment connecting the start point and the end point - * of this QuadCurve2D. + * Gets the distance from the control point to the straight line segment + * connecting the start point and the end point of this QuadCurve2D. * - * @return the the distance from the control point to the - * straight line segment connecting the start point and the end point - * of this QuadCurve2D + * @return the the distance from the control point to the straight line + * segment connecting the start point and the end point of this + * QuadCurve2D. */ public double getFlatness() { return Line2D.ptSegDist(getX1(), getY1(), getX2(), getY2(), getCtrlX(), getCtrlY()); } /** - * Gets the distance from the control point to the - * straight line segment connecting the start point and the end point. - * - * @param x1 the x coordinate of the starting point of the curved segment - * @param y1 the y coordinate of the starting point of the curved segment - * @param ctrlx the x coordinate of the control point - * @param ctrly the y coordinate of the control point - * @param x2 the x coordinate of the end point of the curved segment - * @param y2 the y coordinate of the end point of the curved segment - * - * @return the the distance from the control point to the - * straight line segment connecting the start point and the end point + * Gets the distance from the control point to the straight line segment + * connecting the start point and the end point. + * + * @param x1 + * the x coordinate of the starting point of the curved segment. + * @param y1 + * the y coordinate of the starting point of the curved segment. + * @param ctrlx + * the x coordinate of the control point. + * @param ctrly + * the y coordinate of the control point. + * @param x2 + * the x coordinate of the end point of the curved segment. + * @param y2 + * the y coordinate of the end point of the curved segment. + * @return the the distance from the control point to the straight line + * segment connecting the start point and the end point. */ - public static double getFlatness(double x1, double y1, double ctrlx, - double ctrly, double x2, double y2) - { + public static double getFlatness(double x1, double y1, double ctrlx, double ctrly, double x2, + double y2) { return Line2D.ptSegDist(x1, y1, x2, y2, ctrlx, ctrly); } /** - * Gets the the distance from the control point to the - * straight line segment connecting the start point and the end point. - * The values are read in the same order as the arguments - * of the method {@link QuadCurve2D#getFlatness(double, double, double, double, double, double)}. - * - * @param coords the array of points containing the coordinates to use for - * the calculation - * @param offset the offset of the data to read within the array - * - * @return the the distance from the control point to the - * straight line segment connecting the start point and the end point - * - * @throws ArrayIndexOutOfBoundsException if coords.length < offset + 6. - * @throws NullPointerException if the coordinate array is null. + * Gets the the distance from the control point to the straight line segment + * connecting the start point and the end point. The values are read in the + * same order as the arguments of the method + * {@link QuadCurve2D#getFlatness(double, double, double, double, double, double)} + * . + * + * @param coords + * the array of points containing the coordinates to use for the + * calculation. + * @param offset + * the offset of the data to read within the array. + * @return the the distance from the control point to the straight line + * segment connecting the start point and the end point. + * @throws ArrayIndexOutOfBoundsException + * if {code coords.length} < offset + 6. + * @throws NullPointerException + * if the coordinate array is null. */ public static double getFlatness(double coords[], int offset) { - return Line2D.ptSegDist( - coords[offset + 0], coords[offset + 1], - coords[offset + 4], coords[offset + 5], - coords[offset + 2], coords[offset + 3]); + return Line2D.ptSegDist(coords[offset + 0], coords[offset + 1], coords[offset + 4], + coords[offset + 5], coords[offset + 2], coords[offset + 3]); } /** - * Creates the data for two quadratic curves by dividing this - * curve in two. The division point is the point on the curve - * that is closest to this curve's control point. The data of - * this curve is left unchanged. - * - * @param left the QuadCurve2D where the left (start) segment's - * data is written - * @param right the QuadCurve2D where the right (end) segment's - * data is written - * - * @throws NullPointerException if either curve is null. + * Creates the data for two quadratic curves by dividing this curve in two. + * The division point is the point on the curve that is closest to this + * curve's control point. The data of this curve is left unchanged. + * + * @param left + * the QuadCurve2D where the left (start) segment's data is + * written. + * @param right + * the QuadCurve2D where the right (end) segment's data is + * written. + * @throws NullPointerException + * if either curve is null. */ public void subdivide(QuadCurve2D left, QuadCurve2D right) { subdivide(this, left, right); } /** - * Creates the data for two quadratic curves by dividing a source - * curve in two. The division point is the point on the curve - * that is closest to the source curve's control point. The data of - * the source curve is left unchanged. - * - * @param src the curve that provides the initial data - * @param left the QuadCurve2D where the left (start) segment's - * data is written - * @param right the QuadCurve2D where the right (end) segment's - * data is written - * - * @throws NullPointerException if one of the curves is null. + * Creates the data for two quadratic curves by dividing a source curve in + * two. The division point is the point on the curve that is closest to the + * source curve's control point. The data of the source curve is left + * unchanged. + * + * @param src + * the curve that provides the initial data. + * @param left + * the QuadCurve2D where the left (start) segment's data is + * written. + * @param right + * the QuadCurve2D where the right (end) segment's data is + * written. + * @throws NullPointerException + * if one of the curves is null. */ public static void subdivide(QuadCurve2D src, QuadCurve2D left, QuadCurve2D right) { double x1 = src.getX1(); @@ -681,26 +768,33 @@ public abstract class QuadCurve2D implements Shape, Cloneable { } /** - * Creates the data for two quadratic curves by dividing a source - * curve in two. The division point is the point on the curve - * that is closest to the source curve's control point. The data - * for the three curves is read and written from arrays of values in - * the usual order: x1, y1, cx, cy, x2, y2. - * - * @param src the array that gives the data values for the source curve - * @param srcoff the offset in the src array to read the values from - * @param left the array where the coordinates of the start curve should be written - * @param leftOff the offset in the left array to start writing the values - * @param right the array where the coordinates of the end curve should be written - * @param rightOff the offset in the right array to start writing the values - * - * @throws ArrayIndexOutOfBoundsException if src.length < srcoff + 6 - * or if left.length < leftOff + 6 or if right.length < rightOff + 6. - * @throws NullPointerException if one of the arrays is null. + * Creates the data for two quadratic curves by dividing a source curve in + * two. The division point is the point on the curve that is closest to the + * source curve's control point. The data for the three curves is read and + * written from arrays of values in the usual order: x1, y1, cx, cy, x2, y2. + * + * @param src + * the array that gives the data values for the source curve. + * @param srcoff + * the offset in the src array to read the values from. + * @param left + * the array where the coordinates of the start curve should be + * written. + * @param leftOff + * the offset in the left array to start writing the values. + * @param right + * the array where the coordinates of the end curve should be + * written. + * @param rightOff + * the offset in the right array to start writing the values. + * @throws ArrayIndexOutOfBoundsException + * if {@code src.length} < srcoff + 6 or if {@code left.length} + * < leftOff + 6 or if {@code right.length} < rightOff + 6. + * @throws NullPointerException + * if one of the arrays is null. */ - public static void subdivide(double src[], int srcoff, double left[], - int leftOff, double right[], int rightOff) - { + public static void subdivide(double src[], int srcoff, double left[], int leftOff, + double right[], int rightOff) { double x1 = src[srcoff + 0]; double y1 = src[srcoff + 1]; double cx = src[srcoff + 2]; @@ -732,42 +826,43 @@ public abstract class QuadCurve2D implements Shape, Cloneable { } /** - * Finds the roots of the quadratic polynomial. This is - * accomplished by finding the (real) values of x that solve - * the following equation: eqn[2]*x*x + eqn[1]*x + eqn[0] = 0. - * The solutions are written back into the array eqn starting - * from the index 0 in the array. The return value tells how - * many array elements have been changed by this method call. - * - * @param eqn an array containing the coefficients of the - * quadratic polynomial to solve. - * - * @return the number of roots of the quadratic polynomial - * - * @throws ArrayIndexOutOfBoundsException if eqn.length < 3. - * @throws NullPointerException if the array is null. + * Finds the roots of the quadratic polynomial. This is accomplished by + * finding the (real) values of x that solve the following equation: + * eqn[2]*x*x + eqn[1]*x + eqn[0] = 0. The solutions are written back into + * the array eqn starting from the index 0 in the array. The return value + * tells how many array elements have been changed by this method call. + * + * @param eqn + * an array containing the coefficients of the quadratic + * polynomial to solve. + * @return the number of roots of the quadratic polynomial. + * @throws ArrayIndexOutOfBoundsException + * if {@code eqn.length} < 3. + * @throws NullPointerException + * if the array is null. */ public static int solveQuadratic(double eqn[]) { return solveQuadratic(eqn, eqn); } /** - * Finds the roots of the quadratic polynomial. This is - * accomplished by finding the (real) values of x that solve - * the following equation: eqn[2]*x*x + eqn[1]*x + eqn[0] = 0. - * The solutions are written into the array res starting - * from the index 0 in the array. The return value tells how - * many array elements have been written by this method call. - * - * @param eqn an array containing the coefficients of the - * quadratic polynomial to solve. - * @param res the array that this method writes the results into - * - * @return the number of roots of the quadratic polynomial - * - * @throws ArrayIndexOutOfBoundsException if eqn.length < 3 or - * if res.length is less than the number of roots. - * @throws NullPointerException if either array is null. + * Finds the roots of the quadratic polynomial. This is accomplished by + * finding the (real) values of x that solve the following equation: + * eqn[2]*x*x + eqn[1]*x + eqn[0] = 0. The solutions are written into the + * array res starting from the index 0 in the array. The return value tells + * how many array elements have been written by this method call. + * + * @param eqn + * an array containing the coefficients of the quadratic + * polynomial to solve. + * @param res + * the array that this method writes the results into. + * @return the number of roots of the quadratic polynomial. + * @throws ArrayIndexOutOfBoundsException + * if {@code eqn.length} < 3 or if {@code res.length} is less + * than the number of roots. + * @throws NullPointerException + * if either array is null. */ public static int solveQuadratic(double eqn[], double res[]) { return Crossing.solveQuad(eqn, res); @@ -821,4 +916,3 @@ public abstract class QuadCurve2D implements Shape, Cloneable { } } - diff --git a/awt/java/awt/geom/Rectangle2D.java b/awt/java/awt/geom/Rectangle2D.java index d33dd91d42..8166134afd 100644 --- a/awt/java/awt/geom/Rectangle2D.java +++ b/awt/java/awt/geom/Rectangle2D.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.util.NoSuchElementException; @@ -26,44 +27,64 @@ import org.apache.harmony.awt.internal.nls.Messages; import org.apache.harmony.misc.HashCode; /** - * The Class Rectangle2D represents a rectangle whose coordinates are given - * with the correct precision to be used with the Graphics2D classes. + * The Class Rectangle2D represents a rectangle whose coordinates are given with + * the correct precision to be used with the Graphics2D classes. + * + * @since Android 1.0 */ public abstract class Rectangle2D extends RectangularShape { - /** The Constant OUT_LEFT is a mask that is used to indicate that a - * given point is outside the rectangle and to its left. */ - public static final int OUT_LEFT = 1; - - /** The Constant OUT_TOP is a mask that is used to indicate that a - * given point is outside the rectangle and above it. */ - public static final int OUT_TOP = 2; - - /** The Constant OUT_RIGHT is a mask that is used to indicate that a - * given point is outside the rectangle and to its right. */ - public static final int OUT_RIGHT = 4; - - /** The Constant OUT_BOTTOM is a mask that is used to indicate that a - * given point is outside the rectangle and above it. */ + /** + * The Constant OUT_LEFT is a mask that is used to indicate that a given + * point is outside the rectangle and to its left. + */ + public static final int OUT_LEFT = 1; + + /** + * The Constant OUT_TOP is a mask that is used to indicate that a given + * point is outside the rectangle and above it. + */ + public static final int OUT_TOP = 2; + + /** + * The Constant OUT_RIGHT is a mask that is used to indicate that a given + * point is outside the rectangle and to its right. + */ + public static final int OUT_RIGHT = 4; + + /** + * The Constant OUT_BOTTOM is a mask that is used to indicate that a given + * point is outside the rectangle and above it. + */ public static final int OUT_BOTTOM = 8; /** - * The Class Float is the subclass of Rectangle2D that represents a + * The Class Float is the subclass of Rectangle2D that represents a * rectangle whose data values are given as floats (with float-level * precision). + * + * @since Android 1.0 */ public static class Float extends Rectangle2D { - /** The x coordinate of the rectangle's upper left corner. */ + /** + * The x coordinate of the rectangle's upper left corner. + */ public float x; - - /** The y coordinate of the rectangle's upper left corner. */ + + /** + * The y coordinate of the rectangle's upper left corner. + */ public float y; - - /** The width of the rectangle. */ + + /** + * The width of the rectangle. + */ public float width; - - /** The height of the rectangle. */ + + /** + * The height of the rectangle. + */ public float height; /** @@ -75,10 +96,14 @@ public abstract class Rectangle2D extends RectangularShape { /** * Instantiates a new rectangle with the specified float-precision data. * - * @param x the x coordinate of the rectangle's upper left corner - * @param y the y coordinate of the rectangle's upper left corner - * @param width the width of the rectangle - * @param height the height of the rectangle + * @param x + * the x coordinate of the rectangle's upper left corner. + * @param y + * the y coordinate of the rectangle's upper left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. */ public Float(float x, float y, float width, float height) { setRect(x, y, width, height); @@ -112,10 +137,14 @@ public abstract class Rectangle2D extends RectangularShape { /** * Sets the rectangle's data to the given values. * - * @param x the x coordinate of the rectangle's upper left corner - * @param y the y coordinate of the rectangle's upper left corner - * @param width the width of the rectangle - * @param height the height of the rectangle + * @param x + * the x coordinate of the rectangle's upper left corner. + * @param y + * the y coordinate of the rectangle's upper left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. */ public void setRect(float x, float y, float width, float height) { this.x = x; @@ -146,23 +175,19 @@ public abstract class Rectangle2D extends RectangularShape { if (width <= 0.0f) { code |= OUT_LEFT | OUT_RIGHT; - } else - if (px < x) { - code |= OUT_LEFT; - } else - if (px > x + width) { - code |= OUT_RIGHT; - } + } else if (px < x) { + code |= OUT_LEFT; + } else if (px > x + width) { + code |= OUT_RIGHT; + } if (height <= 0.0f) { code |= OUT_TOP | OUT_BOTTOM; - } else - if (py < y) { - code |= OUT_TOP; - } else - if (py > y + height) { - code |= OUT_BOTTOM; - } + } else if (py < y) { + code |= OUT_TOP; + } else if (py > y + height) { + code |= OUT_BOTTOM; + } return code; } @@ -198,29 +223,41 @@ public abstract class Rectangle2D extends RectangularShape { @Override public String toString() { - // The output format based on 1.5 release behaviour. It could be obtained in the following way + // The output format based on 1.5 release behaviour. It could be + // obtained in the following way // System.out.println(new Rectangle2D.Float().toString()) - return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + return getClass().getName() + + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ } } /** - * The Class Double is the subclass of Rectangle2D that represents a - * rectangle whose data values are given as doubles (with double-precision-level - * precision). + * The Class Double is the subclass of Rectangle2D that represents a + * rectangle whose data values are given as doubles (with + * double-precision-level precision). + * + * @since Android 1.0 */ public static class Double extends Rectangle2D { - /** The x coordinate of the rectangle's upper left corner. */ + /** + * The x coordinate of the rectangle's upper left corner. + */ public double x; - - /** The y coordinate of the rectangle's upper left corner. */ + + /** + * The y coordinate of the rectangle's upper left corner. + */ public double y; - - /** The width of the rectangle. */ + + /** + * The width of the rectangle. + */ public double width; - - /** The height of the rectangle. */ + + /** + * The height of the rectangle. + */ public double height; /** @@ -232,10 +269,14 @@ public abstract class Rectangle2D extends RectangularShape { /** * Instantiates a new rectangle with the given double values. * - * @param x the x coordinate of the rectangle's upper left corner - * @param y the y coordinate of the rectangle's upper left corner - * @param width the width of the rectangle - * @param height the height of the rectangle + * @param x + * the x coordinate of the rectangle's upper left corner. + * @param y + * the y coordinate of the rectangle's upper left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. */ public Double(double x, double y, double width, double height) { setRect(x, y, width, height); @@ -288,23 +329,19 @@ public abstract class Rectangle2D extends RectangularShape { if (width <= 0.0) { code |= OUT_LEFT | OUT_RIGHT; - } else - if (px < x) { - code |= OUT_LEFT; - } else - if (px > x + width) { - code |= OUT_RIGHT; - } + } else if (px < x) { + code |= OUT_LEFT; + } else if (px > x + width) { + code |= OUT_RIGHT; + } if (height <= 0.0) { code |= OUT_TOP | OUT_BOTTOM; - } else - if (py < y) { - code |= OUT_TOP; - } else - if (py > y + height) { - code |= OUT_BOTTOM; - } + } else if (py < y) { + code |= OUT_TOP; + } else if (py > y + height) { + code |= OUT_BOTTOM; + } return code; } @@ -330,45 +367,60 @@ public abstract class Rectangle2D extends RectangularShape { @Override public String toString() { - // The output format based on 1.5 release behaviour. It could be obtained in the following way + // The output format based on 1.5 release behaviour. It could be + // obtained in the following way // System.out.println(new Rectangle2D.Double().toString()) - return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + return getClass().getName() + + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ } } /** - * The Class Iterator provides - * access to the coordinates of the Rectangle2D's boundary modified - * by an AffineTransform. + * The Class Iterator provides access to the coordinates of the + * Rectangle2D's boundary modified by an AffineTransform. */ class Iterator implements PathIterator { - /** The x coordinate of the rectangle's upper left corner. */ + /** + * The x coordinate of the rectangle's upper left corner. + */ double x; - - /** The y coordinate of the rectangle's upper left corner. */ + + /** + * The y coordinate of the rectangle's upper left corner. + */ double y; - - - /** The width of the rectangle. */ + + /** + * The width of the rectangle. + */ double width; - - /** The height of the rectangle. */ + + /** + * The height of the rectangle. + */ double height; - - /** The AffineTransform that is used to modify the coordinates - * that are returned by the path iterator. */ + + /** + * The AffineTransform that is used to modify the coordinates that are + * returned by the path iterator. + */ AffineTransform t; - - /** The current segment index. */ + + /** + * The current segment index. + */ int index; - + /** - * Constructs a new Rectangle2D.Iterator for given rectangle and transformation. + * Constructs a new Rectangle2D.Iterator for given rectangle and + * transformation. * - * @param r - the source Rectangle2D object - * @param at - the AffineTransform object to apply to the coordinates - * before returning them + * @param r + * the source Rectangle2D object. + * @param at + * the AffineTransform object to apply to the coordinates + * before returning them. */ Iterator(Rectangle2D r, AffineTransform at) { this.x = r.getX(); @@ -407,23 +459,23 @@ public abstract class Rectangle2D extends RectangularShape { coords[1] = y; } else { type = SEG_LINETO; - switch(index) { - case 1: - coords[0] = x + width; - coords[1] = y; - break; - case 2: - coords[0] = x + width; - coords[1] = y + height; - break; - case 3: - coords[0] = x; - coords[1] = y + height; - break; - case 4: - coords[0] = x; - coords[1] = y; - break; + switch (index) { + case 1: + coords[0] = x + width; + coords[1] = y; + break; + case 2: + coords[0] = x + width; + coords[1] = y + height; + break; + case 3: + coords[0] = x; + coords[1] = y + height; + break; + case 4: + coords[0] = x; + coords[1] = y; + break; } } if (t != null) { @@ -446,23 +498,23 @@ public abstract class Rectangle2D extends RectangularShape { type = SEG_MOVETO; } else { type = SEG_LINETO; - switch(index) { - case 1: - coords[0] = (float)(x + width); - coords[1] = (float)y; - break; - case 2: - coords[0] = (float)(x + width); - coords[1] = (float)(y + height); - break; - case 3: - coords[0] = (float)x; - coords[1] = (float)(y + height); - break; - case 4: - coords[0] = (float)x; - coords[1] = (float)y; - break; + switch (index) { + case 1: + coords[0] = (float)(x + width); + coords[1] = (float)y; + break; + case 2: + coords[0] = (float)(x + width); + coords[1] = (float)(y + height); + break; + case 3: + coords[0] = (float)x; + coords[1] = (float)(y + height); + break; + case 4: + coords[0] = (float)x; + coords[1] = (float)y; + break; } } if (t != null) { @@ -474,7 +526,7 @@ public abstract class Rectangle2D extends RectangularShape { } /** - * Instantiates a new rectangle2 d. + * Instantiates a new Rectangle2D. */ protected Rectangle2D() { } @@ -482,58 +534,64 @@ public abstract class Rectangle2D extends RectangularShape { /** * Sets the rectangle's location and dimension. * - * @param x the x coordinate of the rectangle's upper left corner - * @param y the y coordinate of the rectangle's upper left corner - * @param width the width of the rectangle - * @param height the height of the rectangle + * @param x + * the x coordinate of the rectangle's upper left corner. + * @param y + * the y coordinate of the rectangle's upper left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. */ public abstract void setRect(double x, double y, double width, double height); /** - * Gets the location of the point with respect to the rectangle and - * packs the information into a single int using the bitmasks - * {@link Rectangle2D#OUT_LEFT}, {@link Rectangle2D#OUT_RIGHT}, - * {@link Rectangle2D#OUT_TOP}, and {@link Rectangle2D#OUT_BOTTOM}. - * If the rectangle has zero or negative width, then every point - * is regarded as being both to the left and to the right of the - * rectangle. Similarly, if the height is zero or negative then - * all points are considered to be both both above and below it. - * - * @param x the x coordinate of the point to check - * @param y the y coordinate of the point to check + * Gets the location of the point with respect to the rectangle and packs + * the information into a single integer using the bitmasks + * {@link Rectangle2D#OUT_LEFT}, {@link Rectangle2D#OUT_RIGHT}, + * {@link Rectangle2D#OUT_TOP}, and {@link Rectangle2D#OUT_BOTTOM}. If the + * rectangle has zero or negative width, then every point is regarded as + * being both to the left and to the right of the rectangle. Similarly, if + * the height is zero or negative then all points are considered to be both + * both above and below it. * + * @param x + * the x coordinate of the point to check. + * @param y + * the y coordinate of the point to check. * @return the point's location with respect to the rectangle. */ public abstract int outcode(double x, double y); /** - * Creates an new rectangle that is the intersection of this rectangle - * with the given rectangle. The resulting rectangle may be empty. - * The data of this rectangle is left unchanged. - * - * @param r the rectangle to intersect with this rectangle. + * Creates an new rectangle that is the intersection of this rectangle with + * the given rectangle. The resulting rectangle may be empty. The data of + * this rectangle is left unchanged. * + * @param r + * the rectangle to intersect with this rectangle. * @return the new rectangle given by intersection. */ public abstract Rectangle2D createIntersection(Rectangle2D r); /** - * Creates an new rectangle that is the union of this rectangle - * with the given rectangle. The new rectangle is the smallest - * rectangle which contains both this rectangle and the rectangle - * specified as a parameter. The data of this rectangle is left unchanged. - * - * @param r the rectangle to combine with this rectangle + * Creates an new rectangle that is the union of this rectangle with the + * given rectangle. The new rectangle is the smallest rectangle which + * contains both this rectangle and the rectangle specified as a parameter. + * The data of this rectangle is left unchanged. * - * @return the new rectangle given by union + * @param r + * the rectangle to combine with this rectangle. + * @return the new rectangle given by union. */ public abstract Rectangle2D createUnion(Rectangle2D r); /** - * Sets the data of this rectangle to match the data of the given - * rectangle. + * Sets the data of this rectangle to match the data of the given rectangle. * - * @param r the rectangle whose data is to be copied into this rectangle's fields. + * @param r + * the rectangle whose data is to be copied into this rectangle's + * fields. */ public void setRect(Rectangle2D r) { setRect(r.getX(), r.getY(), r.getWidth(), r.getHeight()); @@ -549,61 +607,63 @@ public abstract class Rectangle2D extends RectangularShape { } /** - * Determines whether any part of the line segment between (and including) - * the two given points touches any - * part of the rectangle, including its boundary. + * Determines whether any part of the line segment between (and including) + * the two given points touches any part of the rectangle, including its + * boundary. * - * @param x1 the x coordinate of one of the points that determines the - * line segment to test - * @param y1 the y coordinate of one of the points that determines the - * line segment to test - * @param x2 the x coordinate of one of the points that determines the - * line segment to test - * @param y2 the y coordinate of one of the points that determines the - * line segment to test - * - * @return true, if at least one point of the line segment between the - * two points matches any point of the interior of the rectangle or the - * rectangle's boundary. + * @param x1 + * the x coordinate of one of the points that determines the line + * segment to test. + * @param y1 + * the y coordinate of one of the points that determines the line + * segment to test. + * @param x2 + * the x coordinate of one of the points that determines the line + * segment to test. + * @param y2 + * the y coordinate of one of the points that determines the line + * segment to test. + * @return true, if at least one point of the line segment between the two + * points matches any point of the interior of the rectangle or the + * rectangle's boundary. */ public boolean intersectsLine(double x1, double y1, double x2, double y2) { double rx1 = getX(); double ry1 = getY(); double rx2 = rx1 + getWidth(); double ry2 = ry1 + getHeight(); - return - (rx1 <= x1 && x1 <= rx2 && ry1 <= y1 && y1 <= ry2) || - (rx1 <= x2 && x2 <= rx2 && ry1 <= y2 && y2 <= ry2) || - Line2D.linesIntersect(rx1, ry1, rx2, ry2, x1, y1, x2, y2) || - Line2D.linesIntersect(rx2, ry1, rx1, ry2, x1, y1, x2, y2); + return (rx1 <= x1 && x1 <= rx2 && ry1 <= y1 && y1 <= ry2) + || (rx1 <= x2 && x2 <= rx2 && ry1 <= y2 && y2 <= ry2) + || Line2D.linesIntersect(rx1, ry1, rx2, ry2, x1, y1, x2, y2) + || Line2D.linesIntersect(rx2, ry1, rx1, ry2, x1, y1, x2, y2); } /** - * Determines whether any part of the specified line segment touches any + * Determines whether any part of the specified line segment touches any * part of the rectangle, including its boundary. * - * @param l the line segment to test - * - * @return true, if at least one point of the given line segment - * matches any point of the interior of the rectangle or the - * rectangle's boundary. + * @param l + * the line segment to test. + * @return true, if at least one point of the given line segment matches any + * point of the interior of the rectangle or the rectangle's + * boundary. */ public boolean intersectsLine(Line2D l) { return intersectsLine(l.getX1(), l.getY1(), l.getX2(), l.getY2()); } /** - * Gets the location of the point with respect to the rectangle and - * packs the information into a single int using the bitmasks - * {@link Rectangle2D#OUT_LEFT}, {@link Rectangle2D#OUT_RIGHT}, - * {@link Rectangle2D#OUT_TOP}, and {@link Rectangle2D#OUT_BOTTOM}. - * If the rectangle has zero or negative width, then every point - * is regarded as being both to the left and to the right of the - * rectangle. Similarly, if the height is zero or negative then - * all points are considered to be both both above and below it. - * - * @param p the point to check + * Gets the location of the point with respect to the rectangle and packs + * the information into a single integer using the bitmasks + * {@link Rectangle2D#OUT_LEFT}, {@link Rectangle2D#OUT_RIGHT}, + * {@link Rectangle2D#OUT_TOP}, and {@link Rectangle2D#OUT_BOTTOM}. If the + * rectangle has zero or negative width, then every point is regarded as + * being both to the left and to the right of the rectangle. Similarly, if + * the height is zero or negative then all points are considered to be both + * both above and below it. * + * @param p + * the point to check. * @return the point's location with respect to the rectangle. */ public int outcode(Point2D p) { @@ -620,9 +680,7 @@ public abstract class Rectangle2D extends RectangularShape { double x2 = x1 + getWidth(); double y2 = y1 + getHeight(); - return - x1 <= x && x < x2 && - y1 <= y && y < y2; + return x1 <= x && x < x2 && y1 <= y && y < y2; } public boolean intersects(double x, double y, double width, double height) { @@ -635,9 +693,7 @@ public abstract class Rectangle2D extends RectangularShape { double x2 = x1 + getWidth(); double y2 = y1 + getHeight(); - return - x + width > x1 && x < x2 && - y + height > y1 && y < y2; + return x + width > x1 && x < x2 && y + height > y1 && y < y2; } public boolean contains(double x, double y, double width, double height) { @@ -650,19 +706,21 @@ public abstract class Rectangle2D extends RectangularShape { double x2 = x1 + getWidth(); double y2 = y1 + getHeight(); - return - x1 <= x && x + width <= x2 && - y1 <= y && y + height <= y2; + return x1 <= x && x + width <= x2 && y1 <= y && y + height <= y2; } /** - * Changes the data values of the destination rectangle to match - * the intersection of the two source rectangles, leaving the - * two source rectangles unchanged. The resulting rectangle may be empty. + * Changes the data values of the destination rectangle to match the + * intersection of the two source rectangles, leaving the two source + * rectangles unchanged. The resulting rectangle may be empty. * - * @param src1 one of the two source rectangles giving the data to intersect - * @param src2 one of the two source rectangles giving the data to intersect - * @param dst the destination object where the data of the intersection is written + * @param src1 + * one of the two source rectangles giving the data to intersect. + * @param src2 + * one of the two source rectangles giving the data to intersect. + * @param dst + * the destination object where the data of the intersection is + * written. */ public static void intersect(Rectangle2D src1, Rectangle2D src2, Rectangle2D dst) { double x1 = Math.max(src1.getMinX(), src2.getMinX()); @@ -673,14 +731,17 @@ public abstract class Rectangle2D extends RectangularShape { } /** - * Changes the data values of the destination rectangle to match - * the union of the two source rectangles, leaving the - * two source rectangles unchanged. The union is the smallest rectangle - * tha completely covers the two source rectangles. + * Changes the data values of the destination rectangle to match the union + * of the two source rectangles, leaving the two source rectangles + * unchanged. The union is the smallest rectangle that completely covers the + * two source rectangles. * - * @param src1 one of the two source rectangles giving the data - * @param src2 one of the two source rectangles giving the data - * @param dst the destination object where the data of the union is written + * @param src1 + * one of the two source rectangles giving the data. + * @param src2 + * one of the two source rectangles giving the data. + * @param dst + * the destination object where the data of the union is written. */ public static void union(Rectangle2D src1, Rectangle2D src2, Rectangle2D dst) { double x1 = Math.min(src1.getMinX(), src2.getMinX()); @@ -693,8 +754,12 @@ public abstract class Rectangle2D extends RectangularShape { /** * Enlarges the rectangle so that it includes the given point. * - * @param x the x coordinate of the new point to be covered by the rectangle - * @param y the y coordinate of the new point to be covered by the rectangle + * @param x + * the x coordinate of the new point to be covered by the + * rectangle. + * @param y + * the y coordinate of the new point to be covered by the + * rectangle. */ public void add(double x, double y) { double x1 = Math.min(getMinX(), x); @@ -707,7 +772,8 @@ public abstract class Rectangle2D extends RectangularShape { /** * Enlarges the rectangle so that it includes the given point. * - * @param p the new point to be covered by the rectangle + * @param p + * the new point to be covered by the rectangle. */ public void add(Point2D p) { add(p.getX(), p.getY()); @@ -716,7 +782,8 @@ public abstract class Rectangle2D extends RectangularShape { /** * Enlarges the rectangle so that it covers the given rectangle. * - * @param r the new rectangle to be covered by this rectangle + * @param r + * the new rectangle to be covered by this rectangle. */ public void add(Rectangle2D r) { union(this, r, this); @@ -748,14 +815,10 @@ public abstract class Rectangle2D extends RectangularShape { } if (obj instanceof Rectangle2D) { Rectangle2D r = (Rectangle2D)obj; - return - getX() == r.getX() && - getY() == r.getY() && - getWidth() == r.getWidth() && - getHeight() == r.getHeight(); + return getX() == r.getX() && getY() == r.getY() && getWidth() == r.getWidth() + && getHeight() == r.getHeight(); } return false; } } - diff --git a/awt/java/awt/geom/RectangularShape.java b/awt/java/awt/geom/RectangularShape.java index 0a77dfdbcd..0b0d05cad6 100644 --- a/awt/java/awt/geom/RectangularShape.java +++ b/awt/java/awt/geom/RectangularShape.java @@ -18,17 +18,19 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.awt.Rectangle; import java.awt.Shape; /** - * The Class RectangularShape represents a Shape whose data is - * (at least partially) described by a rectangular frame. This includes - * shapes which are obviously rectangular (such as Rectangle2D) as well as - * shapes like Arc2D which are largely determined by the rectangle they - * fit inside. + * The Class RectangularShape represents a Shape whose data is (at least + * partially) described by a rectangular frame. This includes shapes which are + * obviously rectangular (such as Rectangle2D) as well as shapes like Arc2D + * which are largely determined by the rectangle they fit inside. + * + * @since Android 1.0 */ public abstract class RectangularShape implements Shape, Cloneable { @@ -67,25 +69,30 @@ public abstract class RectangularShape implements Shape, Cloneable { public abstract double getHeight(); /** - * Checks if this is an empty rectangle: one with zero as its width or height. + * Checks if this is an empty rectangle: one with zero as its width or + * height. * * @return true, if the width or height is empty. */ public abstract boolean isEmpty(); /** - * Sets the data for the bounding rectangle in terms of double values. + * Sets the data for the bounding rectangle in terms of double values. * - * @param x the x coordinate of the upper left corner of the rectangle. - * @param y the y coordinate of the upper left corner of the rectangle. - * @param w the width of the rectangle. - * @param h the height of the rectangle. + * @param x + * the x coordinate of the upper left corner of the rectangle. + * @param y + * the y coordinate of the upper left corner of the rectangle. + * @param w + * the width of the rectangle. + * @param h + * the height of the rectangle. */ public abstract void setFrame(double x, double y, double w, double h); /** - * Gets the minimum x value of the bounding rectangle (the x - * coordinate of the upper left corner of the rectangle). + * Gets the minimum x value of the bounding rectangle (the x coordinate of + * the upper left corner of the rectangle). * * @return the minimum x value of the bounding rectangle. */ @@ -94,8 +101,8 @@ public abstract class RectangularShape implements Shape, Cloneable { } /** - * Gets the minimum y value of the bounding rectangle (the y - * coordinate of the upper left corner of the rectangle). + * Gets the minimum y value of the bounding rectangle (the y coordinate of + * the upper left corner of the rectangle). * * @return the minimum y value of the bounding rectangle. */ @@ -104,9 +111,8 @@ public abstract class RectangularShape implements Shape, Cloneable { } /** - * Gets the maximum x value of the bounding rectangle (the x - * coordinate of the upper left corner of the rectangle plus the - * rectangle's width). + * Gets the maximum x value of the bounding rectangle (the x coordinate of + * the upper left corner of the rectangle plus the rectangle's width). * * @return the maximum x value of the bounding rectangle. */ @@ -115,9 +121,8 @@ public abstract class RectangularShape implements Shape, Cloneable { } /** - * Gets the maximum y value of the bounding rectangle (the y - * coordinate of the upper left corner of the rectangle plus the - * rectangle's height). + * Gets the maximum y value of the bounding rectangle (the y coordinate of + * the upper left corner of the rectangle plus the rectangle's height). * * @return the maximum y value of the bounding rectangle. */ @@ -144,8 +149,8 @@ public abstract class RectangularShape implements Shape, Cloneable { } /** - * Places the rectangle's size and location data in a new Rectangle2D - * object and returns it. + * Places the rectangle's size and location data in a new Rectangle2D object + * and returns it. * * @return the bounding rectangle as a new Rectangle2D object. */ @@ -154,21 +159,24 @@ public abstract class RectangularShape implements Shape, Cloneable { } /** - * Sets the bounding rectangle in terms of a Point2D which gives its - * upper left corner and a Dimension2D object giving its width and height. + * Sets the bounding rectangle in terms of a Point2D which gives its upper + * left corner and a Dimension2D object giving its width and height. * - * @param loc the new upper left corner coordinate. - * @param size the new size dimensions. + * @param loc + * the new upper left corner coordinate. + * @param size + * the new size dimensions. */ public void setFrame(Point2D loc, Dimension2D size) { setFrame(loc.getX(), loc.getY(), size.getWidth(), size.getHeight()); } /** - * Sets the bounding rectangle to match the data contained in the - * specified Rectangle2D. + * Sets the bounding rectangle to match the data contained in the specified + * Rectangle2D. * - * @param r the rectangle that gives the new frame data. + * @param r + * the rectangle that gives the new frame data. */ public void setFrame(Rectangle2D r) { setFrame(r.getX(), r.getY(), r.getWidth(), r.getHeight()); @@ -176,12 +184,17 @@ public abstract class RectangularShape implements Shape, Cloneable { /** * Sets the framing rectangle given two opposite corners. Any two corners - * may be used in any order as long as they are diagonally opposite one another. + * may be used in any order as long as they are diagonally opposite one + * another. * - * @param x1 the x coordinate of one of the corner points. - * @param y1 the y coordinate of one of the corner points. - * @param x2 the x coordinate of the other corner point. - * @param y2 the y coordinate of the other corner point. + * @param x1 + * the x coordinate of one of the corner points. + * @param y1 + * the y coordinate of one of the corner points. + * @param x2 + * the x coordinate of the other corner point. + * @param y2 + * the y coordinate of the other corner point. */ public void setFrameFromDiagonal(double x1, double y1, double x2, double y2) { double rx, ry, rw, rh; @@ -204,10 +217,13 @@ public abstract class RectangularShape implements Shape, Cloneable { /** * Sets the framing rectangle given two opposite corners. Any two corners - * may be used in any order as long as they are diagonally opposite one another. + * may be used in any order as long as they are diagonally opposite one + * another. * - * @param p1 one of the corner points. - * @param p2 the other corner point. + * @param p1 + * one of the corner points. + * @param p2 + * the other corner point. */ public void setFrameFromDiagonal(Point2D p1, Point2D p2) { setFrameFromDiagonal(p1.getX(), p1.getY(), p2.getX(), p2.getY()); @@ -217,10 +233,14 @@ public abstract class RectangularShape implements Shape, Cloneable { * Sets the framing rectangle given the center point and one corner. Any * corner may be used. * - * @param centerX the x coordinate of the center point. - * @param centerY the y coordinate of the center point. - * @param cornerX the x coordinate of one of the corner points. - * @param cornerY the y coordinate of one of the corner points. + * @param centerX + * the x coordinate of the center point. + * @param centerY + * the y coordinate of the center point. + * @param cornerX + * the x coordinate of one of the corner points. + * @param cornerY + * the y coordinate of one of the corner points. */ public void setFrameFromCenter(double centerX, double centerY, double cornerX, double cornerY) { double width = Math.abs(cornerX - centerX); @@ -232,8 +252,10 @@ public abstract class RectangularShape implements Shape, Cloneable { * Sets the framing rectangle given the center point and one corner. Any * corner may be used. * - * @param center the center point. - * @param corner a corner point. + * @param center + * the center point. + * @param corner + * a corner point. */ public void setFrameFromCenter(Point2D center, Point2D corner) { setFrameFromCenter(center.getX(), center.getY(), corner.getX(), corner.getY()); @@ -273,4 +295,3 @@ public abstract class RectangularShape implements Shape, Cloneable { } } - diff --git a/awt/java/awt/geom/RoundRectangle2D.java b/awt/java/awt/geom/RoundRectangle2D.java index 680a146bfd..8fbddd64d9 100644 --- a/awt/java/awt/geom/RoundRectangle2D.java +++ b/awt/java/awt/geom/RoundRectangle2D.java @@ -18,6 +18,7 @@ * @author Denis M. Kishenko * @version $Revision$ */ + package java.awt.geom; import java.util.NoSuchElementException; @@ -25,53 +26,74 @@ import java.util.NoSuchElementException; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class RoundRectangle2D describes a rectangle with rounded - * corners with high-precision data that is appropriate for geometric - * operations. + * The Class RoundRectangle2D describes a rectangle with rounded corners with + * high-precision data that is appropriate for geometric operations. + * + * @since Android 1.0 */ public abstract class RoundRectangle2D extends RectangularShape { /** - * The Class Float is the subclass of RoundRectangle2D that has all - * of its data values stored with float-level precision. + * The Class Float is the subclass of RoundRectangle2D that has all of its + * data values stored with float-level precision. + * + * @since Android 1.0 */ public static class Float extends RoundRectangle2D { - /** The x coordinate of the rectangle's upper left corner. */ + /** + * The x coordinate of the rectangle's upper left corner. + */ public float x; - - /** The y coordinate of the rectangle's upper left corner. */ + + /** + * The y coordinate of the rectangle's upper left corner. + */ public float y; - - /** The width of the rectangle. */ + + /** + * The width of the rectangle. + */ public float width; - - /** The height of the rectangle. */ + + /** + * The height of the rectangle. + */ public float height; - - /** The arcwidth of the rounded corners. */ + + /** + * The arc width of the rounded corners. + */ public float arcwidth; - - /** The archeight of the rounded corners. */ + + /** + * The arc height of the rounded corners. + */ public float archeight; /** - * Instantiates a new float-valued RoundRectangle2D with - * its data-values set to zero. + * Instantiates a new float-valued RoundRectangle2D with its data-values + * set to zero. */ public Float() { } /** - * Instantiates a new float-valued RoundRectangle2D with - * the specified data values + * Instantiates a new float-valued RoundRectangle2D with the specified + * data values. * - * @param x the x coordinate of the rectangle's upper left corner - * @param y the y coordinate of the rectangle's upper left corner - * @param width the width of the rectangle - * @param height the height of the rectangle - * @param arcwidth the arcwidth of the rounded corners - * @param archeight the archeight of the rounded corners + * @param x + * the x coordinate of the rectangle's upper left corner. + * @param y + * the y coordinate of the rectangle's upper left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. + * @param arcwidth + * the arc width of the rounded corners. + * @param archeight + * the arc height of the rounded corners. */ public Float(float x, float y, float width, float height, float arcwidth, float archeight) { setRoundRect(x, y, width, height, arcwidth, archeight); @@ -113,16 +135,23 @@ public abstract class RoundRectangle2D extends RectangularShape { } /** - * Sets the data of the round rect. + * Sets the data of the round rectangle. * - * @param x the x coordinate of the rectangle's upper left corner - * @param y the y coordinate of the rectangle's upper left corner - * @param width the width of the rectangle - * @param height the height of the rectangle - * @param arcwidth the arcwidth of the rounded corners - * @param archeight the archeight of the rounded corners + * @param x + * the x coordinate of the rectangle's upper left corner. + * @param y + * the y coordinate of the rectangle's upper left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. + * @param arcwidth + * the arc width of the rounded corners. + * @param archeight + * the arc height of the rounded corners. */ - public void setRoundRect(float x, float y, float width, float height, float arcwidth, float archeight) { + public void setRoundRect(float x, float y, float width, float height, float arcwidth, + float archeight) { this.x = x; this.y = y; this.width = width; @@ -132,7 +161,8 @@ public abstract class RoundRectangle2D extends RectangularShape { } @Override - public void setRoundRect(double x, double y, double width, double height, double arcwidth, double archeight) { + public void setRoundRect(double x, double y, double width, double height, double arcwidth, + double archeight) { this.x = (float)x; this.y = (float)y; this.width = (float)width; @@ -157,48 +187,69 @@ public abstract class RoundRectangle2D extends RectangularShape { } /** - * The Class Double is the subclass of RoundRectangle2D that has all - * of its data values stored with double-level precision. + * The Class Double is the subclass of RoundRectangle2D that has all of its + * data values stored with double-level precision. + * + * @since Android 1.0 */ public static class Double extends RoundRectangle2D { - /** The x coordinate of the rectangle's upper left corner. */ + /** + * The x coordinate of the rectangle's upper left corner. + */ public double x; - - /** The y coordinate of the rectangle's upper left corner. */ + + /** + * The y coordinate of the rectangle's upper left corner. + */ public double y; - - /** The width of the rectangle. */ + + /** + * The width of the rectangle. + */ public double width; - - /** The height of the rectangle. */ + + /** + * The height of the rectangle. + */ public double height; - - /** The arcwidth of the rounded corners. */ + + /** + * The arc width of the rounded corners. + */ public double arcwidth; - - /** The archeight of the rounded corners. */ + + /** + * The arc height of the rounded corners. + */ public double archeight; /** - * Instantiates a new double-valued RoundRectangle2D with - * its data-values set to zero. + * Instantiates a new double-valued RoundRectangle2D with its + * data-values set to zero. */ public Double() { } /** - * Instantiates a new double-valued RoundRectangle2D with - * the specified data values. + * Instantiates a new double-valued RoundRectangle2D with the specified + * data values. * - * @param x the x coordinate of the rectangle's upper left corner - * @param y the y coordinate of the rectangle's upper left corner - * @param width the width of the rectangle - * @param height the height of the rectangle - * @param arcwidth the arcwidth of the rounded corners - * @param archeight the archeight of the rounded corners + * @param x + * the x coordinate of the rectangle's upper left corner. + * @param y + * the y coordinate of the rectangle's upper left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. + * @param arcwidth + * the arc width of the rounded corners. + * @param archeight + * the arc height of the rounded corners. */ - public Double(double x, double y, double width, double height, double arcwidth, double archeight) { + public Double(double x, double y, double width, double height, double arcwidth, + double archeight) { setRoundRect(x, y, width, height, arcwidth, archeight); } @@ -238,7 +289,8 @@ public abstract class RoundRectangle2D extends RectangularShape { } @Override - public void setRoundRect(double x, double y, double width, double height, double arcwidth, double archeight) { + public void setRoundRect(double x, double y, double width, double height, double arcwidth, + double archeight) { this.x = x; this.y = y; this.width = width; @@ -263,7 +315,7 @@ public abstract class RoundRectangle2D extends RectangularShape { } /* - * RoundRectangle2D path iterator + * RoundRectangle2D path iterator */ /** * The subclass of PathIterator to traverse a RoundRectangle2D. @@ -274,70 +326,101 @@ public abstract class RoundRectangle2D extends RectangularShape { * Path for round corners generated the same way as Ellipse2D */ - /** The coefficient to calculate control points of Bezier curves. */ + /** + * The coefficient to calculate control points of Bezier curves. + */ double u = 0.5 - 2.0 / 3.0 * (Math.sqrt(2.0) - 1.0); - /** The points coordinates calculation table. */ + /** + * The points coordinates calculation table. + */ double points[][] = { - { 0.0, 0.5, 0.0, 0.0 }, // MOVETO - { 1.0, -0.5, 0.0, 0.0 }, // LINETO - { 1.0, -u, 0.0, 0.0, // CUBICTO - 1.0, 0.0, 0.0, u, - 1.0, 0.0, 0.0, 0.5 }, - { 1.0, 0.0, 1.0, -0.5 }, // LINETO - { 1.0, 0.0, 1.0, -u, // CUBICTO - 1.0, -u, 1.0, 0.0, - 1.0, -0.5, 1.0, 0.0 }, - { 0.0, 0.5, 1.0, 0.0 }, // LINETO - { 0.0, u, 1.0, 0.0, // CUBICTO - 0.0, 0.0, 1.0, -u, - 0.0, 0.0, 1.0, -0.5 }, - { 0.0, 0.0, 0.0, 0.5 }, // LINETO - { 0.0, 0.0, 0.0, u, // CUBICTO - 0.0, u, 0.0, 0.0, - 0.0, 0.5, 0.0, 0.0 } }; - - /** The segment types correspond to points array. */ + { + 0.0, 0.5, 0.0, 0.0 + }, // MOVETO + { + 1.0, -0.5, 0.0, 0.0 + }, // LINETO + { + 1.0, -u, 0.0, 0.0, // CUBICTO + 1.0, 0.0, 0.0, u, 1.0, 0.0, 0.0, 0.5 + }, { + 1.0, 0.0, 1.0, -0.5 + }, // LINETO + { + 1.0, 0.0, 1.0, -u, // CUBICTO + 1.0, -u, 1.0, 0.0, 1.0, -0.5, 1.0, 0.0 + }, { + 0.0, 0.5, 1.0, 0.0 + }, // LINETO + { + 0.0, u, 1.0, 0.0, // CUBICTO + 0.0, 0.0, 1.0, -u, 0.0, 0.0, 1.0, -0.5 + }, { + 0.0, 0.0, 0.0, 0.5 + }, // LINETO + { + 0.0, 0.0, 0.0, u, // CUBICTO + 0.0, u, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0 + } + }; + + /** + * The segment types correspond to points array. + */ int types[] = { - SEG_MOVETO, - SEG_LINETO, - SEG_CUBICTO, - SEG_LINETO, - SEG_CUBICTO, - SEG_LINETO, - SEG_CUBICTO, - SEG_LINETO, - SEG_CUBICTO}; - - /** The x coordinate of left-upper corner of the round rectangle bounds. */ + SEG_MOVETO, SEG_LINETO, SEG_CUBICTO, SEG_LINETO, SEG_CUBICTO, SEG_LINETO, + SEG_CUBICTO, SEG_LINETO, SEG_CUBICTO + }; + + /** + * The x coordinate of left-upper corner of the round rectangle bounds. + */ double x; - - /** The y coordinate of left-upper corner of the round rectangle bounds. */ + + /** + * The y coordinate of left-upper corner of the round rectangle bounds. + */ double y; - - /** The width of the round rectangle bounds. */ + + /** + * The width of the round rectangle bounds. + */ double width; - - /** The height of the round rectangle bounds. */ + + /** + * The height of the round rectangle bounds. + */ double height; - - /** The width of arc corners of the round rectangle. */ + + /** + * The width of arc corners of the round rectangle. + */ double aw; - - /** The height of arc corners of the round rectangle. */ + + /** + * The height of arc corners of the round rectangle. + */ double ah; - /** The path iterator transformation. */ + /** + * The path iterator transformation. + */ AffineTransform t; - /** The current segmenet index. */ + /** + * The current segment index. + */ int index; /** - * Constructs a new RoundRectangle2D.Iterator for given round rectangle and transformation. + * Constructs a new RoundRectangle2D.Iterator for given round rectangle + * and transformation. * - * @param rr - the source RoundRectangle2D object - * @param at - the AffineTransform object to apply rectangle path + * @param rr + * - the source RoundRectangle2D object + * @param at + * - the AffineTransform object to apply rectangle path */ Iterator(RoundRectangle2D rr, AffineTransform at) { this.x = rr.getX(); @@ -415,41 +498,48 @@ public abstract class RoundRectangle2D extends RectangularShape { /** * Gets the arc width. * - * @return the arc width + * @return the arc width. */ public abstract double getArcWidth(); /** * Gets the arc height. * - * @return the arc height + * @return the arc height. */ public abstract double getArcHeight(); /** * Sets the data of the RoundRectangle2D. * - * @param x the x coordinate of the rectangle's upper left corner - * @param y the y coordinate of the rectangle's upper left corner - * @param width the width of the rectangle - * @param height the height of the rectangle - * @param arcWidth the arcwidth of the rounded corners - * @param arcHeight the archeight of the rounded corners + * @param x + * the x coordinate of the rectangle's upper left corner. + * @param y + * the y coordinate of the rectangle's upper left corner. + * @param width + * the width of the rectangle. + * @param height + * the height of the rectangle. + * @param arcWidth + * the arc width of the rounded corners. + * @param arcHeight + * the arc height of the rounded corners. */ public abstract void setRoundRect(double x, double y, double width, double height, double arcWidth, double arcHeight); /** - * Sets the data of the RoundRectangle2D by copying the values - * from an existing RoundRectangle2D. + * Sets the data of the RoundRectangle2D by copying the values from an + * existing RoundRectangle2D. * - * @param rr the round rectangle to copy the data from - * - * @throws NullPointerException if rr is null + * @param rr + * the round rectangle to copy the data from. + * @throws NullPointerException + * if rr is null. */ public void setRoundRect(RoundRectangle2D rr) { - setRoundRect(rr.getX(), rr.getY(), rr.getWidth(), rr.getHeight(), rr - .getArcWidth(), rr.getArcHeight()); + setRoundRect(rr.getX(), rr.getY(), rr.getWidth(), rr.getHeight(), rr.getArcWidth(), rr + .getArcHeight()); } @Override @@ -478,21 +568,19 @@ public abstract class RoundRectangle2D extends RectangularShape { if (px < rx1 + aw) { cx = rx1 + aw; - } else - if (px > rx2 - aw) { - cx = rx2 - aw; - } else { - return true; - } + } else if (px > rx2 - aw) { + cx = rx2 - aw; + } else { + return true; + } if (py < ry1 + ah) { cy = ry1 + ah; - } else - if (py > ry2 - ah) { - cy = ry2 - ah; - } else { - return true; - } + } else if (py > ry2 - ah) { + cy = ry2 - ah; + } else { + return true; + } px = (px - cx) / aw; py = (py - cy) / ah; @@ -537,11 +625,7 @@ public abstract class RoundRectangle2D extends RectangularShape { double rx2 = rx + rw; double ry2 = ry + rh; - return - contains(rx1, ry1) && - contains(rx2, ry1) && - contains(rx2, ry2) && - contains(rx1, ry2); + return contains(rx1, ry1) && contains(rx2, ry1) && contains(rx2, ry2) && contains(rx1, ry2); } public PathIterator getPathIterator(AffineTransform at) { @@ -549,4 +633,3 @@ public abstract class RoundRectangle2D extends RectangularShape { } } - diff --git a/awt/java/awt/geom/package.html b/awt/java/awt/geom/package.html new file mode 100644 index 0000000000..e3a236ee34 --- /dev/null +++ b/awt/java/awt/geom/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes and interfaces related to Java2D shapes and geometry. +

    + @since Android 1.0 + + diff --git a/awt/java/awt/im/InputContext.java b/awt/java/awt/im/InputContext.java index 3468474686..cce5148422 100644 --- a/awt/java/awt/im/InputContext.java +++ b/awt/java/awt/im/InputContext.java @@ -26,6 +26,12 @@ import java.util.Locale; import org.apache.harmony.awt.im.InputMethodContext; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class InputContext { protected InputContext() { } diff --git a/awt/java/awt/im/InputMethodHighlight.java b/awt/java/awt/im/InputMethodHighlight.java index 53bb20bb64..865d47c807 100644 --- a/awt/java/awt/im/InputMethodHighlight.java +++ b/awt/java/awt/im/InputMethodHighlight.java @@ -25,6 +25,12 @@ import java.awt.font.TextAttribute; import org.apache.harmony.awt.internal.nls.Messages; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public class InputMethodHighlight { public static final int RAW_TEXT = 0; diff --git a/awt/java/awt/im/InputMethodRequests.java b/awt/java/awt/im/InputMethodRequests.java index bdd25e610a..b12d397b52 100644 --- a/awt/java/awt/im/InputMethodRequests.java +++ b/awt/java/awt/im/InputMethodRequests.java @@ -24,6 +24,12 @@ import java.awt.Rectangle; import java.awt.font.TextHitInfo; import java.text.AttributedCharacterIterator; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface InputMethodRequests { public AttributedCharacterIterator cancelLatestCommittedText(AttributedCharacterIterator.Attribute[] attributes); diff --git a/awt/java/awt/im/InputSubset.java b/awt/java/awt/im/InputSubset.java index 02a1049684..708881eaee 100644 --- a/awt/java/awt/im/InputSubset.java +++ b/awt/java/awt/im/InputSubset.java @@ -20,6 +20,12 @@ */ package java.awt.im; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public final class InputSubset extends Character.Subset { public static final InputSubset LATIN = new InputSubset("LATIN"); //$NON-NLS-1$ diff --git a/awt/java/awt/im/spi/InputMethod.java b/awt/java/awt/im/spi/InputMethod.java index 2c98c46cb3..67a88346c8 100644 --- a/awt/java/awt/im/spi/InputMethod.java +++ b/awt/java/awt/im/spi/InputMethod.java @@ -24,6 +24,12 @@ import java.awt.AWTEvent; import java.awt.Rectangle; import java.util.Locale; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface InputMethod { public void activate(); diff --git a/awt/java/awt/im/spi/InputMethodContext.java b/awt/java/awt/im/spi/InputMethodContext.java index ca33e879ec..bfc773cf05 100644 --- a/awt/java/awt/im/spi/InputMethodContext.java +++ b/awt/java/awt/im/spi/InputMethodContext.java @@ -26,6 +26,12 @@ import java.awt.im.InputMethodRequests; import java.text.AttributedCharacterIterator; //???AWT: import javax.swing.JFrame; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface InputMethodContext extends InputMethodRequests { // ???AWT: public JFrame createInputMethodJFrame(String title, boolean attachToInputContext); diff --git a/awt/java/awt/im/spi/InputMethodDescriptor.java b/awt/java/awt/im/spi/InputMethodDescriptor.java index 3068cac1b6..c800bc1791 100644 --- a/awt/java/awt/im/spi/InputMethodDescriptor.java +++ b/awt/java/awt/im/spi/InputMethodDescriptor.java @@ -24,6 +24,12 @@ import java.awt.AWTException; import java.awt.Image; import java.util.Locale; +/** + * This class is not supported in Android 1.0. It is merely provided to maintain + * interface compatibility with desktop Java implementations. + * + * @since Android 1.0 + */ public interface InputMethodDescriptor { public Locale[] getAvailableLocales() throws AWTException; diff --git a/awt/java/awt/image/AffineTransformOp.java b/awt/java/awt/image/AffineTransformOp.java index 546837a48e..db25e1aecc 100644 --- a/awt/java/awt/image/AffineTransformOp.java +++ b/awt/java/awt/image/AffineTransformOp.java @@ -32,50 +32,60 @@ import org.apache.harmony.awt.gl.AwtImageBackdoorAccessor; import org.apache.harmony.awt.internal.nls.Messages; /** - * The AffineTransform class translates coordinates from 2D coordinates - * in the source image or Raster to 2D coordinates in the destination - * image or Raster using Affine transformation. The number of bands in - * the source Raster should equal to the number of bands in the destination - * Raster. + * The AffineTransform class translates coordinates from 2D coordinates in the + * source image or Raster to 2D coordinates in the destination image or Raster + * using affine transformation. The number of bands in the source Raster should + * equal to the number of bands in the destination Raster. + * + * @since Android 1.0 */ public class AffineTransformOp implements BufferedImageOp, RasterOp { - - /** - * The Constant TYPE_NEAREST_NEIGHBOR indicates nearest-neighbor - * interpolation type. + + /** + * The Constant TYPE_NEAREST_NEIGHBOR indicates nearest-neighbor + * interpolation type. */ public static final int TYPE_NEAREST_NEIGHBOR = 1; - - /** - * The Constant TYPE_BILINEAR indicates bilinear interpolation type. + + /** + * The Constant TYPE_BILINEAR indicates bilinear interpolation type. */ public static final int TYPE_BILINEAR = 2; - - /** The Constant TYPE_BICUBIC indicates bicubic interpolation type. */ + + /** + * The Constant TYPE_BICUBIC indicates bi-cubic interpolation type. + */ public static final int TYPE_BICUBIC = 3; - /** The i type. */ + /** + * The i type. + */ private int iType; // interpolation type - - /** The at. */ + + /** + * The at. + */ private AffineTransform at; - - /** The hints. */ + + /** + * The hints. + */ private RenderingHints hints; static { // TODO - uncomment - //System.loadLibrary("imageops"); + // System.loadLibrary("imageops"); } /** - * Instantiates a new AffineTransformOp with the specified - * AffineTransform and RenderingHints object which defines - * the interpolation type. + * Instantiates a new AffineTransformOp with the specified AffineTransform + * and RenderingHints object which defines the interpolation type. * - * @param xform the AffineTransform. - * @param hints the RenderingHints object which defines - * the interpolation type. + * @param xform + * the AffineTransform. + * @param hints + * the RenderingHints object which defines the interpolation + * type. */ public AffineTransformOp(AffineTransform xform, RenderingHints hints) { this(xform, TYPE_NEAREST_NEIGHBOR); @@ -95,20 +105,22 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { // Determine from rendering quality if (hint == RenderingHints.VALUE_RENDER_QUALITY) { this.iType = TYPE_BILINEAR; - // For speed use nearest neighbor + // For speed use nearest neighbor } } } } /** - * Instantiates a new AffineTransformOp with the specified - * AffineTransform and a specified interpolation type from the - * list of predefined interpolation types. + * Instantiates a new AffineTransformOp with the specified AffineTransform + * and a specified interpolation type from the list of predefined + * interpolation types. * - * @param xform the AffineTransform. - * @param interp the one of predefined interpolation types: - * TYPE_NEAREST_NEIGHBOR, TYPE_BILINEAR, or TYPE_BICUBIC. + * @param xform + * the AffineTransform. + * @param interp + * the one of predefined interpolation types: + * TYPE_NEAREST_NEIGHBOR, TYPE_BILINEAR, or TYPE_BICUBIC. */ public AffineTransformOp(AffineTransform xform, int interp) { if (Math.abs(xform.getDeterminant()) <= Double.MIN_VALUE) { @@ -116,7 +128,7 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { throw new ImagingOpException(Messages.getString("awt.24F", xform)); //$NON-NLS-1$ } - this.at = (AffineTransform) xform.clone(); + this.at = (AffineTransform)xform.clone(); if (interp != TYPE_NEAREST_NEIGHBOR && interp != TYPE_BILINEAR && interp != TYPE_BICUBIC) { // awt.250=Unknown interpolation type: {0} @@ -129,7 +141,7 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { /** * Gets the interpolation type. * - * @return the interpolation type + * @return the interpolation type. */ public final int getInterpolationType() { return iType; @@ -165,7 +177,7 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { * @return the AffineTransform. */ public final AffineTransform getTransform() { - return (AffineTransform) at.clone(); + return (AffineTransform)at.clone(); } public final Point2D getPoint2D(Point2D srcPt, Point2D dstPt) { @@ -177,21 +189,19 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { } public final Rectangle2D getBounds2D(Raster src) { - // We position source raster to (0,0) even if it is translated child raster. + // We position source raster to (0,0) even if it is translated child + // raster. // This means that we need only width and height of the src int width = src.getWidth(); int height = src.getHeight(); float[] corners = { - 0, 0, - width, 0, - width, height, - 0, height + 0, 0, width, 0, width, height, 0, height }; at.transform(corners, 0, corners, 0, 4); - Rectangle2D.Float bounds = new Rectangle2D.Float(corners[0], corners[1], 0 , 0); + Rectangle2D.Float bounds = new Rectangle2D.Float(corners[0], corners[1], 0, 0); bounds.add(corners[2], corners[3]); bounds.add(corners[4], corners[5]); bounds.add(corners[6], corners[7]); @@ -208,17 +218,14 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { double dstHeight = newBounds.getY() + newBounds.getHeight(); if (dstWidth <= 0 || dstHeight <= 0) { - // awt.251=Transformed width ({0}) and height ({1}) should be greater than 0 - throw new RasterFormatException( - Messages.getString("awt.251", dstWidth, dstHeight)); //$NON-NLS-1$ + // awt.251=Transformed width ({0}) and height ({1}) should be + // greater than 0 + throw new RasterFormatException(Messages.getString("awt.251", dstWidth, dstHeight)); //$NON-NLS-1$ } if (destCM != null) { - return new BufferedImage(destCM, - destCM.createCompatibleWritableRaster((int)dstWidth, (int)dstHeight), - destCM.isAlphaPremultiplied(), - null - ); + return new BufferedImage(destCM, destCM.createCompatibleWritableRaster((int)dstWidth, + (int)dstHeight), destCM.isAlphaPremultiplied(), null); } ColorModel cm = src.getColorModel(); @@ -229,23 +236,18 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { } // OK, we can get source color model - return new BufferedImage(cm, - src.getRaster().createCompatibleWritableRaster((int)dstWidth, (int)dstHeight), - cm.isAlphaPremultiplied(), - null - ); + return new BufferedImage(cm, src.getRaster().createCompatibleWritableRaster((int)dstWidth, + (int)dstHeight), cm.isAlphaPremultiplied(), null); } - public WritableRaster createCompatibleDestRaster (Raster src) { + public WritableRaster createCompatibleDestRaster(Raster src) { // Here approach is other then in createCompatibleDestImage - // destination should include only // transformed image, but not (0,0) in source coordinate system Rectangle2D newBounds = getBounds2D(src); - return src.createCompatibleWritableRaster( - (int) newBounds.getX(), (int) newBounds.getY(), - (int) newBounds.getWidth(), (int)newBounds.getHeight() - ); + return src.createCompatibleWritableRaster((int)newBounds.getX(), (int)newBounds.getY(), + (int)newBounds.getWidth(), (int)newBounds.getHeight()); } public final BufferedImage filter(BufferedImage src, BufferedImage dst) { @@ -257,10 +259,8 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { ColorModel srcCM = src.getColorModel(); BufferedImage finalDst = null; - if ( - srcCM instanceof IndexColorModel && - (iType != TYPE_NEAREST_NEIGHBOR || srcCM.getPixelSize() % 8 != 0) - ) { + if (srcCM instanceof IndexColorModel + && (iType != TYPE_NEAREST_NEIGHBOR || srcCM.getPixelSize() % 8 != 0)) { src = ((IndexColorModel)srcCM).convertToIntDiscrete(src.getRaster(), true); srcCM = src.getColorModel(); } @@ -269,15 +269,10 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { dst = createCompatibleDestImage(src, srcCM); } else { if (!srcCM.equals(dst.getColorModel())) { - // Treat BufferedImage.TYPE_INT_RGB and BufferedImage.TYPE_INT_ARGB as same - if ( - !( - (src.getType() == BufferedImage.TYPE_INT_RGB || - src.getType() == BufferedImage.TYPE_INT_ARGB) && - (dst.getType() == BufferedImage.TYPE_INT_RGB || - dst.getType() == BufferedImage.TYPE_INT_ARGB) - ) - ) { + // Treat BufferedImage.TYPE_INT_RGB and + // BufferedImage.TYPE_INT_ARGB as same + if (!((src.getType() == BufferedImage.TYPE_INT_RGB || src.getType() == BufferedImage.TYPE_INT_ARGB) && (dst + .getType() == BufferedImage.TYPE_INT_RGB || dst.getType() == BufferedImage.TYPE_INT_ARGB))) { finalDst = dst; dst = createCompatibleDestImage(src, srcCM); } @@ -287,10 +282,11 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { // Skip alpha channel for TYPE_INT_RGB images if (slowFilter(src.getRaster(), dst.getRaster()) != 0) { // awt.21F=Unable to transform source - throw new ImagingOpException (Messages.getString("awt.21F")); //$NON-NLS-1$ - // TODO - uncomment - //if (ippFilter(src.getRaster(), dst.getRaster(), src.getType()) != 0) - //throw new ImagingOpException ("Unable to transform source"); + throw new ImagingOpException(Messages.getString("awt.21F")); //$NON-NLS-1$ + // TODO - uncomment + // if (ippFilter(src.getRaster(), dst.getRaster(), src.getType()) != + // 0) + // throw new ImagingOpException ("Unable to transform source"); } if (finalDst != null) { @@ -320,9 +316,9 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { if (slowFilter(src, dst) != 0) { // awt.21F=Unable to transform source throw new ImagingOpException(Messages.getString("awt.21F")); //$NON-NLS-1$ - // TODO - uncomment - //if (ippFilter(src, dst, BufferedImage.TYPE_CUSTOM) != 0) - // throw new ImagingOpException("Unable to transform source"); + // TODO - uncomment + // if (ippFilter(src, dst, BufferedImage.TYPE_CUSTOM) != 0) + // throw new ImagingOpException("Unable to transform source"); } return dst; @@ -332,11 +328,13 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { /** * Ipp filter. * - * @param src the src - * @param dst the dst - * @param imageType the image type - * - * @return the int + * @param src + * the src. + * @param dst + * the dst. + * @param imageType + * the image type. + * @return the int. */ @SuppressWarnings("unused") private int ippFilter(Raster src, WritableRaster dst, int imageType) { @@ -349,8 +347,8 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_INT_RGB: case BufferedImage.TYPE_INT_BGR: { channels = 4; - srcStride = src.getWidth()*4; - dstStride = dst.getWidth()*4; + srcStride = src.getWidth() * 4; + dstStride = dst.getWidth() * 4; skipChannel = true; break; } @@ -360,8 +358,8 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_4BYTE_ABGR: case BufferedImage.TYPE_4BYTE_ABGR_PRE: { channels = 4; - srcStride = src.getWidth()*4; - dstStride = dst.getWidth()*4; + srcStride = src.getWidth() * 4; + dstStride = dst.getWidth() * 4; break; } @@ -375,12 +373,13 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_3BYTE_BGR: { channels = 3; - srcStride = src.getWidth()*3; - dstStride = dst.getWidth()*3; + srcStride = src.getWidth() * 3; + dstStride = dst.getWidth() * 3; break; } - case BufferedImage.TYPE_USHORT_GRAY: // TODO - could be done in native code? + case BufferedImage.TYPE_USHORT_GRAY: // TODO - could be done in + // native code? case BufferedImage.TYPE_USHORT_565_RGB: case BufferedImage.TYPE_USHORT_555_RGB: case BufferedImage.TYPE_BYTE_BINARY: { @@ -391,34 +390,29 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { SampleModel srcSM = src.getSampleModel(); SampleModel dstSM = dst.getSampleModel(); - if ( - srcSM instanceof PixelInterleavedSampleModel && - dstSM instanceof PixelInterleavedSampleModel - ) { + if (srcSM instanceof PixelInterleavedSampleModel + && dstSM instanceof PixelInterleavedSampleModel) { // Check PixelInterleavedSampleModel - if ( - srcSM.getDataType() != DataBuffer.TYPE_BYTE || - dstSM.getDataType() != DataBuffer.TYPE_BYTE - ) { + if (srcSM.getDataType() != DataBuffer.TYPE_BYTE + || dstSM.getDataType() != DataBuffer.TYPE_BYTE) { return slowFilter(src, dst); } - channels = srcSM.getNumBands(); // Have IPP functions for 1, 3 and 4 channels + channels = srcSM.getNumBands(); // Have IPP functions for 1, + // 3 and 4 channels if (channels != 1 && channels != 3 && channels != 4) { return slowFilter(src, dst); } int dataTypeSize = DataBuffer.getDataTypeSize(srcSM.getDataType()) / 8; - srcStride = ((ComponentSampleModel) srcSM).getScanlineStride() * dataTypeSize; - dstStride = ((ComponentSampleModel) dstSM).getScanlineStride() * dataTypeSize; - } else if ( - srcSM instanceof SinglePixelPackedSampleModel && - dstSM instanceof SinglePixelPackedSampleModel - ) { + srcStride = ((ComponentSampleModel)srcSM).getScanlineStride() * dataTypeSize; + dstStride = ((ComponentSampleModel)dstSM).getScanlineStride() * dataTypeSize; + } else if (srcSM instanceof SinglePixelPackedSampleModel + && dstSM instanceof SinglePixelPackedSampleModel) { // Check SinglePixelPackedSampleModel - SinglePixelPackedSampleModel sppsm1 = (SinglePixelPackedSampleModel) srcSM; - SinglePixelPackedSampleModel sppsm2 = (SinglePixelPackedSampleModel) dstSM; + SinglePixelPackedSampleModel sppsm1 = (SinglePixelPackedSampleModel)srcSM; + SinglePixelPackedSampleModel sppsm2 = (SinglePixelPackedSampleModel)dstSM; // No IPP function for this type if (sppsm1.getDataType() == DataBuffer.TYPE_USHORT) { @@ -432,15 +426,13 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { } // Check compatibility of sample models - if ( - sppsm1.getDataType() != sppsm2.getDataType() || - !Arrays.equals(sppsm1.getBitOffsets(), sppsm2.getBitOffsets()) || - !Arrays.equals(sppsm1.getBitMasks(), sppsm2.getBitMasks()) - ) { + if (sppsm1.getDataType() != sppsm2.getDataType() + || !Arrays.equals(sppsm1.getBitOffsets(), sppsm2.getBitOffsets()) + || !Arrays.equals(sppsm1.getBitMasks(), sppsm2.getBitMasks())) { return slowFilter(src, dst); } - for (int i=0; i> 8; int py = sy >> 8; if (px >= minSrcX && py >= minSrcY && px < maxSrcX && py < maxSrcY) { - Object val = src.getDataElements(px , py , null); + Object val = src.getDataElements(px, py, null); dst.setDataElements(x, y, val); } sx += hx; @@ -585,33 +573,46 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { /** * Ipp affine transform. * - * @param m00 the m00 - * @param m01 the m01 - * @param m02 the m02 - * @param m10 the m10 - * @param m11 the m11 - * @param m12 the m12 - * @param src the src - * @param srcWidth the src width - * @param srcHeight the src height - * @param srcStride the src stride - * @param dst the dst - * @param dstWidth the dst width - * @param dstHeight the dst height - * @param dstStride the dst stride - * @param iType the i type - * @param channels the channels - * @param skipChannel the skip channel - * @param offsets the offsets - * - * @return the int + * @param m00 + * the m00. + * @param m01 + * the m01. + * @param m02 + * the m02. + * @param m10 + * the m10. + * @param m11 + * the m11. + * @param m12 + * the m12. + * @param src + * the src. + * @param srcWidth + * the src width. + * @param srcHeight + * the src height. + * @param srcStride + * the src stride. + * @param dst + * the dst. + * @param dstWidth + * the dst width. + * @param dstHeight + * the dst height. + * @param dstStride + * the dst stride. + * @param iType + * the i type. + * @param channels + * the channels. + * @param skipChannel + * the skip channel. + * @param offsets + * the offsets. + * @return the int. */ - private native int ippAffineTransform( - double m00, double m01, - double m02, double m10, - double m11, double m12, - Object src, int srcWidth, int srcHeight, int srcStride, - Object dst, int dstWidth, int dstHeight, int dstStride, - int iType, int channels, boolean skipChannel, - int offsets[]); + private native int ippAffineTransform(double m00, double m01, double m02, double m10, + double m11, double m12, Object src, int srcWidth, int srcHeight, int srcStride, + Object dst, int dstWidth, int dstHeight, int dstStride, int iType, int channels, + boolean skipChannel, int offsets[]); } \ No newline at end of file diff --git a/awt/java/awt/image/AreaAveragingScaleFilter.java b/awt/java/awt/image/AreaAveragingScaleFilter.java index f4933db67b..7fb138e7fa 100644 --- a/awt/java/awt/image/AreaAveragingScaleFilter.java +++ b/awt/java/awt/image/AreaAveragingScaleFilter.java @@ -18,72 +18,101 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.util.Arrays; - /** - * The AreaAveragingScaleFilter class scales the source image using - * area averaging algorithm. This algorithm provides a source image - * with a new image containing the resampled image. + * The AreaAveragingScaleFilter class scales the source image using area + * averaging algorithm. This algorithm provides a source image with a new image + * containing the resampled image. + * + * @since Android 1.0 */ public class AreaAveragingScaleFilter extends ReplicateScaleFilter { - /** The Constant rgbCM. */ + /** + * The Constant rgbCM. + */ private static final ColorModel rgbCM = ColorModel.getRGBdefault(); - - /** The Constant averagingFlags. */ - private static final int averagingFlags = (ImageConsumer.TOPDOWNLEFTRIGHT | - ImageConsumer.COMPLETESCANLINES); - - /** The reset. */ - private boolean reset = true; // Flag for used superclass filter - - /** The inited. */ + + /** + * The Constant averagingFlags. + */ + private static final int averagingFlags = (ImageConsumer.TOPDOWNLEFTRIGHT | ImageConsumer.COMPLETESCANLINES); + + /** + * The reset. + */ + private boolean reset = true; // Flag for used superclass filter + + /** + * The inited. + */ private boolean inited = false; // All data inited - /** The sum_r. */ + /** + * The sum_r. + */ private int sum_r[]; // Array for average Red samples - - /** The sum_g. */ + + /** + * The sum_g. + */ private int sum_g[]; // Array for average Green samples - - /** The sum_b. */ + + /** + * The sum_b. + */ private int sum_b[]; // Array for average Blue samples - - /** The sum_a. */ + + /** + * The sum_a. + */ private int sum_a[]; // Array for average Alpha samples - /** The buff. */ - private int buff[]; // Stride buffer - - /** The avg factor. */ - private int avgFactor; // Global averaging factor - - /** The cached dy. */ - private int cachedDY; // Cached number of the destination scanline - - /** The cached dv rest. */ - private int cachedDVRest; // Cached value of rest src scanlines for sum - // pixel samples - // Because data if transfering by whole scanlines - // we are caching only Y coordinate values - /** - * Instantiates a new AreaAveragingScaleFilter object which scales - * a source image with the specified width and height. + * The buff. + */ + private int buff[]; // Stride buffer + + /** + * The avg factor. + */ + private int avgFactor; // Global averaging factor + + /** + * The cached dy. + */ + private int cachedDY; // Cached number of the destination scanline + + /** + * The cached dv rest. + */ + private int cachedDVRest; // Cached value of rest src scanlines for sum + + // pixel samples + // Because data if transferring by whole scanlines + // we are caching only Y coordinate values + + /** + * Instantiates a new AreaAveragingScaleFilter object which scales a source + * image with the specified width and height. * - * @param width the scaled width of the image. - * @param height the scaled height of the image. + * @param width + * the scaled width of the image. + * @param height + * the scaled height of the image. */ public AreaAveragingScaleFilter(int width, int height) { super(width, height); } @Override - public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, int scansize) { - if(reset) { + public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, + int scansize) { + if (reset) { super.setPixels(x, y, w, h, model, pixels, off, scansize); } else { setFilteredPixels(x, y, w, h, model, pixels, off, scansize); @@ -91,8 +120,9 @@ public class AreaAveragingScaleFilter extends ReplicateScaleFilter { } @Override - public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, int scansize) { - if(reset) { + public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, + int scansize) { + if (reset) { super.setPixels(x, y, w, h, model, pixels, off, scansize); } else { setFilteredPixels(x, y, w, h, model, pixels, off, scansize); @@ -106,37 +136,44 @@ public class AreaAveragingScaleFilter extends ReplicateScaleFilter { } /** - * This method implements the Area Averaging Scale filter. - * The description of algorithm is presented in Java API Specification. - * - * Arrays sum_r, sum_g, sum_b, sum_a have length equals width of destination - * image. In each array's element is accumulating pixel's component values, - * proportional to the area which source pixels will occupy in destination - * image. Then that values will divide by Global averaging - * factor (area of the destination image) for receiving - * average values of destination pixels. + * This method implements the Area Averaging Scale filter. The description + * of algorithm is presented in Java API Specification. Arrays sum_r, sum_g, + * sum_b, sum_a have length equals width of destination image. In each + * array's element is accumulating pixel's component values, proportional to + * the area which source pixels will occupy in destination image. Then that + * values will divide by Global averaging factor (area of the destination + * image) for receiving average values of destination pixels. * - * @param x - Src pixels X coordinate - * @param y - Src pixels Y coordinate - * @param w - width of the area of Src pixels - * @param h - height of the area of Src pixels - * @param model - Color Model of Src pixels - * @param pixels - array of Src pixels - * @param off - offset into the Src pixels array - * @param scansize - length of scanline in the pixels array + * @param x + * the source pixels X coordinate. + * @param y + * the source pixels Y coordinate. + * @param w + * the width of the area of the source pixels. + * @param h + * the height of the area of the source pixels. + * @param model + * the color model of the source pixels. + * @param pixels + * the array of source pixels. + * @param off + * the offset into the source pixels array. + * @param scansize + * the length of scanline in the pixels array. */ - private void setFilteredPixels(int x, int y, int w, int h, ColorModel model, Object pixels, int off, int scansize){ - if(!inited){ + private void setFilteredPixels(int x, int y, int w, int h, ColorModel model, Object pixels, + int off, int scansize) { + if (!inited) { initialize(); } int srcX, srcY, dx, dy; int svRest, dvRest, shRest, dhRest, vDif, hDif; - if(y == 0){ + if (y == 0) { dy = 0; dvRest = srcHeight; - }else{ + } else { dy = cachedDY; dvRest = cachedDVRest; } @@ -166,9 +203,9 @@ public class AreaAveragingScaleFilter extends ReplicateScaleFilter { int rgb, pix; if (pixels instanceof int[]) { - pix = ((int[]) pixels)[srcOff + srcX]; + pix = ((int[])pixels)[srcOff + srcX]; } else { - pix = ((byte[]) pixels)[srcOff + srcX] & 0xff; + pix = ((byte[])pixels)[srcOff + srcX] & 0xff; } rgb = model.getRGB(pix); @@ -208,7 +245,7 @@ public class AreaAveragingScaleFilter extends ReplicateScaleFilter { if (dvRest == 0) { // averaging destination pixel's values - for(int i = 0; i < destWidth; i++){ + for (int i = 0; i < destWidth; i++) { int a = (sum_a[i] / avgFactor) & 0xff; int r = (sum_r[i] / avgFactor) & 0xff; int g = (sum_g[i] / avgFactor) & 0xff; @@ -216,8 +253,7 @@ public class AreaAveragingScaleFilter extends ReplicateScaleFilter { int frgb = (a << 24) | (r << 16) | (g << 8) | b; buff[i] = frgb; } - consumer.setPixels(0, dy, destWidth, 1, rgbCM, buff, 0, - destWidth); + consumer.setPixels(0, dy, destWidth, 1, rgbCM, buff, 0, destWidth); dy++; dvRest = srcHeight; Arrays.fill(sum_a, 0); @@ -236,18 +272,17 @@ public class AreaAveragingScaleFilter extends ReplicateScaleFilter { /** * Initialization of the auxiliary data. */ - private void initialize(){ + private void initialize() { - sum_a = new int[destWidth]; - sum_r = new int[destWidth]; - sum_g = new int[destWidth]; - sum_b = new int[destWidth]; + sum_a = new int[destWidth]; + sum_r = new int[destWidth]; + sum_g = new int[destWidth]; + sum_b = new int[destWidth]; - buff = new int[destWidth]; + buff = new int[destWidth]; outpixbuf = buff; - avgFactor = srcWidth * srcHeight; + avgFactor = srcWidth * srcHeight; inited = true; } } - diff --git a/awt/java/awt/image/AwtImageBackdoorAccessorImpl.java b/awt/java/awt/image/AwtImageBackdoorAccessorImpl.java index ce85ddda4b..6dffee88f6 100644 --- a/awt/java/awt/image/AwtImageBackdoorAccessorImpl.java +++ b/awt/java/awt/image/AwtImageBackdoorAccessorImpl.java @@ -20,6 +20,7 @@ * Created on 23.11.2005 * */ + package java.awt.image; import java.awt.Image; @@ -40,41 +41,43 @@ import org.apache.harmony.awt.internal.nls.Messages; /** * This class not part of public API. It useful for receiving package private * data from other packages. + * + * @since Android 1.0 */ class AwtImageBackdoorAccessorImpl extends AwtImageBackdoorAccessor { - static void init(){ + static void init() { inst = new AwtImageBackdoorAccessorImpl(); } @Override public Surface getImageSurface(Image image) { - if (image instanceof BufferedImage){ + if (image instanceof BufferedImage) { return ((BufferedImage)image).getImageSurface(); - } else if (image instanceof GLVolatileImage){ + } else if (image instanceof GLVolatileImage) { return ((GLVolatileImage)image).getImageSurface(); } return null; } @Override - public boolean isGrayPallete(IndexColorModel icm){ + public boolean isGrayPallete(IndexColorModel icm) { return icm.isGrayPallete(); } @Override public Object getData(DataBuffer db) { - if (db instanceof DataBufferByte){ + if (db instanceof DataBufferByte) { return ((DataBufferByte)db).getData(); - } else if (db instanceof DataBufferUShort){ + } else if (db instanceof DataBufferUShort) { return ((DataBufferUShort)db).getData(); - } else if (db instanceof DataBufferShort){ + } else if (db instanceof DataBufferShort) { return ((DataBufferShort)db).getData(); - } else if (db instanceof DataBufferInt){ + } else if (db instanceof DataBufferInt) { return ((DataBufferInt)db).getData(); - } else if (db instanceof DataBufferFloat){ + } else if (db instanceof DataBufferFloat) { return ((DataBufferFloat)db).getData(); - } else if (db instanceof DataBufferDouble){ + } else if (db instanceof DataBufferDouble) { return ((DataBufferDouble)db).getData(); } else { // awt.235=Wrong Data Buffer type : {0} @@ -85,7 +88,7 @@ class AwtImageBackdoorAccessorImpl extends AwtImageBackdoorAccessor { @Override public int[] getDataInt(DataBuffer db) { - if (db instanceof DataBufferInt){ + if (db instanceof DataBufferInt) { return ((DataBufferInt)db).getData(); } return null; @@ -93,7 +96,7 @@ class AwtImageBackdoorAccessorImpl extends AwtImageBackdoorAccessor { @Override public byte[] getDataByte(DataBuffer db) { - if (db instanceof DataBufferByte){ + if (db instanceof DataBufferByte) { return ((DataBufferByte)db).getData(); } return null; @@ -101,7 +104,7 @@ class AwtImageBackdoorAccessorImpl extends AwtImageBackdoorAccessor { @Override public short[] getDataShort(DataBuffer db) { - if (db instanceof DataBufferShort){ + if (db instanceof DataBufferShort) { return ((DataBufferShort)db).getData(); } return null; @@ -109,7 +112,7 @@ class AwtImageBackdoorAccessorImpl extends AwtImageBackdoorAccessor { @Override public short[] getDataUShort(DataBuffer db) { - if (db instanceof DataBufferUShort){ + if (db instanceof DataBufferUShort) { return ((DataBufferUShort)db).getData(); } return null; @@ -117,7 +120,7 @@ class AwtImageBackdoorAccessorImpl extends AwtImageBackdoorAccessor { @Override public double[] getDataDouble(DataBuffer db) { - if (db instanceof DataBufferDouble){ + if (db instanceof DataBufferDouble) { return ((DataBufferDouble)db).getData(); } return null; @@ -125,7 +128,7 @@ class AwtImageBackdoorAccessorImpl extends AwtImageBackdoorAccessor { @Override public float[] getDataFloat(DataBuffer db) { - if (db instanceof DataBufferFloat){ + if (db instanceof DataBufferFloat) { return ((DataBufferFloat)db).getData(); } return null; diff --git a/awt/java/awt/image/BandCombineOp.java b/awt/java/awt/image/BandCombineOp.java index cd77a21ff8..da2cc8944d 100644 --- a/awt/java/awt/image/BandCombineOp.java +++ b/awt/java/awt/image/BandCombineOp.java @@ -32,82 +32,124 @@ import org.apache.harmony.awt.gl.AwtImageBackdoorAccessor; import org.apache.harmony.awt.internal.nls.Messages; /** - * The BandCombineOp class translates coordinates from - * coordinates in the source Raster to coordinates in - * the destination Raster by an arbitrary linear combination - * of the bands in a source Raster, using a specified matrix. - * The number of bands in the matrix should equal to - * the number of bands in the source Raster plus 1. + * The BandCombineOp class translates coordinates from coordinates in the source + * Raster to coordinates in the destination Raster by an arbitrary linear + * combination of the bands in a source Raster, using a specified matrix. The + * number of bands in the matrix should equal to the number of bands in the + * source Raster plus 1. + * + * @since Android 1.0 */ public class BandCombineOp implements RasterOp { - - /** The Constant offsets3c. */ - static final int offsets3c[] = {16, 8, 0}; - - /** The Constant offsets4ac. */ - static final int offsets4ac[] = {16, 8, 0, 24}; - - /** The Constant masks3c. */ - static final int masks3c[] = {0xFF0000, 0xFF00, 0xFF}; - - /** The Constant masks4ac. */ - static final int masks4ac[] = {0xFF0000, 0xFF00, 0xFF, 0xFF000000}; - - /** The Constant piOffsets. */ - private static final int piOffsets[] = {0, 1, 2}; - - /** The Constant piInvOffsets. */ - private static final int piInvOffsets[] = {2, 1, 0}; - - /** The Constant TYPE_BYTE3C. */ + + /** + * The Constant offsets3c. + */ + static final int offsets3c[] = { + 16, 8, 0 + }; + + /** + * The Constant offsets4ac. + */ + static final int offsets4ac[] = { + 16, 8, 0, 24 + }; + + /** + * The Constant masks3c. + */ + static final int masks3c[] = { + 0xFF0000, 0xFF00, 0xFF + }; + + /** + * The Constant masks4ac. + */ + static final int masks4ac[] = { + 0xFF0000, 0xFF00, 0xFF, 0xFF000000 + }; + + /** + * The Constant piOffsets. + */ + private static final int piOffsets[] = { + 0, 1, 2 + }; + + /** + * The Constant piInvOffsets. + */ + private static final int piInvOffsets[] = { + 2, 1, 0 + }; + + /** + * The Constant TYPE_BYTE3C. + */ private static final int TYPE_BYTE3C = 0; - - /** The Constant TYPE_BYTE4AC. */ + + /** + * The Constant TYPE_BYTE4AC. + */ private static final int TYPE_BYTE4AC = 1; - - /** The Constant TYPE_USHORT3C. */ + + /** + * The Constant TYPE_USHORT3C. + */ private static final int TYPE_USHORT3C = 2; - - /** The Constant TYPE_SHORT3C. */ + + /** + * The Constant TYPE_SHORT3C. + */ private static final int TYPE_SHORT3C = 3; - /** The mx width. */ + /** + * The mx width. + */ private int mxWidth; - - /** The mx height. */ + + /** + * The mx height. + */ private int mxHeight; - - /** The matrix. */ + + /** + * The matrix. + */ private float matrix[][]; - - /** The r hints. */ + + /** + * The r hints. + */ private RenderingHints rHints; static { // XXX - todo - //System.loadLibrary("imageops"); + // System.loadLibrary("imageops"); } /** - * Instantiates a new BandCombineOp object with the specified - * matrix. + * Instantiates a new BandCombineOp object with the specified matrix. * - * @param matrix the specified matrix for band combining. - * @param hints the RenderingHints. + * @param matrix + * the specified matrix for band combining. + * @param hints + * the RenderingHints. */ public BandCombineOp(float matrix[][], RenderingHints hints) { this.mxHeight = matrix.length; this.mxWidth = matrix[0].length; this.matrix = new float[mxHeight][mxWidth]; - for (int i=0; i= dstInfo.channelsOrder.length) { continue; } - for (int i=0; i= srcInfo.channelsOrder.length) { break; } - reorderedMatrix[dstInfo.channelsOrder[j]*rmxWidth + srcInfo.channelsOrder[i]] = - matrix[j][i]; + reorderedMatrix[dstInfo.channelsOrder[j] * rmxWidth + srcInfo.channelsOrder[i]] = matrix[j][i]; } if (mxWidth == rmxWidth) { - reorderedMatrix[(dstInfo.channelsOrder[j]+1)*rmxWidth - 1] = matrix[j][mxWidth-1]; + reorderedMatrix[(dstInfo.channelsOrder[j] + 1) * rmxWidth - 1] = matrix[j][mxWidth - 1]; } } @@ -311,11 +365,9 @@ public class BandCombineOp implements RasterOp { return -1; // Unknown data buffer type } - simpleCombineBands( - srcData, src.getWidth(), src.getHeight(), srcInfo.stride, srcInfo.channels, - dstData, dstInfo.stride, dstInfo.channels, - reorderedMatrix, offsets - ); + simpleCombineBands(srcData, src.getWidth(), src.getHeight(), srcInfo.stride, + srcInfo.channels, dstData, dstInfo.stride, dstInfo.channels, reorderedMatrix, + offsets); return res; } @@ -323,10 +375,11 @@ public class BandCombineOp implements RasterOp { /** * Very slow filter. * - * @param src the src - * @param dst the dst - * - * @return the int + * @param src + * the src. + * @param dst + * the dst. + * @return the int. */ private int verySlowFilter(Raster src, WritableRaster dst) { int numBands = src.getNumBands(); @@ -337,33 +390,35 @@ public class BandCombineOp implements RasterOp { int dstMinX = dst.getMinX(); int dstY = dst.getMinY(); - int dX = src.getWidth();//< dst.getWidth() ? src.getWidth() : dst.getWidth(); - int dY = src.getHeight();//< dst.getHeight() ? src.getHeight() : dst.getHeight(); + int dX = src.getWidth();// < dst.getWidth() ? src.getWidth() : + // dst.getWidth(); + int dY = src.getHeight();// < dst.getHeight() ? src.getHeight() : + // dst.getHeight(); float sample; - int srcPixels[] = new int[numBands*dX*dY]; - int dstPixels[] = new int[mxHeight*dX*dY]; + int srcPixels[] = new int[numBands * dX * dY]; + int dstPixels[] = new int[mxHeight * dX * dY]; srcPixels = src.getPixels(srcMinX, srcY, dX, dY, srcPixels); if (numBands == mxWidth) { - for (int i=0, j=0; i numBands) { - // awt.64=The number of the bands in the subset is greater than the number of bands in the sample model + // awt.64=The number of the bands in the subset is greater than the + // number of bands in the sample model throw new RasterFormatException(Messages.getString("awt.64")); //$NON-NLS-1$ } @@ -141,94 +151,93 @@ public final class BandedSampleModel extends ComponentSampleModel { offsets[i] = bandOffsets[bands[i]]; } - return new BandedSampleModel(dataType, width, height, scanlineStride, - indices, offsets); + return new BandedSampleModel(dataType, width, height, scanlineStride, indices, offsets); } @Override public Object getDataElements(int x, int y, Object obj, DataBuffer data) { switch (dataType) { - case DataBuffer.TYPE_BYTE: { - byte bdata[]; + case DataBuffer.TYPE_BYTE: { + byte bdata[]; - if (obj == null) { - bdata = new byte[numBands]; - } else { - bdata = (byte[]) obj; - } + if (obj == null) { + bdata = new byte[numBands]; + } else { + bdata = (byte[])obj; + } - for (int i = 0; i < numBands; i++) { - bdata[i] = (byte) getSample(x, y, i, data); - } + for (int i = 0; i < numBands; i++) { + bdata[i] = (byte)getSample(x, y, i, data); + } - obj = bdata; - break; - } - case DataBuffer.TYPE_SHORT: - case DataBuffer.TYPE_USHORT: { - short sdata[]; - - if (obj == null) { - sdata = new short[numBands]; - } else { - sdata = (short[]) obj; + obj = bdata; + break; } + case DataBuffer.TYPE_SHORT: + case DataBuffer.TYPE_USHORT: { + short sdata[]; + + if (obj == null) { + sdata = new short[numBands]; + } else { + sdata = (short[])obj; + } - for (int i = 0; i < numBands; i++) { - sdata[i] = (short) getSample(x, y, i, data); + for (int i = 0; i < numBands; i++) { + sdata[i] = (short)getSample(x, y, i, data); + } + + obj = sdata; + break; } + case DataBuffer.TYPE_INT: { + int idata[]; - obj = sdata; - break; - } - case DataBuffer.TYPE_INT: { - int idata[]; + if (obj == null) { + idata = new int[numBands]; + } else { + idata = (int[])obj; + } - if (obj == null) { - idata = new int[numBands]; - } else { - idata = (int[]) obj; - } + for (int i = 0; i < numBands; i++) { + idata[i] = getSample(x, y, i, data); + } - for (int i = 0; i < numBands; i++) { - idata[i] = getSample(x, y, i, data); + obj = idata; + break; } + case DataBuffer.TYPE_FLOAT: { + float fdata[]; - obj = idata; - break; - } - case DataBuffer.TYPE_FLOAT: { - float fdata[]; + if (obj == null) { + fdata = new float[numBands]; + } else { + fdata = (float[])obj; + } - if (obj == null) { - fdata = new float[numBands]; - } else { - fdata = (float[]) obj; - } + for (int i = 0; i < numBands; i++) { + fdata[i] = getSampleFloat(x, y, i, data); + } - for (int i = 0; i < numBands; i++) { - fdata[i] = getSampleFloat(x, y, i, data); + obj = fdata; + break; } + case DataBuffer.TYPE_DOUBLE: { + double ddata[]; - obj = fdata; - break; - } - case DataBuffer.TYPE_DOUBLE: { - double ddata[]; + if (obj == null) { + ddata = new double[numBands]; + } else { + ddata = (double[])obj; + } - if (obj == null) { - ddata = new double[numBands]; - } else { - ddata = (double[]) obj; - } + for (int i = 0; i < numBands; i++) { + ddata[i] = getSampleDouble(x, y, i, data); + } - for (int i = 0; i < numBands; i++) { - ddata[i] = getSampleDouble(x, y, i, data); + obj = ddata; + break; } - - obj = ddata; - break; - } } return obj; @@ -257,8 +266,7 @@ public final class BandedSampleModel extends ComponentSampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - return data.getElem(bankIndices[b], y * scanlineStride + x + - bandOffsets[b]); + return data.getElem(bankIndices[b], y * scanlineStride + x + bandOffsets[b]); } @Override @@ -268,8 +276,7 @@ public final class BandedSampleModel extends ComponentSampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - return data.getElemDouble(bankIndices[b], y * scanlineStride + x + - bandOffsets[b]); + return data.getElemDouble(bankIndices[b], y * scanlineStride + x + bandOffsets[b]); } @Override @@ -279,13 +286,11 @@ public final class BandedSampleModel extends ComponentSampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - return data.getElemFloat(bankIndices[b], y * scanlineStride + x + - bandOffsets[b]); + return data.getElemFloat(bankIndices[b], y * scanlineStride + x + bandOffsets[b]); } @Override - public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], - DataBuffer data) { + public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { int samples[]; int idx = 0; @@ -317,41 +322,41 @@ public final class BandedSampleModel extends ComponentSampleModel { @Override public void setDataElements(int x, int y, Object obj, DataBuffer data) { switch (dataType) { - case DataBuffer.TYPE_BYTE: - byte bdata[] = (byte[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, bdata[i] & 0xff, data); - } - break; + case DataBuffer.TYPE_BYTE: + byte bdata[] = (byte[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, bdata[i] & 0xff, data); + } + break; - case DataBuffer.TYPE_SHORT: - case DataBuffer.TYPE_USHORT: - short sdata[] = (short[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, sdata[i] & 0xffff, data); - } - break; + case DataBuffer.TYPE_SHORT: + case DataBuffer.TYPE_USHORT: + short sdata[] = (short[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, sdata[i] & 0xffff, data); + } + break; - case DataBuffer.TYPE_INT: - int idata[] = (int[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, idata[i], data); - } - break; + case DataBuffer.TYPE_INT: + int idata[] = (int[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, idata[i], data); + } + break; - case DataBuffer.TYPE_FLOAT: - float fdata[] = (float[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, fdata[i], data); - } - break; + case DataBuffer.TYPE_FLOAT: + float fdata[] = (float[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, fdata[i], data); + } + break; - case DataBuffer.TYPE_DOUBLE: - double ddata[] = (double[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, ddata[i], data); - } - break; + case DataBuffer.TYPE_DOUBLE: + double ddata[] = (double[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, ddata[i], data); + } + break; } } @@ -363,8 +368,7 @@ public final class BandedSampleModel extends ComponentSampleModel { } @Override - public void setPixels(int x, int y, int w, int h, int iArray[], - DataBuffer data) { + public void setPixels(int x, int y, int w, int h, int iArray[], DataBuffer data) { int idx = 0; for (int i = y; i < y + h; i++) { @@ -383,8 +387,7 @@ public final class BandedSampleModel extends ComponentSampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - data.setElemDouble(bankIndices[b], y * scanlineStride + x + - bandOffsets[b], s); + data.setElemDouble(bankIndices[b], y * scanlineStride + x + bandOffsets[b], s); } @Override @@ -394,8 +397,7 @@ public final class BandedSampleModel extends ComponentSampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - data.setElemFloat(bankIndices[b], y * scanlineStride + x + - bandOffsets[b], s); + data.setElemFloat(bankIndices[b], y * scanlineStride + x + bandOffsets[b], s); } @Override @@ -405,13 +407,11 @@ public final class BandedSampleModel extends ComponentSampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - data.setElem(bankIndices[b], y * scanlineStride + x + - bandOffsets[b], s); + data.setElem(bankIndices[b], y * scanlineStride + x + bandOffsets[b], s); } @Override - public void setSamples(int x, int y, int w, int h, int b, int iArray[], - DataBuffer data) { + public void setSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { int idx = 0; for (int i = y; i < y + h; i++) { @@ -423,4 +423,3 @@ public final class BandedSampleModel extends ComponentSampleModel { } } - diff --git a/awt/java/awt/image/BufferStrategy.java b/awt/java/awt/image/BufferStrategy.java index e0508f0cf1..3c8779dac9 100644 --- a/awt/java/awt/image/BufferStrategy.java +++ b/awt/java/awt/image/BufferStrategy.java @@ -18,35 +18,37 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.BufferCapabilities; import java.awt.Graphics; /** - * The BufferStrategy abstract class provides an opportunity - * to organize the buffers for a Canvas or Window. The BufferStrategy - * implementation depends on hardware and software limitations. - * These limitations are detectible through the capabilities - * object which can be obtained by the GraphicsConfiguration of the Canvas - * or Window. + * The BufferStrategy abstract class provides an opportunity to organize the + * buffers for a Canvas or Window. The BufferStrategy implementation depends on + * hardware and software limitations. These limitations are detectable through + * the capabilities object which can be obtained by the GraphicsConfiguration of + * the Canvas or Window. + * + * @since Android 1.0 */ public abstract class BufferStrategy { /** - * Returns true if the drawing buffer was lost since the last call - * of getDrawGraphics. + * Returns true if the drawing buffer was lost since the last call of + * getDrawGraphics. * - * @return true if the drawing buffer was lost since the last call - * of getDrawGraphics, false otherwise. + * @return true if the drawing buffer was lost since the last call of + * getDrawGraphics, false otherwise. */ public abstract boolean contentsLost(); /** - * Returns true if the drawing buffer is restored from a lost state. + * Returns true if the drawing buffer is restored from a lost state. * - * @return true if the drawing buffer is restored from a lost state, - * false otherwise. + * @return true if the drawing buffer is restored from a lost state, false + * otherwise. */ public abstract boolean contentsRestored(); diff --git a/awt/java/awt/image/BufferedImage.java b/awt/java/awt/image/BufferedImage.java index d305d660b9..c9d58d97f2 100644 --- a/awt/java/awt/image/BufferedImage.java +++ b/awt/java/awt/image/BufferedImage.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import com.android.internal.awt.AndroidGraphics2D; @@ -39,184 +40,215 @@ import org.apache.harmony.awt.gl.Surface; import org.apache.harmony.awt.gl.image.BufferedImageSource; import org.apache.harmony.awt.internal.nls.Messages; - /** - * The BufferedImage class describes an Image which contains a buffer - * of image data and includes a ColorModel and a Raster for this data. - * This class provides methods for obtaining and setting the Raster - * and for manipulating the ColorModel parameters. + * The BufferedImage class describes an Image which contains a buffer of image + * data and includes a ColorModel and a Raster for this data. This class + * provides methods for obtaining and setting the Raster and for manipulating + * the ColorModel parameters. + * + * @since Android 1.0 */ -public class BufferedImage extends -Image implements WritableRenderedImage, Transparency{ +public class BufferedImage extends Image implements WritableRenderedImage, Transparency { - /** - * The Constant TYPE_CUSTOM indicates that Image type - * is unknown. + /** + * The Constant TYPE_CUSTOM indicates that Image type is unknown. */ public static final int TYPE_CUSTOM = 0; - /** - * The Constant TYPE_INT_RGB indicates an image with - * 8 bit RGB color components, it has a DirectColorModel - * without alpha. + /** + * The Constant TYPE_INT_RGB indicates an image with 8 bit RGB color + * components, it has a DirectColorModel without alpha. */ public static final int TYPE_INT_RGB = 1; - /** - * The Constant TYPE_INT_ARGB indicates an image with - * 8 bit RGBA color components, it has a DirectColorModel - * with alpha. + /** + * The Constant TYPE_INT_ARGB indicates an image with 8 bit RGBA color + * components, it has a DirectColorModel with alpha. */ public static final int TYPE_INT_ARGB = 2; - /** - * The Constant TYPE_INT_ARGB_PRE indicates an image with - * 8 bit RGBA color components, it has a DirectColorModel - * with alpha, and image data is premultiplied by alpha. + /** + * The Constant TYPE_INT_ARGB_PRE indicates an image with 8 bit RGBA color + * components, it has a DirectColorModel with alpha, and image data is + * pre-multiplied by alpha. */ public static final int TYPE_INT_ARGB_PRE = 3; - /** - * The Constant TYPE_INT_BGR indicates an image with - * 8 bit RGB color components, BGR color model - * (with the colors Blue, Green, and Red). There is no - * alpha. The image has a DirectColorModel. + /** + * The Constant TYPE_INT_BGR indicates an image with 8 bit RGB color + * components, BGR color model (with the colors Blue, Green, and Red). There + * is no alpha. The image has a DirectColorModel. */ public static final int TYPE_INT_BGR = 4; - /** - * The Constant TYPE_3BYTE_BGR indicates an image with - * 8 bit RGB color components, BGR color model - * (with the colors Blue, Green, and Red stored in 3 bytes). - * There is no alpha. The image has a ComponentColorModel. + /** + * The Constant TYPE_3BYTE_BGR indicates an image with 8 bit RGB color + * components, BGR color model (with the colors Blue, Green, and Red stored + * in 3 bytes). There is no alpha. The image has a ComponentColorModel. */ public static final int TYPE_3BYTE_BGR = 5; - /** - * The Constant TYPE_4BYTE_ABGR indicates an image with - * 8 bit RGBA color components stored in 3 bytes and 1 byte of alpha. - * It has a ComponentColorModel with alpha. + /** + * The Constant TYPE_4BYTE_ABGR indicates an image with 8 bit RGBA color + * components stored in 3 bytes and 1 byte of alpha. It has a + * ComponentColorModel with alpha. */ public static final int TYPE_4BYTE_ABGR = 6; - /** - * The Constant TYPE_4BYTE_ABGR_PRE indicates an image with - * 8 bit RGBA color components stored in 3 bytes and 1 byte - * for alpha. The image has a ComponentColorModel with alpha. - * The color data is premultiplied with alpha. + /** + * The Constant TYPE_4BYTE_ABGR_PRE indicates an image with 8 bit RGBA color + * components stored in 3 bytes and 1 byte for alpha. The image has a + * ComponentColorModel with alpha. The color data is pre-multiplied with + * alpha. */ public static final int TYPE_4BYTE_ABGR_PRE = 7; - /** - * The Constant TYPE_USHORT_565_RGB indicates an image with - * 565 RGB color components (5-bits red, 6-bits green, 5-bits blue) - * with no alpha. This image has a DirectColorModel. + /** + * The Constant TYPE_USHORT_565_RGB indicates an image with 565 RGB color + * components (5-bits red, 6-bits green, 5-bits blue) with no alpha. This + * image has a DirectColorModel. */ public static final int TYPE_USHORT_565_RGB = 8; - /** - * The Constant TYPE_USHORT_555_RGB indicates an image with - * 555 RGB color components (5-bits red, 5-bits green, 5-bits blue) - * with no alpha. This image has a DirectColorModel. + /** + * The Constant TYPE_USHORT_555_RGB indicates an image with 555 RGB color + * components (5-bits red, 5-bits green, 5-bits blue) with no alpha. This + * image has a DirectColorModel. */ public static final int TYPE_USHORT_555_RGB = 9; - /** - * The Constant TYPE_BYTE_GRAY indicates a unsigned byte - * image. This image has a ComponentColorModel with - * a CS_GRAY ColorSpace. + /** + * The Constant TYPE_BYTE_GRAY indicates a unsigned byte image. This image + * has a ComponentColorModel with a CS_GRAY ColorSpace. */ public static final int TYPE_BYTE_GRAY = 10; - /** - * The Constant TYPE_USHORT_GRAY indicates an unsigned short - * image. This image has a ComponentColorModel with a CS_GRAY - * ColorSpace. + /** + * The Constant TYPE_USHORT_GRAY indicates an unsigned short image. This + * image has a ComponentColorModel with a CS_GRAY ColorSpace. */ public static final int TYPE_USHORT_GRAY = 11; - /** - * The Constant TYPE_BYTE_BINARY indicates an opaque byte-packed - * 1, 2 or 4 bit image. The image has an IndexColorModel without - * alpha. + /** + * The Constant TYPE_BYTE_BINARY indicates an opaque byte-packed 1, 2 or 4 + * bit image. The image has an IndexColorModel without alpha. */ public static final int TYPE_BYTE_BINARY = 12; - /** - * The Constant TYPE_BYTE_INDEXED indicates an indexed byte image. + /** + * The Constant TYPE_BYTE_INDEXED indicates an indexed byte image. */ public static final int TYPE_BYTE_INDEXED = 13; - /** The Constant ALPHA_MASK. */ + /** + * The Constant ALPHA_MASK. + */ private static final int ALPHA_MASK = 0xff000000; - /** The Constant RED_MASK. */ + /** + * The Constant RED_MASK. + */ private static final int RED_MASK = 0x00ff0000; - /** The Constant GREEN_MASK. */ + /** + * The Constant GREEN_MASK. + */ private static final int GREEN_MASK = 0x0000ff00; - /** The Constant BLUE_MASK. */ + /** + * The Constant BLUE_MASK. + */ private static final int BLUE_MASK = 0x000000ff; - /** The Constant RED_BGR_MASK. */ + /** + * The Constant RED_BGR_MASK. + */ private static final int RED_BGR_MASK = 0x000000ff; - /** The Constant GREEN_BGR_MASK. */ + /** + * The Constant GREEN_BGR_MASK. + */ private static final int GREEN_BGR_MASK = 0x0000ff00; - /** The Constant BLUE_BGR_MASK. */ + /** + * The Constant BLUE_BGR_MASK. + */ private static final int BLUE_BGR_MASK = 0x00ff0000; - /** The Constant RED_565_MASK. */ + /** + * The Constant RED_565_MASK. + */ private static final int RED_565_MASK = 0xf800; - /** The Constant GREEN_565_MASK. */ + /** + * The Constant GREEN_565_MASK. + */ private static final int GREEN_565_MASK = 0x07e0; - /** The Constant BLUE_565_MASK. */ + /** + * The Constant BLUE_565_MASK. + */ private static final int BLUE_565_MASK = 0x001f; - /** The Constant RED_555_MASK. */ + /** + * The Constant RED_555_MASK. + */ private static final int RED_555_MASK = 0x7c00; - /** The Constant GREEN_555_MASK. */ + /** + * The Constant GREEN_555_MASK. + */ private static final int GREEN_555_MASK = 0x03e0; - /** The Constant BLUE_555_MASK. */ + /** + * The Constant BLUE_555_MASK. + */ private static final int BLUE_555_MASK = 0x001f; - /** The cm. */ + /** + * The cm. + */ private ColorModel cm; - /** The raster. */ + /** + * The raster. + */ private final WritableRaster raster; - /** The image type. */ + /** + * The image type. + */ private final int imageType; - /** The properties. */ + /** + * The properties. + */ private Hashtable properties; - // Surface of the Buffered Image - used for blitting one Buffered Image + // Surface of the Buffered Image - used for blitting one Buffered Image // on the other one or on the Component - /** The image surf. */ + /** + * The image surf. + */ private final ImageSurface imageSurf; /** - * Instantiates a new BufferedImage with the specified ColorModel, - * and WritableRaster objects. The Raster data can be - * be divided or multiplied by alpha. It depends on the - * alphaPremultiplied state in the ColorModel. + * Instantiates a new BufferedImage with the specified ColorModel, and + * WritableRaster objects. The Raster data can be be divided or multiplied + * by alpha. It depends on the alphaPremultiplied state in the ColorModel. * - * @param cm the ColorModel of the new image. - * @param raster the WritableRaster of the new image. - * @param isRasterPremultiplied if true the data of the specified - * Raster is premultiplied by alpha. - * @param properties the properties of new Image. - */ - public BufferedImage(ColorModel cm, WritableRaster raster, - boolean isRasterPremultiplied, Hashtable properties) { + * @param cm + * the ColorModel of the new image. + * @param raster + * the WritableRaster of the new image. + * @param isRasterPremultiplied + * if true the data of the specified Raster is pre-multiplied by + * alpha. + * @param properties + * the properties of new Image. + */ + public BufferedImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, + Hashtable properties) { if (!cm.isCompatibleRaster(raster)) { // awt.4D=The raster is incompatible with this ColorModel throw new IllegalArgumentException(Messages.getString("awt.4D")); //$NON-NLS-1$ @@ -227,7 +259,7 @@ Image implements WritableRenderedImage, Transparency{ throw new IllegalArgumentException(Messages.getString("awt.228")); //$NON-NLS-1$ } - this.cm = cm; + this.cm = cm; this.raster = raster; this.properties = properties; @@ -240,47 +272,52 @@ Image implements WritableRenderedImage, Transparency{ /** * Instantiates a new BufferedImage with the specified width, height - * predefined image type (TYPE_BYTE_BINARY or TYPE_BYTE_INDEXED) - * and the specified IndexColorModel. + * predefined image type (TYPE_BYTE_BINARY or TYPE_BYTE_INDEXED) and the + * specified IndexColorModel. * - * @param width the width of new image. - * @param height the height of new image. - * @param imageType the predefined image type. - * @param cm the specified IndexColorModel. + * @param width + * the width of new image. + * @param height + * the height of new image. + * @param imageType + * the predefined image type. + * @param cm + * the specified IndexColorModel. */ - public BufferedImage(int width, int height, int imageType, - IndexColorModel cm) { + public BufferedImage(int width, int height, int imageType, IndexColorModel cm) { switch (imageType) { - case TYPE_BYTE_BINARY: - if (cm.hasAlpha()) { - // awt.227=This image type can't have alpha - throw new IllegalArgumentException(Messages.getString("awt.227")); //$NON-NLS-1$ - } - int pixel_bits = 0; - int mapSize = cm.getMapSize(); - if (mapSize <= 2) { - pixel_bits = 1; - } else if (mapSize <= 4) { - pixel_bits = 2; - } else if (mapSize <= 16) { - pixel_bits = 4; - } else { - // awt.221=The imageType is TYPE_BYTE_BINARY and the color map has more than 16 entries - throw new IllegalArgumentException(Messages.getString("awt.221")); //$NON-NLS-1$ - } + case TYPE_BYTE_BINARY: + if (cm.hasAlpha()) { + // awt.227=This image type can't have alpha + throw new IllegalArgumentException(Messages.getString("awt.227")); //$NON-NLS-1$ + } + int pixel_bits = 0; + int mapSize = cm.getMapSize(); + if (mapSize <= 2) { + pixel_bits = 1; + } else if (mapSize <= 4) { + pixel_bits = 2; + } else if (mapSize <= 16) { + pixel_bits = 4; + } else { + // awt.221=The imageType is TYPE_BYTE_BINARY and the color + // map has more than 16 entries + throw new IllegalArgumentException(Messages.getString("awt.221")); //$NON-NLS-1$ + } - raster = Raster.createPackedRaster(DataBuffer.TYPE_BYTE, width, - height, 1, pixel_bits, null); - break; + raster = Raster.createPackedRaster(DataBuffer.TYPE_BYTE, width, height, 1, + pixel_bits, null); + break; - case TYPE_BYTE_INDEXED: - raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, - width, height, 1, null); - break; + case TYPE_BYTE_INDEXED: + raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height, 1, + null); + break; - default: - // awt.222=The imageType is not TYPE_BYTE_BINARY or TYPE_BYTE_INDEXED - throw new IllegalArgumentException(Messages.getString("awt.222")); //$NON-NLS-1$ + default: + // awt.222=The imageType is not TYPE_BYTE_BINARY or + // TYPE_BYTE_INDEXED + throw new IllegalArgumentException(Messages.getString("awt.222")); //$NON-NLS-1$ } @@ -296,187 +333,159 @@ Image implements WritableRenderedImage, Transparency{ } /** - * Instantiates a new BufferedImage with the specified width, height - * and predefined image type. + * Instantiates a new BufferedImage with the specified width, height and + * predefined image type. * - * @param width the width of new image. - * @param height the height of new image. - * @param imageType the predefined image type. + * @param width + * the width of new image. + * @param height + * the height of new image. + * @param imageType + * the predefined image type. */ public BufferedImage(int width, int height, int imageType) { switch (imageType) { - case TYPE_INT_RGB: - cm = new DirectColorModel(24, RED_MASK, GREEN_MASK, BLUE_MASK); - raster = cm.createCompatibleWritableRaster(width, height); - break; - - case TYPE_INT_ARGB: - cm = ColorModel.getRGBdefault(); - raster = cm.createCompatibleWritableRaster(width, height); - break; - - case TYPE_INT_ARGB_PRE: - cm = new DirectColorModel( - ColorSpace.getInstance(ColorSpace.CS_sRGB), - 32, - RED_MASK, - GREEN_MASK, - BLUE_MASK, - ALPHA_MASK, - true, - DataBuffer.TYPE_INT); - - raster = cm.createCompatibleWritableRaster(width, height); - break; - - case TYPE_INT_BGR: - cm = new DirectColorModel(24, - RED_BGR_MASK, - GREEN_BGR_MASK, - BLUE_BGR_MASK); - - raster = cm.createCompatibleWritableRaster(width, height); - break; - - case TYPE_3BYTE_BGR: { - int bits[] = { 8, 8, 8 }; - int bandOffsets[] = { 2, 1, 0 }; - cm = new ComponentColorModel( - ColorSpace.getInstance(ColorSpace.CS_sRGB), - bits, - false, - false, - Transparency.OPAQUE, - DataBuffer.TYPE_BYTE); - - raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, - width, height, width * 3, 3, bandOffsets, null); + case TYPE_INT_RGB: + cm = new DirectColorModel(24, RED_MASK, GREEN_MASK, BLUE_MASK); + raster = cm.createCompatibleWritableRaster(width, height); + break; + + case TYPE_INT_ARGB: + cm = ColorModel.getRGBdefault(); + raster = cm.createCompatibleWritableRaster(width, height); + break; + + case TYPE_INT_ARGB_PRE: + cm = new DirectColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), 32, RED_MASK, + GREEN_MASK, BLUE_MASK, ALPHA_MASK, true, DataBuffer.TYPE_INT); + + raster = cm.createCompatibleWritableRaster(width, height); + break; + + case TYPE_INT_BGR: + cm = new DirectColorModel(24, RED_BGR_MASK, GREEN_BGR_MASK, BLUE_BGR_MASK); + + raster = cm.createCompatibleWritableRaster(width, height); + break; + + case TYPE_3BYTE_BGR: { + int bits[] = { + 8, 8, 8 + }; + int bandOffsets[] = { + 2, 1, 0 + }; + cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), bits, + false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); + + raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height, + width * 3, 3, bandOffsets, null); } - break; - - case TYPE_4BYTE_ABGR: { - int bits[] = { 8, 8, 8, 8 }; - int bandOffsets[] = { 3, 2, 1, 0 }; - cm = new ComponentColorModel( - ColorSpace.getInstance(ColorSpace.CS_sRGB), - bits, - true, - false, - Transparency.TRANSLUCENT, - DataBuffer.TYPE_BYTE); - - raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, - width, height, width * 4, 4, bandOffsets, null); + break; + + case TYPE_4BYTE_ABGR: { + int bits[] = { + 8, 8, 8, 8 + }; + int bandOffsets[] = { + 3, 2, 1, 0 + }; + cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), bits, + true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); + + raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height, + width * 4, 4, bandOffsets, null); } - break; - - case TYPE_4BYTE_ABGR_PRE: { - int bits[] = { 8, 8, 8, 8 }; - int bandOffsets[] = { 3, 2, 1, 0 }; - cm = new ComponentColorModel( - ColorSpace.getInstance(ColorSpace.CS_sRGB), - bits, - true, - true, - Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); - - raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, - width, height, width * 4, 4, bandOffsets, null); + break; + + case TYPE_4BYTE_ABGR_PRE: { + int bits[] = { + 8, 8, 8, 8 + }; + int bandOffsets[] = { + 3, 2, 1, 0 + }; + cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), bits, + true, true, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); + + raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height, + width * 4, 4, bandOffsets, null); } - break; - - case TYPE_USHORT_565_RGB: - cm = new DirectColorModel( - ColorSpace.getInstance(ColorSpace.CS_sRGB), - 16, - RED_565_MASK, - GREEN_565_MASK, - BLUE_565_MASK, - 0, - false, - DataBuffer.TYPE_USHORT); - - raster = cm.createCompatibleWritableRaster(width, height); - break; - - case TYPE_USHORT_555_RGB: - cm = new DirectColorModel( - ColorSpace.getInstance(ColorSpace.CS_sRGB), - 15, - RED_555_MASK, - GREEN_555_MASK, - BLUE_555_MASK, - 0, - false, - DataBuffer.TYPE_USHORT); - - raster = cm.createCompatibleWritableRaster(width, height); - break; - - case TYPE_BYTE_GRAY: { - int bits[] = { 8 }; - cm = new ComponentColorModel( - ColorSpace.getInstance(ColorSpace.CS_GRAY), - bits, - false, - false, - Transparency.OPAQUE, - DataBuffer.TYPE_BYTE); - - raster = cm.createCompatibleWritableRaster(width, height); + break; + + case TYPE_USHORT_565_RGB: + cm = new DirectColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), 16, + RED_565_MASK, GREEN_565_MASK, BLUE_565_MASK, 0, false, + DataBuffer.TYPE_USHORT); + + raster = cm.createCompatibleWritableRaster(width, height); + break; + + case TYPE_USHORT_555_RGB: + cm = new DirectColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), 15, + RED_555_MASK, GREEN_555_MASK, BLUE_555_MASK, 0, false, + DataBuffer.TYPE_USHORT); + + raster = cm.createCompatibleWritableRaster(width, height); + break; + + case TYPE_BYTE_GRAY: { + int bits[] = { + 8 + }; + cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), bits, + false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); + + raster = cm.createCompatibleWritableRaster(width, height); } - break; - - case TYPE_USHORT_GRAY: { - int bits[] = { 16 }; - cm = new ComponentColorModel( - ColorSpace.getInstance(ColorSpace.CS_GRAY), - bits, - false, - false, - Transparency.OPAQUE, - DataBuffer.TYPE_USHORT); - raster = cm.createCompatibleWritableRaster(width, height); + break; + + case TYPE_USHORT_GRAY: { + int bits[] = { + 16 + }; + cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), bits, + false, false, Transparency.OPAQUE, DataBuffer.TYPE_USHORT); + raster = cm.createCompatibleWritableRaster(width, height); } - break; + break; - case TYPE_BYTE_BINARY: { - int colorMap[] = { 0, 0xffffff }; - cm = new IndexColorModel(1, 2, colorMap, 0, false, -1, - DataBuffer.TYPE_BYTE); + case TYPE_BYTE_BINARY: { + int colorMap[] = { + 0, 0xffffff + }; + cm = new IndexColorModel(1, 2, colorMap, 0, false, -1, DataBuffer.TYPE_BYTE); - raster = Raster.createPackedRaster(DataBuffer.TYPE_BYTE, width, - height, 1, 1, null); + raster = Raster.createPackedRaster(DataBuffer.TYPE_BYTE, width, height, 1, 1, null); } - break; - - case TYPE_BYTE_INDEXED: { - int colorMap[] = new int[256]; - int i = 0; - for (int r = 0; r < 256; r += 51) { - for (int g = 0; g < 256; g += 51) { - for (int b = 0; b < 256; b += 51) { - colorMap[i] = (r << 16) | (g << 8) | b; - i++; + break; + + case TYPE_BYTE_INDEXED: { + int colorMap[] = new int[256]; + int i = 0; + for (int r = 0; r < 256; r += 51) { + for (int g = 0; g < 256; g += 51) { + for (int b = 0; b < 256; b += 51) { + colorMap[i] = (r << 16) | (g << 8) | b; + i++; + } } } - } - int gray = 0x12; - for (; i < 256; i++, gray += 6) { - colorMap[i] = (gray << 16) | (gray << 8) | gray; - } - cm = new IndexColorModel(8, 256, colorMap, 0, false, -1, - DataBuffer.TYPE_BYTE); - raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, - width, height, 1, null); + int gray = 0x12; + for (; i < 256; i++, gray += 6) { + colorMap[i] = (gray << 16) | (gray << 8) | gray; + } + cm = new IndexColorModel(8, 256, colorMap, 0, false, -1, DataBuffer.TYPE_BYTE); + raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height, 1, + null); } - break; - default: - // awt.224=Unknown image type - throw new IllegalArgumentException(Messages.getString("awt.224")); //$NON-NLS-1$ + break; + default: + // awt.224=Unknown image type + throw new IllegalArgumentException(Messages.getString("awt.224")); //$NON-NLS-1$ } this.imageType = imageType; imageSurf = createImageSurface(imageType); @@ -488,7 +497,7 @@ Image implements WritableRenderedImage, Transparency{ } public Object getProperty(String name) { - if(name == null) { + if (name == null) { // awt.225=Property name is null throw new NullPointerException(Messages.getString("awt.225")); //$NON-NLS-1$ } @@ -504,9 +513,8 @@ Image implements WritableRenderedImage, Transparency{ public WritableRaster copyData(WritableRaster outRaster) { if (outRaster == null) { - outRaster = Raster.createWritableRaster(raster.getSampleModel(), - new Point(raster.getSampleModelTranslateX(), - raster.getSampleModelTranslateY())); + outRaster = Raster.createWritableRaster(raster.getSampleModel(), new Point(raster + .getSampleModelTranslateX(), raster.getSampleModelTranslateY())); } int w = outRaster.getWidth(); @@ -530,8 +538,7 @@ Image implements WritableRenderedImage, Transparency{ SampleModel sm = raster.getSampleModel(); SampleModel nsm = sm.createCompatibleSampleModel(w, h); - WritableRaster outr = Raster.createWritableRaster(nsm, - rect.getLocation()); + WritableRaster outr = Raster.createWritableRaster(nsm, rect.getLocation()); Object data = null; data = raster.getDataElements(minX, minY, w, h, data); @@ -550,7 +557,7 @@ Image implements WritableRenderedImage, Transparency{ Vector v = new Vector(); for (Enumeration e = properties.keys(); e.hasMoreElements();) { try { - v.add((String) e.nextElement()); + v.add((String)e.nextElement()); } catch (ClassCastException ex) { } } @@ -573,7 +580,7 @@ Image implements WritableRenderedImage, Transparency{ @Override public String toString() { return "BufferedImage@" + Integer.toHexString(hashCode()) + //$NON-NLS-1$ - ": type = " + imageType + " " + cm + " " + raster; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + ": type = " + imageType + " " + cm + " " + raster; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } public WritableRaster getWritableTile(int tileX, int tileY) { @@ -590,13 +597,12 @@ Image implements WritableRenderedImage, Transparency{ } /** - * Gets a WritableRaster object which contains the alpha channel of - * BufferedImage object with ColorModel objects that supports - * a separate alpha channel such as ComponentColorModel - * or DirectColorModel. + * Gets a WritableRaster object which contains the alpha channel of + * BufferedImage object with ColorModel objects that supports a separate + * alpha channel such as ComponentColorModel or DirectColorModel. * - * @return the WritableRaster object which contains the alpha - * channel of this BufferedImage. + * @return the WritableRaster object which contains the alpha channel of + * this BufferedImage. */ public WritableRaster getAlphaRaster() { return cm.getAlphaRaster(raster); @@ -643,10 +649,8 @@ Image implements WritableRenderedImage, Transparency{ int minX = raster.getMinX(); int minY = raster.getMinY(); - WritableRaster outr = Raster.createWritableRaster( - raster.getSampleModel(), - new Point(raster.getSampleModelTranslateX(), - raster.getSampleModelTranslateY())); + WritableRaster outr = Raster.createWritableRaster(raster.getSampleModel(), new Point(raster + .getSampleModelTranslateX(), raster.getSampleModelTranslateY())); Object data = null; @@ -678,11 +682,14 @@ Image implements WritableRenderedImage, Transparency{ /** * Gets the rectangular area of this BufferedImage as a subimage. * - * @param x the x coordinate. - * @param y the y coordinate. - * @param w the width of the subimage. - * @param h the height of the subimage. - * + * @param x + * the x coordinate. + * @param y + * the y coordinate. + * @param w + * the width of the subimage. + * @param h + * the height of the subimage. * @return the BufferedImage. */ public BufferedImage getSubimage(int x, int y, int w, int h) { @@ -697,18 +704,17 @@ Image implements WritableRenderedImage, Transparency{ } /** - * Creates the Graphics2D object which allows to draw into - * this BufferedImage. + * Creates the Graphics2D object which allows to draw into this + * BufferedImage. * * @return the graphics2D object. */ public Graphics2D createGraphics() { - GraphicsEnvironment ge = - GraphicsEnvironment.getLocalGraphicsEnvironment(); - //return ge.createGraphics(this); - //???AWT hack, FIXME - //return AndroidGraphics2D.getInstance(); - //throw new RuntimeException("Not implemented!"); + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + // return ge.createGraphics(this); + // ???AWT hack, FIXME + // return AndroidGraphics2D.getInstance(); + // throw new RuntimeException("Not implemented!"); return null; } @@ -718,38 +724,44 @@ Image implements WritableRenderedImage, Transparency{ } /** - * Coerces the data to achieve the state which is specified by - * the isAlphaPremultiplied variable. + * Coerces the data to achieve the state which is specified by the + * isAlphaPremultiplied variable. * - * @param isAlphaPremultiplied the is alpha premultiplied state. + * @param isAlphaPremultiplied + * the is alpha pre-multiplied state. */ public void coerceData(boolean isAlphaPremultiplied) { - if (cm.hasAlpha() && - cm.isAlphaPremultiplied() != isAlphaPremultiplied) { + if (cm.hasAlpha() && cm.isAlphaPremultiplied() != isAlphaPremultiplied) { cm = cm.coerceData(raster, isAlphaPremultiplied); } } /** - * Gets an array of colors in the TYPE_INT_ARGB color model and - * default sRGB colorspace of the specified area of this - * BufferedImage. The result array is composed by the following - * algirithm: - *

    - * pixel = rgbArray[offset + (y-startY)*scansize + (x-startX)] - * - * @param startX the start X area coordinate. - * @param startY the start Y area coordinate. - * @param w the width of the area. - * @param h the height of the area. - * @param rgbArray the result array will be stored to this array. - * @param offset the offset of the rgbArray array. - * @param scansize the scanline stride for the rgbArray. + * Gets an array of colors in the TYPE_INT_ARGB color model and default sRGB + * color space of the specified area of this BufferedImage. The result array + * is composed by the following algorithm: + *

    + * pixel = rgbArray[offset + (y-startY)*scansize + (x-startX)] + *

    * + * @param startX + * the start X area coordinate. + * @param startY + * the start Y area coordinate. + * @param w + * the width of the area. + * @param h + * the height of the area. + * @param rgbArray + * the result array will be stored to this array. + * @param offset + * the offset of the rgbArray array. + * @param scansize + * the scanline stride for the rgbArray. * @return an array of colors for the specified area. */ - public int[] getRGB(int startX, int startY, int w, int h, int[] rgbArray, - int offset, int scansize) { + public int[] getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, + int scansize) { if (rgbArray == null) { rgbArray = new int[offset + h * scansize]; } @@ -765,38 +777,47 @@ Image implements WritableRenderedImage, Transparency{ } /** - * Sets RGB values from the specified array to the specified - * BufferedImage area. The pixels are in the default RGB color model - * (TYPE_INT_ARGB) and default sRGB color space. + * Sets RGB values from the specified array to the specified BufferedImage + * area. The pixels are in the default RGB color model (TYPE_INT_ARGB) and + * default sRGB color space. * - * @param startX the start X coordinate. - * @param startY the start Y coordinate. - * @param w the width of the BufferedImage area. - * @param h the height of the BufferedImage area. - * @param rgbArray the array of RGB values. - * @param offset the offset of the rgbArray array. - * @param scansize the scanline stride for the rgbArray. - */ - public void setRGB(int startX, int startY, int w, int h, int[] rgbArray, - int offset, int scansize) { + * @param startX + * the start X coordinate. + * @param startY + * the start Y coordinate. + * @param w + * the width of the BufferedImage area. + * @param h + * the height of the BufferedImage area. + * @param rgbArray + * the array of RGB values. + * @param offset + * the offset of the rgbArray array. + * @param scansize + * the scanline stride for the rgbArray. + */ + public void setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, + int scansize) { int off = offset; for (int y = startY; y < startY + h; y++, off += scansize) { int i = off; for (int x = startX; x < startX + w; x++, i++) { - raster.setDataElements(x, y, - cm.getDataElements(rgbArray[i], null)); + raster.setDataElements(x, y, cm.getDataElements(rgbArray[i], null)); } } } /** - * Sets a the specified RGB value to the specified pixel of - * this BufferedImage. The pixel should be in the default - * RGB color model (TYPE_INT_ARGB) and default sRGB color space. - * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param rgb the RGB value to be set. + * Sets a the specified RGB value to the specified pixel of this + * BufferedImage. The pixel should be in the default RGB color model + * (TYPE_INT_ARGB) and default sRGB color space. + * + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param rgb + * the RGB value to be set. */ public synchronized void setRGB(int x, int y, int rgb) { raster.setDataElements(x, y, cm.getDataElements(rgb, null)); @@ -814,25 +835,26 @@ Image implements WritableRenderedImage, Transparency{ } /** - * Gets a color in the TYPE_INT_ARGB color model and default - * sRGB colorspace of the specified pixel. - * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. + * Gets a color in the TYPE_INT_ARGB color model and default sRGB color + * space of the specified pixel. * - * @return the color of the specified pixel in the TYPE_INT_ARGB - * color model and default sRGB colorspace. + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @return the color of the specified pixel in the TYPE_INT_ARGB color model + * and default sRGB color space. */ public int getRGB(int x, int y) { return cm.getRGB(raster.getDataElements(x, y, null)); } /** - * Returnes true if alpha is premultiplied, - * false if alpha is not premultiplied or there is no alpha. + * Returns true if alpha is pre-multiplied, false if alpha is not + * pre-multiplied or there is no alpha. * - * @return true if alpha is premultiplied, - * false if alpha is not premultiplied or there is no alpha. + * @return true if alpha is pre-multiplied, false if alpha is not + * pre-multiplied or there is no alpha. */ public boolean isAlphaPremultiplied() { return cm.isAlphaPremultiplied(); @@ -907,9 +929,9 @@ Image implements WritableRenderedImage, Transparency{ /** * Creates the image surface. * - * @param type the type - * - * @return the image surface + * @param type + * the type. + * @return the image surface. */ private ImageSurface createImageSurface(int type) { return new ImageSurface(getColorModel(), getRaster(), type); @@ -918,7 +940,7 @@ Image implements WritableRenderedImage, Transparency{ /** * Gets the image surface. * - * @return the image surface + * @return the image surface. */ ImageSurface getImageSurface() { return imageSurf; @@ -928,4 +950,3 @@ Image implements WritableRenderedImage, Transparency{ return cm.getTransparency(); } } - diff --git a/awt/java/awt/image/BufferedImageFilter.java b/awt/java/awt/image/BufferedImageFilter.java index 44b3c2ed2a..8b6fcf0465 100644 --- a/awt/java/awt/image/BufferedImageFilter.java +++ b/awt/java/awt/image/BufferedImageFilter.java @@ -27,49 +27,72 @@ import org.apache.harmony.awt.gl.AwtImageBackdoorAccessor; import org.apache.harmony.awt.internal.nls.Messages; /** - * The BufferedImageFilter class provides filtering operations to - * the BufferedImage objects using operators which implement - * BufferedImageOp interface. + * The BufferedImageFilter class provides filtering operations to the + * BufferedImage objects using operators which implement BufferedImageOp + * interface. + * + * @since Android 1.0 */ public class BufferedImageFilter extends ImageFilter implements Cloneable { - - /** The Constant accessor. */ + + /** + * The Constant accessor. + */ private static final AwtImageBackdoorAccessor accessor = AwtImageBackdoorAccessor.getInstance(); - /** The op. */ + /** + * The op. + */ private BufferedImageOp op; - /** The raster. */ + /** + * The raster. + */ private WritableRaster raster; - /** The i data. */ + /** + * The i data. + */ private int iData[]; - - /** The b data. */ + + /** + * The b data. + */ private byte bData[]; - /** The width. */ + /** + * The width. + */ private int width; - - /** The height. */ + + /** + * The height. + */ private int height; - /** The cm. */ + /** + * The cm. + */ private ColorModel cm; - /** The forced rgb. */ + /** + * The forced rgb. + */ private boolean forcedRGB = false; - - /** The transfer type. */ + + /** + * The transfer type. + */ private int transferType = DataBuffer.TYPE_UNDEFINED; /** - * Instantiates a new BufferedImageFilter with the specified - * BufferedImageOp operator. + * Instantiates a new BufferedImageFilter with the specified BufferedImageOp + * operator. * - * @param op the specified BufferedImageOp operator. - * - * @throws NullPointerException if BufferedImageOp is null. + * @param op + * the specified BufferedImageOp operator. + * @throws NullPointerException + * if BufferedImageOp is null. */ public BufferedImageFilter(BufferedImageOp op) { if (op == null) { @@ -79,11 +102,11 @@ public class BufferedImageFilter extends ImageFilter implements Cloneable { } /** - * Gets the BufferedImageOp operator associated with this + * Gets the BufferedImageOp operator associated with this * BufferedImageFilter object. * - * @return the BufferedImageOp associated with this - * BufferedImageFilter object. + * @return the BufferedImageOp associated with this BufferedImageFilter + * object. */ public BufferedImageOp getBufferedImageOp() { return op; @@ -110,22 +133,14 @@ public class BufferedImageFilter extends ImageFilter implements Cloneable { } @Override - public void setPixels( - int x, int y, int - w, int h, - ColorModel model, byte[] pixels, - int off, int scansize - ) { + public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, + int scansize) { setPixels(x, y, w, h, model, pixels, off, scansize, true); } @Override - public void setPixels( - int x, int y, - int w, int h, - ColorModel model, int[] pixels, - int off, int scansize - ) { + public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, + int scansize) { setPixels(x, y, w, h, model, pixels, off, scansize, false); } @@ -163,22 +178,27 @@ public class BufferedImageFilter extends ImageFilter implements Cloneable { /** * Sets the pixels. * - * @param x the x - * @param y the y - * @param w the w - * @param h the h - * @param model the model - * @param pixels the pixels - * @param off the off - * @param scansize the scansize - * @param isByteData the is byte data + * @param x + * the x. + * @param y + * the y. + * @param w + * the w. + * @param h + * the h. + * @param model + * the model. + * @param pixels + * the pixels. + * @param off + * the off. + * @param scansize + * the scansize. + * @param isByteData + * the is byte data. */ - private void setPixels( - int x, int y, - int w, int h, - ColorModel model, Object pixels, - int off, int scansize, boolean isByteData - ) { + private void setPixels(int x, int y, int w, int h, ColorModel model, Object pixels, int off, + int scansize, boolean isByteData) { // Check bounds // Need to copy only the pixels that will fit into the destination area if (x < 0) { @@ -216,23 +236,24 @@ public class BufferedImageFilter extends ImageFilter implements Cloneable { boolean canArraycopy; // Process pixels - switch(transferType) { + switch (transferType) { case DataBuffer.TYPE_UNDEFINED: { if (isByteData) { transferType = DataBuffer.TYPE_BYTE; createRaster(transferType); - //bData = new byte[width*height]; + // bData = new byte[width*height]; canArraycopy = !forcedRGB; break; } transferType = DataBuffer.TYPE_INT; createRaster(transferType); - //iData = new int[width*height]; + // iData = new int[width*height]; canArraycopy = !forcedRGB || model.equals(ColorModel.getRGBdefault()); break; } // And proceed to copy the pixels case DataBuffer.TYPE_INT: { - if (isByteData) { // There are int data already but the new data are bytes + if (isByteData) { // There are int data already but the new data + // are bytes forceRGB(); canArraycopy = false; break; @@ -250,7 +271,8 @@ public class BufferedImageFilter extends ImageFilter implements Cloneable { // RGB conversion canArraycopy = false; break; - } default: { + } + default: { throw new IllegalStateException(Messages.getString("awt.06")); //$NON-NLS-1$ } } @@ -260,7 +282,7 @@ public class BufferedImageFilter extends ImageFilter implements Cloneable { int dstOffset = x + y * width; if (canArraycopy) { - Object dstArray = isByteData ? (Object) bData : (Object) iData; + Object dstArray = isByteData ? (Object)bData : (Object)iData; for (; off < maxOffset; off += scansize, dstOffset += width) { System.arraycopy(pixels, off, dstArray, dstOffset, w); } @@ -271,11 +293,8 @@ public class BufferedImageFilter extends ImageFilter implements Cloneable { int dstPos = dstOffset; int maxDstPos = dstOffset + w; for (; dstPos < maxDstPos; dstPos++, srcPos++) { - iData[dstPos] = model.getRGB( - isByteData ? - ((byte[])pixels)[srcPos] : - ((int[])pixels)[srcPos] - ); + iData[dstPos] = model.getRGB(isByteData ? ((byte[])pixels)[srcPos] + : ((int[])pixels)[srcPos]); } } } @@ -287,22 +306,24 @@ public class BufferedImageFilter extends ImageFilter implements Cloneable { private void forceRGB() { if (!forcedRGB) { forcedRGB = true; - int size = width*height; + int size = width * height; int rgbData[] = new int[size]; if (bData != null) { - for (int i=0; i profiles = new ArrayList(10); - ArrayList sequence = new ArrayList(10); + ArrayList sequence = new ArrayList(10); // We need this profile anyway ICC_Profile xyzProfile = ICC_Profile.getInstance(ColorSpace.CS_CIEXYZ); @@ -149,41 +168,42 @@ public class ColorConvertOp implements BufferedImageOp, RasterOp { int conversionLength = conversionSequence.length; if (conversionLength > 0) { conversionFirst = conversionSequence[0]; - conversionLast = conversionSequence[conversionLength-1]; + conversionLast = conversionSequence[conversionLength - 1]; } boolean iccSequenceStarted = false; - + if (src != conversionFirst && src != null) { if (src instanceof ICC_Profile) { profiles.add(src); iccSequenceStarted = true; } else { profiles.add(xyzProfile); - sequence.add(src); // Add non-ICC color space to the sequence - } + sequence.add(src); // Add non-ICC color space to the + // sequence + } } else { profiles.add(xyzProfile); } - - for (int i=0; i 1) { @@ -192,109 +212,111 @@ public class ColorConvertOp implements BufferedImageOp, RasterOp { // Add non-ICC color space to the sequence sequence.add(conversionSequence[i]); } - + profiles.clear(); profiles.add(xyzProfile); - iccSequenceStarted = false; // Sequence of ICC profiles is processed + iccSequenceStarted = false; // Sequence of ICC profiles is + // processed } else { // Add non-ICC color space to the sequence - sequence.add(conversionSequence[i]); - } + sequence.add(conversionSequence[i]); + } } - - if (dst != conversionLast && dst != null) { // Add last profile if needed + + if (dst != conversionLast && dst != null) { // Add last profile if + // needed if (dst instanceof ICC_Profile) { profiles.add(dst); iccSequenceStarted = true; } else if (iccSequenceStarted) { profiles.add(xyzProfile); } else { - sequence.add(dst); // Add last non-ICC color space to the sequence + sequence.add(dst); // Add last non-ICC color space to the + // sequence } } - + if (iccSequenceStarted) { // Make last transform if needed sequence.add(new ICC_Transform(profiles.toArray(new ICC_Profile[0]))); if (dst != null && !(dst instanceof ICC_Profile)) { sequence.add(dst); // Add last non-ICC color space to the - // sequence + // sequence } } // Calculate max number of components // This number will be used for memory allocation maxComponents = 0; - Object o; - for (int i=0, size = sequence.size(); i t.getNumInputChannels() + 1) ? - maxComponents : - t.getNumInputChannels() + 1; - maxComponents = - (maxComponents > t.getNumOutputChannels() + 1) ? - maxComponents : - t.getNumOutputChannels() + 1; + ICC_Transform t = (ICC_Transform)o; + maxComponents = (maxComponents > t.getNumInputChannels() + 1) ? maxComponents + : t.getNumInputChannels() + 1; + maxComponents = (maxComponents > t.getNumOutputChannels() + 1) ? maxComponents + : t.getNumOutputChannels() + 1; } else { - ColorSpace cs = (ColorSpace) o; - maxComponents = - (maxComponents > cs.getNumComponents() + 1) ? - maxComponents : - cs.getNumComponents() + 1; - } + ColorSpace cs = (ColorSpace)o; + maxComponents = (maxComponents > cs.getNumComponents() + 1) ? maxComponents + : cs.getNumComponents() + 1; + } } - + return sequence.toArray(); } } - + /** - * Instantiates a new ColorConvertOp object using two specified - * ColorSpace objects. + * Instantiates a new ColorConvertOp object using two specified ColorSpace + * objects. * - * @param srcCS the source ColorSpace. - * @param dstCS the destination ColorSpace. - * @param hints the RenderingHints object used for - * the color conversion, or null. + * @param srcCS + * the source ColorSpace. + * @param dstCS + * the destination ColorSpace. + * @param hints + * the RenderingHints object used for the color conversion, or + * null. */ public ColorConvertOp(ColorSpace srcCS, ColorSpace dstCS, RenderingHints hints) { if (srcCS == null || dstCS == null) { throw new NullPointerException(Messages.getString("awt.25B")); //$NON-NLS-1$ } - + renderingHints = hints; - + boolean srcICC = srcCS instanceof ICC_ColorSpace; boolean dstICC = dstCS instanceof ICC_ColorSpace; - + if (srcICC && dstICC) { conversionSequence = new ICC_Profile[2]; } else { conversionSequence = new Object[2]; isICC = false; } - + if (srcICC) { - conversionSequence[0] = ((ICC_ColorSpace) srcCS).getProfile(); + conversionSequence[0] = ((ICC_ColorSpace)srcCS).getProfile(); } else { conversionSequence[0] = srcCS; } - + if (dstICC) { - conversionSequence[1] = ((ICC_ColorSpace) dstCS).getProfile(); + conversionSequence[1] = ((ICC_ColorSpace)dstCS).getProfile(); } else { conversionSequence[1] = dstCS; } } /** - * Instantiates a new ColorConvertOp object from the specified - * ICC_Profile objects. + * Instantiates a new ColorConvertOp object from the specified ICC_Profile + * objects. * - * @param profiles the array of ICC_Profile objects. - * @param hints the RenderingHints object used for - * the color conversion, or null. + * @param profiles + * the array of ICC_Profile objects. + * @param hints + * the RenderingHints object used for the color conversion, or + * null. */ public ColorConvertOp(ICC_Profile profiles[], RenderingHints hints) { if (profiles == null) { @@ -302,37 +324,39 @@ public class ColorConvertOp implements BufferedImageOp, RasterOp { } renderingHints = hints; - + // This array is not used in the program logic, so don't need to copy it // Store it only to return back - midProfiles = profiles; - + midProfiles = profiles; + conversionSequence = new ICC_Profile[midProfiles.length]; - + // Add profiles to the conversion sequence - for (int i=0, length=midProfiles.length; i Transparency.TRANSLUCENT) { + if (transparency < Transparency.OPAQUE || transparency > Transparency.TRANSLUCENT) { // awt.270=The transparency is not a valid value throw new IllegalArgumentException(Messages.getString("awt.270")); //$NON-NLS-1$ } @@ -148,11 +181,12 @@ public abstract class ColorModel implements Transparency { } /** - * Instantiates a new color model with the specified pixel bit depth. - * The transferType is chosen based on the pixel bits, and the other - * data fields are given default values. + * Instantiates a new color model with the specified pixel bit depth. The + * transferType is chosen based on the pixel bits, and the other data fields + * are given default values. * - * @param bits the array of component masks + * @param bits + * the array of component masks. */ public ColorModel(int bits) { @@ -178,14 +212,17 @@ public abstract class ColorModel implements Transparency { * Gets the data elements from the specified component array, transforming * them according to rules of the color model. * - * @param components the components - * @param offset the offset in the normComponents array - * @param obj the array that the result is written to: an array of values - * whose length must be the number of components used by the color model and - * whose type depends on the transfer type (based on the pixel bit depth), - * or null to have the appropriate array created - * - * @return the array of data elements + * @param components + * the components. + * @param offset + * the offset in the normComponents array. + * @param obj + * the array that the result is written to: an array of values + * whose length must be the number of components used by the + * color model and whose type depends on the transfer type (based + * on the pixel bit depth), or null to have the appropriate array + * created. + * @return the array of data elements. */ public Object getDataElements(int[] components, int offset, Object obj) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -195,33 +232,36 @@ public abstract class ColorModel implements Transparency { /** * Gets the data elements from the specified array of normalized components. * - * @param normComponents the array normalized components - * @param normOffset the offset in the normComponents array - * @param obj the array that the result is written to: an array of values - * whose length must be the number of components used by the color model and - * whose type depends on the transfer type (based on the pixel bit depth), - * or null to have the appropriate array created - * - * @return the array of data elements - */ - public Object getDataElements(float[] normComponents, int normOffset, - Object obj) { - int unnormComponents[] = getUnnormalizedComponents(normComponents, - normOffset, null, 0); + * @param normComponents + * the array normalized components. + * @param normOffset + * the offset in the normComponents array. + * @param obj + * the array that the result is written to: an array of values + * whose length must be the number of components used by the + * color model and whose type depends on the transfer type (based + * on the pixel bit depth), or null to have the appropriate array + * created. + * @return the array of data elements. + */ + public Object getDataElements(float[] normComponents, int normOffset, Object obj) { + int unnormComponents[] = getUnnormalizedComponents(normComponents, normOffset, null, 0); return getDataElements(unnormComponents, 0, obj); } /** - * Gets the data elements corresponding to the pixel determined by the - * RGB data. - * - * @param rgb the rgb int that defines the pixel - * @param pixel the array that the result is written to: an array of values - * whose length must be the number of components used by the color model and - * whose type depends on the transfer type (based on the pixel bit depth), - * or null to have the appropriate array created + * Gets the data elements corresponding to the pixel determined by the RGB + * data. * - * @return the array of data elements + * @param rgb + * the RGB integer value that defines the pixel. + * @param pixel + * the array that the result is written to: an array of values + * whose length must be the number of components used by the + * color model and whose type depends on the transfer type (based + * on the pixel bit depth), or null to have the appropriate array + * created. + * @return the array of data elements. */ public Object getDataElements(int rgb, Object pixel) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -229,38 +269,38 @@ public abstract class ColorModel implements Transparency { } /** - * Gets the child raster corresponding to the alpha channel of the - * specified writable raster, or null if alpha is not supported. + * Gets the child raster corresponding to the alpha channel of the specified + * writable raster, or null if alpha is not supported. * - * @param raster the raster - * - * @return the alpha raster + * @param raster + * the raster. + * @return the alpha raster. */ public WritableRaster getAlphaRaster(WritableRaster raster) { return null; } /** - * Creates a new color model by coercing the data in the writable raster - * in accordance with the alpha strategy of this color model. - * - * @param raster the raster - * @param isAlphaPremultiplied whether the alpha is premultiplied in this - * color model + * Creates a new color model by coercing the data in the writable raster in + * accordance with the alpha strategy of this color model. * - * @return the new color model + * @param raster + * the raster. + * @param isAlphaPremultiplied + * whether the alpha is pre-multiplied in this color model + * @return the new color model. */ - public ColorModel coerceData(WritableRaster raster, - boolean isAlphaPremultiplied) { + public ColorModel coerceData(WritableRaster raster, boolean isAlphaPremultiplied) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ "supported by this ColorModel"); //$NON-NLS-1$ } @Override public String toString() { - // The output format based on 1.5 release behaviour. + // The output format based on 1.5 release behavior. // It could be reveled such way: - // ColorModel cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB, + // ColorModel cm = new + // ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB, // false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); // System.out.println(cm.toString()); return "ColorModel: Color Space = " + cs.toString() + "; has alpha = " //$NON-NLS-1$ //$NON-NLS-2$ @@ -274,15 +314,17 @@ public abstract class ColorModel implements Transparency { /** * Gets the components of the pixel determined by the data array. * - * @param pixel the data array that defines the pixel (whose - * primitive type corresponds to the pixel length in bits, + * @param pixel + * the data array that defines the pixel (whose primitive type + * corresponds to the pixel length in bits. * @see ColorModel#getTransferType() - * @param components the the array where the resulting components - * are written (or null to prompt the method to create the return array) - * @param offset the offset that tells where the results should be written - * in the return array - * - * @return the array of components + * @param components + * the the array where the resulting components are written (or + * null to prompt the method to create the return array). + * @param offset + * the offset that tells where the results should be written in + * the return array. + * @return the array of components. */ public int[] getComponents(Object pixel, int[] components, int offset) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -292,18 +334,20 @@ public abstract class ColorModel implements Transparency { /** * Gets the normalized components of the pixel determined by the data array. * - * @param pixel the data array that defines the pixel (whose - * primitive type corresponds to the pixel length in bits, + * @param pixel + * the data array that defines the pixel (whose primitive type + * corresponds to the pixel length in bits. * @see ColorModel#getTransferType() - * @param normComponents the array where the resulting normalised components - * are written (or null to prompt the method to create the return array) - * @param normOffset the offset that tells where the results should be written - * in the return array - * - * @return the array of normalized components + * @param normComponents + * the array where the resulting normalized components are + * written (or null to prompt the method to create the return + * array). + * @param normOffset + * the offset that tells where the results should be written in + * the return array. + * @return the array of normalized components. */ - public float[] getNormalizedComponents(Object pixel, - float[] normComponents, int normOffset) { + public float[] getNormalizedComponents(Object pixel, float[] normComponents, int normOffset) { if (pixel == null) { // awt.294=pixel is null @@ -311,8 +355,7 @@ public abstract class ColorModel implements Transparency { } int unnormComponents[] = getComponents(pixel, null, 0); - return getNormalizedComponents(unnormComponents, 0, normComponents, - normOffset); + return getNormalizedComponents(unnormComponents, 0, normComponents, normOffset); } @Override @@ -320,54 +363,52 @@ public abstract class ColorModel implements Transparency { if (!(obj instanceof ColorModel)) { return false; } - ColorModel cm = (ColorModel) obj; + ColorModel cm = (ColorModel)obj; - return (pixel_bits == cm.getPixelSize() && - transferType == cm.getTransferType() && - cs.getType() == cm.getColorSpace().getType() && - hasAlpha == cm.hasAlpha() && - isAlphaPremultiplied == cm.isAlphaPremultiplied() && - transparency == cm.getTransparency() && - numColorComponents == cm.getNumColorComponents() && - numComponents == cm.getNumComponents() && - Arrays.equals(bits, cm.getComponentSize())); + return (pixel_bits == cm.getPixelSize() && transferType == cm.getTransferType() + && cs.getType() == cm.getColorSpace().getType() && hasAlpha == cm.hasAlpha() + && isAlphaPremultiplied == cm.isAlphaPremultiplied() + && transparency == cm.getTransparency() + && numColorComponents == cm.getNumColorComponents() + && numComponents == cm.getNumComponents() && Arrays.equals(bits, cm + .getComponentSize())); } /** * Gets the red component of the pixel determined by the data array. * - * @param inData the data array that defines the pixel (whose - * primitive type corresponds to the pixel length in bits, + * @param inData + * the data array that defines the pixel (whose primitive type + * corresponds to the pixel length in bits. * @see ColorModel#getTransferType() - * - * @return the red + * @return the red. */ public int getRed(Object inData) { return getRed(constructPixel(inData)); } /** - * Gets the RGB int corresponding to the pixel defined by the data array. + * Gets the RGB integer value corresponding to the pixel defined by the data + * array. * - * @param inData the data array that defines the pixel (whose - * primitive type corresponds to the pixel length in bits, + * @param inData + * the data array that defines the pixel (whose primitive type + * corresponds to the pixel length in bits. * @see ColorModel#getTransferType() - * - * @return the int that gives the pixel's colors in RGB format + * @return the integer value that gives the pixel's colors in RGB format. */ public int getRGB(Object inData) { - return (getAlpha(inData) << 24 | getRed(inData) << 16 | - getGreen(inData) << 8 | getBlue(inData)); + return (getAlpha(inData) << 24 | getRed(inData) << 16 | getGreen(inData) << 8 | getBlue(inData)); } /** * Gets the green component of the pixel defined by the data array. * - * @param inData the data array that defines the pixel (whose - * primitive type corresponds to the pixel length in bits, + * @param inData + * the data array that defines the pixel (whose primitive type + * corresponds to the pixel length in bits. * @see ColorModel#getTransferType() - * - * @return the green + * @return the green. */ public int getGreen(Object inData) { return getGreen(constructPixel(inData)); @@ -376,11 +417,11 @@ public abstract class ColorModel implements Transparency { /** * Gets the blue component of the pixel defined by the data array. * - * @param inData the data array that defines the pixel (whose - * primitive type corresponds to the pixel length in bits, + * @param inData + * the data array that defines the pixel (whose primitive type + * corresponds to the pixel length in bits. * @see ColorModel#getTransferType() - * - * @return the blue + * @return the blue. */ public int getBlue(Object inData) { return getBlue(constructPixel(inData)); @@ -389,11 +430,11 @@ public abstract class ColorModel implements Transparency { /** * Gets the alpha component of the pixel defined by the data array. * - * @param inData the data array that defines the pixel (whose - * primitive type corresponds to the pixel length in bits, + * @param inData + * the data array that defines the pixel (whose primitive type + * corresponds to the pixel length in bits. * @see ColorModel#getTransferType() - * - * @return the alpha + * @return the alpha. */ public int getAlpha(Object inData) { return getAlpha(constructPixel(inData)); @@ -402,10 +443,11 @@ public abstract class ColorModel implements Transparency { /** * Creates a compatible writable raster. * - * @param w the width of the desired writable raster - * @param h the height of the desired writable raster - * - * @return the writable raster + * @param w + * the width of the desired writable raster. + * @param h + * the height of the desired writable raster. + * @return the writable raster. */ public WritableRaster createCompatibleWritableRaster(int w, int h) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -415,9 +457,9 @@ public abstract class ColorModel implements Transparency { /** * Checks if the sample model is compatible with this color model. * - * @param sm the sample model - * - * @return true, if the sample model is compatible with this color model + * @param sm + * the sample model. + * @return true, if the sample model is compatible with this color model. */ public boolean isCompatibleSampleModel(SampleModel sm) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -427,10 +469,11 @@ public abstract class ColorModel implements Transparency { /** * Creates the compatible sample model. * - * @param w the width of the desired sample model - * @param h the height of the desired sample model - * - * @return the sample model + * @param w + * the width of the desired sample model. + * @param h + * the height of the desired sample model. + * @return the sample model. */ public SampleModel createCompatibleSampleModel(int w, int h) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -440,9 +483,9 @@ public abstract class ColorModel implements Transparency { /** * Checks if the specified raster is compatible with this color model. * - * @param raster the raster to inspect - * - * @return true, if the raster is compatible with this color model + * @param raster + * the raster to inspect. + * @return true, if the raster is compatible with this color model. */ public boolean isCompatibleRaster(Raster raster) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -452,28 +495,32 @@ public abstract class ColorModel implements Transparency { /** * Gets the color space of this color model. * - * @return the color space + * @return the color space. */ public final ColorSpace getColorSpace() { return cs; } /** - * Gets the normalized components corresponding to the specified + * Gets the normalized components corresponding to the specified * unnormalized components. * - * @param components the array of unnormalized components - * @param offset the offset where the components should be read - * from the array of unnormalized components - * @param normComponents the array where the resulting normalised components - * are written (or null to prompt the method to create the return array) - * @param normOffset the offset that tells where the results should be written - * in the return array - * - * @return the normalized components - */ - public float[] getNormalizedComponents(int[] components, int offset, - float normComponents[], int normOffset) { + * @param components + * the array of unnormalized components. + * @param offset + * the offset where the components should be read from the array + * of unnormalized components. + * @param normComponents + * the array where the resulting normalized components are + * written (or null to prompt the method to create the return + * array). + * @param normOffset + * the offset that tells where the results should be written in + * the return array. + * @return the normalized components. + */ + public float[] getNormalizedComponents(int[] components, int offset, float normComponents[], + int normOffset) { if (bits == null) { // awt.26C=bits is null throw new UnsupportedOperationException(Messages.getString("awt.26C")); //$NON-NLS-1$ @@ -484,14 +531,12 @@ public abstract class ColorModel implements Transparency { } if (hasAlpha && isAlphaPremultiplied) { - float normAlpha = - (float) components[offset + numColorComponents] / - maxValues[numColorComponents]; + float normAlpha = (float)components[offset + numColorComponents] + / maxValues[numColorComponents]; if (normAlpha != 0.0f) { for (int i = 0; i < numColorComponents; i++) { - normComponents[normOffset + i] = - components[offset + i] / - (normAlpha * maxValues[i]); + normComponents[normOffset + i] = components[offset + i] + / (normAlpha * maxValues[i]); } normComponents[normOffset + numColorComponents] = normAlpha; } else { @@ -501,9 +546,7 @@ public abstract class ColorModel implements Transparency { } } else { for (int i = 0; i < numComponents; i++) { - normComponents[normOffset + i] = - (float) components[offset + i] / - maxValues[i]; + normComponents[normOffset + i] = (float)components[offset + i] / maxValues[i]; } } @@ -513,11 +556,12 @@ public abstract class ColorModel implements Transparency { /** * Gets the data element corresponding to the unnormalized components. * - * @param components the components - * @param offset the offset to start reading the components from the - * array of components - * - * @return the data element + * @param components + * the components. + * @param offset + * the offset to start reading the components from the array of + * components. + * @return the data element. */ public int getDataElement(int[] components, int offset) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -525,21 +569,25 @@ public abstract class ColorModel implements Transparency { } /** - * Gets the unnormalized components corresponding to the specified + * Gets the unnormalized components corresponding to the specified * normalized components. * - * @param normComponents the array of normalized components - * @param normOffset the offset where the components should be read - * from the array of normalized components - * @param components the array where the resulting unnormalised components - * are written (or null to prompt the method to create the return array) - * @param offset the offset that tells where the results should be written - * in the return array - * - * @return the unnormalized components - */ - public int[] getUnnormalizedComponents(float normComponents[], - int normOffset, int components[], int offset) { + * @param normComponents + * the array of normalized components. + * @param normOffset + * the offset where the components should be read from the array + * of normalized components. + * @param components + * the array where the resulting unnormalized components are + * written (or null to prompt the method to create the return + * array). + * @param offset + * the offset that tells where the results should be written in + * the return array. + * @return the unnormalized components. + */ + public int[] getUnnormalizedComponents(float normComponents[], int normOffset, + int components[], int offset) { if (bits == null) { // awt.26C=bits is null @@ -547,7 +595,8 @@ public abstract class ColorModel implements Transparency { } if (normComponents.length - normOffset < numComponents) { - // awt.273=The length of normComponents minus normOffset is less than numComponents + // awt.273=The length of normComponents minus normOffset is less + // than numComponents throw new IllegalArgumentException(Messages.getString("awt.273")); //$NON-NLS-1$ } @@ -555,7 +604,8 @@ public abstract class ColorModel implements Transparency { components = new int[numComponents + offset]; } else { if (components.length - offset < numComponents) { - // awt.272=The length of components minus offset is less than numComponents + // awt.272=The length of components minus offset is less than + // numComponents throw new IllegalArgumentException(Messages.getString("awt.272")); //$NON-NLS-1$ } } @@ -563,17 +613,15 @@ public abstract class ColorModel implements Transparency { if (hasAlpha && isAlphaPremultiplied) { float alpha = normComponents[normOffset + numColorComponents]; for (int i = 0; i < numColorComponents; i++) { - components[offset + i] = (int) (normComponents[normOffset + i] - * maxValues[i] * alpha + 0.5f); + components[offset + i] = (int)(normComponents[normOffset + i] * maxValues[i] + * alpha + 0.5f); } - components[offset + numColorComponents] = - (int) (normComponents[normOffset + numColorComponents] * - maxValues[numColorComponents] + 0.5f); + components[offset + numColorComponents] = (int)(normComponents[normOffset + + numColorComponents] + * maxValues[numColorComponents] + 0.5f); } else { for (int i = 0; i < numComponents; i++) { - components[offset + i] = - (int) (normComponents[normOffset + i] * - maxValues[i] + 0.5f); + components[offset + i] = (int)(normComponents[normOffset + i] * maxValues[i] + 0.5f); } } @@ -583,30 +631,32 @@ public abstract class ColorModel implements Transparency { /** * Gets the data element corresponding to the normalized components. * - * @param normComponents the normalized components - * @param normOffset the offset where the normalized components should - * be read from the normalized component array - * - * @return the data element + * @param normComponents + * the normalized components. + * @param normOffset + * the offset where the normalized components should be read from + * the normalized component array. + * @return the data element. */ public int getDataElement(float normComponents[], int normOffset) { - int unnormComponents[] = getUnnormalizedComponents(normComponents, - normOffset, null, 0); + int unnormComponents[] = getUnnormalizedComponents(normComponents, normOffset, null, 0); return getDataElement(unnormComponents, 0); } /** - * Takes a pixel whose data is defined by an int, and writes the - * corresponding components into the components array, starting - * from the index offset. + * Takes a pixel whose data is defined by an integer, and writes the + * corresponding components into the components array, starting from the + * index offset. * - * @param pixel the pixel data - * @param components the data array to write the components to (or - * null to have the method create the return array) - * @param offset the offset that determines where the results are - * written in the components array - * - * @return the array of components corresponding to the pixel + * @param pixel + * the pixel data. + * @param components + * the data array to write the components to (or null to have the + * method create the return array). + * @param offset + * the offset that determines where the results are written in + * the components array. + * @return the array of components corresponding to the pixel. */ public int[] getComponents(int pixel, int components[], int offset) { throw new UnsupportedOperationException("This method is not " + //$NON-NLS-1$ @@ -616,45 +666,45 @@ public abstract class ColorModel implements Transparency { /** * Gets the red component of the pixel determined by the pixel data. * - * @param pixel the pixel data - * - * @return the red component of the pixel + * @param pixel + * the pixel. + * @return the red component of the given pixel. */ public abstract int getRed(int pixel); /** - * Takes the pixel data and returns the int corresponding - * to the pixel's color in RGB format. - * - * @param pixel the pixel data + * Takes the pixel data and returns the integer value corresponding to the + * pixel's color in RGB format. * - * @return the corresponding RGB int + * @param pixel + * the pixel data. + * @return the corresponding RGB integer value. */ public int getRGB(int pixel) { - return (getAlpha(pixel) << 24 | getRed(pixel) << 16 - | getGreen(pixel) << 8 | getBlue(pixel)); + return (getAlpha(pixel) << 24 | getRed(pixel) << 16 | getGreen(pixel) << 8 | getBlue(pixel)); } /** * Gets the green component of the pixel determined by the pixel data. * - * @param pixel the pixel data - * - * @return the green component of the pixel + * @param pixel + * the pixel. + * @return the green component of the given pixel. */ public abstract int getGreen(int pixel); /** * Gets the size of the desired component of this color model. * - * @param componentIdx the index that determines which component size to get - * - * @return the component size corresponding to the index - * - * @throws NullPointerException if this color model doesn't support - * an array of separate components. - * @throws ArrayIndexOutOfBoundsException if the index is negative or - * greater than or equal to the number of components + * @param componentIdx + * the index that determines which component size to get. + * @return the component size corresponding to the index. + * @throws NullPointerException + * if this color model doesn't support an array of separate + * components. + * @throws ArrayIndexOutOfBoundsException + * if the index is negative or greater than or equal to the + * number of components. */ public int getComponentSize(int componentIdx) { if (bits == null) { @@ -663,7 +713,8 @@ public abstract class ColorModel implements Transparency { } if (componentIdx < 0 || componentIdx >= bits.length) { - // awt.274=componentIdx is greater than the number of components or less than zero + // awt.274=componentIdx is greater than the number of components or + // less than zero throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.274")); //$NON-NLS-1$ } @@ -673,25 +724,25 @@ public abstract class ColorModel implements Transparency { /** * Gets the blue component of the pixel determined by the pixel data. * - * @param pixel the pixel - * - * @return the blue component of the pixel + * @param pixel + * the pixel. + * @return the blue component of the given pixel. */ public abstract int getBlue(int pixel); /** * Gets the alpha component of the pixel determined by the pixel data. * - * @param pixel the pixel - * - * @return the alpha component of the pixel + * @param pixel + * the pixel. + * @return the alpha component of the given pixel. */ public abstract int getAlpha(int pixel); /** * Gets the array of sizes of the different components. * - * @return the array of sizes of the different components + * @return the array of sizes of the different components. */ public int[] getComponentSize() { if (bits != null) { @@ -701,9 +752,9 @@ public abstract class ColorModel implements Transparency { } /** - * Checks if the alpha component is premultiplied. + * Checks if the alpha component is pre-multiplied. * - * @return true, if the alpha component is premultiplied + * @return true, if the alpha component is pre-multiplied. */ public final boolean isAlphaPremultiplied() { return isAlphaPremultiplied; @@ -712,7 +763,7 @@ public abstract class ColorModel implements Transparency { /** * Checks whether this color model supports alpha. * - * @return true, if this color model has alpha + * @return true, if this color model has alpha. */ public final boolean hasAlpha() { return hasAlpha; @@ -776,12 +827,12 @@ public abstract class ColorModel implements Transparency { } /** - * Gets the transfer type, which is the type of Java primitive - * value that corresponds to the bit length per pixel: either - * {@link DataBuffer#TYPE_BYTE}, {@link DataBuffer#TYPE_USHORT}, + * Gets the transfer type, which is the type of Java primitive value that + * corresponds to the bit length per pixel: either + * {@link DataBuffer#TYPE_BYTE}, {@link DataBuffer#TYPE_USHORT}, * {@link DataBuffer#TYPE_INT}, or {@link DataBuffer#TYPE_UNDEFINED}. * - * @return the transfer type + * @return the transfer type. */ public final int getTransferType() { return transferType; @@ -790,7 +841,7 @@ public abstract class ColorModel implements Transparency { /** * Gets the pixel size in bits. * - * @return the pixel size + * @return the pixel size. */ public int getPixelSize() { return pixel_bits; @@ -799,7 +850,7 @@ public abstract class ColorModel implements Transparency { /** * Gets the number of components of this color model. * - * @return the number of components + * @return the number of components. */ public int getNumComponents() { return numComponents; @@ -808,7 +859,7 @@ public abstract class ColorModel implements Transparency { /** * Gets the number of color components of this color model. * - * @return the number color components + * @return the number color components. */ public int getNumColorComponents() { return numColorComponents; @@ -817,12 +868,11 @@ public abstract class ColorModel implements Transparency { /** * Gets the default RGB color model. * - * @return the default RGB color model + * @return the default RGB color model. */ public static ColorModel getRGBdefault() { if (RGBdefault == null) { - RGBdefault = new DirectColorModel(32, 0x00ff0000, 0x0000ff00, - 0x000000ff, 0xff000000); + RGBdefault = new DirectColorModel(32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000); } return RGBdefault; } @@ -830,66 +880,69 @@ public abstract class ColorModel implements Transparency { /* * Construct INT pixel representation from Object * @param obj - * * @return */ /** * Construct pixel. * - * @param obj the obj - * - * @return the int + * @param obj + * the obj. + * @return the int. */ private int constructPixel(Object obj) { int pixel = 0; switch (getTransferType()) { - case DataBuffer.TYPE_BYTE: - byte[] bPixel = (byte[]) obj; - if(bPixel.length > 1) { - // awt.275=This pixel representation is not suuported by tis Color Model - throw new UnsupportedOperationException(Messages.getString("awt.275")); //$NON-NLS-1$ - } - pixel = bPixel[0] & 0xff; - break; - - case DataBuffer.TYPE_USHORT: - short[] sPixel = (short[]) obj; - if(sPixel.length > 1) { - // awt.275=This pixel representation is not suuported by tis Color Model - throw new UnsupportedOperationException(Messages.getString("awt.275")); //$NON-NLS-1$ - } - pixel = sPixel[0] & 0xffff; - break; - - case DataBuffer.TYPE_INT: - int[] iPixel = (int[]) obj; - if(iPixel.length > 1) { - // awt.275=This pixel representation is not suuported by tis Color Model - throw new UnsupportedOperationException(Messages.getString("awt.275")); //$NON-NLS-1$ - } - pixel = iPixel[0]; - break; + case DataBuffer.TYPE_BYTE: + byte[] bPixel = (byte[])obj; + if (bPixel.length > 1) { + // awt.275=This pixel representation is not suuported by tis + // Color Model + throw new UnsupportedOperationException(Messages.getString("awt.275")); //$NON-NLS-1$ + } + pixel = bPixel[0] & 0xff; + break; + + case DataBuffer.TYPE_USHORT: + short[] sPixel = (short[])obj; + if (sPixel.length > 1) { + // awt.275=This pixel representation is not suuported by tis + // Color Model + throw new UnsupportedOperationException(Messages.getString("awt.275")); //$NON-NLS-1$ + } + pixel = sPixel[0] & 0xffff; + break; + + case DataBuffer.TYPE_INT: + int[] iPixel = (int[])obj; + if (iPixel.length > 1) { + // awt.275=This pixel representation is not suuported by tis + // Color Model + throw new UnsupportedOperationException(Messages.getString("awt.275")); //$NON-NLS-1$ + } + pixel = iPixel[0]; + break; - default: - // awt.22D=This transferType ( {0} ) is not supported by this color model - throw new UnsupportedOperationException(Messages.getString("awt.22D", //$NON-NLS-1$ - transferType)); + default: + // awt.22D=This transferType ( {0} ) is not supported by this + // color model + throw new UnsupportedOperationException(Messages.getString("awt.22D", //$NON-NLS-1$ + transferType)); } return pixel; } /** - * Gets the transfer type, which is the type of Java primitive - * value that corresponds to the bit length per pixel: either - * {@link DataBuffer#TYPE_BYTE}, {@link DataBuffer#TYPE_USHORT}, + * Gets the transfer type, which is the type of Java primitive value that + * corresponds to the bit length per pixel: either + * {@link DataBuffer#TYPE_BYTE}, {@link DataBuffer#TYPE_USHORT}, * {@link DataBuffer#TYPE_INT}, or {@link DataBuffer#TYPE_UNDEFINED}. * - * @param bits the array of component masks - * - * @return the transfer type + * @param bits + * the array of component masks. + * @return the transfer type. */ static int getTransferType(int bits) { if (bits <= 8) { diff --git a/awt/java/awt/image/ComponentColorModel.java b/awt/java/awt/image/ComponentColorModel.java index a152f55a79..4328fd37e7 100644 --- a/awt/java/awt/image/ComponentColorModel.java +++ b/awt/java/awt/image/ComponentColorModel.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.color.ColorSpace; @@ -26,154 +27,202 @@ import org.apache.harmony.awt.gl.color.LUTColorConverter; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class ComponentColorModel represents a color model that is defined - * in terms of its components. + * The Class ComponentColorModel represents a color model that is defined in + * terms of its components. + * + * @since Android 1.0 */ public class ComponentColorModel extends ColorModel { - /** The signed. */ - private boolean signed; // Pixel samples are signed. - // Samples with TransferType DataBuffer.TYPE_BYTE, - // DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT - - // unsigned. Samples with others TransferType - - // signed. + /** + * The signed. + */ + private boolean signed; // Pixel samples are signed. + + // Samples with TransferType DataBuffer.TYPE_BYTE, + // DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT - + // unsigned. Samples with others TransferType - + // signed. - /** The integral. */ + /** + * The integral. + */ private boolean integral; // Pixel samples are integral. - // Samples with TransferType DataBuffer.TYPE_BYTE, - // DataBuffer.TYPE_USHORT, DataBuffer.Short and - // DataBuffer.TYPE_INT - integral. - /** The scale factors. */ - private float scaleFactors[]; // Array of factors for reduction components - // values into the form scaled from 0 to 255 + // Samples with TransferType DataBuffer.TYPE_BYTE, + // DataBuffer.TYPE_USHORT, DataBuffer.Short and + // DataBuffer.TYPE_INT - integral. - /** The donot support unnormalized. */ + /** + * The scale factors. + */ + private float scaleFactors[]; // Array of factors for reduction components + + // values into the form scaled from 0 to 255 + + /** + * The donot support unnormalized. + */ private boolean donotSupportUnnormalized; // This Color Model don't support - // unnormolized form - /** The need alpha divide. */ + // unnormolized form + + /** + * The need alpha divide. + */ private boolean needAlphaDivide; // hasAlpha && isAlphaPremultiplied - /** The calc value. */ - private boolean calcValue; // Value was culculated + /** + * The calc value. + */ + private boolean calcValue; // Value was culculated - /** The need scale. */ - private boolean needScale; // Normalized value need to scale + /** + * The need scale. + */ + private boolean needScale; // Normalized value need to scale - /** The min vals. */ - private float minVals[]; // Array of Min normalized values + /** + * The min vals. + */ + private float minVals[]; // Array of Min normalized values - /** The ranges. */ - private float ranges[]; // Array of range normalized values + /** + * The ranges. + */ + private float ranges[]; // Array of range normalized values - /** The alpha lut. */ - private byte alphaLUT[]; // Lookup table for scale alpha value + /** + * The alpha lut. + */ + private byte alphaLUT[]; // Lookup table for scale alpha value - /** The color lu ts. */ - private byte colorLUTs[][]; // Lookup tables for scale color values + /** + * The color lu ts. + */ + private byte colorLUTs[][]; // Lookup tables for scale color values - /** The from_ linea r_ rg b_ lut. */ - private byte from_LINEAR_RGB_LUT[]; // Lookup table for conversion from - // Linear RGB Color Space into sRGB + /** + * The from_ linea r_ rg b_ lut. + */ + private byte from_LINEAR_RGB_LUT[]; // Lookup table for conversion from + + // Linear RGB Color Space into sRGB + + /** + * The to_ linea r_8 rg b_ lut. + */ + private byte to_LINEAR_8RGB_LUT[]; // Lookup table for conversion from - /** The to_ linea r_8 rg b_ lut. */ - private byte to_LINEAR_8RGB_LUT[]; // Lookup table for conversion from - // sRGB Color Space into Linear RGB - // 8 bit + // sRGB Color Space into Linear RGB + // 8 bit - /** The to_ linea r_16 rg b_ lut. */ + /** + * The to_ linea r_16 rg b_ lut. + */ private short to_LINEAR_16RGB_LUT[]; // Lookup table for conversion from - // sRGB Color Space into Linear RGB - // 16 bit - /** The LINEA r_ rg b_ length. */ - private int LINEAR_RGB_Length; // Linear RGB bit length + // sRGB Color Space into Linear RGB + // 16 bit + + /** + * The LINEA r_ rg b_ length. + */ + private int LINEAR_RGB_Length; // Linear RGB bit length + + /** + * The factor. + */ + private float fFactor; // Scale factor - /** The factor. */ - private float fFactor; // Scale factor + /** + * The is_s rgb. + */ + private boolean is_sRGB; // ColorModel has sRGB ColorSpace - /** The is_s rgb. */ - private boolean is_sRGB; // ColorModel has sRGB ColorSpace + /** + * The is_ linea r_ rgb. + */ + private boolean is_LINEAR_RGB; // Color Model has Linear RGB Color - /** The is_ linea r_ rgb. */ - private boolean is_LINEAR_RGB; // Color Model has Linear RGB Color - // Space + // Space /** * Instantiates a new component color model. * - * @param colorSpace the color space - * @param bits the array of component masks - * @param hasAlpha whether the color model has alpha - * @param isAlphaPremultiplied whether the alpha is premultiplied - * @param transparency the transparency strategy, @see java.awt.Transparency - * @param transferType the transfer type (primitive java type - * to use for the components) + * @param colorSpace + * the color space. + * @param bits + * the array of component masks. + * @param hasAlpha + * whether the color model has alpha. + * @param isAlphaPremultiplied + * whether the alpha is pre-multiplied. + * @param transparency + * the transparency strategy, @see java.awt.Transparency. + * @param transferType + * the transfer type (primitive java type to use for the + * components). */ - public ComponentColorModel(ColorSpace colorSpace, int bits[], - boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, - int transferType) { - super(createPixelBits(colorSpace, hasAlpha, transferType), - validateBits(bits, colorSpace, hasAlpha, transferType), - colorSpace, hasAlpha, isAlphaPremultiplied, transparency, + public ComponentColorModel(ColorSpace colorSpace, int bits[], boolean hasAlpha, + boolean isAlphaPremultiplied, int transparency, int transferType) { + super(createPixelBits(colorSpace, hasAlpha, transferType), validateBits(bits, colorSpace, + hasAlpha, transferType), colorSpace, hasAlpha, isAlphaPremultiplied, transparency, transferType); needScale = false; switch (transferType) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - case DataBuffer.TYPE_INT: - signed = false; - integral = true; - donotSupportUnnormalized = false; - scaleFactors = new float[numComponents]; - for (int i = 0; i < numColorComponents; i++) { - scaleFactors[i] = 1.0f / maxValues[i]; - if (cs.getMinValue(i) != 0.0f || cs.getMaxValue(i) != 1.0f) { - donotSupportUnnormalized = true; + case DataBuffer.TYPE_BYTE: + case DataBuffer.TYPE_USHORT: + case DataBuffer.TYPE_INT: + signed = false; + integral = true; + donotSupportUnnormalized = false; + scaleFactors = new float[numComponents]; + for (int i = 0; i < numColorComponents; i++) { + scaleFactors[i] = 1.0f / maxValues[i]; + if (cs.getMinValue(i) != 0.0f || cs.getMaxValue(i) != 1.0f) { + donotSupportUnnormalized = true; + } } - } - if (hasAlpha) { - maxValues[numColorComponents] = - (1 << bits[numColorComponents]) - 1; - scaleFactors[numColorComponents] = - 1.0f / maxValues[numColorComponents]; - } - break; - case DataBuffer.TYPE_SHORT: - signed = true; - integral = true; - donotSupportUnnormalized = true; - scaleFactors = new float[numComponents]; - for (int i = 0; i < numComponents; i++) { - maxValues[i] = Short.MAX_VALUE; - scaleFactors[i] = 1.0f / maxValues[i]; - if (cs.getMinValue(i) != 0.0f || cs.getMaxValue(i) != 1.0f) { - needScale = true; + if (hasAlpha) { + maxValues[numColorComponents] = (1 << bits[numColorComponents]) - 1; + scaleFactors[numColorComponents] = 1.0f / maxValues[numColorComponents]; } - } - if (needScale) { - minVals = new float[numColorComponents]; - ranges = new float[numColorComponents]; - for (int i = 0; i < numColorComponents; i++) { - minVals[i] = cs.getMinValue(i); - ranges[i] = cs.getMaxValue(i) - minVals[i]; + break; + case DataBuffer.TYPE_SHORT: + signed = true; + integral = true; + donotSupportUnnormalized = true; + scaleFactors = new float[numComponents]; + for (int i = 0; i < numComponents; i++) { + maxValues[i] = Short.MAX_VALUE; + scaleFactors[i] = 1.0f / maxValues[i]; + if (cs.getMinValue(i) != 0.0f || cs.getMaxValue(i) != 1.0f) { + needScale = true; + } } - } - break; - case DataBuffer.TYPE_FLOAT: - case DataBuffer.TYPE_DOUBLE: - signed = true; - integral = false; - donotSupportUnnormalized = true; - break; - default: - // awt.215=transferType is not one of DataBuffer.TYPE_BYTE, - // DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, - // DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or - // DataBuffer.TYPE_DOUBLE - throw new IllegalArgumentException(Messages.getString("awt.215")); //$NON-NLS-1$ + if (needScale) { + minVals = new float[numColorComponents]; + ranges = new float[numColorComponents]; + for (int i = 0; i < numColorComponents; i++) { + minVals[i] = cs.getMinValue(i); + ranges[i] = cs.getMaxValue(i) - minVals[i]; + } + } + break; + case DataBuffer.TYPE_FLOAT: + case DataBuffer.TYPE_DOUBLE: + signed = true; + integral = false; + donotSupportUnnormalized = true; + break; + default: + // awt.215=transferType is not one of DataBuffer.TYPE_BYTE, + // DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, + // DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or + // DataBuffer.TYPE_DOUBLE + throw new IllegalArgumentException(Messages.getString("awt.215")); //$NON-NLS-1$ } needAlphaDivide = hasAlpha && isAlphaPremultiplied; @@ -183,36 +232,40 @@ public class ComponentColorModel extends ColorModel { /** * Instantiates a new component color model. * - * @param colorSpace the color space - * @param hasAlpha whether the color model has alpha - * @param isAlphaPremultiplied whether the alpha is premultiplied - * @param transparency the transparency strategy, @see java.awt.Transparency - * @param transferType the transfer type (primitive java type - * to use for the components) + * @param colorSpace + * the color space. + * @param hasAlpha + * whether the color model has alpha. + * @param isAlphaPremultiplied + * whether the alpha is pre-multiplied. + * @param transparency + * the transparency strategy, @see java.awt.Transparency. + * @param transferType + * the transfer type (primitive java type to use for the + * components). */ public ComponentColorModel(ColorSpace colorSpace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType) { - - this(colorSpace, - createPixelBitsArray(colorSpace, hasAlpha, transferType), - hasAlpha, - isAlphaPremultiplied, - transparency, - transferType); + + this(colorSpace, createPixelBitsArray(colorSpace, hasAlpha, transferType), hasAlpha, + isAlphaPremultiplied, transparency, transferType); } /** * Validate bits. * - * @param bits the bits - * @param colorSpace the color space - * @param hasAlpha the has alpha - * @param transferType the transfer type - * - * @return the int[] + * @param bits + * the bits. + * @param colorSpace + * the color space. + * @param hasAlpha + * the has alpha. + * @param transferType + * the transfer type. + * @return the int[]. */ - private static int[] validateBits(int bits[], ColorSpace colorSpace, - boolean hasAlpha, int transferType) { + private static int[] validateBits(int bits[], ColorSpace colorSpace, boolean hasAlpha, + int transferType) { if (bits != null) { return bits; } @@ -235,14 +288,15 @@ public class ComponentColorModel extends ColorModel { /** * Creates the pixel bits. * - * @param colorSpace the color space - * @param hasAlpha the has alpha - * @param transferType the transfer type - * - * @return the int + * @param colorSpace + * the color space. + * @param hasAlpha + * the has alpha. + * @param transferType + * the transfer type. + * @return the int. */ - private static int createPixelBits(ColorSpace colorSpace, boolean hasAlpha, - int transferType) { + private static int createPixelBits(ColorSpace colorSpace, boolean hasAlpha, int transferType) { int numComponents = colorSpace.getNumComponents(); if (hasAlpha) { numComponents++; @@ -254,22 +308,24 @@ public class ComponentColorModel extends ColorModel { /** * Creates the pixel bits array. * - * @param colorSpace the color space - * @param hasAlpha the has alpha - * @param transferType the transfer type - * - * @return the int[] + * @param colorSpace + * the color space. + * @param hasAlpha + * the has alpha. + * @param transferType + * the transfer type. + * @return the int[]. */ - private static int[] createPixelBitsArray(ColorSpace colorSpace, - boolean hasAlpha, int transferType) { - + private static int[] createPixelBitsArray(ColorSpace colorSpace, boolean hasAlpha, + int transferType) { + int numComponents = colorSpace.getNumComponents(); if (hasAlpha) { numComponents++; } int bits[] = new int[numComponents]; - for(int i = 0; i < numComponents; i++){ + for (int i = 0; i < numComponents; i++) { bits[i] = DataBuffer.getDataTypeSize(transferType); } return bits; @@ -278,217 +334,200 @@ public class ComponentColorModel extends ColorModel { @Override public Object getDataElements(int components[], int offset, Object obj) { if (donotSupportUnnormalized) { - // awt.213=This ComponentColorModel does not support the unnormalized form + // awt.213=This ComponentColorModel does not support the + // unnormalized form throw new IllegalArgumentException(Messages.getString("awt.213")); //$NON-NLS-1$ } if (offset + numComponents > components.length) { - // awt.216=The components array is not large enough to hold all the color and alpha components + // awt.216=The components array is not large enough to hold all the + // color and alpha components throw new IllegalArgumentException(Messages.getString("awt.216")); //$NON-NLS-1$ } switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[]; - if (obj == null) { - ba = new byte[numComponents]; - } else { - ba = (byte[]) obj; - } - for (int i = 0, idx = offset; i < numComponents; i++, idx++) { - ba[i] = (byte) components[idx]; - } - return ba; - case DataBuffer.TYPE_USHORT: - short sa[]; - if (obj == null) { - sa = new short[numComponents]; - } else { - sa = (short[]) obj; - } - for (int i = 0, idx = offset; i < numComponents; i++, idx++) { - sa[i] = (short) components[idx]; - } - return sa; - case DataBuffer.TYPE_INT: - int ia[]; - if (obj == null) { - ia = new int[numComponents]; - } else { - ia = (int[]) obj; - } - for (int i = 0, idx = offset; i < numComponents; i++, idx++) { - ia[i] = components[idx]; - } - return ia; - default: - // awt.217=The transfer type of this ComponentColorModel is not one - // of the following transfer types: DataBuffer.TYPE_BYTE, - // DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT - throw new UnsupportedOperationException(Messages - .getString("awt.217")); //$NON-NLS-1$ + case DataBuffer.TYPE_BYTE: + byte ba[]; + if (obj == null) { + ba = new byte[numComponents]; + } else { + ba = (byte[])obj; + } + for (int i = 0, idx = offset; i < numComponents; i++, idx++) { + ba[i] = (byte)components[idx]; + } + return ba; + case DataBuffer.TYPE_USHORT: + short sa[]; + if (obj == null) { + sa = new short[numComponents]; + } else { + sa = (short[])obj; + } + for (int i = 0, idx = offset; i < numComponents; i++, idx++) { + sa[i] = (short)components[idx]; + } + return sa; + case DataBuffer.TYPE_INT: + int ia[]; + if (obj == null) { + ia = new int[numComponents]; + } else { + ia = (int[])obj; + } + for (int i = 0, idx = offset; i < numComponents; i++, idx++) { + ia[i] = components[idx]; + } + return ia; + default: + // awt.217=The transfer type of this ComponentColorModel is not + // one + // of the following transfer types: DataBuffer.TYPE_BYTE, + // DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT + throw new UnsupportedOperationException(Messages.getString("awt.217")); //$NON-NLS-1$ } } @Override - public Object getDataElements(float normComponents[], int normOffset, - Object obj) { + public Object getDataElements(float normComponents[], int normOffset, Object obj) { if (needScale) { for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { - normComponents[idx] = - (normComponents[idx] - minVals[i]) / ranges[i]; + normComponents[idx] = (normComponents[idx] - minVals[i]) / ranges[i]; } } switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[]; - if (obj == null) { - ba = new byte[numComponents]; - } else { - ba = (byte[]) obj; - } - - if (needAlphaDivide) { - float alpha = normComponents[normOffset + numColorComponents]; - for (int i = 0, idx = normOffset; i < numColorComponents; - i++, idx++) { - ba[i] = (byte) (normComponents[idx] * alpha * - maxValues[i] + 0.5f); - } - ba[numColorComponents] = - (byte) (normComponents[normOffset + numColorComponents] * - maxValues[numColorComponents] + 0.5f); - } else { - for (int i = 0, idx = normOffset; i < numComponents; - i++, idx++) { - ba[idx] = - (byte) (normComponents[idx] * maxValues[i] + 0.5f); + case DataBuffer.TYPE_BYTE: + byte ba[]; + if (obj == null) { + ba = new byte[numComponents]; + } else { + ba = (byte[])obj; } - } - return ba; - case DataBuffer.TYPE_USHORT: - short usa[]; - if (obj == null) { - usa = new short[numComponents]; - } else { - usa = (short[]) obj; - } - - if (needAlphaDivide) { - float alpha = normComponents[normOffset + numColorComponents]; - for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { - usa[i] = (short) (normComponents[idx] * alpha * - maxValues[i] + 0.5f); - } - usa[numColorComponents] = (short) (alpha * - maxValues[numColorComponents] + 0.5f); - } else { - for (int i = 0, idx = normOffset; i < numComponents; - i++, idx++) { - usa[i] = (short) (normComponents[idx] * - maxValues[i] + 0.5f); + if (needAlphaDivide) { + float alpha = normComponents[normOffset + numColorComponents]; + for (int i = 0, idx = normOffset; i < numColorComponents; i++, idx++) { + ba[i] = (byte)(normComponents[idx] * alpha * maxValues[i] + 0.5f); + } + ba[numColorComponents] = (byte)(normComponents[normOffset + numColorComponents] + * maxValues[numColorComponents] + 0.5f); + } else { + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + ba[idx] = (byte)(normComponents[idx] * maxValues[i] + 0.5f); + } } - } - return usa; + return ba; - case DataBuffer.TYPE_INT: - int ia[]; - if (obj == null) { - ia = new int[numComponents]; - } else { - ia = (int[]) obj; - } - - if (needAlphaDivide) { - float alpha = normComponents[normOffset + numColorComponents]; - for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { - ia[i] = (int) (normComponents[idx] * alpha * - maxValues[i] + 0.5f); - } - ia[numColorComponents] = (int) (alpha * - maxValues[numColorComponents] + 0.5f); - } else { - for (int i = 0, idx = normOffset; i < numComponents; - i++, idx++) { - ia[i] = (int) (normComponents[idx] * maxValues[i] + 0.5f); + case DataBuffer.TYPE_USHORT: + short usa[]; + if (obj == null) { + usa = new short[numComponents]; + } else { + usa = (short[])obj; } - } - return ia; - case DataBuffer.TYPE_SHORT: - short sa[]; - if (obj == null) { - sa = new short[numComponents]; - } else { - sa = (short[]) obj; - } + if (needAlphaDivide) { + float alpha = normComponents[normOffset + numColorComponents]; + for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { + usa[i] = (short)(normComponents[idx] * alpha * maxValues[i] + 0.5f); + } + usa[numColorComponents] = (short)(alpha * maxValues[numColorComponents] + 0.5f); + } else { + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + usa[i] = (short)(normComponents[idx] * maxValues[i] + 0.5f); + } + } + return usa; - if (needAlphaDivide) { - float alpha = normComponents[normOffset + numColorComponents]; - for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { - sa[i] = (short) (normComponents[idx] * alpha * - maxValues[i] + 0.5f); + case DataBuffer.TYPE_INT: + int ia[]; + if (obj == null) { + ia = new int[numComponents]; + } else { + ia = (int[])obj; } - sa[numColorComponents] = (short) (alpha * - maxValues[numColorComponents] + 0.5f); - } else { - for (int i = 0, idx = normOffset; i < numComponents; - i++, idx++) { - sa[i] = (short) (normComponents[idx] * - maxValues[i] + 0.5f); + + if (needAlphaDivide) { + float alpha = normComponents[normOffset + numColorComponents]; + for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { + ia[i] = (int)(normComponents[idx] * alpha * maxValues[i] + 0.5f); + } + ia[numColorComponents] = (int)(alpha * maxValues[numColorComponents] + 0.5f); + } else { + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + ia[i] = (int)(normComponents[idx] * maxValues[i] + 0.5f); + } } - } - return sa; + return ia; - case DataBuffer.TYPE_FLOAT: - float fa[]; - if (obj == null) { - fa = new float[numComponents]; - } else { - fa = (float[]) obj; - } + case DataBuffer.TYPE_SHORT: + short sa[]; + if (obj == null) { + sa = new short[numComponents]; + } else { + sa = (short[])obj; + } - if (needAlphaDivide) { - float alpha = normComponents[normOffset + numColorComponents]; - for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { - fa[i] = normComponents[idx] * alpha; + if (needAlphaDivide) { + float alpha = normComponents[normOffset + numColorComponents]; + for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { + sa[i] = (short)(normComponents[idx] * alpha * maxValues[i] + 0.5f); + } + sa[numColorComponents] = (short)(alpha * maxValues[numColorComponents] + 0.5f); + } else { + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + sa[i] = (short)(normComponents[idx] * maxValues[i] + 0.5f); + } } - fa[numColorComponents] = alpha; - } else { - for (int i = 0, idx = normOffset; i < numComponents; - i++, idx++) { - fa[i] = normComponents[idx]; + return sa; + + case DataBuffer.TYPE_FLOAT: + float fa[]; + if (obj == null) { + fa = new float[numComponents]; + } else { + fa = (float[])obj; } - } - return fa; - case DataBuffer.TYPE_DOUBLE: - double da[]; - if (obj == null) { - da = new double[numComponents]; - } else { - da = (double[]) obj; - } + if (needAlphaDivide) { + float alpha = normComponents[normOffset + numColorComponents]; + for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { + fa[i] = normComponents[idx] * alpha; + } + fa[numColorComponents] = alpha; + } else { + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + fa[i] = normComponents[idx]; + } + } + return fa; - if (needAlphaDivide) { - double alpha = normComponents[normOffset + numColorComponents]; - for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { - da[i] = normComponents[idx] * alpha; + case DataBuffer.TYPE_DOUBLE: + double da[]; + if (obj == null) { + da = new double[numComponents]; + } else { + da = (double[])obj; } - da[numColorComponents] = alpha; - } else { - for (int i = 0, idx = normOffset; i < numComponents; - i++, idx++) { - da[i] = normComponents[idx]; + + if (needAlphaDivide) { + double alpha = normComponents[normOffset + numColorComponents]; + for (int i = 0, idx = 0; i < numColorComponents; i++, idx++) { + da[i] = normComponents[idx] * alpha; + } + da[numColorComponents] = alpha; + } else { + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + da[i] = normComponents[idx]; + } } - } - return da; + return da; - default: - // awt.213=This ComponentColorModel does not support the unnormalized form - throw new IllegalArgumentException(Messages.getString("awt.213")); //$NON-NLS-1$ + default: + // awt.213=This ComponentColorModel does not support the + // unnormalized form + throw new IllegalArgumentException(Messages.getString("awt.213")); //$NON-NLS-1$ } } @@ -544,7 +583,7 @@ public class ComponentColorModel extends ColorModel { normComp[numColorComponents] = normAlpha; } } - if(hasAlpha && isAlphaPremultiplied){ + if (hasAlpha && isAlphaPremultiplied) { normComp[0] *= normComp[numColorComponents]; normComp[1] *= normComp[numColorComponents]; normComp[2] *= normComp[numColorComponents]; @@ -555,7 +594,7 @@ public class ComponentColorModel extends ColorModel { @Override public WritableRaster getAlphaRaster(WritableRaster raster) { - if(!hasAlpha) { + if (!hasAlpha) { return null; } @@ -564,13 +603,12 @@ public class ComponentColorModel extends ColorModel { int bandList[] = new int[1]; bandList[0] = raster.getNumBands() - 1; - return raster.createWritableChild(x, y, raster.getWidth(), - raster.getHeight(), x, y, bandList); + return raster.createWritableChild(x, y, raster.getWidth(), raster.getHeight(), x, y, + bandList); } @Override - public ColorModel coerceData(WritableRaster raster, - boolean isAlphaPremultiplied) { + public ColorModel coerceData(WritableRaster raster, boolean isAlphaPremultiplied) { if (!hasAlpha || this.isAlphaPremultiplied == isAlphaPremultiplied) { return this; } @@ -582,333 +620,311 @@ public class ComponentColorModel extends ColorModel { if (isAlphaPremultiplied) { switch (transferType) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - case DataBuffer.TYPE_INT: - float alphaFactor = maxValues[numColorComponents]; - int iComponents[] = null; - int iTransparentComponents[] = new int[numComponents]; - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - iComponents = raster.getPixel(x, minY, - iComponents); - if (iComponents[numColorComponents] == 0) { - raster.setPixel(x, minY, iTransparentComponents); - } else { - float alpha = - iComponents[numColorComponents] / - alphaFactor; - for (int n = 0; n < numColorComponents; n++) { - iComponents[n] = - (int) (alpha * iComponents[n] + 0.5f); + case DataBuffer.TYPE_BYTE: + case DataBuffer.TYPE_USHORT: + case DataBuffer.TYPE_INT: + float alphaFactor = maxValues[numColorComponents]; + int iComponents[] = null; + int iTransparentComponents[] = new int[numComponents]; + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + iComponents = raster.getPixel(x, minY, iComponents); + if (iComponents[numColorComponents] == 0) { + raster.setPixel(x, minY, iTransparentComponents); + } else { + float alpha = iComponents[numColorComponents] / alphaFactor; + for (int n = 0; n < numColorComponents; n++) { + iComponents[n] = (int)(alpha * iComponents[n] + 0.5f); + } + raster.setPixel(x, minY, iComponents); } - raster.setPixel(x, minY, iComponents); } - } - - } - break; - case DataBuffer.TYPE_SHORT: - float sAlphaFactor = maxValues[numColorComponents]; - short sComponents[] = null; - short sTransparentComponents[] = new short[numComponents]; - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - sComponents = (short[]) raster.getDataElements(x, minY, - sComponents); - if (sComponents[numColorComponents] == 0) { - raster.setDataElements(x, minY, - sTransparentComponents); - } else { - float alpha = - sComponents[numColorComponents] / - sAlphaFactor; - for (int n = 0; n < numColorComponents; n++) { - sComponents[n] = - (byte) (alpha * sComponents[n] + 0.5f); + } + break; + + case DataBuffer.TYPE_SHORT: + float sAlphaFactor = maxValues[numColorComponents]; + short sComponents[] = null; + short sTransparentComponents[] = new short[numComponents]; + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + sComponents = (short[])raster.getDataElements(x, minY, sComponents); + if (sComponents[numColorComponents] == 0) { + raster.setDataElements(x, minY, sTransparentComponents); + } else { + float alpha = sComponents[numColorComponents] / sAlphaFactor; + for (int n = 0; n < numColorComponents; n++) { + sComponents[n] = (byte)(alpha * sComponents[n] + 0.5f); + } + raster.setDataElements(x, minY, sComponents); } - raster.setDataElements(x, minY, sComponents); } - } - - } - break; - case DataBuffer.TYPE_FLOAT: - float fComponents[] = null; - float fTransparentComponents[] = new float[numComponents]; - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - fComponents = raster.getPixel(x, minY, fComponents); - if (fComponents[numColorComponents] == 0.0f) { - raster.setDataElements(x, minY, - fTransparentComponents); - } else { - float alpha = fComponents[numColorComponents]; - for (int n = 0; n < numColorComponents; n++) { - fComponents[n] = fComponents[n] * alpha; + } + break; + + case DataBuffer.TYPE_FLOAT: + float fComponents[] = null; + float fTransparentComponents[] = new float[numComponents]; + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + fComponents = raster.getPixel(x, minY, fComponents); + if (fComponents[numColorComponents] == 0.0f) { + raster.setDataElements(x, minY, fTransparentComponents); + } else { + float alpha = fComponents[numColorComponents]; + for (int n = 0; n < numColorComponents; n++) { + fComponents[n] = fComponents[n] * alpha; + } + raster.setPixel(x, minY, fComponents); } - raster.setPixel(x, minY, fComponents); } - } - } - break; - - case DataBuffer.TYPE_DOUBLE: - double dComponents[] = null; - double dTransparentComponents[] = new double[numComponents]; - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - dComponents = raster.getPixel(x, minY, dComponents); - if (dComponents[numColorComponents] == 0.0) { - raster.setPixel(x, minY, dTransparentComponents); - } else { - double alpha = dComponents[numColorComponents]; - for (int n = 0; n < numColorComponents; n++) { - dComponents[n] = dComponents[n] * alpha; + } + break; + + case DataBuffer.TYPE_DOUBLE: + double dComponents[] = null; + double dTransparentComponents[] = new double[numComponents]; + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + dComponents = raster.getPixel(x, minY, dComponents); + if (dComponents[numColorComponents] == 0.0) { + raster.setPixel(x, minY, dTransparentComponents); + } else { + double alpha = dComponents[numColorComponents]; + for (int n = 0; n < numColorComponents; n++) { + dComponents[n] = dComponents[n] * alpha; + } + raster.setPixel(x, minY, dComponents); } - raster.setPixel(x, minY, dComponents); } - } - } - break; + } + break; - default: - // awt.219=This transferType is not supported by this color model - throw new UnsupportedOperationException(Messages.getString("awt.219")); //$NON-NLS-1$ + default: + // awt.219=This transferType is not supported by this color + // model + throw new UnsupportedOperationException(Messages.getString("awt.219")); //$NON-NLS-1$ } } else { switch (transferType) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - case DataBuffer.TYPE_INT: - float alphaFactor = maxValues[numColorComponents]; - int iComponents[] = null; - int iTransparentComponents[] = new int[numComponents]; - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - iComponents = raster.getPixel(x, minY, - iComponents); - if (iComponents[numColorComponents] == 0) { - raster.setPixel(x, minY, iTransparentComponents); - } else { - float alpha = - iComponents[numColorComponents] / - alphaFactor; - for (int n = 0; n < numColorComponents; n++) { - iComponents[n] = - (int) (iComponents[n] / - alpha + 0.5f); + case DataBuffer.TYPE_BYTE: + case DataBuffer.TYPE_USHORT: + case DataBuffer.TYPE_INT: + float alphaFactor = maxValues[numColorComponents]; + int iComponents[] = null; + int iTransparentComponents[] = new int[numComponents]; + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + iComponents = raster.getPixel(x, minY, iComponents); + if (iComponents[numColorComponents] == 0) { + raster.setPixel(x, minY, iTransparentComponents); + } else { + float alpha = iComponents[numColorComponents] / alphaFactor; + for (int n = 0; n < numColorComponents; n++) { + iComponents[n] = (int)(iComponents[n] / alpha + 0.5f); + } + raster.setPixel(x, minY, iComponents); } - raster.setPixel(x, minY, iComponents); } - } - } - break; - - case DataBuffer.TYPE_SHORT: - float sAlphaFactor = maxValues[numColorComponents]; - short sComponents[] = null; - short sTransparentComponents[] = new short[numComponents]; - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - sComponents = (short[]) raster.getDataElements(x, minY, - sComponents); - if (sComponents[numColorComponents] == 0) { - raster.setDataElements(x, minY, - sTransparentComponents); - } else { - float alpha = - sComponents[numColorComponents] / - sAlphaFactor; - for (int n = 0; n < numColorComponents; n++) { - sComponents[n] = - (byte) (sComponents[n] / - alpha + 0.5f); + } + break; + + case DataBuffer.TYPE_SHORT: + float sAlphaFactor = maxValues[numColorComponents]; + short sComponents[] = null; + short sTransparentComponents[] = new short[numComponents]; + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + sComponents = (short[])raster.getDataElements(x, minY, sComponents); + if (sComponents[numColorComponents] == 0) { + raster.setDataElements(x, minY, sTransparentComponents); + } else { + float alpha = sComponents[numColorComponents] / sAlphaFactor; + for (int n = 0; n < numColorComponents; n++) { + sComponents[n] = (byte)(sComponents[n] / alpha + 0.5f); + } + raster.setDataElements(x, minY, sComponents); } - raster.setDataElements(x, minY, sComponents); } - } - } - break; - - case DataBuffer.TYPE_FLOAT: - float fComponents[] = null; - float fTransparentComponents[] = new float[numComponents]; - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - fComponents = raster.getPixel(x, minY, fComponents); - if (fComponents[numColorComponents] == 0.0f) { - raster.setDataElements(x, minY, - fTransparentComponents); - } else { - float alpha = fComponents[numColorComponents]; - for (int n = 0; n < numColorComponents; n++) { - fComponents[n] = fComponents[n] / alpha; + } + break; + + case DataBuffer.TYPE_FLOAT: + float fComponents[] = null; + float fTransparentComponents[] = new float[numComponents]; + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + fComponents = raster.getPixel(x, minY, fComponents); + if (fComponents[numColorComponents] == 0.0f) { + raster.setDataElements(x, minY, fTransparentComponents); + } else { + float alpha = fComponents[numColorComponents]; + for (int n = 0; n < numColorComponents; n++) { + fComponents[n] = fComponents[n] / alpha; + } + raster.setPixel(x, minY, fComponents); } - raster.setPixel(x, minY, fComponents); } - } - - } - break; - case DataBuffer.TYPE_DOUBLE: - double dComponents[] = null; - double dTransparentComponents[] = new double[numComponents]; - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - dComponents = raster.getPixel(x, minY, dComponents); - if (dComponents[numColorComponents] == 0.0) { - raster.setPixel(x, minY, dTransparentComponents); - } else { - double alpha = dComponents[numColorComponents]; - for (int n = 0; n < numColorComponents; n++) { - dComponents[n] = dComponents[n] / alpha; + } + break; + + case DataBuffer.TYPE_DOUBLE: + double dComponents[] = null; + double dTransparentComponents[] = new double[numComponents]; + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + dComponents = raster.getPixel(x, minY, dComponents); + if (dComponents[numColorComponents] == 0.0) { + raster.setPixel(x, minY, dTransparentComponents); + } else { + double alpha = dComponents[numColorComponents]; + for (int n = 0; n < numColorComponents; n++) { + dComponents[n] = dComponents[n] / alpha; + } + raster.setPixel(x, minY, dComponents); } - raster.setPixel(x, minY, dComponents); } - } - } - break; - default: - // awt.219=This transferType is not supported by this color model - throw new UnsupportedOperationException(Messages.getString("awt.219")); //$NON-NLS-1$ + } + break; + default: + // awt.219=This transferType is not supported by this color + // model + throw new UnsupportedOperationException(Messages.getString("awt.219")); //$NON-NLS-1$ } } if (!signed) { - return new ComponentColorModel(cs, bits, hasAlpha, - isAlphaPremultiplied, transparency, transferType); + return new ComponentColorModel(cs, bits, hasAlpha, isAlphaPremultiplied, transparency, + transferType); } - return new ComponentColorModel(cs, null, hasAlpha, - isAlphaPremultiplied, transparency, transferType); + return new ComponentColorModel(cs, null, hasAlpha, isAlphaPremultiplied, transparency, + transferType); } @Override public int[] getComponents(Object pixel, int[] components, int offset) { if (donotSupportUnnormalized) { - // awt.213=This ComponentColorModel does not support the unnormalized form + // awt.213=This ComponentColorModel does not support the + // unnormalized form throw new IllegalArgumentException(Messages.getString("awt.213")); //$NON-NLS-1$ } if (components == null) { components = new int[offset + numComponents]; } else if (offset + numComponents > components.length) { - // awt.218=The components array is not large enough to hold all the color and alpha components + // awt.218=The components array is not large enough to hold all the + // color and alpha components throw new IllegalArgumentException(Messages.getString("awt.218")); //$NON-NLS-1$ } switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) pixel; + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])pixel; - for (int i = 0, idx = offset; i < numComponents; i++, idx++) { - components[idx] = ba[i] & 0xff; - } - return components; + for (int i = 0, idx = offset; i < numComponents; i++, idx++) { + components[idx] = ba[i] & 0xff; + } + return components; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) pixel; - for (int i = 0, idx = offset; i < numComponents; i++, idx++) { - components[idx] = sa[i] & 0xffff; - } - return components; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])pixel; + for (int i = 0, idx = offset; i < numComponents; i++, idx++) { + components[idx] = sa[i] & 0xffff; + } + return components; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) pixel; - for (int i = 0, idx = offset; i < numComponents; i++, idx++) { - components[idx] = ia[i]; - } - return components; - - default: - // awt.217=The transfer type of this ComponentColorModel is not one - // of the following transfer types: DataBuffer.TYPE_BYTE, - // DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT - throw new UnsupportedOperationException(Messages - .getString("awt.217")); //$NON-NLS-1$ + case DataBuffer.TYPE_INT: + int ia[] = (int[])pixel; + for (int i = 0, idx = offset; i < numComponents; i++, idx++) { + components[idx] = ia[i]; + } + return components; + + default: + // awt.217=The transfer type of this ComponentColorModel is not + // one + // of the following transfer types: DataBuffer.TYPE_BYTE, + // DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT + throw new UnsupportedOperationException(Messages.getString("awt.217")); //$NON-NLS-1$ } } @Override - public float[] getNormalizedComponents(Object pixel, - float normComponents[], int normOffset) { + public float[] getNormalizedComponents(Object pixel, float normComponents[], int normOffset) { if (normComponents == null) { normComponents = new float[numComponents + normOffset]; } switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) pixel; - for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { - normComponents[idx] = (ba[i] & 0xff) * scaleFactors[i]; - } - break; + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])pixel; + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + normComponents[idx] = (ba[i] & 0xff) * scaleFactors[i]; + } + break; - case DataBuffer.TYPE_USHORT: - short usa[] = (short[]) pixel; - for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { - normComponents[idx] = (usa[i] & 0xffff) - * scaleFactors[i]; - } - break; + case DataBuffer.TYPE_USHORT: + short usa[] = (short[])pixel; + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + normComponents[idx] = (usa[i] & 0xffff) * scaleFactors[i]; + } + break; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) pixel; - for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { - normComponents[idx] = ia[i] * scaleFactors[i]; - } - break; + case DataBuffer.TYPE_INT: + int ia[] = (int[])pixel; + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + normComponents[idx] = ia[i] * scaleFactors[i]; + } + break; - case DataBuffer.TYPE_SHORT: - short sa[] = (short[]) pixel; - for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { - normComponents[idx] = sa[i] * scaleFactors[i]; - } - break; + case DataBuffer.TYPE_SHORT: + short sa[] = (short[])pixel; + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + normComponents[idx] = sa[i] * scaleFactors[i]; + } + break; - case DataBuffer.TYPE_FLOAT: - float fa[] = (float[]) pixel; - for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { - normComponents[idx] = fa[i]; - } - break; + case DataBuffer.TYPE_FLOAT: + float fa[] = (float[])pixel; + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + normComponents[idx] = fa[i]; + } + break; - case DataBuffer.TYPE_DOUBLE: - double da[] = (double[]) pixel; - for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { - normComponents[idx] = (float) da[i]; - } - break; + case DataBuffer.TYPE_DOUBLE: + double da[] = (double[])pixel; + for (int i = 0, idx = normOffset; i < numComponents; i++, idx++) { + normComponents[idx] = (float)da[i]; + } + break; - default: - // awt.21A=This ComponentColorModel does not support this transferType - throw new IllegalArgumentException(Messages.getString("awt.21A")); //$NON-NLS-1$ + default: + // awt.21A=This ComponentColorModel does not support this + // transferType + throw new IllegalArgumentException(Messages.getString("awt.21A")); //$NON-NLS-1$ } if (needAlphaDivide) { float alpha = normComponents[normOffset + numColorComponents]; - for (int i = 0, idx = normOffset; i < numColorComponents; - i++, idx++) { + for (int i = 0, idx = normOffset; i < numColorComponents; i++, idx++) { normComponents[idx] /= alpha; } } if (needScale) { - for (int i = 0, idx = normOffset; i < numColorComponents; - i++, idx++) { - normComponents[idx] = minVals[i] + - ranges[i] * normComponents[idx]; + for (int i = 0, idx = normOffset; i < numColorComponents; i++, idx++) { + normComponents[idx] = minVals[i] + ranges[i] * normComponents[idx]; } } return normComponents; @@ -934,8 +950,7 @@ public class ComponentColorModel extends ColorModel { int gray = getRed(inData); return (alpha << 24 | gray << 16 | gray << 8 | gray); } - return (alpha << 24 | getRed(inData) << 16 | getGreen(inData) << 8 | - getBlue(inData)); + return (alpha << 24 | getRed(inData) << 16 | getGreen(inData) << 8 | getBlue(inData)); } @Override @@ -956,50 +971,50 @@ public class ComponentColorModel extends ColorModel { int alpha = 0; switch (transferType) { - case DataBuffer.TYPE_BYTE: { - byte ba[] = (byte[]) inData; - alpha = ba[numColorComponents] & 0xff; - if (bits[numColorComponents] != 8) { - return alphaLUT[alpha] & 0xff; + case DataBuffer.TYPE_BYTE: { + byte ba[] = (byte[])inData; + alpha = ba[numColorComponents] & 0xff; + if (bits[numColorComponents] != 8) { + return alphaLUT[alpha] & 0xff; + } + return alpha; } - return alpha; - } - case DataBuffer.TYPE_USHORT: { - short usa[] = (short[]) inData; - alpha = usa[numColorComponents] & 0xffff; - if (bits[numColorComponents] != 8) { - return alphaLUT[alpha] & 0xff; + case DataBuffer.TYPE_USHORT: { + short usa[] = (short[])inData; + alpha = usa[numColorComponents] & 0xffff; + if (bits[numColorComponents] != 8) { + return alphaLUT[alpha] & 0xff; + } + return alpha; } - return alpha; - } - case DataBuffer.TYPE_INT: { - int ia[] = (int[]) inData; - alpha = ia[numColorComponents]; - if (bits[numColorComponents] != 8) { - return alphaLUT[alpha] & 0xff; + case DataBuffer.TYPE_INT: { + int ia[] = (int[])inData; + alpha = ia[numColorComponents]; + if (bits[numColorComponents] != 8) { + return alphaLUT[alpha] & 0xff; + } + return alpha; } - return alpha; - } - case DataBuffer.TYPE_SHORT: { - short sa[] = (short[]) inData; - alpha = sa[numColorComponents]; - if (bits[numColorComponents] != 8) { - return alphaLUT[alpha] & 0xff; + case DataBuffer.TYPE_SHORT: { + short sa[] = (short[])inData; + alpha = sa[numColorComponents]; + if (bits[numColorComponents] != 8) { + return alphaLUT[alpha] & 0xff; + } + return alpha; + } + case DataBuffer.TYPE_FLOAT: { + float fa[] = (float[])inData; + return (int)(fa[numColorComponents] * 255.0f + 0.5f); + } + case DataBuffer.TYPE_DOUBLE: { + double da[] = (double[])inData; + return (int)(da[numColorComponents] * 255.0 + 0.5); + } + default: { + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } - return alpha; - } - case DataBuffer.TYPE_FLOAT: { - float fa[] = (float[]) inData; - return (int) (fa[numColorComponents] * 255.0f + 0.5f); - } - case DataBuffer.TYPE_DOUBLE: { - double da[] = (double[]) inData; - return (int) (da[numColorComponents] * 255.0 + 0.5); - } - default: { - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } } } @@ -1032,14 +1047,14 @@ public class ComponentColorModel extends ColorModel { } switch (transferType) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - return new PixelInterleavedSampleModel(transferType, w, h, - numComponents, w * numComponents, bandOffsets); - - default: - return new ComponentSampleModel(transferType, w, h, numComponents, - w * numComponents, bandOffsets); + case DataBuffer.TYPE_BYTE: + case DataBuffer.TYPE_USHORT: + return new PixelInterleavedSampleModel(transferType, w, h, numComponents, w + * numComponents, bandOffsets); + + default: + return new ComponentSampleModel(transferType, w, h, numComponents, w + * numComponents, bandOffsets); } } @@ -1067,15 +1082,15 @@ public class ComponentColorModel extends ColorModel { } @Override - public float[] getNormalizedComponents(int components[], int offset, - float normComponents[], int normOffset) { + public float[] getNormalizedComponents(int components[], int offset, float normComponents[], + int normOffset) { if (donotSupportUnnormalized) { - // awt.213=This ComponentColorModel does not support the unnormalized form + // awt.213=This ComponentColorModel does not support the + // unnormalized form throw new IllegalArgumentException(Messages.getString("awt.213")); //$NON-NLS-1$ } - return super.getNormalizedComponents(components, offset, - normComponents, normOffset); + return super.getNormalizedComponents(components, offset, normComponents, normOffset); } @Override @@ -1085,28 +1100,30 @@ public class ComponentColorModel extends ColorModel { throw new IllegalArgumentException(Messages.getString("awt.212")); //$NON-NLS-1$ } if (donotSupportUnnormalized) { - // awt.213=This ComponentColorModel does not support the unnormalized form + // awt.213=This ComponentColorModel does not support the + // unnormalized form throw new IllegalArgumentException(Messages.getString("awt.213")); //$NON-NLS-1$ } return components[offset]; } @Override - public int[] getUnnormalizedComponents(float[] normComponents, - int normOffset, int[] components, int offset) { + public int[] getUnnormalizedComponents(float[] normComponents, int normOffset, + int[] components, int offset) { if (donotSupportUnnormalized) { - // awt.213=This ComponentColorModel does not support the unnormalized form + // awt.213=This ComponentColorModel does not support the + // unnormalized form throw new IllegalArgumentException(Messages.getString("awt.213")); //$NON-NLS-1$ } if (normComponents.length - normOffset < numComponents) { - // awt.21B=The length of normComponents minus normOffset is less than numComponents + // awt.21B=The length of normComponents minus normOffset is less + // than numComponents throw new IllegalArgumentException(Messages.getString("awt.21B")); //$NON-NLS-1$ } - return super.getUnnormalizedComponents(normComponents, normOffset, - components, offset); + return super.getUnnormalizedComponents(normComponents, normOffset, components, offset); } @Override @@ -1123,19 +1140,19 @@ public class ComponentColorModel extends ColorModel { Object pixel = getDataElements(normComponents, normOffset, null); switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) pixel; - return ba[0] & 0xff; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) pixel; - return sa[0] & 0xffff; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) pixel; - return ia[0]; - default: - // awt.211=Pixel values for this ColorModel are not conveniently - // representable as a single int - throw new IllegalArgumentException(Messages.getString("awt.211")); //$NON-NLS-1$ + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])pixel; + return ba[0] & 0xff; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])pixel; + return sa[0] & 0xffff; + case DataBuffer.TYPE_INT: + int ia[] = (int[])pixel; + return ia[0]; + default: + // awt.211=Pixel values for this ColorModel are not conveniently + // representable as a single int + throw new IllegalArgumentException(Messages.getString("awt.211")); //$NON-NLS-1$ } } @@ -1146,7 +1163,8 @@ public class ComponentColorModel extends ColorModel { throw new IllegalArgumentException(Messages.getString("awt.212")); //$NON-NLS-1$ } if (donotSupportUnnormalized) { - // awt.213=This ComponentColorModel does not support the unnormalized form + // awt.213=This ComponentColorModel does not support the + // unnormalized form throw new IllegalArgumentException(Messages.getString("awt.213")); //$NON-NLS-1$ } @@ -1161,31 +1179,31 @@ public class ComponentColorModel extends ColorModel { @Override public int getRed(int pixel) { float rgb[] = toRGB(pixel); - return (int) (rgb[0] * 255.0f + 0.5f); + return (int)(rgb[0] * 255.0f + 0.5f); } @Override public int getRGB(int pixel) { - return (getAlpha(pixel) << 24) | (getRed(pixel) << 16) | - (getGreen(pixel) << 8) | getBlue(pixel); + return (getAlpha(pixel) << 24) | (getRed(pixel) << 16) | (getGreen(pixel) << 8) + | getBlue(pixel); } @Override public int getGreen(int pixel) { float rgb[] = toRGB(pixel); - return (int) (rgb[1] * 255.0f + 0.5f); + return (int)(rgb[1] * 255.0f + 0.5f); } @Override public int getBlue(int pixel) { float rgb[] = toRGB(pixel); - return (int) (rgb[2] * 255.0f + 0.5f); + return (int)(rgb[2] * 255.0f + 0.5f); } @Override public int getAlpha(int pixel) { - // This method throw IllegalArgumentException according to + // This method throw IllegalArgumentException according to // Java API Spacification if (signed) { // awt.210=The component value for this ColorModel is signed @@ -1210,24 +1228,19 @@ public class ComponentColorModel extends ColorModel { if (hasAlpha && bits[numColorComponents] != 8 && integral) { alphaLUT = new byte[maxValues[numColorComponents] + 1]; for (int i = 0; i <= maxValues[numColorComponents]; i++) { - alphaLUT[i] = (byte) (scaleFactors[numColorComponents] * i + - 0.5f); + alphaLUT[i] = (byte)(scaleFactors[numColorComponents] * i + 0.5f); } } if (is_LINEAR_RGB) { if (maxBitLength > 8) { LINEAR_RGB_Length = 16; - from_LINEAR_RGB_LUT = - LUTColorConverter.getFrom16lRGBtosRGB_LUT(); - to_LINEAR_16RGB_LUT = - LUTColorConverter.getFromsRGBto16lRGB_LUT(); + from_LINEAR_RGB_LUT = LUTColorConverter.getFrom16lRGBtosRGB_LUT(); + to_LINEAR_16RGB_LUT = LUTColorConverter.getFromsRGBto16lRGB_LUT(); } else { LINEAR_RGB_Length = 8; - from_LINEAR_RGB_LUT = - LUTColorConverter.getFrom8lRGBtosRGB_LUT(); - to_LINEAR_8RGB_LUT = - LUTColorConverter.getFromsRGBto8lRGB_LUT(); + from_LINEAR_RGB_LUT = LUTColorConverter.getFrom8lRGBtosRGB_LUT(); + to_LINEAR_8RGB_LUT = LUTColorConverter.getFromsRGBto8lRGB_LUT(); } fFactor = ((1 << LINEAR_RGB_Length) - 1); } else { @@ -1248,8 +1261,7 @@ public class ComponentColorModel extends ColorModel { } colorLUTs[i] = new byte[maxValues[i] + 1]; for (int j = 0; j <= maxValues[0]; j++) { - colorLUTs[i][j] = - (byte) (scaleFactors[i] * j + 0.5f); + colorLUTs[i][j] = (byte)(scaleFactors[i] * j + 0.5f); } } } @@ -1269,10 +1281,9 @@ public class ComponentColorModel extends ColorModel { for (int j = 0; j <= maxValues[0]; j++) { int idx; if (LINEAR_RGB_Length == 8) { - idx = (int) (scaleFactors[i] * j + 0.5f); + idx = (int)(scaleFactors[i] * j + 0.5f); } else { - idx = (int) (scaleFactors[i] * j * 257.0f + - 0.5f); + idx = (int)(scaleFactors[i] * j * 257.0f + 0.5f); } colorLUTs[i][j] = from_LINEAR_RGB_LUT[idx]; } @@ -1286,13 +1297,13 @@ public class ComponentColorModel extends ColorModel { /** * To rgb. * - * @param pixel - int representation of pixel - * - * @return - array of normalized sRGB components + * @param pixel + * the integer representation of the pixel. + * @return the array of normalized sRGB components. */ private float[] toRGB(int pixel) { - - // This method throw IllegalArgumentException according to + + // This method throw IllegalArgumentException according to // Java API Spacification if (signed) { // awt.210=The component value for this ColorModel is signed @@ -1307,23 +1318,23 @@ public class ComponentColorModel extends ColorModel { Object obj = null; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = new byte[1]; - ba[0] = (byte) pixel; - obj = ba; - break; - - case DataBuffer.TYPE_USHORT: - short sa[] = new short[1]; - sa[0] = (short) pixel; - obj = sa; - break; - - case DataBuffer.TYPE_INT: - int ia[] = new int[1]; - ia[0] = pixel; - obj = ia; - break; + case DataBuffer.TYPE_BYTE: + byte ba[] = new byte[1]; + ba[0] = (byte)pixel; + obj = ba; + break; + + case DataBuffer.TYPE_USHORT: + short sa[] = new short[1]; + sa[0] = (short)pixel; + obj = sa; + break; + + case DataBuffer.TYPE_INT: + int ia[] = new int[1]; + ia[0] = pixel; + obj = ia; + break; } @@ -1331,12 +1342,13 @@ public class ComponentColorModel extends ColorModel { } /** - * Gets the rgb component. + * Gets the RGB component. * - * @param pixel - pixel - * @param idx - index of component - * - * @return - RGB value from 0 to 255 pixel's component + * @param pixel + * the pixel. + * @param idx + * the index of component. + * @return the RGB value from 0 to 255 pixel's component. */ private int getRGBComponent(Object pixel, int idx) { if (is_sRGB) { @@ -1355,117 +1367,116 @@ public class ComponentColorModel extends ColorModel { float normComp[] = getNormalizedComponents(pixel, null, 0); float rgbComp[] = cs.toRGB(normComp); - return (int) (rgbComp[idx] * 255.0f + 0.5f); + return (int)(rgbComp[idx] * 255.0f + 0.5f); } /** * Gets the def component. * - * @param pixel - pixel - * @param idx - index of component - * - * @return - tentative value of the pixel component + * @param pixel + * the pixel. + * @param idx + * the index of component. + * @return the tentative value of the pixel component. */ private int getDefComponent(Object pixel, int idx) { int comp = 0; calcValue = false; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) pixel; - comp = ba[idx] & 0xff; - if (needAlphaDivide) { - int alpha = ba[numColorComponents] & 0xff; - if (alpha == 0) { - comp = 0; - } else { - float normAlpha = scaleFactors[numColorComponents] * alpha; - comp = (int) (comp * fFactor / normAlpha + 0.5f); + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])pixel; + comp = ba[idx] & 0xff; + if (needAlphaDivide) { + int alpha = ba[numColorComponents] & 0xff; + if (alpha == 0) { + comp = 0; + } else { + float normAlpha = scaleFactors[numColorComponents] * alpha; + comp = (int)(comp * fFactor / normAlpha + 0.5f); + } + calcValue = true; } - calcValue = true; - } - return comp; - - case DataBuffer.TYPE_USHORT: - short usa[] = (short[]) pixel; - comp = usa[idx] & 0xffff; - if (needAlphaDivide) { - int alpha = usa[numColorComponents] & 0xffff; - if (alpha == 0) { - comp = 0; - } else { - float normAlpha = scaleFactors[numColorComponents] * alpha; - comp = (int) (comp * fFactor / normAlpha + 0.5f); + return comp; + + case DataBuffer.TYPE_USHORT: + short usa[] = (short[])pixel; + comp = usa[idx] & 0xffff; + if (needAlphaDivide) { + int alpha = usa[numColorComponents] & 0xffff; + if (alpha == 0) { + comp = 0; + } else { + float normAlpha = scaleFactors[numColorComponents] * alpha; + comp = (int)(comp * fFactor / normAlpha + 0.5f); + } + calcValue = true; } - calcValue = true; - } - return comp; - - case DataBuffer.TYPE_INT: - int ia[] = (int[]) pixel; - comp = ia[idx]; - if (needAlphaDivide) { - int alpha = ia[numColorComponents]; - if (alpha == 0) { - comp = 0; - } else { - float normAlpha = scaleFactors[numColorComponents] * alpha; - comp = (int) (comp * fFactor / normAlpha + 0.5f); + return comp; + + case DataBuffer.TYPE_INT: + int ia[] = (int[])pixel; + comp = ia[idx]; + if (needAlphaDivide) { + int alpha = ia[numColorComponents]; + if (alpha == 0) { + comp = 0; + } else { + float normAlpha = scaleFactors[numColorComponents] * alpha; + comp = (int)(comp * fFactor / normAlpha + 0.5f); + } + calcValue = true; } - calcValue = true; - } - return comp; - - case DataBuffer.TYPE_SHORT: - short sa[] = (short[]) pixel; - comp = sa[idx]; - if (needAlphaDivide) { - int alpha = sa[numColorComponents]; - if (alpha == 0) { - comp = 0; - } else { - float normAlpha = scaleFactors[numColorComponents] * alpha; - comp = (int) (comp * fFactor / normAlpha + 0.5f); + return comp; + + case DataBuffer.TYPE_SHORT: + short sa[] = (short[])pixel; + comp = sa[idx]; + if (needAlphaDivide) { + int alpha = sa[numColorComponents]; + if (alpha == 0) { + comp = 0; + } else { + float normAlpha = scaleFactors[numColorComponents] * alpha; + comp = (int)(comp * fFactor / normAlpha + 0.5f); + } + calcValue = true; } - calcValue = true; - } - return comp; - - case DataBuffer.TYPE_FLOAT: - float fa[] = (float[]) pixel; - if (needAlphaDivide) { - float alpha = fa[numColorComponents]; - if (fa[numColorComponents] == 0.0f) { - comp = 0; + return comp; + + case DataBuffer.TYPE_FLOAT: + float fa[] = (float[])pixel; + if (needAlphaDivide) { + float alpha = fa[numColorComponents]; + if (fa[numColorComponents] == 0.0f) { + comp = 0; + } else { + comp = (int)(fa[idx] * fFactor / alpha + 0.5f); + } } else { - comp = (int) (fa[idx] * fFactor / alpha + 0.5f); + comp = (int)(fa[idx] * fFactor + 0.5f); } - } else { - comp = (int) (fa[idx] * fFactor + 0.5f); - } - calcValue = true; - return comp; - - case DataBuffer.TYPE_DOUBLE: - double da[] = (double[]) pixel; - if (needAlphaDivide) { - if (da[numColorComponents] == 0.0) { - comp = 0; + calcValue = true; + return comp; + + case DataBuffer.TYPE_DOUBLE: + double da[] = (double[])pixel; + if (needAlphaDivide) { + if (da[numColorComponents] == 0.0) { + comp = 0; + } else { + comp = (int)(da[idx] * fFactor / da[numColorComponents] + 0.5); + } } else { - comp = (int) (da[idx] * fFactor / da[numColorComponents] + - 0.5); + comp = (int)(da[idx] * fFactor + 0.5); } - } else { - comp = (int) (da[idx] * fFactor + 0.5); - } - calcValue = true; - return comp; + calcValue = true; + return comp; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } } } - diff --git a/awt/java/awt/image/ComponentSampleModel.java b/awt/java/awt/image/ComponentSampleModel.java index 2ff4f1a2b2..7f8140918d 100644 --- a/awt/java/awt/image/ComponentSampleModel.java +++ b/awt/java/awt/image/ComponentSampleModel.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.util.Arrays; @@ -25,55 +26,73 @@ import java.util.Arrays; import org.apache.harmony.awt.internal.nls.Messages; /** - * The ComponentSampleModel class represents a set of image data whose - * each element - the sample of a pixel - takes one data element of - * the DataBuffer. + * The ComponentSampleModel class represents a set of image data whose each + * element - the sample of a pixel - takes one data element of the DataBuffer. *

    - * The Bank indices denote the correspondence between the bank of data - * buffers and a band of image data. The Pixel stride is the number of data - * array elements between two samples for the same band on the same - * scanline. The pixel stride for a BandedSampleModel is one. The Scanline - * stride represents the number of data array elements between a - * specified sample and the corresponding sample in the same column in - * the next scanline. The array of band offsets gives the starting - * offsets within each data banks of the in the DataBuffer. The bank - * indices represents the indices within each bank of the DataBuffer - * corresponding to a band of image data. + * The Bank indices denote the correspondence between the bank of data buffers + * and a band of image data. The Pixel stride is the number of data array + * elements between two samples for the same band on the same scanline. The + * pixel stride for a BandedSampleModel is one. The scanline stride represents + * the number of data array elements between a specified sample and the + * corresponding sample in the same column in the next scanline. The array of + * band offsets gives the starting offsets within each data banks of the in the + * DataBuffer. The bank indices represents the indices within each bank of the + * DataBuffer corresponding to a band of image data. + * + * @since Android 1.0 */ public class ComponentSampleModel extends SampleModel { - /** The band offsets array of this ComponentSampleModel. */ + /** + * The band offsets array of this ComponentSampleModel. + */ protected int bandOffsets[]; - /** The bank indices array of this ComponentSampleModel. */ + /** + * The bank indices array of this ComponentSampleModel. + */ protected int bankIndices[]; - /** The number of bands in this ComponentSampleModel. */ + /** + * The number of bands in this ComponentSampleModel. + */ protected int numBands; - /** The number banks of this ComponentSampleModel. */ + /** + * The number banks of this ComponentSampleModel. + */ protected int numBanks; - /** The scanline stride of this ComponentSampleModel. */ + /** + * The scanline stride of this ComponentSampleModel. + */ protected int scanlineStride; - /** The pixel stride of this ComponentSampleModel. */ + /** + * The pixel stride of this ComponentSampleModel. + */ protected int pixelStride; /** - * Instantiates a new ComponentSampleModel with the specified - * properties. + * Instantiates a new ComponentSampleModel with the specified properties. * - * @param dataType the data type of samples. - * @param w the width of the image data. - * @param h the height of the image data. - * @param pixelStride the pixel stride of the image data. - * @param scanlineStride the scanline stride of the image data. - * @param bankIndices the array of the bank indices. - * @param bandOffsets the array of the band offsets. + * @param dataType + * the data type of samples. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param pixelStride + * the pixel stride of the image data. + * @param scanlineStride + * the scanline stride of the image data. + * @param bankIndices + * the array of the bank indices. + * @param bandOffsets + * the array of the band offsets. */ - public ComponentSampleModel(int dataType, int w, int h, int pixelStride, - int scanlineStride, int bankIndices[], int bandOffsets[]) { + public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, + int bankIndices[], int bandOffsets[]) { super(dataType, w, h, bandOffsets.length); @@ -113,18 +132,23 @@ public class ComponentSampleModel extends SampleModel { } /** - * Instantiates a new ComponentSampleModel with the specified - * properties. + * Instantiates a new ComponentSampleModel with the specified properties. * - * @param dataType the data type of the samples. - * @param w the width of the image data. - * @param h the height of the image data. - * @param pixelStride the pixel stride of the image data. - * @param scanlineStride the scanline stride of the image data. - * @param bandOffsets the band offsets. + * @param dataType + * the data type of the samples. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param pixelStride + * the pixel stride of the image data. + * @param scanlineStride + * the scanline stride of the image data. + * @param bandOffsets + * the band offsets. */ - public ComponentSampleModel(int dataType, int w, int h, int pixelStride, - int scanlineStride, int bandOffsets[]) { + public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, + int bandOffsets[]) { super(dataType, w, h, bandOffsets.length); if (pixelStride < 0) { @@ -156,81 +180,81 @@ public class ComponentSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } switch (dataType) { - case DataBuffer.TYPE_BYTE: - byte bdata[]; - if (obj == null) { - bdata = new byte[numBands]; - } else { - bdata = (byte[]) obj; - } + case DataBuffer.TYPE_BYTE: + byte bdata[]; + if (obj == null) { + bdata = new byte[numBands]; + } else { + bdata = (byte[])obj; + } - for (int i = 0; i < numBands; i++) { - bdata[i] = (byte) getSample(x, y, i, data); - } + for (int i = 0; i < numBands; i++) { + bdata[i] = (byte)getSample(x, y, i, data); + } - obj = bdata; - break; + obj = bdata; + break; - case DataBuffer.TYPE_SHORT: - case DataBuffer.TYPE_USHORT: - short sdata[]; - if (obj == null) { - sdata = new short[numBands]; - } else { - sdata = (short[]) obj; - } + case DataBuffer.TYPE_SHORT: + case DataBuffer.TYPE_USHORT: + short sdata[]; + if (obj == null) { + sdata = new short[numBands]; + } else { + sdata = (short[])obj; + } - for (int i = 0; i < numBands; i++) { - sdata[i] = (short) getSample(x, y, i, data); - } + for (int i = 0; i < numBands; i++) { + sdata[i] = (short)getSample(x, y, i, data); + } - obj = sdata; - break; + obj = sdata; + break; - case DataBuffer.TYPE_INT: - int idata[]; - if (obj == null) { - idata = new int[numBands]; - } else { - idata = (int[]) obj; - } + case DataBuffer.TYPE_INT: + int idata[]; + if (obj == null) { + idata = new int[numBands]; + } else { + idata = (int[])obj; + } - for (int i = 0; i < numBands; i++) { - idata[i] = getSample(x, y, i, data); - } + for (int i = 0; i < numBands; i++) { + idata[i] = getSample(x, y, i, data); + } - obj = idata; - break; + obj = idata; + break; - case DataBuffer.TYPE_FLOAT: - float fdata[]; - if (obj == null) { - fdata = new float[numBands]; - } else { - fdata = (float[]) obj; - } + case DataBuffer.TYPE_FLOAT: + float fdata[]; + if (obj == null) { + fdata = new float[numBands]; + } else { + fdata = (float[])obj; + } - for (int i = 0; i < numBands; i++) { - fdata[i] = getSampleFloat(x, y, i, data); - } + for (int i = 0; i < numBands; i++) { + fdata[i] = getSampleFloat(x, y, i, data); + } - obj = fdata; - break; + obj = fdata; + break; - case DataBuffer.TYPE_DOUBLE: - double ddata[]; - if (obj == null) { - ddata = new double[numBands]; - } else { - ddata = (double[]) obj; - } + case DataBuffer.TYPE_DOUBLE: + double ddata[]; + if (obj == null) { + ddata = new double[numBands]; + } else { + ddata = (double[])obj; + } - for (int i = 0; i < numBands; i++) { - ddata[i] = getSampleDouble(x, y, i, data); - } + for (int i = 0; i < numBands; i++) { + ddata[i] = getSampleDouble(x, y, i, data); + } - obj = ddata; - break; + obj = ddata; + break; } return obj; @@ -243,76 +267,75 @@ public class ComponentSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } switch (dataType) { - case DataBuffer.TYPE_BYTE: - byte barr[] = (byte[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, barr[i] & 0xff, data); - } - break; + case DataBuffer.TYPE_BYTE: + byte barr[] = (byte[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, barr[i] & 0xff, data); + } + break; - case DataBuffer.TYPE_SHORT: - case DataBuffer.TYPE_USHORT: - short sarr[] = (short[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, sarr[i] & 0xffff, data); - } - break; + case DataBuffer.TYPE_SHORT: + case DataBuffer.TYPE_USHORT: + short sarr[] = (short[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, sarr[i] & 0xffff, data); + } + break; - case DataBuffer.TYPE_INT: - int iarr[] = (int[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, iarr[i], data); - } - break; + case DataBuffer.TYPE_INT: + int iarr[] = (int[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, iarr[i], data); + } + break; - case DataBuffer.TYPE_FLOAT: - float farr[] = (float[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, farr[i], data); - } - break; + case DataBuffer.TYPE_FLOAT: + float farr[] = (float[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, farr[i], data); + } + break; - case DataBuffer.TYPE_DOUBLE: - double darr[] = (double[]) obj; - for (int i = 0; i < numBands; i++) { - setSample(x, y, i, darr[i], data); - } - break; + case DataBuffer.TYPE_DOUBLE: + double darr[] = (double[])obj; + for (int i = 0; i < numBands; i++) { + setSample(x, y, i, darr[i], data); + } + break; } } /** * Compares this ComponentSampleModel with the specified Object. * - * @param o the Object. - * - * @return true, if the object is a ComponentSampleModel with - * identical data values to this ComponentSampleModel, false otherwise. + * @param o + * the Object. + * @return true, if the object is a ComponentSampleModel with identical data + * values to this ComponentSampleModel, false otherwise. */ @Override public boolean equals(Object o) { if ((o == null) || !(o instanceof ComponentSampleModel)) { return false; } - ComponentSampleModel model = (ComponentSampleModel) o; - return this.width == model.width && this.height == model.height && - this.numBands == model.numBands && - this.dataType == model.dataType && - Arrays.equals(this.bandOffsets, model.bandOffsets) && - Arrays.equals(this.bankIndices, model.bankIndices) && - this.numBands == model.numBands && - this.numBanks == model.numBanks && - this.scanlineStride == model.scanlineStride && - this.pixelStride == model.pixelStride; + ComponentSampleModel model = (ComponentSampleModel)o; + return this.width == model.width && this.height == model.height + && this.numBands == model.numBands && this.dataType == model.dataType + && Arrays.equals(this.bandOffsets, model.bandOffsets) + && Arrays.equals(this.bankIndices, model.bankIndices) + && this.numBands == model.numBands && this.numBanks == model.numBanks + && this.scanlineStride == model.scanlineStride + && this.pixelStride == model.pixelStride; } - /** + /** * @see java.awt.image.SampleModel#createSubsetSampleModel(int[]) */ @Override public SampleModel createSubsetSampleModel(int bands[]) { if (bands.length > this.numBands) { - // awt.64=The number of the bands in the subset is greater than the number of bands in the sample model + // awt.64=The number of the bands in the subset is greater than the + // number of bands in the sample model throw new RasterFormatException(Messages.getString("awt.64")); //$NON-NLS-1$ } @@ -324,15 +347,15 @@ public class ComponentSampleModel extends SampleModel { offsets[i] = bandOffsets[bands[i]]; } - return new ComponentSampleModel(dataType, width, height, pixelStride, - scanlineStride, indices, offsets); + return new ComponentSampleModel(dataType, width, height, pixelStride, scanlineStride, + indices, offsets); } @Override public SampleModel createCompatibleSampleModel(int w, int h) { - return new ComponentSampleModel(dataType, w, h, pixelStride, - pixelStride * w, bankIndices, bandOffsets); + return new ComponentSampleModel(dataType, w, h, pixelStride, pixelStride * w, bankIndices, + bandOffsets); } @Override @@ -366,8 +389,7 @@ public class ComponentSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - return data.getElem(bankIndices[b], y * scanlineStride + - x * pixelStride + bandOffsets[b]); + return data.getElem(bankIndices[b], y * scanlineStride + x * pixelStride + bandOffsets[b]); } @Override @@ -377,8 +399,8 @@ public class ComponentSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - return data.getElemFloat(bankIndices[b], y * scanlineStride + - x * pixelStride + bandOffsets[b]); + return data.getElemFloat(bankIndices[b], y * scanlineStride + x * pixelStride + + bandOffsets[b]); } @Override @@ -388,15 +410,14 @@ public class ComponentSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - return data.getElemDouble(bankIndices[b], y * scanlineStride + - x * pixelStride + bandOffsets[b]); + return data.getElemDouble(bankIndices[b], y * scanlineStride + x * pixelStride + + bandOffsets[b]); } @Override - public int[] getPixels(int x, int y, int w, int h, int iArray[], - DataBuffer data) { - if (x < 0 || y < 0 || x > this.width || x + w > this.width - || y > this.height || y + h > this.height) { + public int[] getPixels(int x, int y, int w, int h, int iArray[], DataBuffer data) { + if (x < 0 || y < 0 || x > this.width || x + w > this.width || y > this.height + || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } @@ -421,8 +442,7 @@ public class ComponentSampleModel extends SampleModel { } @Override - public void setPixels(int x, int y, int w, int h, int iArray[], - DataBuffer data) { + public void setPixels(int x, int y, int w, int h, int iArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -444,13 +464,11 @@ public class ComponentSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - data.setElem(bankIndices[b], y * scanlineStride + x * pixelStride - + bandOffsets[b], s); + data.setElem(bankIndices[b], y * scanlineStride + x * pixelStride + bandOffsets[b], s); } @Override - public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], - DataBuffer data) { + public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -463,7 +481,7 @@ public class ComponentSampleModel extends SampleModel { } else { samples = iArray; } - + if (data == null) { // awt.295=data is null throw new NullPointerException(Messages.getString("awt.295")); //$NON-NLS-1$ @@ -479,8 +497,7 @@ public class ComponentSampleModel extends SampleModel { } @Override - public void setSamples(int x, int y, int w, int h, int b, int iArray[], - DataBuffer data) { + public void setSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -500,8 +517,7 @@ public class ComponentSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - data.setElemFloat(bankIndices[b], y * scanlineStride + - x * pixelStride + bandOffsets[b], s); + data.setElemFloat(bankIndices[b], y * scanlineStride + x * pixelStride + bandOffsets[b], s); } @Override @@ -511,8 +527,9 @@ public class ComponentSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } - data.setElemDouble(bankIndices[b], y * scanlineStride + - x * pixelStride + bandOffsets[b], s); + data + .setElemDouble(bankIndices[b], y * scanlineStride + x * pixelStride + + bandOffsets[b], s); } @Override @@ -525,28 +542,27 @@ public class ComponentSampleModel extends SampleModel { maxOffset = bandOffsets[i]; } } - int size = (height - 1) * scanlineStride + - (width - 1) * pixelStride + maxOffset + 1; + int size = (height - 1) * scanlineStride + (width - 1) * pixelStride + maxOffset + 1; switch (dataType) { - case DataBuffer.TYPE_BYTE: - data = new DataBufferByte(size, numBanks); - break; - case DataBuffer.TYPE_SHORT: - data = new DataBufferShort(size, numBanks); - break; - case DataBuffer.TYPE_USHORT: - data = new DataBufferUShort(size, numBanks); - break; - case DataBuffer.TYPE_INT: - data = new DataBufferInt(size, numBanks); - break; - case DataBuffer.TYPE_FLOAT: - data = new DataBufferFloat(size, numBanks); - break; - case DataBuffer.TYPE_DOUBLE: - data = new DataBufferDouble(size, numBanks); - break; + case DataBuffer.TYPE_BYTE: + data = new DataBufferByte(size, numBanks); + break; + case DataBuffer.TYPE_SHORT: + data = new DataBufferShort(size, numBanks); + break; + case DataBuffer.TYPE_USHORT: + data = new DataBufferUShort(size, numBanks); + break; + case DataBuffer.TYPE_INT: + data = new DataBufferInt(size, numBanks); + break; + case DataBuffer.TYPE_FLOAT: + data = new DataBufferFloat(size, numBanks); + break; + case DataBuffer.TYPE_DOUBLE: + data = new DataBufferDouble(size, numBanks); + break; } return data; @@ -556,10 +572,12 @@ public class ComponentSampleModel extends SampleModel { /** * Gets the offset of the specified band of the specified pixel. * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the band. - * + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the band. * @return the offset of the specified band of the specified pixel. */ public int getOffset(int x, int y, int b) { @@ -569,9 +587,10 @@ public class ComponentSampleModel extends SampleModel { /** * Gets the offset of the first band of the specified pixel. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. * @return the offset of the first band of the specified pixel. */ public int getOffset(int x, int y) { @@ -595,8 +614,7 @@ public class ComponentSampleModel extends SampleModel { } /** - * Gets an array of bank indices corresponding to this - * ComponentSampleModel. + * Gets an array of bank indices corresponding to this ComponentSampleModel. * * @return the array of bank indices. */ @@ -605,7 +623,7 @@ public class ComponentSampleModel extends SampleModel { } /** - * Gets an array of the band offsets corresponding to this + * Gets an array of the band offsets corresponding to this * ComponentSampleModel. * * @return the array of band offsets. @@ -673,7 +691,7 @@ public class ComponentSampleModel extends SampleModel { /** * Gets the pixel stride. * - * @return the pixel stride + * @return the pixel stride. */ public final int getPixelStride() { return pixelStride; @@ -685,6 +703,3 @@ public class ComponentSampleModel extends SampleModel { } } - - - diff --git a/awt/java/awt/image/ConvolveOp.java b/awt/java/awt/image/ConvolveOp.java index bb588bcdbb..6eb8909b81 100644 --- a/awt/java/awt/image/ConvolveOp.java +++ b/awt/java/awt/image/ConvolveOp.java @@ -32,47 +32,57 @@ import org.apache.harmony.awt.gl.AwtImageBackdoorAccessor; import org.apache.harmony.awt.internal.nls.Messages; /** - * The ConvolveOp class convolves from the source data - * to the destination using a convolution kernel. - * Each output pixel is represented as the result of multiplying - * the kernel and the surround of the input pixel. + * The ConvolveOp class convolves from the source data to the destination using + * a convolution kernel. Each output pixel is represented as the result of + * multiplying the kernel and the surround of the input pixel. + * + * @since Android 1.0 */ public class ConvolveOp implements BufferedImageOp, RasterOp { - /** - * The Constant EDGE_ZERO_FILL indicates that pixels at the edge of - * the destination image are set to zero. + /** + * The Constant EDGE_ZERO_FILL indicates that pixels at the edge of the + * destination image are set to zero. */ public static final int EDGE_ZERO_FILL = 0; - /** - * The Constant EDGE_NO_OP indicates that pixels at the edge of - * the source image are converted to the edge pixels in the - * destination without modification. + /** + * The Constant EDGE_NO_OP indicates that pixels at the edge of the source + * image are converted to the edge pixels in the destination without + * modification. */ public static final int EDGE_NO_OP = 1; - /** The kernel. */ + /** + * The kernel. + */ private Kernel kernel; - - /** The edge cond. */ + + /** + * The edge cond. + */ private int edgeCond; - - /** The rhs. */ + + /** + * The rhs. + */ private RenderingHints rhs = null; static { // TODO - //System.loadLibrary("imageops"); + // System.loadLibrary("imageops"); } /** - * Instantiates a new ConvolveOp object with the specified Kernel - * and specified edges condition. + * Instantiates a new ConvolveOp object with the specified Kernel and + * specified edges condition. * - * @param kernel the specified Kernel. - * @param edgeCondition the specified edge condition. - * @param hints the RenderingHints object, or null. + * @param kernel + * the specified Kernel. + * @param edgeCondition + * the specified edge condition. + * @param hints + * the RenderingHints object, or null. */ public ConvolveOp(Kernel kernel, int edgeCondition, RenderingHints hints) { this.kernel = kernel; @@ -81,10 +91,11 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { } /** - * Instantiates a new ConvolveOp object with the specified Kernel - * and EDGE_ZERO_FILL edge condition. + * Instantiates a new ConvolveOp object with the specified Kernel and + * EDGE_ZERO_FILL edge condition. * - * @param kernel the specified Kernel. + * @param kernel + * the specified Kernel. */ public ConvolveOp(Kernel kernel) { this.kernel = kernel; @@ -97,7 +108,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { * @return the Kernel object of this ConvolveOp. */ public final Kernel getKernel() { - return (Kernel) kernel.clone(); + return (Kernel)kernel.clone(); } public final RenderingHints getRenderingHints() { @@ -143,17 +154,11 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { dstCM = ColorModel.getRGBdefault(); } - WritableRaster r = - dstCM.isCompatibleSampleModel(src.getSampleModel()) ? - src.getRaster().createCompatibleWritableRaster(src.getWidth(), src.getHeight()) : - dstCM.createCompatibleWritableRaster(src.getWidth(), src.getHeight()); - - return new BufferedImage( - dstCM, - r, - dstCM.isAlphaPremultiplied(), - null - ); + WritableRaster r = dstCM.isCompatibleSampleModel(src.getSampleModel()) ? src.getRaster() + .createCompatibleWritableRaster(src.getWidth(), src.getHeight()) : dstCM + .createCompatibleWritableRaster(src.getWidth(), src.getHeight()); + + return new BufferedImage(dstCM, r, dstCM.isAlphaPremultiplied(), null); } public final WritableRaster filter(Raster src, WritableRaster dst) { @@ -162,7 +167,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { throw new NullPointerException(Messages.getString("awt.256")); //$NON-NLS-1$ } - if (src == dst){ + if (src == dst) { // awt.257=Source raster is equal to destination throw new IllegalArgumentException(Messages.getString("awt.257")); //$NON-NLS-1$ } @@ -170,17 +175,18 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { if (dst == null) { dst = createCompatibleDestRaster(src); } else if (src.getNumBands() != dst.getNumBands()) { - // awt.258=Number of source bands ({0}) is not equal to number of destination bands ({1}) - throw new IllegalArgumentException( - Messages.getString("awt.258", src.getNumBands(), dst.getNumBands())); //$NON-NLS-1$ + // awt.258=Number of source bands ({0}) is not equal to number of + // destination bands ({1}) + throw new IllegalArgumentException(Messages.getString( + "awt.258", src.getNumBands(), dst.getNumBands())); //$NON-NLS-1$ } // TODO - //if (ippFilter(src, dst, BufferedImage.TYPE_CUSTOM) != 0) - if (slowFilter(src, dst) != 0) { - // awt.21F=Unable to transform source - throw new ImagingOpException (Messages.getString("awt.21F")); //$NON-NLS-1$ - } + // if (ippFilter(src, dst, BufferedImage.TYPE_CUSTOM) != 0) + if (slowFilter(src, dst) != 0) { + // awt.21F=Unable to transform source + throw new ImagingOpException(Messages.getString("awt.21F")); //$NON-NLS-1$ + } return dst; } @@ -188,10 +194,11 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { /** * Slow filter. * - * @param src the src - * @param dst the dst - * - * @return the int + * @param src + * the src. + * @param dst + * the dst. + * @return the int. */ private int slowFilter(Raster src, WritableRaster dst) { try { @@ -219,7 +226,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { int[] masks = new int[numBands]; int[] sampleSizes = sm.getSampleSize(); - for (int i=0; i < numBands; i++){ + for (int i = 0; i < numBands; i++) { maxValues[i] = (1 << sampleSizes[i]) - 1; masks[i] = ~(maxValues[i]); } @@ -228,61 +235,56 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { float[] pixels = null; pixels = src.getPixels(srcMinX, srcMinY, srcWidth, srcHeight, pixels); float[] newPixels = new float[pixels.length]; - int rowLength = srcWidth*numBands; - if (this.edgeCond == ConvolveOp.EDGE_NO_OP){ + int rowLength = srcWidth * numBands; + if (this.edgeCond == ConvolveOp.EDGE_NO_OP) { // top int start = 0; - int length = yOrigin*rowLength; + int length = yOrigin * rowLength; System.arraycopy(pixels, start, newPixels, start, length); // bottom - start = (srcHeight - (kHeight - yOrigin - 1))*rowLength; - length = (kHeight - yOrigin - 1)*rowLength; + start = (srcHeight - (kHeight - yOrigin - 1)) * rowLength; + length = (kHeight - yOrigin - 1) * rowLength; System.arraycopy(pixels, start, newPixels, start, length); // middle - length = xOrigin*numBands; - int length1 = (kWidth - xOrigin - 1)*numBands; - start = yOrigin*rowLength; - int start1 = (yOrigin+1)*rowLength - length1; - for (int i = yOrigin; i < (srcHeight - (kHeight - yOrigin - 1)); i ++) { + length = xOrigin * numBands; + int length1 = (kWidth - xOrigin - 1) * numBands; + start = yOrigin * rowLength; + int start1 = (yOrigin + 1) * rowLength - length1; + for (int i = yOrigin; i < (srcHeight - (kHeight - yOrigin - 1)); i++) { System.arraycopy(pixels, start, newPixels, start, length); System.arraycopy(pixels, start1, newPixels, start1, length1); - start +=rowLength; - start1 +=rowLength; + start += rowLength; + start1 += rowLength; } } // Cycle over pixels to be calculated - for (int i = yOrigin; i < srcConvMaxY; i++){ - for (int j = xOrigin; j < srcConvMaxX; j++){ + for (int i = yOrigin; i < srcConvMaxY; i++) { + for (int j = xOrigin; j < srcConvMaxX; j++) { // Take kernel data in backward direction, convolution int kernelIdx = data.length - 1; int pixelIndex = i * rowLength + j * numBands; - for (int hIdx = 0, rasterHIdx = i - yOrigin; - hIdx < kHeight; - hIdx++, rasterHIdx++ - ){ - for (int wIdx = 0, rasterWIdx = j - xOrigin; - wIdx < kWidth; - wIdx++, rasterWIdx++ - ){ + for (int hIdx = 0, rasterHIdx = i - yOrigin; hIdx < kHeight; hIdx++, rasterHIdx++) { + for (int wIdx = 0, rasterWIdx = j - xOrigin; wIdx < kWidth; wIdx++, rasterWIdx++) { int curIndex = rasterHIdx * rowLength + rasterWIdx * numBands; - for (int idx=0; idx < numBands; idx++){ - newPixels[pixelIndex+idx] += data[kernelIdx] * pixels[curIndex+idx]; + for (int idx = 0; idx < numBands; idx++) { + newPixels[pixelIndex + idx] += data[kernelIdx] + * pixels[curIndex + idx]; } kernelIdx--; } } // Check for overflow now - for (int idx=0; idx < numBands; idx++){ - if (((int)newPixels[pixelIndex+idx] & masks[idx]) != 0) { - if (newPixels[pixelIndex+idx] < 0) { - newPixels[pixelIndex+idx] = 0; + for (int idx = 0; idx < numBands; idx++) { + if (((int)newPixels[pixelIndex + idx] & masks[idx]) != 0) { + if (newPixels[pixelIndex + idx] < 0) { + newPixels[pixelIndex + idx] = 0; } else { - newPixels[pixelIndex+idx] = maxValues[idx]; + newPixels[pixelIndex + idx] = maxValues[idx]; } } } @@ -302,7 +304,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { throw new NullPointerException(Messages.getString("awt.259")); //$NON-NLS-1$ } - if (src == dst){ + if (src == dst) { // awt.25A=Source equals to destination throw new IllegalArgumentException(Messages.getString("awt.25A")); //$NON-NLS-1$ } @@ -319,13 +321,10 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { dst = createCompatibleDestImage(src, srcCM); } else { if (!srcCM.equals(dst.getColorModel())) { - // Treat BufferedImage.TYPE_INT_RGB and BufferedImage.TYPE_INT_ARGB as same - if ( - !((src.getType() == BufferedImage.TYPE_INT_RGB || - src.getType() == BufferedImage.TYPE_INT_ARGB) && - (dst.getType() == BufferedImage.TYPE_INT_RGB || - dst.getType() == BufferedImage.TYPE_INT_ARGB)) - ) { + // Treat BufferedImage.TYPE_INT_RGB and + // BufferedImage.TYPE_INT_ARGB as same + if (!((src.getType() == BufferedImage.TYPE_INT_RGB || src.getType() == BufferedImage.TYPE_INT_ARGB) && (dst + .getType() == BufferedImage.TYPE_INT_RGB || dst.getType() == BufferedImage.TYPE_INT_ARGB))) { finalDst = dst; dst = createCompatibleDestImage(src, srcCM); } @@ -334,11 +333,11 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { // Skip alpha channel for TYPE_INT_RGB images // TODO - //if (ippFilter(src.getRaster(), dst.getRaster(), src.getType()) != 0) - if (slowFilter(src.getRaster(), dst.getRaster()) != 0) { - // awt.21F=Unable to transform source - throw new ImagingOpException (Messages.getString("awt.21F")); //$NON-NLS-1$ - } + // if (ippFilter(src.getRaster(), dst.getRaster(), src.getType()) != 0) + if (slowFilter(src.getRaster(), dst.getRaster()) != 0) { + // awt.21F=Unable to transform source + throw new ImagingOpException(Messages.getString("awt.21F")); //$NON-NLS-1$ + } if (finalDst != null) { Graphics2D g = finalDst.createGraphics(); @@ -355,11 +354,13 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { /** * Ipp filter. * - * @param src the src - * @param dst the dst - * @param imageType the image type - * - * @return the int + * @param src + * the src. + * @param dst + * the dst. + * @param imageType + * the image type. + * @return the int. */ @SuppressWarnings("unused") private int ippFilter(Raster src, WritableRaster dst, int imageType) { @@ -372,8 +373,8 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_INT_RGB: case BufferedImage.TYPE_INT_BGR: { channels = 4; - srcStride = src.getWidth()*4; - dstStride = dst.getWidth()*4; + srcStride = src.getWidth() * 4; + dstStride = dst.getWidth() * 4; skipChannel = true; break; } @@ -383,8 +384,8 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_4BYTE_ABGR: case BufferedImage.TYPE_4BYTE_ABGR_PRE: { channels = 4; - srcStride = src.getWidth()*4; - dstStride = dst.getWidth()*4; + srcStride = src.getWidth() * 4; + dstStride = dst.getWidth() * 4; break; } @@ -397,12 +398,13 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_3BYTE_BGR: { channels = 3; - srcStride = src.getWidth()*3; - dstStride = dst.getWidth()*3; + srcStride = src.getWidth() * 3; + dstStride = dst.getWidth() * 3; break; } - case BufferedImage.TYPE_USHORT_GRAY: // TODO - could be done in native code? + case BufferedImage.TYPE_USHORT_GRAY: // TODO - could be done in + // native code? case BufferedImage.TYPE_USHORT_565_RGB: case BufferedImage.TYPE_USHORT_555_RGB: case BufferedImage.TYPE_BYTE_BINARY: { @@ -413,59 +415,51 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { SampleModel srcSM = src.getSampleModel(); SampleModel dstSM = dst.getSampleModel(); - if ( - srcSM instanceof PixelInterleavedSampleModel && - dstSM instanceof PixelInterleavedSampleModel - ) { + if (srcSM instanceof PixelInterleavedSampleModel + && dstSM instanceof PixelInterleavedSampleModel) { // Check PixelInterleavedSampleModel - if ( - srcSM.getDataType() != DataBuffer.TYPE_BYTE || - dstSM.getDataType() != DataBuffer.TYPE_BYTE - ) { + if (srcSM.getDataType() != DataBuffer.TYPE_BYTE + || dstSM.getDataType() != DataBuffer.TYPE_BYTE) { return slowFilter(src, dst); } - channels = srcSM.getNumBands(); // Have IPP functions for 1, 3 and 4 channels + channels = srcSM.getNumBands(); // Have IPP functions for 1, + // 3 and 4 channels if (!(channels == 1 || channels == 3 || channels == 4)) { return slowFilter(src, dst); } - srcStride = ((ComponentSampleModel) srcSM).getScanlineStride(); - dstStride = ((ComponentSampleModel) dstSM).getScanlineStride(); - } else if ( - srcSM instanceof SinglePixelPackedSampleModel && - dstSM instanceof SinglePixelPackedSampleModel - ) { + srcStride = ((ComponentSampleModel)srcSM).getScanlineStride(); + dstStride = ((ComponentSampleModel)dstSM).getScanlineStride(); + } else if (srcSM instanceof SinglePixelPackedSampleModel + && dstSM instanceof SinglePixelPackedSampleModel) { // Check SinglePixelPackedSampleModel - SinglePixelPackedSampleModel sppsm1 = (SinglePixelPackedSampleModel) srcSM; - SinglePixelPackedSampleModel sppsm2 = (SinglePixelPackedSampleModel) dstSM; + SinglePixelPackedSampleModel sppsm1 = (SinglePixelPackedSampleModel)srcSM; + SinglePixelPackedSampleModel sppsm2 = (SinglePixelPackedSampleModel)dstSM; channels = sppsm1.getNumBands(); - // TYPE_INT_RGB, TYPE_INT_ARGB... - if ( - sppsm1.getDataType() != DataBuffer.TYPE_INT || - sppsm2.getDataType() != DataBuffer.TYPE_INT || - !(channels == 3 || channels == 4) - ) { + // TYPE_INT_RGB, TYPE_INT_ARGB... + if (sppsm1.getDataType() != DataBuffer.TYPE_INT + || sppsm2.getDataType() != DataBuffer.TYPE_INT + || !(channels == 3 || channels == 4)) { return slowFilter(src, dst); } // Check compatibility of sample models - if ( - !Arrays.equals(sppsm1.getBitOffsets(), sppsm2.getBitOffsets()) || - !Arrays.equals(sppsm1.getBitMasks(), sppsm2.getBitMasks()) - ) { + if (!Arrays.equals(sppsm1.getBitOffsets(), sppsm2.getBitOffsets()) + || !Arrays.equals(sppsm1.getBitMasks(), sppsm2.getBitMasks())) { return slowFilter(src, dst); } - for (int i=0; i props) { Hashtable fprops; - if(props == null) { + if (props == null) { fprops = new Hashtable(); } else { - fprops = (Hashtable) props.clone(); + fprops = (Hashtable)props.clone(); } String propName = "Crop Filters"; //$NON-NLS-1$ String prop = "x=" + X + "; y=" + Y + "; width=" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - WIDTH + "; height=" + HEIGHT; //$NON-NLS-1$ + WIDTH + "; height=" + HEIGHT; //$NON-NLS-1$ Object o = fprops.get(propName); - if(o != null){ - if(o instanceof String){ + if (o != null) { + if (o instanceof String) { prop = (String)o + "; " + prop; //$NON-NLS-1$ - }else{ - prop = o.toString() + "; " + prop; //$NON-NLS-1$ + } else { + prop = o.toString() + "; " + prop; //$NON-NLS-1$ } } fprops.put(propName, prop); @@ -73,15 +81,14 @@ public class CropImageFilter extends ImageFilter { } @Override - public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, int scansize) { + public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, + int scansize) { - if(x + w < X || X + WIDTH < x || - y + h < Y || Y + HEIGHT < y) { + if (x + w < X || X + WIDTH < x || y + h < Y || Y + HEIGHT < y) { return; } - int destX, destY, destWidth, destHeight, endX, endY, - srcEndX, srcEndY; + int destX, destY, destWidth, destHeight, endX, endY, srcEndX, srcEndY; int newOffset = off; @@ -91,37 +98,36 @@ public class CropImageFilter extends ImageFilter { srcEndX = x + w; srcEndY = y + h; - if(x <= X){ + if (x <= X) { destX = 0; newOffset += X; - if(endX >= srcEndX){ + if (endX >= srcEndX) { destWidth = srcEndX - X; - }else{ + } else { destWidth = WIDTH; } - }else{ + } else { destX = x - X; - if(endX >= srcEndX){ + if (endX >= srcEndX) { destWidth = w; - }else{ + } else { destWidth = endX - x; } } - - if(y <= Y){ + if (y <= Y) { newOffset += scansize * (Y - y); destY = 0; - if(endY >= srcEndY){ + if (endY >= srcEndY) { destHeight = srcEndY - Y; - }else{ + } else { destHeight = HEIGHT; } - }else{ + } else { destY = y - Y; - if(endY >= srcEndY){ + if (endY >= srcEndY) { destHeight = h; - }else{ + } else { destHeight = endY - y; } } @@ -129,15 +135,14 @@ public class CropImageFilter extends ImageFilter { } @Override - public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, int scansize) { + public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, + int scansize) { - if(x + w < X || X + WIDTH < x || - y + h < Y || Y + HEIGHT < y) { + if (x + w < X || X + WIDTH < x || y + h < Y || Y + HEIGHT < y) { return; } - int destX, destY, destWidth, destHeight, endX, endY, - srcEndX, srcEndY; + int destX, destY, destWidth, destHeight, endX, endY, srcEndX, srcEndY; int newOffset = off; @@ -147,37 +152,36 @@ public class CropImageFilter extends ImageFilter { srcEndX = x + w; srcEndY = y + h; - if(x <= X){ + if (x <= X) { destX = 0; newOffset += X; - if(endX >= srcEndX){ + if (endX >= srcEndX) { destWidth = srcEndX - X; - }else{ + } else { destWidth = WIDTH; } - }else{ + } else { destX = x - X; - if(endX >= srcEndX){ + if (endX >= srcEndX) { destWidth = w; - }else{ + } else { destWidth = endX - x; } } - - if(y <= Y){ + if (y <= Y) { newOffset += scansize * (Y - y); destY = 0; - if(endY >= srcEndY){ + if (endY >= srcEndY) { destHeight = srcEndY - Y; - }else{ + } else { destHeight = HEIGHT; } - }else{ + } else { destY = y - Y; - if(endY >= srcEndY){ + if (endY >= srcEndY) { destHeight = h; - }else{ + } else { destHeight = endY - y; } } @@ -190,4 +194,3 @@ public class CropImageFilter extends ImageFilter { } } - diff --git a/awt/java/awt/image/DataBuffer.java b/awt/java/awt/image/DataBuffer.java index 6856aee0e7..92f900fd36 100644 --- a/awt/java/awt/image/DataBuffer.java +++ b/awt/java/awt/image/DataBuffer.java @@ -18,65 +18,97 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import org.apache.harmony.awt.gl.image.DataBufferListener; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class DataBuffer is a wrapper class for a data array - * to be used for the situation where a suite of functionality - * acts on a set of data in a consistent way even though the - * primitive type of the data may vary from one use to the next. + * The Class DataBuffer is a wrapper class for a data array to be used for the + * situation where a suite of functionality acts on a set of data in a + * consistent way even though the primitive type of the data may vary from one + * use to the next. + * + * @since Android 1.0 */ public abstract class DataBuffer { - /** The Constant TYPE_BYTE. */ + /** + * The Constant TYPE_BYTE. + */ public static final int TYPE_BYTE = 0; - /** The Constant TYPE_USHORT. */ + /** + * The Constant TYPE_USHORT. + */ public static final int TYPE_USHORT = 1; - /** The Constant TYPE_SHORT. */ + /** + * The Constant TYPE_SHORT. + */ public static final int TYPE_SHORT = 2; - /** The Constant TYPE_INT. */ + /** + * The Constant TYPE_INT. + */ public static final int TYPE_INT = 3; - /** The Constant TYPE_FLOAT. */ + /** + * The Constant TYPE_FLOAT. + */ public static final int TYPE_FLOAT = 4; - /** The Constant TYPE_DOUBLE. */ + /** + * The Constant TYPE_DOUBLE. + */ public static final int TYPE_DOUBLE = 5; - /** The Constant TYPE_UNDEFINED. */ + /** + * The Constant TYPE_UNDEFINED. + */ public static final int TYPE_UNDEFINED = 32; - /** The data type indicates the primitive type of the - * data in this DataBuffer. */ + /** + * The data type indicates the primitive type of the data in this + * DataBuffer. + */ protected int dataType; - /** The number of data arrays in this DataBuffer. */ + /** + * The number of data arrays in this DataBuffer. + */ protected int banks; - /** The starting index for reading the - * data from the first (or only) internal data array. */ + /** + * The starting index for reading the data from the first (or only) internal + * data array. + */ protected int offset; - /** The length (number of elements) of the data arrays. */ + /** + * The length (number of elements) of the data arrays. + */ protected int size; - /** The starting indices for reading the - * data from the internal data arrays. */ + /** + * The starting indices for reading the data from the internal data arrays. + */ protected int offsets[]; - - /** The data changed. */ + + /** + * The data changed. + */ boolean dataChanged = true; - - /** The data taken. */ + + /** + * The data taken. + */ boolean dataTaken = false; - - /** The listener. */ + + /** + * The listener. + */ DataBufferListener listener; static { @@ -86,11 +118,15 @@ public abstract class DataBuffer { /** * Instantiates a new data buffer. * - * @param dataType the data type - * @param size the length (number of elements) of the data arrays - * @param numBanks the number of data arrays to create - * @param offsets the starting indices for reading the - * data from the internal data arrays + * @param dataType + * the data type. + * @param size + * the length (number of elements) of the data arrays. + * @param numBanks + * the number of data arrays to create. + * @param offsets + * the starting indices for reading the data from the internal + * data arrays. */ protected DataBuffer(int dataType, int size, int numBanks, int[] offsets) { this.dataType = dataType; @@ -101,13 +137,17 @@ public abstract class DataBuffer { } /** - * Instantiates a new data buffer with all of the - * data arrays starting at the same index. + * Instantiates a new data buffer with all of the data arrays starting at + * the same index. * - * @param dataType the data type - * @param size the length (number of elements) of the data arrays - * @param numBanks the number of data arrays to create - * @param offset the offset to use for all of the data arrays + * @param dataType + * the data type. + * @param size + * the length (number of elements) of the data arrays. + * @param numBanks + * the number of data arrays to create. + * @param offset + * the offset to use for all of the data arrays. */ protected DataBuffer(int dataType, int size, int numBanks, int offset) { this.dataType = dataType; @@ -122,12 +162,15 @@ public abstract class DataBuffer { } /** - * Instantiates a new data buffer with all of the - * data arrays read from the beginning (at offset zero). + * Instantiates a new data buffer with all of the data arrays read from the + * beginning (at offset zero). * - * @param dataType the data type - * @param size the length (number of elements) of the data arrays - * @param numBanks the number of data arrays to create + * @param dataType + * the data type. + * @param size + * the length (number of elements) of the data arrays. + * @param numBanks + * the number of data arrays to create. */ protected DataBuffer(int dataType, int size, int numBanks) { this.dataType = dataType; @@ -138,11 +181,13 @@ public abstract class DataBuffer { } /** - * Instantiates a new data buffer with one internal data array - * read from the beginning (at offset zero). + * Instantiates a new data buffer with one internal data array read from the + * beginning (at offset zero). * - * @param dataType the data type - * @param size the length (number of elements) of the data arrays + * @param dataType + * the data type. + * @param size + * the length (number of elements) of the data arrays. */ protected DataBuffer(int dataType, int size) { this.dataType = dataType; @@ -153,165 +198,161 @@ public abstract class DataBuffer { } /** - * Sets the data value in the specified array at the - * specified index. + * Sets the data value in the specified array at the specified index. * - * @param bank the internal array to the data to - * @param i the index within the array where the data - * should be written - * @param val the value to write into the array + * @param bank + * the internal array to the data to. + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. */ public abstract void setElem(int bank, int i, int val); /** - * Sets the float data value in the specified array at the - * specified index. + * Sets the float data value in the specified array at the specified index. * - * @param bank the internal array to the data to - * @param i the index within the array where the data - * should be written - * @param val the value to write into the array + * @param bank + * the internal array to the data to. + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. */ public void setElemFloat(int bank, int i, float val) { - setElem(bank, i, (int) val); + setElem(bank, i, (int)val); } /** - * Sets the double data value in the specified array at the - * specified index. + * Sets the double data value in the specified array at the specified index. * - * @param bank the internal array to the data to - * @param i the index within the array where the data - * should be written - * @param val the value to write into the array + * @param bank + * the internal array to the data to. + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. */ public void setElemDouble(int bank, int i, double val) { - setElem(bank, i, (int) val); + setElem(bank, i, (int)val); } /** - * Sets the data value in the first array at the - * specified index. + * Sets the data value in the first array at the specified index. * - * @param i the index within the array where the data - * should be written - * @param val the value to write into the array + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. */ public void setElem(int i, int val) { setElem(0, i, val); } /** - * Gets the data value from the specified data array at the - * specified index. - * - * @param bank the data array to read from - * @param i the index within the array where the data - * should be read + * Gets the data value from the specified data array at the specified index. * - * @return the data element + * @param bank + * the data array to read from. + * @param i + * the index within the array where the data should be read. + * @return the data element. */ public abstract int getElem(int bank, int i); /** - * Gets the float-type data value from the specified - * data array at the specified index. - * - * @param bank the data array to read from - * @param i the index within the array where the data - * should be read + * Gets the float-type data value from the specified data array at the + * specified index. * - * @return the data element + * @param bank + * the data array to read from. + * @param i + * the index within the array where the data should be read. + * @return the data element. */ public float getElemFloat(int bank, int i) { return getElem(bank, i); } /** - * Gets the double-type data value from the specified - * data array at the specified index. - * - * @param bank the data array to read from - * @param i the index within the array where the data - * should be read + * Gets the double-type data value from the specified data array at the + * specified index. * - * @return the data element + * @param bank + * the data array to read from. + * @param i + * the index within the array where the data should be read. + * @return the data element. */ public double getElemDouble(int bank, int i) { return getElem(bank, i); } /** - * Sets the float data value in the first array at the - * specified index. + * Sets the float data value in the first array at the specified index. * - * @param i the index within the array where the data - * should be written - * @param val the value to write into the array + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. */ public void setElemFloat(int i, float val) { setElemFloat(0, i, val); } /** - * Sets the double data value in the first array at the - * specified index. + * Sets the double data value in the first array at the specified index. * - * @param i the index within the array where the data - * should be written - * @param val the value to write into the array + * @param i + * the index within the array where the data should be written. + * @param val + * the value to write into the array. */ public void setElemDouble(int i, double val) { setElemDouble(0, i, val); } /** - * Gets the data value from the first - * data array at the specified index and returns it - * as an int. - * - * @param i the index within the array where the data - * should be read + * Gets the data value from the first data array at the specified index and + * returns it as an integer. * - * @return the data element + * @param i + * the index within the array where the data should be read. + * @return the data element. */ public int getElem(int i) { return getElem(0, i); } /** - * Gets the data value from the first - * data array at the specified index and returns it - * as a float. + * Gets the data value from the first data array at the specified index and + * returns it as a float. * - * @param i the index within the array where the data - * should be read - * - * @return the data element + * @param i + * the index within the array where the data should be read. + * @return the data element. */ public float getElemFloat(int i) { return getElem(0, i); } /** - * Gets the data value from the first - * data array at the specified index and returns it - * as a double. - * - * @param i the index within the array where the data - * should be read + * Gets the data value from the first data array at the specified index and + * returns it as a double. * - * @return the data element + * @param i + * the index within the array where the data should be read. + * @return the data element. */ public double getElemDouble(int i) { return getElem(i); } /** - * Gets the array giving the offsets corresponding - * to the internal data arrays. + * Gets the array giving the offsets corresponding to the internal data + * arrays. * - * @return the array of offsets + * @return the array of offsets. */ public int[] getOffsets() { return offsets; @@ -320,18 +361,16 @@ public abstract class DataBuffer { /** * Gets the size in bits of the primitive data type. * - * @return the size in bits of the primitive data type - + * @return the size in bits of the primitive data type. */ public int getSize() { return size; } /** - * Gets the offset corresponding to the first internal - * data array. + * Gets the offset corresponding to the first internal data array. * - * @return the offset + * @return the offset. */ public int getOffset() { return offset; @@ -340,7 +379,7 @@ public abstract class DataBuffer { /** * Gets the number of data arrays in this DataBuffer. * - * @return the number of data arrays + * @return the number of data arrays. */ public int getNumBanks() { return banks; @@ -349,7 +388,7 @@ public abstract class DataBuffer { /** * Gets the primitive type of this buffer's data. * - * @return the data type + * @return the data type. */ public int getDataType() { return this.dataType; @@ -358,85 +397,85 @@ public abstract class DataBuffer { /** * Gets the size in bits of the primitive data type. * - * @param type the primitive type - * - * @return the size in bits of the primitive data type + * @param type + * the primitive type. + * @return the size in bits of the primitive data type. */ public static int getDataTypeSize(int type) { switch (type) { - case TYPE_BYTE: - return 8; + case TYPE_BYTE: + return 8; - case TYPE_USHORT: - case TYPE_SHORT: - return 16; + case TYPE_USHORT: + case TYPE_SHORT: + return 16; - case TYPE_INT: - case TYPE_FLOAT: - return 32; + case TYPE_INT: + case TYPE_FLOAT: + return 32; - case TYPE_DOUBLE: - return 64; + case TYPE_DOUBLE: + return 64; - default: - // awt.22C=Unknown data type {0} - throw new IllegalArgumentException(Messages.getString("awt.22C", type)); //$NON-NLS-1$ + default: + // awt.22C=Unknown data type {0} + throw new IllegalArgumentException(Messages.getString("awt.22C", type)); //$NON-NLS-1$ } } - + /** * Notifies the listener that the data has changed. */ - void notifyChanged(){ - if(listener != null && !dataChanged){ + void notifyChanged() { + if (listener != null && !dataChanged) { dataChanged = true; listener.dataChanged(); } } - + /** * Notifies the listener that the data has been released. */ - void notifyTaken(){ - if(listener != null && !dataTaken){ + void notifyTaken() { + if (listener != null && !dataTaken) { dataTaken = true; listener.dataTaken(); } } - + /** * Release the data. */ - void releaseData(){ - if(listener != null && dataTaken){ + void releaseData() { + if (listener != null && dataTaken) { dataTaken = false; listener.dataReleased(); } } - + /** * Adds the data buffer listener. * - * @param listener the listener + * @param listener + * the listener. */ - void addDataBufferListener(DataBufferListener listener){ + void addDataBufferListener(DataBufferListener listener) { this.listener = listener; } - + /** * Removes the data buffer listener. */ - void removeDataBufferListener(){ + void removeDataBufferListener() { listener = null; } - + /** * Validate. */ - void validate(){ + void validate() { dataChanged = false; } - -} +} diff --git a/awt/java/awt/image/DataBufferByte.java b/awt/java/awt/image/DataBufferByte.java index 4d29c9ca3d..3407de84dc 100644 --- a/awt/java/awt/image/DataBufferByte.java +++ b/awt/java/awt/image/DataBufferByte.java @@ -18,25 +18,32 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; /** - * The Class DataBufferByte is the subclass of DataBuffer - * for the case where the underlying data is of type byte. + * The Class DataBufferByte is the subclass of DataBuffer for the case where the + * underlying data is of type byte. + * + * @since Android 1.0 */ public final class DataBufferByte extends DataBuffer { - /** The data. */ + /** + * The data. + */ byte data[][]; /** * Instantiates a new data buffer of type unsigned short. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays - * @param offsets the starting indices for reading the - * data from the internal data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. + * @param offsets + * the starting indices for reading the data from the internal + * data arrays. */ public DataBufferByte(byte dataArrays[][], int size, int offsets[]) { super(TYPE_BYTE, size, dataArrays.length, offsets); @@ -46,9 +53,10 @@ public final class DataBufferByte extends DataBuffer { /** * Instantiates a new data buffer of type unsigned short. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. */ public DataBufferByte(byte dataArrays[][], int size) { super(TYPE_BYTE, size, dataArrays.length); @@ -56,12 +64,15 @@ public final class DataBufferByte extends DataBuffer { } /** - * Instantiates a new data buffer of type unsigned short - * with a single underlying array of data. + * Instantiates a new data buffer of type unsigned short with a single + * underlying array of data. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use - * @param offset the starting index to use when reading the data + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. + * @param offset + * the starting index to use when reading the data. */ public DataBufferByte(byte dataArray[], int size, int offset) { super(TYPE_BYTE, size, 1, offset); @@ -70,12 +81,13 @@ public final class DataBufferByte extends DataBuffer { } /** - * Instantiates a new data buffer of type unsigned short - * with a single underlying array of data starting at - * index 0. + * Instantiates a new data buffer of type unsigned short with a single + * underlying array of data starting at index 0. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. */ public DataBufferByte(byte dataArray[], int size) { super(TYPE_BYTE, size); @@ -84,12 +96,13 @@ public final class DataBufferByte extends DataBuffer { } /** - * Instantiates a new empty data buffer of type unsigned short - * with offsets equal to zero. + * Instantiates a new empty data buffer of type unsigned short with offsets + * equal to zero. * - * @param size the length (number of elements) to use - * from the data arrays - * @param numBanks the number of data arrays to create + * @param size + * the length (number of elements) to use from the data arrays. + * @param numBanks + * the number of data arrays to create. */ public DataBufferByte(int size, int numBanks) { super(TYPE_BYTE, size, numBanks); @@ -101,11 +114,11 @@ public final class DataBufferByte extends DataBuffer { } /** - * Instantiates a new empty data buffer of type unsigned short - * with a single underlying array of data starting at - * index 0. + * Instantiates a new empty data buffer of type unsigned short with a single + * underlying array of data starting at index 0. * - * @param size the length (number of elements) to use + * @param size + * the length (number of elements) to use. */ public DataBufferByte(int size) { super(TYPE_BYTE, size); @@ -115,13 +128,13 @@ public final class DataBufferByte extends DataBuffer { @Override public void setElem(int bank, int i, int val) { - data[bank][offsets[bank] + i] = (byte) val; + data[bank][offsets[bank] + i] = (byte)val; notifyChanged(); } @Override public void setElem(int i, int val) { - data[0][offset + i] = (byte) val; + data[0][offset + i] = (byte)val; notifyChanged(); } @@ -133,9 +146,9 @@ public final class DataBufferByte extends DataBuffer { /** * Gets the data of the specified internal data array. * - * @param bank the index of the desired data array - * - * @return the data + * @param bank + * the index of the desired data array. + * @return the data. */ public byte[] getData(int bank) { notifyTaken(); @@ -150,7 +163,7 @@ public final class DataBufferByte extends DataBuffer { /** * Gets the bank data. * - * @return the bank data + * @return the bank data. */ public byte[][] getBankData() { notifyTaken(); @@ -160,7 +173,7 @@ public final class DataBufferByte extends DataBuffer { /** * Gets the data of the first data array. * - * @return the data + * @return the data. */ public byte[] getData() { notifyTaken(); @@ -168,4 +181,3 @@ public final class DataBufferByte extends DataBuffer { } } - diff --git a/awt/java/awt/image/DataBufferDouble.java b/awt/java/awt/image/DataBufferDouble.java index fa3d324d7f..5d0a51688f 100644 --- a/awt/java/awt/image/DataBufferDouble.java +++ b/awt/java/awt/image/DataBufferDouble.java @@ -18,26 +18,33 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; /** - * The Class DataBufferDouble is the subclass of DataBuffer - * for the case where the underlying data is of type double. + * The Class DataBufferDouble is the subclass of DataBuffer for the case where + * the underlying data is of type double. + * + * @since Android 1.0 */ public final class DataBufferDouble extends DataBuffer { - /** The data. */ + /** + * The data. + */ double data[][]; /** * Instantiates a new data buffer of type double. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays - * @param offsets the starting indices for reading the - * data from the internal data arrays - */ + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. + * @param offsets + * the starting indices for reading the data from the internal + * data arrays. + */ public DataBufferDouble(double dataArrays[][], int size, int offsets[]) { super(TYPE_DOUBLE, size, dataArrays.length, offsets); data = dataArrays.clone(); @@ -46,9 +53,10 @@ public final class DataBufferDouble extends DataBuffer { /** * Instantiates a new data buffer of type double. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. */ public DataBufferDouble(double dataArrays[][], int size) { super(TYPE_DOUBLE, size, dataArrays.length); @@ -56,12 +64,15 @@ public final class DataBufferDouble extends DataBuffer { } /** - * Instantiates a new data buffer of type double - * with a single underlying array of data. + * Instantiates a new data buffer of type double with a single underlying + * array of data. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use - * @param offset the starting index to use when reading the data + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. + * @param offset + * the starting index to use when reading the data. */ public DataBufferDouble(double dataArray[], int size, int offset) { super(TYPE_DOUBLE, size, 1, offset); @@ -70,12 +81,13 @@ public final class DataBufferDouble extends DataBuffer { } /** - * Instantiates a new data buffer of type double - * with a single underlying array of data starting at - * index 0. + * Instantiates a new data buffer of type double with a single underlying + * array of data starting at index 0. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. */ public DataBufferDouble(double dataArray[], int size) { super(TYPE_DOUBLE, size); @@ -84,12 +96,13 @@ public final class DataBufferDouble extends DataBuffer { } /** - * Instantiates a new empty data buffer of type double - * with offsets equal to zero. + * Instantiates a new empty data buffer of type double with offsets equal to + * zero. * - * @param size the length (number of elements) to use - * from the data arrays - * @param numBanks the number of data arrays to create + * @param size + * the length (number of elements) to use from the data arrays. + * @param numBanks + * the number of data arrays to create. */ public DataBufferDouble(int size, int numBanks) { super(TYPE_DOUBLE, size, numBanks); @@ -101,11 +114,11 @@ public final class DataBufferDouble extends DataBuffer { } /** - * Instantiates a new empty data buffer of type double - * with a single underlying array of data starting at - * index 0. + * Instantiates a new empty data buffer of type double with a single + * underlying array of data starting at index 0. * - * @param size the length (number of elements) to use + * @param size + * the length (number of elements) to use. */ public DataBufferDouble(int size) { super(TYPE_DOUBLE, size); @@ -139,12 +152,12 @@ public final class DataBufferDouble extends DataBuffer { @Override public int getElem(int bank, int i) { - return (int) (data[bank][offsets[bank] + i]); + return (int)(data[bank][offsets[bank] + i]); } @Override public float getElemFloat(int bank, int i) { - return (float) (data[bank][offsets[bank] + i]); + return (float)(data[bank][offsets[bank] + i]); } @Override @@ -167,9 +180,9 @@ public final class DataBufferDouble extends DataBuffer { /** * Gets the data of the specified internal data array. * - * @param bank the index of the desired data array - * - * @return the data + * @param bank + * the index of the desired data array. + * @return the data. */ public double[] getData(int bank) { notifyTaken(); @@ -178,12 +191,12 @@ public final class DataBufferDouble extends DataBuffer { @Override public int getElem(int i) { - return (int) (data[0][offset + i]); + return (int)(data[0][offset + i]); } @Override public float getElemFloat(int i) { - return (float) (data[0][offset + i]); + return (float)(data[0][offset + i]); } @Override @@ -194,7 +207,7 @@ public final class DataBufferDouble extends DataBuffer { /** * Gets the bank data. * - * @return the bank data + * @return the bank data. */ public double[][] getBankData() { notifyTaken(); @@ -204,11 +217,10 @@ public final class DataBufferDouble extends DataBuffer { /** * Gets the data of the first data array. * - * @return the data + * @return the data. */ public double[] getData() { notifyTaken(); return data[0]; } } - diff --git a/awt/java/awt/image/DataBufferFloat.java b/awt/java/awt/image/DataBufferFloat.java index e34245c2c8..9a4a6bfed2 100644 --- a/awt/java/awt/image/DataBufferFloat.java +++ b/awt/java/awt/image/DataBufferFloat.java @@ -18,25 +18,32 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; /** - * The Class DataBufferFloat is the subclass of DataBuffer - * for the case where the underlying data is float. + * The Class DataBufferFloat is the subclass of DataBuffer for the case where + * the underlying data is float. + * + * @since Android 1.0 */ public final class DataBufferFloat extends DataBuffer { - /** The data. */ + /** + * The data. + */ float data[][]; /** * Instantiates a new data buffer of type float. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays - * @param offsets the starting indices for reading the - * data from the internal data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. + * @param offsets + * the starting indices for reading the data from the internal + * data arrays. */ public DataBufferFloat(float dataArrays[][], int size, int offsets[]) { super(TYPE_FLOAT, size, dataArrays.length, offsets); @@ -46,9 +53,10 @@ public final class DataBufferFloat extends DataBuffer { /** * Instantiates a new data buffer of type float. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. */ public DataBufferFloat(float dataArrays[][], int size) { super(TYPE_FLOAT, size, dataArrays.length); @@ -56,12 +64,15 @@ public final class DataBufferFloat extends DataBuffer { } /** - * Instantiates a new data buffer of type float - * with a single underlying array of data. + * Instantiates a new data buffer of type float with a single underlying + * array of data. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use - * @param offset the starting index to use when reading the data + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. + * @param offset + * the starting index to use when reading the data. */ public DataBufferFloat(float dataArray[], int size, int offset) { super(TYPE_FLOAT, size, 1, offset); @@ -70,12 +81,13 @@ public final class DataBufferFloat extends DataBuffer { } /** - * Instantiates a new data buffer of type float - * with a single underlying array of data starting at - * index 0. + * Instantiates a new data buffer of type float with a single underlying + * array of data starting at index 0. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. */ public DataBufferFloat(float dataArray[], int size) { super(TYPE_FLOAT, size); @@ -84,12 +96,13 @@ public final class DataBufferFloat extends DataBuffer { } /** - * Instantiates a new empty data buffer of type float - * with offsets equal to zero. + * Instantiates a new empty data buffer of type float with offsets equal to + * zero. * - * @param size the length (number of elements) to use - * from the data arrays - * @param numBanks the number of data arrays to create + * @param size + * the length (number of elements) to use from the data arrays. + * @param numBanks + * the number of data arrays to create. */ public DataBufferFloat(int size, int numBanks) { super(TYPE_FLOAT, size, numBanks); @@ -101,11 +114,11 @@ public final class DataBufferFloat extends DataBuffer { } /** - * Instantiates a new empty data buffer of type float - * with a single underlying array of data starting at - * index 0. + * Instantiates a new empty data buffer of type float with a single + * underlying array of data starting at index 0. * - * @param size the length (number of elements) to use + * @param size + * the length (number of elements) to use. */ public DataBufferFloat(int size) { super(TYPE_FLOAT, size); @@ -127,7 +140,7 @@ public final class DataBufferFloat extends DataBuffer { @Override public void setElemDouble(int bank, int i, double val) { - data[bank][offsets[bank] + i] = (float) val; + data[bank][offsets[bank] + i] = (float)val; notifyChanged(); } @@ -139,7 +152,7 @@ public final class DataBufferFloat extends DataBuffer { @Override public int getElem(int bank, int i) { - return (int) (data[bank][offsets[bank] + i]); + return (int)(data[bank][offsets[bank] + i]); } @Override @@ -160,16 +173,16 @@ public final class DataBufferFloat extends DataBuffer { @Override public void setElemDouble(int i, double val) { - data[0][offset + i] = (float) val; + data[0][offset + i] = (float)val; notifyChanged(); } /** * Gets the data of the specified internal data array. * - * @param bank the index of the desired array - * - * @return the data + * @param bank + * the index of the desired array. + * @return the data. */ public float[] getData(int bank) { notifyTaken(); @@ -178,7 +191,7 @@ public final class DataBufferFloat extends DataBuffer { @Override public int getElem(int i) { - return (int) (data[0][offset + i]); + return (int)(data[0][offset + i]); } @Override @@ -194,7 +207,7 @@ public final class DataBufferFloat extends DataBuffer { /** * Gets the bank data. * - * @return the bank data + * @return the bank data. */ public float[][] getBankData() { notifyTaken(); @@ -204,11 +217,10 @@ public final class DataBufferFloat extends DataBuffer { /** * Gets the data of the first data array. * - * @return the data + * @return the data. */ public float[] getData() { notifyTaken(); return data[0]; } } - diff --git a/awt/java/awt/image/DataBufferInt.java b/awt/java/awt/image/DataBufferInt.java index 43dc1880ad..380a1278d7 100644 --- a/awt/java/awt/image/DataBufferInt.java +++ b/awt/java/awt/image/DataBufferInt.java @@ -18,25 +18,32 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; /** - * The Class DataBufferInt is the subclass of DataBuffer - * for the case where the underlying data is of type int. + * The Class DataBufferInt is the subclass of DataBuffer for the case where the + * underlying data is of type integer. + * + * @since Android 1.0 */ public final class DataBufferInt extends DataBuffer { - /** The data. */ + /** + * The data. + */ int data[][]; /** - * Instantiates a new data buffer of type int. + * Instantiates a new data buffer of type integer. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays - * @param offsets the starting indices for reading the - * data from the internal data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. + * @param offsets + * the starting indices for reading the data from the internal + * data arrays. */ public DataBufferInt(int dataArrays[][], int size, int offsets[]) { super(TYPE_INT, size, dataArrays.length, offsets); @@ -44,11 +51,12 @@ public final class DataBufferInt extends DataBuffer { } /** - * Instantiates a new data buffer of type int. + * Instantiates a new data buffer of type integer. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. */ public DataBufferInt(int dataArrays[][], int size) { super(TYPE_INT, size, dataArrays.length); @@ -56,12 +64,15 @@ public final class DataBufferInt extends DataBuffer { } /** - * Instantiates a new data buffer of type int - * with a single underlying array of data. + * Instantiates a new data buffer of type integer with a single underlying + * array of data. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use - * @param offset the starting index to use when reading the data + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. + * @param offset + * the starting index to use when reading the data. */ public DataBufferInt(int dataArray[], int size, int offset) { super(TYPE_INT, size, 1, offset); @@ -70,12 +81,13 @@ public final class DataBufferInt extends DataBuffer { } /** - * Instantiates a new data buffer of type int - * with a single underlying array of data starting at - * index 0. + * Instantiates a new data buffer of type integer with a single underlying + * array of data starting at index 0. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. */ public DataBufferInt(int dataArray[], int size) { super(TYPE_INT, size); @@ -84,12 +96,13 @@ public final class DataBufferInt extends DataBuffer { } /** - * Instantiates a new empty data buffer of type int - * with offsets equal to zero. + * Instantiates a new empty data buffer of type integer with offsets equal + * to zero. * - * @param size the length (number of elements) to use - * from the data arrays - * @param numBanks the number of data arrays to create + * @param size + * the length (number of elements) to use from the data arrays. + * @param numBanks + * the number of data arrays to create. */ public DataBufferInt(int size, int numBanks) { super(TYPE_INT, size, numBanks); @@ -101,11 +114,11 @@ public final class DataBufferInt extends DataBuffer { } /** - * Instantiates a new empty data buffer of type int - * with a single underlying array of data starting at - * index 0. + * Instantiates a new empty data buffer of type integer with a single + * underlying array of data starting at index 0. * - * @param size the length (number of elements) to use + * @param size + * the length (number of elements) to use. */ public DataBufferInt(int size) { super(TYPE_INT, size); @@ -133,9 +146,9 @@ public final class DataBufferInt extends DataBuffer { /** * Gets the data of the specified internal data array. * - * @param bank the index of the desired data array - * - * @return the data + * @param bank + * the index of the desired data array. + * @return the data. */ public int[] getData(int bank) { notifyTaken(); @@ -150,7 +163,7 @@ public final class DataBufferInt extends DataBuffer { /** * Gets the bank data. * - * @return the bank data + * @return the bank data. */ public int[][] getBankData() { notifyTaken(); @@ -160,11 +173,10 @@ public final class DataBufferInt extends DataBuffer { /** * Gets the data of the first data array. * - * @return the data + * @return the data. */ public int[] getData() { notifyTaken(); return data[0]; } } - diff --git a/awt/java/awt/image/DataBufferShort.java b/awt/java/awt/image/DataBufferShort.java index 819ba4a46a..1b11b29c3d 100644 --- a/awt/java/awt/image/DataBufferShort.java +++ b/awt/java/awt/image/DataBufferShort.java @@ -18,25 +18,32 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; /** - * The Class DataBufferShort is the subclass of DataBuffer - * for the case where the underlying data is short. + * The Class DataBufferShort is the subclass of DataBuffer for the case where + * the underlying data is short. + * + * @since Android 1.0 */ public final class DataBufferShort extends DataBuffer { - /** The data. */ + /** + * The data. + */ short data[][]; /** * Instantiates a new data buffer of type short. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays - * @param offsets the starting indices for reading the - * data from the internal data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. + * @param offsets + * the starting indices for reading the data from the internal + * data arrays. */ public DataBufferShort(short dataArrays[][], int size, int offsets[]) { super(TYPE_SHORT, size, dataArrays.length, offsets); @@ -46,9 +53,10 @@ public final class DataBufferShort extends DataBuffer { /** * Instantiates a new data buffer of type short. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. */ public DataBufferShort(short dataArrays[][], int size) { super(TYPE_SHORT, size, dataArrays.length); @@ -56,13 +64,15 @@ public final class DataBufferShort extends DataBuffer { } /** - * Instantiates a new data buffer of type short - * with a single underlying array of data. + * Instantiates a new data buffer of type short with a single underlying + * array of data. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use - * @param offset the starting index to use when reading the data - + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. + * @param offset + * the starting index to use when reading the data. */ public DataBufferShort(short dataArray[], int size, int offset) { super(TYPE_SHORT, size, 1, offset); @@ -71,13 +81,13 @@ public final class DataBufferShort extends DataBuffer { } /** - * Instantiates a new data buffer of type short - * with a single underlying array of data starting at - * index 0. + * Instantiates a new data buffer of type short with a single underlying + * array of data starting at index 0. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use - + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. */ public DataBufferShort(short dataArray[], int size) { super(TYPE_SHORT, size); @@ -86,12 +96,12 @@ public final class DataBufferShort extends DataBuffer { } /** - * Instantiates a new data buffer of type short - * with offsets equal to zero. + * Instantiates a new data buffer of type short with offsets equal to zero. * - * @param size the length (number of elements) to use - * from the data arrays - * @param numBanks the number of data arrays to create + * @param size + * the length (number of elements) to use from the data arrays. + * @param numBanks + * the number of data arrays to create. */ public DataBufferShort(int size, int numBanks) { super(TYPE_SHORT, size, numBanks); @@ -103,11 +113,11 @@ public final class DataBufferShort extends DataBuffer { } /** - * Instantiates a new empty data buffer of type short - * with a single underlying array of data starting at - * index 0. + * Instantiates a new empty data buffer of type short with a single + * underlying array of data starting at index 0. * - * @param size the length (number of elements) to use + * @param size + * the length (number of elements) to use. */ public DataBufferShort(int size) { super(TYPE_SHORT, size); @@ -117,13 +127,13 @@ public final class DataBufferShort extends DataBuffer { @Override public void setElem(int bank, int i, int val) { - data[bank][offsets[bank] + i] = (short) val; + data[bank][offsets[bank] + i] = (short)val; notifyChanged(); } @Override public void setElem(int i, int val) { - data[0][offset + i] = (short) val; + data[0][offset + i] = (short)val; notifyChanged(); } @@ -135,9 +145,9 @@ public final class DataBufferShort extends DataBuffer { /** * Gets the data of the specified internal data array. * - * @param bank the index of the desired data array - * - * @return the data + * @param bank + * the index of the desired data array. + * @return the data. */ public short[] getData(int bank) { notifyTaken(); @@ -152,7 +162,7 @@ public final class DataBufferShort extends DataBuffer { /** * Gets the bank data. * - * @return the bank data + * @return the bank data. */ public short[][] getBankData() { notifyTaken(); @@ -162,11 +172,10 @@ public final class DataBufferShort extends DataBuffer { /** * Gets the data of the first data array. * - * @return the data + * @return the data. */ public short[] getData() { notifyTaken(); return data[0]; } } - diff --git a/awt/java/awt/image/DataBufferUShort.java b/awt/java/awt/image/DataBufferUShort.java index 79826784aa..58d9d8340b 100644 --- a/awt/java/awt/image/DataBufferUShort.java +++ b/awt/java/awt/image/DataBufferUShort.java @@ -18,34 +18,42 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class DataBufferUShort is the subclass of DataBuffer - * for the case where the underlying data is unsigned short. + * The Class DataBufferUShort is the subclass of DataBuffer for the case where + * the underlying data is unsigned short. + * + * @since Android 1.0 */ public final class DataBufferUShort extends DataBuffer { - /** The data. */ + /** + * The data. + */ short data[][]; /** * Instantiates a new data buffer of type unsigned short. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays - * @param offsets the starting indices for reading the - * data from the internal data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. + * @param offsets + * the starting indices for reading the data from the internal + * data arrays. */ public DataBufferUShort(short dataArrays[][], int size, int offsets[]) { super(TYPE_USHORT, size, dataArrays.length, offsets); - for(int i = 0; i < dataArrays.length; i++){ - if(dataArrays[i].length < offsets[i] + size){ - // awt.28d=Length of dataArray[{0}] is less than size + offset[{1}] - throw new IllegalArgumentException(Messages.getString("awt.28D", i, i)); //$NON-NLS-1$ + for (int i = 0; i < dataArrays.length; i++) { + if (dataArrays[i].length < offsets[i] + size) { + // awt.28d=Length of dataArray[{0}] is less than size + + // offset[{1}] + throw new IllegalArgumentException(Messages.getString("awt.28D", i, i)); //$NON-NLS-1$ } } data = dataArrays.clone(); @@ -54,9 +62,10 @@ public final class DataBufferUShort extends DataBuffer { /** * Instantiates a new data buffer of type unsigned short. * - * @param dataArrays the data arrays to copy the data from - * @param size the length (number of elements) to use - * from the data arrays + * @param dataArrays + * the data arrays to copy the data from. + * @param size + * the length (number of elements) to use from the data arrays. */ public DataBufferUShort(short dataArrays[][], int size) { super(TYPE_USHORT, size, dataArrays.length); @@ -64,16 +73,19 @@ public final class DataBufferUShort extends DataBuffer { } /** - * Instantiates a new data buffer of type unsigned short - * with a single underlying array of data. + * Instantiates a new data buffer of type unsigned short with a single + * underlying array of data. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use - * @param offset the starting index to use when reading the data + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. + * @param offset + * the starting index to use when reading the data. */ public DataBufferUShort(short dataArray[], int size, int offset) { super(TYPE_USHORT, size, 1, offset); - if(dataArray.length < size + offset){ + if (dataArray.length < size + offset) { // awt.28E=Length of dataArray is less than size + offset throw new IllegalArgumentException(Messages.getString("awt.28E")); //$NON-NLS-1$ } @@ -82,12 +94,13 @@ public final class DataBufferUShort extends DataBuffer { } /** - * Instantiates a new data buffer of type unsigned short - * with a single underlying array of data starting at - * index 0. + * Instantiates a new data buffer of type unsigned short with a single + * underlying array of data starting at index 0. * - * @param dataArray the data array to copy the data from - * @param size the length (number of elements) to use + * @param dataArray + * the data array to copy the data from. + * @param size + * the length (number of elements) to use. */ public DataBufferUShort(short dataArray[], int size) { super(TYPE_USHORT, size); @@ -96,28 +109,29 @@ public final class DataBufferUShort extends DataBuffer { } /** - * Instantiates a new empty data buffer of type unsigned short - * with offsets equal to zero. + * Instantiates a new empty data buffer of type unsigned short with offsets + * equal to zero. * - * @param size the length (number of elements) to use - * from the data arrays - * @param numBanks the number of data arrays to create + * @param size + * the length (number of elements) to use from the data arrays. + * @param numBanks + * the number of data arrays to create. */ public DataBufferUShort(int size, int numBanks) { super(TYPE_USHORT, size, numBanks); data = new short[numBanks][]; - int i= 0; - while( i < numBanks) { + int i = 0; + while (i < numBanks) { data[i++] = new short[size]; } } /** - * Instantiates a new empty data buffer of type unsigned short - * with a single underlying array of data starting at - * index 0. + * Instantiates a new empty data buffer of type unsigned short with a single + * underlying array of data starting at index 0. * - * @param size the length (number of elements) to use + * @param size + * the length (number of elements) to use. */ public DataBufferUShort(int size) { super(TYPE_USHORT, size); @@ -145,9 +159,9 @@ public final class DataBufferUShort extends DataBuffer { /** * Gets the data of the specified internal data array. * - * @param bank the index of the desired data array - * - * @return the data + * @param bank + * the index of the desired data array. + * @return the data. */ public short[] getData(int bank) { notifyTaken(); @@ -162,7 +176,7 @@ public final class DataBufferUShort extends DataBuffer { /** * Gets the bank data. * - * @return the bank data + * @return the bank data. */ public short[][] getBankData() { notifyTaken(); @@ -172,11 +186,10 @@ public final class DataBufferUShort extends DataBuffer { /** * Gets the data of the first data array. * - * @return the data + * @return the data. */ public short[] getData() { notifyTaken(); return data[0]; } } - diff --git a/awt/java/awt/image/DirectColorModel.java b/awt/java/awt/image/DirectColorModel.java index 7a287c00e5..700eb7a39e 100644 --- a/awt/java/awt/image/DirectColorModel.java +++ b/awt/java/awt/image/DirectColorModel.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.color.ColorSpace; @@ -28,104 +29,141 @@ import org.apache.harmony.awt.gl.color.LUTColorConverter; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class DirectColorModel represents a standard (packed) RGB - * color model with additional support for converting between sRGB - * color space and 8 or 16 bit linear RGB color space using lookup tables. + * The Class DirectColorModel represents a standard (packed) RGB color model + * with additional support for converting between sRGB color space and 8 or 16 + * bit linear RGB color space using lookup tables. + * + * @since Android 1.0 */ public class DirectColorModel extends PackedColorModel { - /** The from_ linea r_ rg b_ lut. */ + /** + * The from_ linea r_ rg b_ lut. + */ private byte from_LINEAR_RGB_LUT[]; // Lookup table for conversion from - // Linear RGB Color Space into sRGB - /** The to_ linea r_8 rg b_ lut. */ - private byte to_LINEAR_8RGB_LUT[]; // Lookup table for conversion from - // sRGB Color Space into Linear RGB - // 8 bit + // Linear RGB Color Space into sRGB + + /** + * The to_ linea r_8 rg b_ lut. + */ + private byte to_LINEAR_8RGB_LUT[]; // Lookup table for conversion from - /** The to_ linea r_16 rg b_ lut. */ - private short to_LINEAR_16RGB_LUT[]; // Lookup table for conversion from - // sRGB Color Space into Linear RGB - // 16 bit + // sRGB Color Space into Linear RGB + // 8 bit - /** The alpha lut. */ - private byte alphaLUT[]; // Lookup table for scale alpha value + /** + * The to_ linea r_16 rg b_ lut. + */ + private short to_LINEAR_16RGB_LUT[]; // Lookup table for conversion from - /** The color lu ts. */ - private byte colorLUTs[][]; // Lookup tables for scale color values + // sRGB Color Space into Linear RGB + // 16 bit - /** The is_s rgb. */ - private boolean is_sRGB; // ColorModel has sRGB ColorSpace + /** + * The alpha lut. + */ + private byte alphaLUT[]; // Lookup table for scale alpha value + + /** + * The color lu ts. + */ + private byte colorLUTs[][]; // Lookup tables for scale color values + + /** + * The is_s rgb. + */ + private boolean is_sRGB; // ColorModel has sRGB ColorSpace + + /** + * The is_ linea r_ rgb. + */ + private boolean is_LINEAR_RGB; // Color Model has Linear RGB Color - /** The is_ linea r_ rgb. */ - private boolean is_LINEAR_RGB; // Color Model has Linear RGB Color - // Space + // Space - /** The LINEA r_ rg b_ length. */ - private int LINEAR_RGB_Length; // Linear RGB bit length + /** + * The LINEA r_ rg b_ length. + */ + private int LINEAR_RGB_Length; // Linear RGB bit length - /** The factor. */ - private float fFactor; // Scale factor + /** + * The factor. + */ + private float fFactor; // Scale factor /** * Instantiates a new direct color model. * - * @param space the color space - * @param bits the array of component masks - * @param rmask the bitmask corresponding to the red band - * @param gmask the bitmask corresponding to the green band - * @param bmask the bitmask corresponding to the blue band - * @param amask the bitmask corresponding to the alpha band - * @param isAlphaPremultiplied whether the alpha is premultiplied in this color model - * @param transferType the transfer type (primitive java type - * to use for the components) - * - * @throws IllegalArgumentException if the number of bits in the combined - * bitmasks for the color bands is less than one or greater than 32 + * @param space + * the color space. + * @param bits + * the array of component masks. + * @param rmask + * the bitmask corresponding to the red band. + * @param gmask + * the bitmask corresponding to the green band. + * @param bmask + * the bitmask corresponding to the blue band. + * @param amask + * the bitmask corresponding to the alpha band. + * @param isAlphaPremultiplied + * whether the alpha is pre-multiplied in this color model. + * @param transferType + * the transfer type (primitive java type to use for the + * components). + * @throws IllegalArgumentException + * if the number of bits in the combined bitmasks for the color + * bands is less than one or greater than 32. */ - public DirectColorModel(ColorSpace space, int bits, int rmask, int gmask, - int bmask, int amask, boolean isAlphaPremultiplied, - int transferType) { + public DirectColorModel(ColorSpace space, int bits, int rmask, int gmask, int bmask, int amask, + boolean isAlphaPremultiplied, int transferType) { super(space, bits, rmask, gmask, bmask, amask, isAlphaPremultiplied, - (amask == 0 ? Transparency.OPAQUE : Transparency.TRANSLUCENT), - transferType); + (amask == 0 ? Transparency.OPAQUE : Transparency.TRANSLUCENT), transferType); initLUTs(); } /** - * Instantiates a new direct color model, determining the transfer - * type from the bits array, the transparency from the alpha mask, - * and the default color space {@link ColorSpace#CS_sRGB}. + * Instantiates a new direct color model, determining the transfer type from + * the bits array, the transparency from the alpha mask, and the default + * color space {@link ColorSpace#CS_sRGB}. * - * @param bits the array of component masks - * @param rmask the bitmask corresponding to the red band - * @param gmask the bitmask corresponding to the green band - * @param bmask the bitmask corresponding to the blue band - * @param amask the bitmask corresponding to the alpha band + * @param bits + * the array of component masks. + * @param rmask + * the bitmask corresponding to the red band. + * @param gmask + * the bitmask corresponding to the green band. + * @param bmask + * the bitmask corresponding to the blue band. + * @param amask + * the bitmask corresponding to the alpha band. */ - public DirectColorModel(int bits, int rmask, int gmask, int bmask, - int amask) { + public DirectColorModel(int bits, int rmask, int gmask, int bmask, int amask) { - super(ColorSpace.getInstance(ColorSpace.CS_sRGB), bits, rmask, gmask, - bmask, amask, false, - (amask == 0 ? Transparency.OPAQUE : Transparency.TRANSLUCENT), - ColorModel.getTransferType(bits)); + super(ColorSpace.getInstance(ColorSpace.CS_sRGB), bits, rmask, gmask, bmask, amask, false, + (amask == 0 ? Transparency.OPAQUE : Transparency.TRANSLUCENT), ColorModel + .getTransferType(bits)); initLUTs(); } /** - * Instantiates a new direct color model with no alpha channel, - * determining the transfer type from the bits array, - * the default color space {@link ColorSpace#CS_sRGB}, - * and with the transparency set to {@link Transparency#OPAQUE}. + * Instantiates a new direct color model with no alpha channel, determining + * the transfer type from the bits array, the default color space + * {@link ColorSpace#CS_sRGB}, and with the transparency set to + * {@link Transparency#OPAQUE}. * - * @param bits the array of component masks - * @param rmask the bitmask corresponding to the red band - * @param gmask the bitmask corresponding to the green band - * @param bmask the bitmask corresponding to the blue band + * @param bits + * the array of component masks. + * @param rmask + * the bitmask corresponding to the red band. + * @param gmask + * the bitmask corresponding to the green band. + * @param bmask + * the bitmask corresponding to the blue band. */ public DirectColorModel(int bits, int rmask, int gmask, int bmask) { this(bits, rmask, gmask, bmask, 0); @@ -139,42 +177,42 @@ public class DirectColorModel extends PackedColorModel { } switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[]; - if (obj == null) { - ba = new byte[1]; - } else { - ba = (byte[]) obj; - } - ba[0] = (byte) pixel; - obj = ba; - break; - - case DataBuffer.TYPE_USHORT: - short sa[]; - if (obj == null) { - sa = new short[1]; - } else { - sa = (short[]) obj; - } - sa[0] = (short) pixel; - obj = sa; - break; + case DataBuffer.TYPE_BYTE: + byte ba[]; + if (obj == null) { + ba = new byte[1]; + } else { + ba = (byte[])obj; + } + ba[0] = (byte)pixel; + obj = ba; + break; - case DataBuffer.TYPE_INT: - int ia[]; - if (obj == null) { - ia = new int[1]; - } else { - ia = (int[]) obj; - } - ia[0] = pixel; - obj = ia; - break; + case DataBuffer.TYPE_USHORT: + short sa[]; + if (obj == null) { + sa = new short[1]; + } else { + sa = (short[])obj; + } + sa[0] = (short)pixel; + obj = sa; + break; + + case DataBuffer.TYPE_INT: + int ia[]; + if (obj == null) { + ia = new int[1]; + } else { + ia = (int[])obj; + } + ia[0] = pixel; + obj = ia; + break; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } return obj; @@ -187,7 +225,7 @@ public class DirectColorModel extends PackedColorModel { if (pixel == null) { ia = new int[1]; } else { - ia = (int[]) pixel; + ia = (int[])pixel; } ia[0] = rgb; return ia; @@ -246,67 +284,66 @@ public class DirectColorModel extends PackedColorModel { int pxl = 0; if (hasAlpha) { float normAlpha = normComp[numColorComponents]; - alpha = (int) (normAlpha * maxValues[numColorComponents] + 0.5f); + alpha = (int)(normAlpha * maxValues[numColorComponents] + 0.5f); if (isAlphaPremultiplied) { - red = (int) (normComp[0] * normAlpha * maxValues[0] + 0.5f); - green = (int) (normComp[1] * normAlpha * maxValues[1] + 0.5f); - blue = (int) (normComp[2] * normAlpha * maxValues[2] + 0.5f); + red = (int)(normComp[0] * normAlpha * maxValues[0] + 0.5f); + green = (int)(normComp[1] * normAlpha * maxValues[1] + 0.5f); + blue = (int)(normComp[2] * normAlpha * maxValues[2] + 0.5f); } else { - red = (int) (normComp[0] * maxValues[0] + 0.5f); - green = (int) (normComp[1] * maxValues[1] + 0.5f); - blue = (int) (normComp[2] * maxValues[2] + 0.5f); + red = (int)(normComp[0] * maxValues[0] + 0.5f); + green = (int)(normComp[1] * maxValues[1] + 0.5f); + blue = (int)(normComp[2] * maxValues[2] + 0.5f); } pxl = (alpha << offsets[3]) & componentMasks[3]; } else { - red = (int) (normComp[0] * maxValues[0] + 0.5f); - green = (int) (normComp[1] * maxValues[1] + 0.5f); - blue = (int) (normComp[2] * maxValues[2] + 0.5f); + red = (int)(normComp[0] * maxValues[0] + 0.5f); + green = (int)(normComp[1] * maxValues[1] + 0.5f); + blue = (int)(normComp[2] * maxValues[2] + 0.5f); } - pxl |= ((red << offsets[0]) & componentMasks[0]) | - ((green << offsets[1]) & componentMasks[1]) | - ((blue << offsets[2]) & componentMasks[2]); + pxl |= ((red << offsets[0]) & componentMasks[0]) + | ((green << offsets[1]) & componentMasks[1]) + | ((blue << offsets[2]) & componentMasks[2]); switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[]; - if (pixel == null) { - ba = new byte[1]; - } else { - ba = (byte[]) pixel; - } - ba[0] = (byte) pxl; - return ba; + case DataBuffer.TYPE_BYTE: + byte ba[]; + if (pixel == null) { + ba = new byte[1]; + } else { + ba = (byte[])pixel; + } + ba[0] = (byte)pxl; + return ba; - case DataBuffer.TYPE_USHORT: - short sa[]; - if (pixel == null) { - sa = new short[1]; - } else { - sa = (short[]) pixel; - } - sa[0] = (short) pxl; - return sa; + case DataBuffer.TYPE_USHORT: + short sa[]; + if (pixel == null) { + sa = new short[1]; + } else { + sa = (short[])pixel; + } + sa[0] = (short)pxl; + return sa; - case DataBuffer.TYPE_INT: - int ia[]; - if (pixel == null) { - ia = new int[1]; - } else { - ia = (int[]) pixel; - } - ia[0] = pxl; - return ia; + case DataBuffer.TYPE_INT: + int ia[]; + if (pixel == null) { + ia = new int[1]; + } else { + ia = (int[])pixel; + } + ia[0] = pxl; + return ia; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } } @Override - public final ColorModel coerceData(WritableRaster raster, - boolean isAlphaPremultiplied) { + public final ColorModel coerceData(WritableRaster raster, boolean isAlphaPremultiplied) { if (!hasAlpha || this.isAlphaPremultiplied == isAlphaPremultiplied) { return this; @@ -324,86 +361,82 @@ public class DirectColorModel extends PackedColorModel { if (isAlphaPremultiplied) { switch (transferType) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - case DataBuffer.TYPE_INT: - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - components = raster.getPixel(x, minY, components); - if (components[numColorComponents] == 0) { - raster.setPixel(x, minY, transparentComponents); - } else { - float alpha = - components[numColorComponents] / - alphaFactor; - for (int n = 0; n < numColorComponents; n++) { - components[n] = - (int) (alpha * components[n] + 0.5f); + case DataBuffer.TYPE_BYTE: + case DataBuffer.TYPE_USHORT: + case DataBuffer.TYPE_INT: + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + components = raster.getPixel(x, minY, components); + if (components[numColorComponents] == 0) { + raster.setPixel(x, minY, transparentComponents); + } else { + float alpha = components[numColorComponents] / alphaFactor; + for (int n = 0; n < numColorComponents; n++) { + components[n] = (int)(alpha * components[n] + 0.5f); + } + raster.setPixel(x, minY, components); } - raster.setPixel(x, minY, components); } - } - } - break; + } + break; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this + // transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } } else { switch (transferType) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - case DataBuffer.TYPE_INT: - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - components = raster.getPixel(x, minY, components); - if (components[numColorComponents] != 0) { - float alpha = - alphaFactor / components[numColorComponents]; - for (int n = 0; n < numColorComponents; n++) { - components[n] = - (int) (alpha * components[n] + 0.5f); + case DataBuffer.TYPE_BYTE: + case DataBuffer.TYPE_USHORT: + case DataBuffer.TYPE_INT: + for (int i = 0; i < h; i++, minY++) { + for (int j = 0, x = minX; j < w; j++, x++) { + components = raster.getPixel(x, minY, components); + if (components[numColorComponents] != 0) { + float alpha = alphaFactor / components[numColorComponents]; + for (int n = 0; n < numColorComponents; n++) { + components[n] = (int)(alpha * components[n] + 0.5f); + } + raster.setPixel(x, minY, components); } - raster.setPixel(x, minY, components); } - } - } - break; + } + break; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this + // transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } } - return new DirectColorModel(cs, pixel_bits, componentMasks[0], - componentMasks[1], componentMasks[2], componentMasks[3], - isAlphaPremultiplied, transferType); + return new DirectColorModel(cs, pixel_bits, componentMasks[0], componentMasks[1], + componentMasks[2], componentMasks[3], isAlphaPremultiplied, transferType); } @Override public String toString() { - // The output format based on 1.5 release behaviour. + // The output format based on 1.5 release behaviour. // It could be reveled such way: - // BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); + // BufferedImage bi = new BufferedImage(1, 1, + // BufferedImage.TYPE_INT_ARGB); // ColorModel cm = bi.getColorModel(); // System.out.println(cm.toString()); String str = "DirectColorModel:" + " rmask = " + //$NON-NLS-1$ //$NON-NLS-2$ - Integer.toHexString(componentMasks[0]) + " gmask = " + //$NON-NLS-1$ - Integer.toHexString(componentMasks[1]) + " bmask = " + //$NON-NLS-1$ - Integer.toHexString(componentMasks[2]) + " amask = " + //$NON-NLS-1$ - (!hasAlpha ? "0" : Integer.toHexString(componentMasks[3])); //$NON-NLS-1$ + Integer.toHexString(componentMasks[0]) + " gmask = " + //$NON-NLS-1$ + Integer.toHexString(componentMasks[1]) + " bmask = " + //$NON-NLS-1$ + Integer.toHexString(componentMasks[2]) + " amask = " + //$NON-NLS-1$ + (!hasAlpha ? "0" : Integer.toHexString(componentMasks[3])); //$NON-NLS-1$ return str; } @Override - public final int[] getComponents(Object pixel, int components[], - int offset) { + public final int[] getComponents(Object pixel, int components[], int offset) { if (components == null) { components = new int[numComponents + offset]; @@ -412,25 +445,26 @@ public class DirectColorModel extends PackedColorModel { int intPixel = 0; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) pixel; - intPixel = ba[0] & 0xff; - break; + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])pixel; + intPixel = ba[0] & 0xff; + break; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) pixel; - intPixel = sa[0] & 0xffff; - break; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])pixel; + intPixel = sa[0] & 0xffff; + break; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) pixel; - intPixel = ia[0]; - break; + case DataBuffer.TYPE_INT: + int ia[] = (int[])pixel; + intPixel = ia[0]; + break; - default: - // awt.22D=This transferType ( {0} ) is not supported by this color model - throw new UnsupportedOperationException(Messages.getString("awt.22D", //$NON-NLS-1$ - transferType)); + default: + // awt.22D=This transferType ( {0} ) is not supported by this + // color model + throw new UnsupportedOperationException(Messages.getString("awt.22D", //$NON-NLS-1$ + transferType)); } return getComponents(intPixel, components, offset); @@ -440,24 +474,24 @@ public class DirectColorModel extends PackedColorModel { public int getRed(Object inData) { int pixel = 0; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) inData; - pixel = ba[0] & 0xff; - break; + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])inData; + pixel = ba[0] & 0xff; + break; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) inData; - pixel = sa[0] & 0xffff; - break; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])inData; + pixel = sa[0] & 0xffff; + break; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) inData; - pixel = ia[0]; - break; + case DataBuffer.TYPE_INT: + int ia[] = (int[])inData; + pixel = ia[0]; + break; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } return getRed(pixel); } @@ -466,24 +500,24 @@ public class DirectColorModel extends PackedColorModel { public int getRGB(Object inData) { int pixel = 0; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) inData; - pixel = ba[0] & 0xff; - break; + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])inData; + pixel = ba[0] & 0xff; + break; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) inData; - pixel = sa[0] & 0xffff; - break; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])inData; + pixel = sa[0] & 0xffff; + break; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) inData; - pixel = ia[0]; - break; + case DataBuffer.TYPE_INT: + int ia[] = (int[])inData; + pixel = ia[0]; + break; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } return getRGB(pixel); } @@ -492,24 +526,24 @@ public class DirectColorModel extends PackedColorModel { public int getGreen(Object inData) { int pixel = 0; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) inData; - pixel = ba[0] & 0xff; - break; + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])inData; + pixel = ba[0] & 0xff; + break; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) inData; - pixel = sa[0] & 0xffff; - break; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])inData; + pixel = sa[0] & 0xffff; + break; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) inData; - pixel = ia[0]; - break; + case DataBuffer.TYPE_INT: + int ia[] = (int[])inData; + pixel = ia[0]; + break; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } return getGreen(pixel); } @@ -518,24 +552,24 @@ public class DirectColorModel extends PackedColorModel { public int getBlue(Object inData) { int pixel = 0; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) inData; - pixel = ba[0] & 0xff; - break; + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])inData; + pixel = ba[0] & 0xff; + break; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) inData; - pixel = sa[0] & 0xffff; - break; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])inData; + pixel = sa[0] & 0xffff; + break; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) inData; - pixel = ia[0]; - break; + case DataBuffer.TYPE_INT: + int ia[] = (int[])inData; + pixel = ia[0]; + break; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } return getBlue(pixel); } @@ -544,24 +578,24 @@ public class DirectColorModel extends PackedColorModel { public int getAlpha(Object inData) { int pixel = 0; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) inData; - pixel = ba[0] & 0xff; - break; + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])inData; + pixel = ba[0] & 0xff; + break; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) inData; - pixel = sa[0] & 0xffff; - break; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])inData; + pixel = sa[0] & 0xffff; + break; - case DataBuffer.TYPE_INT: - int ia[] = (int[]) inData; - pixel = ia[0]; - break; + case DataBuffer.TYPE_INT: + int ia[] = (int[])inData; + pixel = ia[0]; + break; - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ + default: + // awt.214=This Color Model doesn't support this transferType + throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ } return getAlpha(pixel); } @@ -576,14 +610,11 @@ public class DirectColorModel extends PackedColorModel { int bandMasks[] = componentMasks.clone(); if (pixel_bits > 16) { - return Raster.createPackedRaster(DataBuffer.TYPE_INT, w, h, - bandMasks, null); + return Raster.createPackedRaster(DataBuffer.TYPE_INT, w, h, bandMasks, null); } else if (pixel_bits > 8) { - return Raster.createPackedRaster(DataBuffer.TYPE_USHORT, w, h, - bandMasks, null); + return Raster.createPackedRaster(DataBuffer.TYPE_USHORT, w, h, bandMasks, null); } else { - return Raster.createPackedRaster(DataBuffer.TYPE_BYTE, w, h, - bandMasks, null); + return Raster.createPackedRaster(DataBuffer.TYPE_BYTE, w, h, bandMasks, null); } } @@ -594,7 +625,7 @@ public class DirectColorModel extends PackedColorModel { return false; } - SinglePixelPackedSampleModel sppsm = (SinglePixelPackedSampleModel) sm; + SinglePixelPackedSampleModel sppsm = (SinglePixelPackedSampleModel)sm; if (sppsm.getNumBands() != numComponents) { return false; @@ -640,8 +671,8 @@ public class DirectColorModel extends PackedColorModel { @Override public final int getRGB(int pixel) { - return (getAlpha(pixel) << 24) | (getRed(pixel) << 16) | - (getGreen(pixel) << 8) | getBlue(pixel); + return (getAlpha(pixel) << 24) | (getRed(pixel) << 16) | (getGreen(pixel) << 8) + | getBlue(pixel); } @Override @@ -681,7 +712,7 @@ public class DirectColorModel extends PackedColorModel { /** * Gets the red mask. * - * @return the red mask + * @return the red mask. */ public final int getRedMask() { return componentMasks[0]; @@ -690,7 +721,7 @@ public class DirectColorModel extends PackedColorModel { /** * Gets the green mask. * - * @return the green mask + * @return the green mask. */ public final int getGreenMask() { return componentMasks[1]; @@ -699,7 +730,7 @@ public class DirectColorModel extends PackedColorModel { /** * Gets the blue mask. * - * @return the blue mask + * @return the blue mask. */ public final int getBlueMask() { return componentMasks[2]; @@ -708,7 +739,7 @@ public class DirectColorModel extends PackedColorModel { /** * Gets the alpha mask. * - * @return the alpha mask + * @return the alpha mask. */ public final int getAlphaMask() { if (hasAlpha) { @@ -727,16 +758,12 @@ public class DirectColorModel extends PackedColorModel { if (is_LINEAR_RGB) { if (maxBitLength > 8) { LINEAR_RGB_Length = 16; - from_LINEAR_RGB_LUT = - LUTColorConverter.getFrom16lRGBtosRGB_LUT(); - to_LINEAR_16RGB_LUT = - LUTColorConverter.getFromsRGBto16lRGB_LUT(); + from_LINEAR_RGB_LUT = LUTColorConverter.getFrom16lRGBtosRGB_LUT(); + to_LINEAR_16RGB_LUT = LUTColorConverter.getFromsRGBto16lRGB_LUT(); } else { LINEAR_RGB_Length = 8; - from_LINEAR_RGB_LUT = - LUTColorConverter.getFrom8lRGBtosRGB_LUT(); - to_LINEAR_8RGB_LUT = - LUTColorConverter.getFromsRGBto8lRGB_LUT(); + from_LINEAR_RGB_LUT = LUTColorConverter.getFrom8lRGBtosRGB_LUT(); + to_LINEAR_8RGB_LUT = LUTColorConverter.getFromsRGBto8lRGB_LUT(); } fFactor = ((1 << LINEAR_RGB_Length) - 1); } else { @@ -746,7 +773,7 @@ public class DirectColorModel extends PackedColorModel { if (hasAlpha && bits[3] != 8) { alphaLUT = new byte[maxValues[3] + 1]; for (int i = 0; i <= maxValues[3]; i++) { - alphaLUT[i] = (byte) (scales[3] * i + 0.5f); + alphaLUT[i] = (byte)(scales[3] * i + 0.5f); } } @@ -765,7 +792,7 @@ public class DirectColorModel extends PackedColorModel { } colorLUTs[i] = new byte[maxValues[i] + 1]; for (int j = 0; j <= maxValues[i]; j++) { - colorLUTs[i][j] = (byte) (scales[i] * j + 0.5f); + colorLUTs[i][j] = (byte)(scales[i] * j + 0.5f); } } } @@ -784,9 +811,9 @@ public class DirectColorModel extends PackedColorModel { for (int j = 0; j <= maxValues[0]; j++) { int idx; if (LINEAR_RGB_Length == 8) { - idx = (int) (scales[i] * j + 0.5f); + idx = (int)(scales[i] * j + 0.5f); } else { - idx = (int) (scales[i] * j * 257.0f + 0.5f); + idx = (int)(scales[i] * j * 257.0f + 0.5f); } colorLUTs[i][j] = from_LINEAR_RGB_LUT[idx]; } @@ -798,20 +825,20 @@ public class DirectColorModel extends PackedColorModel { } /** - * This method return RGB component value if Color Model has - * sRGB ColorSpace. + * This method return RGB component value if Color Model has sRGB + * ColorSpace. * - * @param pixel - INT representation of pixel - * @param idx - index of pixel component - * - * @return - value of the pixel component scaled fro 0 to 255 + * @param pixel + * the integer representation of the pixel. + * @param idx + * the index of the pixel component. + * @return the value of the pixel component scaled from 0 to 255. */ private int getComponentFrom_sRGB(int pixel, int idx) { int comp = (pixel & componentMasks[idx]) >> offsets[idx]; if (isAlphaPremultiplied) { int alpha = (pixel & componentMasks[3]) >>> offsets[3]; - comp = alpha == 0 ? 0 : (int) (scales[idx] * comp * 255.0f / - (scales[3] * alpha) + 0.5f); + comp = alpha == 0 ? 0 : (int)(scales[idx] * comp * 255.0f / (scales[3] * alpha) + 0.5f); } else if (bits[idx] != 8) { comp = colorLUTs[idx][comp] & 0xff; } @@ -819,21 +846,21 @@ public class DirectColorModel extends PackedColorModel { } /** - * This method return RGB component value if Color Model has - * Linear RGB ColorSpace. - * - * @param pixel - INT representation of pixel - * @param idx - index of pixel component + * This method return RGB component value if Color Model has Linear RGB + * ColorSpace. * - * @return - value of the pixel component scaled fro 0 to 255 + * @param pixel + * the integer representation of the pixel. + * @param idx + * the index of the pixel component. + * @return the value of the pixel component scaled from 0 to 255. */ private int getComponentFrom_LINEAR_RGB(int pixel, int idx) { int comp = (pixel & componentMasks[idx]) >> offsets[idx]; if (isAlphaPremultiplied) { float factor = ((1 << LINEAR_RGB_Length) - 1); int alpha = (pixel & componentMasks[3]) >> offsets[3]; - comp = alpha == 0 ? 0 : (int) (scales[idx] * comp * factor / - (scales[3] * alpha) + 0.5f); + comp = alpha == 0 ? 0 : (int)(scales[idx] * comp * factor / (scales[3] * alpha) + 0.5f); } else if (bits[idx] != LINEAR_RGB_Length) { comp = colorLUTs[idx][comp] & 0xff; } else { @@ -843,20 +870,20 @@ public class DirectColorModel extends PackedColorModel { } /** - * This method return RGB component value if Color Model has - * arbitrary RGB ColorSapce. + * This method return RGB component value if Color Model has arbitrary RGB + * ColorSapce. * - * @param pixel - INT representation of pixel - * @param idx - index of pixel component - * - * @return - value of the pixel component scaled fro 0 to 255 + * @param pixel + * the integer representation of the pixel. + * @param idx + * the index of the pixel component. + * @return the value of the pixel component scaled from 0 to 255. */ private int getComponentFrom_RGB(int pixel, int idx) { int components[] = getComponents(pixel, null, 0); float[] normComponents = getNormalizedComponents(components, 0, null, 0); float[] sRGBcomponents = cs.toRGB(normComponents); - return (int) (sRGBcomponents[idx] * 255.0f + 0.5f); + return (int)(sRGBcomponents[idx] * 255.0f + 0.5f); } } - diff --git a/awt/java/awt/image/FilteredImageSource.java b/awt/java/awt/image/FilteredImageSource.java index 6a41fa76a2..ed8558d3c5 100644 --- a/awt/java/awt/image/FilteredImageSource.java +++ b/awt/java/awt/image/FilteredImageSource.java @@ -18,32 +18,42 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.util.Hashtable; - /** - * The FilteredImageSource class is used for producing image data for a new - * filtered version of the original image using the specified filter object. + * The FilteredImageSource class is used for producing image data for a new + * filtered version of the original image using the specified filter object. + * + * @since Android 1.0 */ public class FilteredImageSource implements ImageProducer { - /** The source. */ + /** + * The source. + */ private final ImageProducer source; - - /** The filter. */ + + /** + * The filter. + */ private final ImageFilter filter; - /** The cons table. */ + /** + * The cons table. + */ private final Hashtable consTable = new Hashtable(); /** - * Instantiates a new FilteredImageSource object with - * the specified ImageProducer and the ImageFilter objects. + * Instantiates a new FilteredImageSource object with the specified + * ImageProducer and the ImageFilter objects. * - * @param orig the specified ImageProducer. - * @param imgf the specified ImageFilter. + * @param orig + * the specified ImageProducer. + * @param imgf + * the specified ImageFilter. */ public FilteredImageSource(ImageProducer orig, ImageFilter imgf) { source = orig; @@ -51,7 +61,7 @@ public class FilteredImageSource implements ImageProducer { } public synchronized boolean isConsumer(ImageConsumer ic) { - if(ic != null) { + if (ic != null) { return consTable.containsKey(ic); } return false; @@ -64,14 +74,14 @@ public class FilteredImageSource implements ImageProducer { } public void requestTopDownLeftRightResend(ImageConsumer ic) { - if(ic != null && isConsumer(ic)){ - ImageFilter fic = (ImageFilter) consTable.get(ic); + if (ic != null && isConsumer(ic)) { + ImageFilter fic = (ImageFilter)consTable.get(ic); fic.resendTopDownLeftRight(source); } } public synchronized void removeConsumer(ImageConsumer ic) { - if(ic != null && isConsumer(ic)){ + if (ic != null && isConsumer(ic)) { ImageConsumer fic = consTable.get(ic); source.removeConsumer(fic); consTable.remove(ic); @@ -79,7 +89,7 @@ public class FilteredImageSource implements ImageProducer { } public synchronized void addConsumer(ImageConsumer ic) { - if(ic != null && !isConsumer(ic)){ + if (ic != null && !isConsumer(ic)) { ImageConsumer fic = filter.getFilterInstance(ic); source.addConsumer(fic); consTable.put(ic, fic); diff --git a/awt/java/awt/image/ImageConsumer.java b/awt/java/awt/image/ImageConsumer.java index 2eba290d54..caf87d1088 100644 --- a/awt/java/awt/image/ImageConsumer.java +++ b/awt/java/awt/image/ImageConsumer.java @@ -18,148 +18,168 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.util.Hashtable; /** - * The ImageConsumer interface provides the data about the image - * and about how its data is delivered. A ImageProducer provides - * all of the information about the image using - * the methods defined in this interface. + * The ImageConsumer interface provides the data about the image and about how + * its data is delivered. A ImageProducer provides all of the information about + * the image using the methods defined in this interface. + * + * @since Android 1.0 */ public interface ImageConsumer { - /** - * The Constant RANDOMPIXELORDER indicates that the pixels are - * delivered in a random order. + /** + * The Constant RANDOMPIXELORDER indicates that the pixels are delivered in + * a random order. */ public static final int RANDOMPIXELORDER = 1; - /** - * The Constant TOPDOWNLEFTRIGHT indicates that the pixels are - * delivered in top-down, left-to-right order. + /** + * The Constant TOPDOWNLEFTRIGHT indicates that the pixels are delivered in + * top-down, left-to-right order. */ public static final int TOPDOWNLEFTRIGHT = 2; - /** - * The Constant COMPLETESCANLINES indicates that the pixels are - * delivered in complete scanline. + /** + * The Constant COMPLETESCANLINES indicates that the pixels are delivered in + * complete scanline. */ public static final int COMPLETESCANLINES = 4; - /** - * The Constant SINGLEPASS indicates that pixels are delivered - * in a single pass. + /** + * The Constant SINGLEPASS indicates that pixels are delivered in a single + * pass. */ public static final int SINGLEPASS = 8; - /** - * The Constant SINGLEFRAME indicates that image consists of - * single frame. + /** + * The Constant SINGLEFRAME indicates that image consists of single frame. */ public static final int SINGLEFRAME = 16; - /** + /** * The Constant IMAGEERROR indicates an image error during image producing. */ public static final int IMAGEERROR = 1; - /** - * The Constant SINGLEFRAMEDONE indicates that only one of the - * image's frames is completed. + /** + * The Constant SINGLEFRAMEDONE indicates that only one of the image's + * frames is completed. */ public static final int SINGLEFRAMEDONE = 2; - /** - * The Constant STATICIMAGEDONE indicates that the image is completed. + /** + * The Constant STATICIMAGEDONE indicates that the image is completed. */ public static final int STATICIMAGEDONE = 3; - /** - * The Constant IMAGEABORTED indicates that the image producing - * process is aborted. + /** + * The Constant IMAGEABORTED indicates that the image producing process is + * aborted. */ public static final int IMAGEABORTED = 4; /** * Sets the properties for the image associated with this ImageConsumer. * - * @param props the properties for the image associated with - * this ImageConsumer. + * @param props + * the properties for the image associated with this + * ImageConsumer. */ public void setProperties(Hashtable props); /** * Sets the ColorModel object. * - * @param model the new ColorModel. + * @param model + * the new ColorModel. */ public void setColorModel(ColorModel model); /** * Sets the pixels for the specified rectangular area of the image. * - * @param x the X coordinate of rectangular area. - * @param y the Y coordinate of rectangular area. - * @param w the width of rectangular area. - * @param h the height of rectangular area. - * @param model the specified ColorModel to be used for pixels - * converting. - * @param pixels the array of pixels. - * @param off the offset of pixels array. - * @param scansize the distance from the one row of pixels - * to the next row in the specified array. - */ - public void setPixels(int x, int y, int w, int h, ColorModel model, - int[] pixels, int off, int scansize); + * @param x + * the X coordinate of rectangular area. + * @param y + * the Y coordinate of rectangular area. + * @param w + * the width of rectangular area. + * @param h + * the height of rectangular area. + * @param model + * the specified ColorModel to be used for pixels converting. + * @param pixels + * the array of pixels. + * @param off + * the offset of pixels array. + * @param scansize + * the distance from the one row of pixels to the next row in the + * specified array. + */ + public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, + int scansize); /** * Sets the pixels for the specified rectangular area of the image. * - * @param x the X coordinate of rectangular area. - * @param y the Y coordinate of rectangular area. - * @param w the width of rectangular area. - * @param h the height of rectangular area. - * @param model the specified ColorModel to be used for pixels - * converting. - * @param pixels the array of pixels. - * @param off the offset of pixels array. - * @param scansize the distance from the one row of pixels - * to the next row in the specified array. - */ - public void setPixels(int x, int y, int w, int h, ColorModel model, - byte[] pixels, int off, int scansize); + * @param x + * the X coordinate of rectangular area. + * @param y + * the Y coordinate of rectangular area. + * @param w + * the width of rectangular area. + * @param h + * the height of rectangular area. + * @param model + * the specified ColorModel to be used for pixels converting. + * @param pixels + * the array of pixels. + * @param off + * the offset of pixels array. + * @param scansize + * the distance from the one row of pixels to the next row in the + * specified array. + */ + public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, + int scansize); /** * Sets the dimensions of a source image. * - * @param width the width of the image. - * @param height the height of the image. + * @param width + * the width of the image. + * @param height + * the height of the image. */ public void setDimensions(int width, int height); /** - * Sets the hint flags of pixels order, which is used by - * the ImageConsumer for obtaining pixels from the ImageProducer - * for which this ImageConsumer is added. + * Sets the hint flags of pixels order, which is used by the ImageConsumer + * for obtaining pixels from the ImageProducer for which this ImageConsumer + * is added. * - * @param hintflags the mask of hint flags. + * @param hintflags + * the mask of hint flags. */ public void setHints(int hintflags); /** * THis method is called in the one of the following cases: *

      - *
    • The ImageProducer (for which this ImageConsumer is added) - * has been delivered all pixels of the source image.
    • - *
    • A one frame of an animation has been completed.
    • - *
    • An error while loading or producing of the image has occured. - *
    + *
  • The ImageProducer (for which this ImageConsumer is added) has been + * delivered all pixels of the source image.
  • + *
  • A one frame of an animation has been completed.
  • + *
  • An error while loading or producing of the image has occurred. + * * - * @param status the status of image producing. + * @param status + * the status of image producing. */ public void imageComplete(int status); } - diff --git a/awt/java/awt/image/ImageFilter.java b/awt/java/awt/image/ImageFilter.java index e386d657a8..d2c9f50248 100644 --- a/awt/java/awt/image/ImageFilter.java +++ b/awt/java/awt/image/ImageFilter.java @@ -18,17 +18,22 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.util.Hashtable; /** - * The ImageFilter class provides a filter for delivering image data - * from an ImageProducer to an ImageConsumer. + * The ImageFilter class provides a filter for delivering image data from an + * ImageProducer to an ImageConsumer. + * + * @since Android 1.0 */ public class ImageFilter implements ImageConsumer, Cloneable { - /** The consumer. */ + /** + * The consumer. + */ protected ImageConsumer consumer; /** @@ -39,16 +44,16 @@ public class ImageFilter implements ImageConsumer, Cloneable { } /** - * Gets an instance of an ImageFilter object which performs - * the filtering for the specified ImageConsumer. - * - * @param ic the specified ImageConsumer. + * Gets an instance of an ImageFilter object which performs the filtering + * for the specified ImageConsumer. * - * @return an ImageFilter used to perform the filtering for - * the specified ImageConsumer. + * @param ic + * the specified ImageConsumer. + * @return an ImageFilter used to perform the filtering for the specified + * ImageConsumer. */ public ImageFilter getFilterInstance(ImageConsumer ic) { - ImageFilter filter = (ImageFilter) clone(); + ImageFilter filter = (ImageFilter)clone(); filter.consumer = ic; return filter; } @@ -59,14 +64,14 @@ public class ImageFilter implements ImageConsumer, Cloneable { if (props == null) { fprops = new Hashtable(); } else { - fprops = (Hashtable) props.clone(); + fprops = (Hashtable)props.clone(); } String propName = "Filters"; //$NON-NLS-1$ String prop = "Null filter"; //$NON-NLS-1$ Object o = fprops.get(propName); if (o != null) { if (o instanceof String) { - prop = (String) o + "; " + prop; //$NON-NLS-1$ + prop = (String)o + "; " + prop; //$NON-NLS-1$ } else { prop = o.toString() + "; " + prop; //$NON-NLS-1$ } @@ -90,11 +95,11 @@ public class ImageFilter implements ImageConsumer, Cloneable { } /** - * Responds to a request for a Top-Down-Left-Right ordered - * resend of the pixel data from an ImageConsumer. + * Responds to a request for a Top-Down-Left-Right ordered resend of the + * pixel data from an ImageConsumer. * - * @param ip the ImageProducer that provides this instance of - * the filter. + * @param ip + * the ImageProducer that provides this instance of the filter. */ public void resendTopDownLeftRight(ImageProducer ip) { ip.requestTopDownLeftRightResend(this); diff --git a/awt/java/awt/image/ImageObserver.java b/awt/java/awt/image/ImageObserver.java index 418bd0766b..21ec41bf25 100644 --- a/awt/java/awt/image/ImageObserver.java +++ b/awt/java/awt/image/ImageObserver.java @@ -18,82 +18,84 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.Image; /** - * the ImageObserver interface is an asynchronous update interface - * for receiving notifications about Image construction status. + * the ImageObserver interface is an asynchronous update interface for receiving + * notifications about Image construction status. + * + * @since Android 1.0 */ public interface ImageObserver { - /** - * The Constant WIDTH indicates that the width of the image is - * available. + /** + * The Constant WIDTH indicates that the width of the image is available. */ public static final int WIDTH = 1; - /** - * The Constant HEIGHT indicates that the width of the image is - * available. + /** + * The Constant HEIGHT indicates that the width of the image is available. */ public static final int HEIGHT = 2; - /** - * The Constant PROPERTIES indicates that the properties of the image - * are available. + /** + * The Constant PROPERTIES indicates that the properties of the image are + * available. */ public static final int PROPERTIES = 4; /** - * The Constant SOMEBITS indicates that more bits needed for - * drawing a scaled variation of the image pixels are available. + * The Constant SOMEBITS indicates that more bits needed for drawing a + * scaled variation of the image pixels are available. */ public static final int SOMEBITS = 8; - /** - * The Constant FRAMEBITS indicates that complete frame of - * a image which was previously drawn is now available - * for drawing again. + /** + * The Constant FRAMEBITS indicates that complete frame of a image which was + * previously drawn is now available for drawing again. */ public static final int FRAMEBITS = 16; - /** - * The Constant ALLBITS indicates that an image which - * was previously drawn is now complete and can be drawn again. + /** + * The Constant ALLBITS indicates that an image which was previously drawn + * is now complete and can be drawn again. */ public static final int ALLBITS = 32; - /** - * The Constant ERROR indicates that error occured. + /** + * The Constant ERROR indicates that error occurred. */ public static final int ERROR = 64; - /** - * The Constant ABORT indicates that the image producing is - * aborted. + /** + * The Constant ABORT indicates that the image producing is aborted. */ public static final int ABORT = 128; /** - * This method is called when information about an Image - * interface becomes available. This method returns true - * if further updates are needed, false if not. - * - * @param img the image to be observed. - * @param infoflags the bitwise OR combination of information flags: - * ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, - * WIDTH. - * @param x the X coordinate. - * @param y the Y coordinate. - * @param width the width. - * @param height the height. + * This method is called when information about an Image interface becomes + * available. This method returns true if further updates are needed, false + * if not. * + * @param img + * the image to be observed. + * @param infoflags + * the bitwise OR combination of information flags: ABORT, + * ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, + * WIDTH. + * @param x + * the X coordinate. + * @param y + * the Y coordinate. + * @param width + * the width. + * @param height + * the height. * @return true if further updates are needed, false if not. */ - public boolean imageUpdate(Image img, int infoflags, int x, int y, - int width, int height); + public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height); } - diff --git a/awt/java/awt/image/ImageProducer.java b/awt/java/awt/image/ImageProducer.java index 557ae085a4..9138be2711 100644 --- a/awt/java/awt/image/ImageProducer.java +++ b/awt/java/awt/image/ImageProducer.java @@ -18,57 +18,62 @@ * @author Igor V. Stolyarov * @version $Revision$ */ -package java.awt.image; +package java.awt.image; /** - * The ImageProducer provides an interface for objects which produce - * the image data. ImageProducer is used for reconstructing the - * image. Each image contains an ImageProducer. + * The ImageProducer provides an interface for objects which produce the image + * data. ImageProducer is used for reconstructing the image. Each image contains + * an ImageProducer. + * + * @since Android 1.0 */ public interface ImageProducer { /** - * Checks if the specified ImageConsumer is registered with this + * Checks if the specified ImageConsumer is registered with this * ImageProvider or not. * - * @param ic the ImageConsumer to be checked. - * - * @return true, if the specified ImageConsumer is registered with this - * ImageProvider, false otherwise. + * @param ic + * the ImageConsumer to be checked. + * @return true, if the specified ImageConsumer is registered with this + * ImageProvider, false otherwise. */ public boolean isConsumer(ImageConsumer ic); /** - * Starts a reconstruction of the image data which will - * be delivered to this consumer. This method addes the - * specified ImageConsumer before reconstructing the image. + * Starts a reconstruction of the image data which will be delivered to this + * consumer. This method adds the specified ImageConsumer before + * reconstructing the image. * - * @param ic the specified ImageConsumer. + * @param ic + * the specified ImageConsumer. */ public void startProduction(ImageConsumer ic); /** - * Requests the ImageProducer to resend the image data - * in ImageConsumer.TOPDOWNLEFTRIGHT order. + * Requests the ImageProducer to resend the image data in + * ImageConsumer.TOPDOWNLEFTRIGHT order. * - * @param ic the specified ImageConsumer. + * @param ic + * the specified ImageConsumer. */ public void requestTopDownLeftRightResend(ImageConsumer ic); /** * Deregisters the specified ImageConsumer. * - * @param ic the specified ImageConsumer. + * @param ic + * the specified ImageConsumer. */ public void removeConsumer(ImageConsumer ic); /** * Adds the specified ImageConsumer object to this ImageProducer. * - * @param ic the specified ImageConsumer. + * @param ic + * the specified ImageConsumer. */ public void addConsumer(ImageConsumer ic); } - diff --git a/awt/java/awt/image/ImagingOpException.java b/awt/java/awt/image/ImagingOpException.java index ebcaba4250..e0c0127f4a 100644 --- a/awt/java/awt/image/ImagingOpException.java +++ b/awt/java/awt/image/ImagingOpException.java @@ -24,19 +24,24 @@ package java.awt.image; /** - * The ImagingOpException class provides error notification when - * the BufferedImageOp or RasterOp filter methods can not perform - * the desired filter operation. + * The ImagingOpException class provides error notification when the + * BufferedImageOp or RasterOp filter methods can not perform the desired filter + * operation. + * + * @since Android 1.0 */ public class ImagingOpException extends RuntimeException { - - /** The Constant serialVersionUID. */ + + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 8026288481846276658L; /** * Instantiates a new ImagingOpException with a detail message. * - * @param s the detail message. + * @param s + * the detail message. */ public ImagingOpException(String s) { super(s); diff --git a/awt/java/awt/image/IndexColorModel.java b/awt/java/awt/image/IndexColorModel.java index a7043f491c..0b06acda61 100644 --- a/awt/java/awt/image/IndexColorModel.java +++ b/awt/java/awt/image/IndexColorModel.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.Transparency; @@ -27,64 +28,92 @@ import java.math.BigInteger; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class IndexColorModel represents a color model in which the - * color values of the pixels are read from a palette. + * The Class IndexColorModel represents a color model in which the color values + * of the pixels are read from a palette. + * + * @since Android 1.0 */ public class IndexColorModel extends ColorModel { - /** The color map. */ - private int colorMap[]; // Color Map + /** + * The color map. + */ + private int colorMap[]; // Color Map + + /** + * The map size. + */ + private int mapSize; // Color Map size + + /** + * The transparent index. + */ + private int transparentIndex; // Index of fully transparent pixel + + /** + * The gray palette. + */ + private boolean grayPalette; // Color Model has Color Map with Gray Pallete - /** The map size. */ - private int mapSize; // Color Map size + /** + * The valid bits. + */ + private BigInteger validBits; // Specify valid Color Map values - /** The transparent index. */ - private int transparentIndex; // Index of fully transparent pixel + /** + * The Constant CACHESIZE. + */ + private static final int CACHESIZE = 20; // Cache size. Cache used for - /** The gray palette. */ - private boolean grayPalette; // Color Model has Color Map with Gray Pallete + // improving performace of selection + // nearest color in Color Map - /** The valid bits. */ - private BigInteger validBits; // Specify valid Color Map values + /** + * The cachetable. + */ + private final int cachetable[] = new int[CACHESIZE * 2]; // Cache table - - /** The Constant CACHESIZE. */ - private static final int CACHESIZE = 20; // Cache size. Cache used for - // improving performace of selection - // nearest color in Color Map + // used for - /** The cachetable. */ - private final int cachetable[] = new int[CACHESIZE * 2]; // Cache table - used for - // storing RGB values and that appropriate indices - // in the Color Map - + // storing RGB values and that appropriate indices + // in the Color Map - /** The next insert idx. */ - private int nextInsertIdx = 0; // Next index for insertion into Cache table + /** + * The next insert idx. + */ + private int nextInsertIdx = 0; // Next index for insertion into Cache table - /** The total inserted. */ - private int totalInserted = 0; // Number of inserted values into Cache table + /** + * The total inserted. + */ + private int totalInserted = 0; // Number of inserted values into Cache table /** * Instantiates a new index color model. * - * @param bits the array of component masks - * @param size the size of the color map - * @param cmap the array that gives the color mapping - * @param start the start index of the color mapping data within the cmap array - * @param transferType the transfer type (primitive java type - * to use for the components) - * @param validBits a list of which bits represent valid colormap - * values, or null if all are valid - * - * @throws IllegalArgumentException if the size of the color map is - * less than one + * @param bits + * the array of component masks. + * @param size + * the size of the color map. + * @param cmap + * the array that gives the color mapping. + * @param start + * the start index of the color mapping data within the cmap + * array. + * @param transferType + * the transfer type (primitive java type to use for the + * components). + * @param validBits + * a list of which bits represent valid colormap values, or null + * if all are valid. + * @throws IllegalArgumentException + * if the size of the color map is less than one. */ - public IndexColorModel(int bits, int size, int cmap[], int start, - int transferType, BigInteger validBits) { + public IndexColorModel(int bits, int size, int cmap[], int start, int transferType, + BigInteger validBits) { - super(bits, IndexColorModel.createBits(true), - ColorSpace.getInstance(ColorSpace.CS_sRGB), true, false, - Transparency.OPAQUE, validateTransferType(transferType)); + super(bits, IndexColorModel.createBits(true), ColorSpace.getInstance(ColorSpace.CS_sRGB), + true, false, Transparency.OPAQUE, validateTransferType(transferType)); if (size < 1) { // awt.264=Size of the color map is less than 1 @@ -122,8 +151,7 @@ public class IndexColorModel extends ColorModel { if (transparency == Transparency.OPAQUE) { transparency = Transparency.BITMASK; } - } else if (alpha != alphaMask && - transparency != Transparency.TRANSLUCENT) { + } else if (alpha != alphaMask && transparency != Transparency.TRANSLUCENT) { transparency = Transparency.TRANSLUCENT; } @@ -135,25 +163,31 @@ public class IndexColorModel extends ColorModel { /** * Instantiates a new index color model. * - * @param bits the array of component masks - * @param size the size of the color map - * @param cmap the array that gives the color mapping - * @param start the start index of the color mapping data within the cmap array - * @param hasalpha whether this color model uses alpha - * @param trans the transparency supported, @see java.awt.Transparency - * @param transferType the transfer type (primitive java type - * to use for the components) - * - * @throws IllegalArgumentException if the size of the color map is - * less than one + * @param bits + * the array of component masks. + * @param size + * the size of the color map. + * @param cmap + * the array that gives the color mapping. + * @param start + * the start index of the color mapping data within the cmap + * array. + * @param hasalpha + * whether this color model uses alpha. + * @param trans + * the transparency supported, @see java.awt.Transparency. + * @param transferType + * the transfer type (primitive java type to use for the + * components). + * @throws IllegalArgumentException + * if the size of the color map is less than one. */ - public IndexColorModel(int bits, int size, int cmap[], int start, - boolean hasalpha, int trans, int transferType) { + public IndexColorModel(int bits, int size, int cmap[], int start, boolean hasalpha, int trans, + int transferType) { - super(bits, IndexColorModel.createBits(hasalpha || (trans >= 0)), - ColorSpace.getInstance(ColorSpace.CS_sRGB), - (hasalpha || (trans >= 0)), false, Transparency.OPAQUE, - validateTransferType(transferType)); + super(bits, IndexColorModel.createBits(hasalpha || (trans >= 0)), ColorSpace + .getInstance(ColorSpace.CS_sRGB), (hasalpha || (trans >= 0)), false, + Transparency.OPAQUE, validateTransferType(transferType)); if (size < 1) { // awt.264=Size of the color map is less than 1 @@ -192,8 +226,7 @@ public class IndexColorModel extends ColorModel { if (transparency == Transparency.OPAQUE) { transparency = Transparency.BITMASK; } - } else if (alpha != 0 - && transparency != Transparency.TRANSLUCENT) { + } else if (alpha != 0 && transparency != Transparency.TRANSLUCENT) { transparency = Transparency.TRANSLUCENT; } } else { @@ -205,55 +238,70 @@ public class IndexColorModel extends ColorModel { } /** - * Instantiates a new index color model by building the color map - * from arrays of red, green, blue, and alpha values. + * Instantiates a new index color model by building the color map from + * arrays of red, green, blue, and alpha values. * - * @param bits the array of component masks - * @param size the size of the color map - * @param r the array giving the red components of the entries in the color map - * @param g the array giving the green components of the entries in the color map - * @param b the array giving the blue components of the entries in the color map - * @param a the array giving the alpha components of the entries in the color map - * - * @throws IllegalArgumentException if the size of the color map is - * less than one - * @throws ArrayIndexOutOfBoundsException if the size of one of the - * component arrays is less than the size of the color map + * @param bits + * the array of component masks. + * @param size + * the size of the color map. + * @param r + * the array giving the red components of the entries in the + * color map. + * @param g + * the array giving the green components of the entries in the + * color map. + * @param b + * the array giving the blue components of the entries in the + * color map. + * @param a + * the array giving the alpha components of the entries in the + * color map. + * @throws IllegalArgumentException + * if the size of the color map is less than one. + * @throws ArrayIndexOutOfBoundsException + * if the size of one of the component arrays is less than the + * size of the color map. */ - public IndexColorModel(int bits, int size, byte r[], byte g[], byte b[], - byte a[]) { + public IndexColorModel(int bits, int size, byte r[], byte g[], byte b[], byte a[]) { - super(bits, IndexColorModel.createBits(true), - ColorSpace.getInstance(ColorSpace.CS_sRGB), true, false, - Transparency.OPAQUE, - validateTransferType(ColorModel.getTransferType(bits))); + super(bits, IndexColorModel.createBits(true), ColorSpace.getInstance(ColorSpace.CS_sRGB), + true, false, Transparency.OPAQUE, validateTransferType(ColorModel + .getTransferType(bits))); createColorMap(size, r, g, b, a, -1); checkPalette(); } /** - * Instantiates a new index color model by building the color map - * from arrays of red, green, and blue values. + * Instantiates a new index color model by building the color map from + * arrays of red, green, and blue values. * - * @param bits the array of component masks - * @param size the size of the color map - * @param r the array giving the red components of the entries in the color map - * @param g the array giving the green components of the entries in the color map - * @param b the array giving the blue components of the entries in the color map - * @param trans the transparency supported, @see java.awt.Transparency - * - * @throws IllegalArgumentException if the size of the color map is - * less than one - * @throws ArrayIndexOutOfBoundsException if the size of one of the - * component arrays is less than the size of the color map + * @param bits + * the array of component masks. + * @param size + * the size of the color map. + * @param r + * the array giving the red components of the entries in the + * color map. + * @param g + * the array giving the green components of the entries in the + * color map. + * @param b + * the array giving the blue components of the entries in the + * color map. + * @param trans + * the transparency supported, @see java.awt.Transparency. + * @throws IllegalArgumentException + * if the size of the color map is less than one. + * @throws ArrayIndexOutOfBoundsException + * if the size of one of the component arrays is less than the + * size of the color map. */ - public IndexColorModel(int bits, int size, byte r[], byte g[], byte b[], - int trans) { + public IndexColorModel(int bits, int size, byte r[], byte g[], byte b[], int trans) { - super(bits, IndexColorModel.createBits((trans >= 0)), - ColorSpace.getInstance(ColorSpace.CS_sRGB), (trans >= 0), false, - Transparency.OPAQUE, + super(bits, IndexColorModel.createBits((trans >= 0)), ColorSpace + .getInstance(ColorSpace.CS_sRGB), (trans >= 0), false, Transparency.OPAQUE, validateTransferType(ColorModel.getTransferType(bits))); createColorMap(size, r, g, b, null, trans); @@ -261,25 +309,32 @@ public class IndexColorModel extends ColorModel { } /** - * Instantiates a new index color model by building the color map - * from arrays of red, green, and blue values. - * - * @param bits the array of component masks - * @param size the size of the color map - * @param r the array giving the red components of the entries in the color map - * @param g the array giving the green components of the entries in the color map - * @param b the array giving the blue components of the entries in the color map + * Instantiates a new index color model by building the color map from + * arrays of red, green, and blue values. * - * @throws IllegalArgumentException if the size of the color map is - * less than one - * @throws ArrayIndexOutOfBoundsException if the size of one of the - * component arrays is less than the size of the color map + * @param bits + * the array of component masks. + * @param size + * the size of the color map. + * @param r + * the array giving the red components of the entries in the + * color map. + * @param g + * the array giving the green components of the entries in the + * color map. + * @param b + * the array giving the blue components of the entries in the + * color map. + * @throws IllegalArgumentException + * if the size of the color map is less than one. + * @throws ArrayIndexOutOfBoundsException + * if the size of one of the component arrays is less than the + * size of the color map. */ public IndexColorModel(int bits, int size, byte r[], byte g[], byte b[]) { - super(bits, IndexColorModel.createBits(false), - ColorSpace.getInstance(ColorSpace.CS_sRGB), false, false, - Transparency.OPAQUE, - validateTransferType(ColorModel.getTransferType(bits))); + super(bits, IndexColorModel.createBits(false), ColorSpace.getInstance(ColorSpace.CS_sRGB), + false, false, Transparency.OPAQUE, validateTransferType(ColorModel + .getTransferType(bits))); createColorMap(size, r, g, b, null, -1); checkPalette(); @@ -288,23 +343,27 @@ public class IndexColorModel extends ColorModel { /** * Instantiates a new index color model. * - * @param bits the array of component masks - * @param size the size of the color map - * @param cmap the array that gives the color mapping - * @param start the start index of the color mapping data within the cmap array - * @param hasalpha whether this color model uses alpha - * @param trans the transparency supported, @see java.awt.Transparency - * - * @throws IllegalArgumentException if the size of the color map is - * less than one + * @param bits + * the array of component masks. + * @param size + * the size of the color map. + * @param cmap + * the array that gives the color mapping. + * @param start + * the start index of the color mapping data within the cmap + * array. + * @param hasalpha + * whether this color model uses alpha. + * @param trans + * the transparency supported, @see java.awt.Transparency. + * @throws IllegalArgumentException + * if the size of the color map is less than one. */ - public IndexColorModel(int bits, int size, byte cmap[], int start, - boolean hasalpha, int trans) { + public IndexColorModel(int bits, int size, byte cmap[], int start, boolean hasalpha, int trans) { - super(bits, IndexColorModel.createBits(hasalpha || (trans >= 0)), - ColorSpace.getInstance(ColorSpace.CS_sRGB), - (hasalpha || (trans >= 0)), false, Transparency.OPAQUE, - validateTransferType(ColorModel.getTransferType(bits))); + super(bits, IndexColorModel.createBits(hasalpha || (trans >= 0)), ColorSpace + .getInstance(ColorSpace.CS_sRGB), (hasalpha || (trans >= 0)), false, + Transparency.OPAQUE, validateTransferType(ColorModel.getTransferType(bits))); if (size < 1) { // awt.264=Size of the color map is less than 1 @@ -319,13 +378,13 @@ public class IndexColorModel extends ColorModel { int alpha = 0xff000000; for (int i = 0; i < mapSize; i++) { - colorMap[i] = (cmap[start++] & 0xff) << 16 | - (cmap[start++] & 0xff) << 8 | (cmap[start++] & 0xff); + colorMap[i] = (cmap[start++] & 0xff) << 16 | (cmap[start++] & 0xff) << 8 + | (cmap[start++] & 0xff); if (trans == i) { if (transparency == Transparency.OPAQUE) { transparency = Transparency.BITMASK; } - if(hasalpha) { + if (hasalpha) { start++; } continue; @@ -340,8 +399,7 @@ public class IndexColorModel extends ColorModel { } } } else { - if (alpha != 0xff && - transparency != Transparency.TRANSLUCENT) { + if (alpha != 0xff && transparency != Transparency.TRANSLUCENT) { transparency = Transparency.TRANSLUCENT; } } @@ -360,25 +418,29 @@ public class IndexColorModel extends ColorModel { /** * Instantiates a new index color model. * - * @param bits the array of component masks - * @param size the size of the color map - * @param cmap the array that gives the color mapping - * @param start the start index of the color mapping data within the cmap array - * @param hasalpha whether this color model uses alpha - * - * @throws IllegalArgumentException if the size of the color map is - * less than one + * @param bits + * the array of component masks. + * @param size + * the size of the color map. + * @param cmap + * the array that gives the color mapping. + * @param start + * the start index of the color mapping data within the cmap + * array. + * @param hasalpha + * whether this color model uses alpha. + * @throws IllegalArgumentException + * if the size of the color map is less than one. */ - public IndexColorModel(int bits, int size, byte cmap[], int start, - boolean hasalpha) { + public IndexColorModel(int bits, int size, byte cmap[], int start, boolean hasalpha) { this(bits, size, cmap, start, hasalpha, -1); } @Override public Object getDataElements(int[] components, int offset, Object pixel) { - int rgb = (components[offset] << 16) | (components[offset + 1]) << 8 | - components[offset + 2]; + int rgb = (components[offset] << 16) | (components[offset + 1]) << 8 + | components[offset + 2]; if (hasAlpha) { rgb |= components[offset + 3] << 24; } else { @@ -419,7 +481,7 @@ public class IndexColorModel extends ColorModel { } } else if (alpha == 0 && transparentIndex > -1) { pixIdx = transparentIndex; - } else { + } else { int minAlphaError = 255; int minError = 195075; // 255^2 + 255^2 + 255^2 int alphaError; @@ -470,19 +532,19 @@ public class IndexColorModel extends ColorModel { /** * Converts an image from indexed to RGB format. * - * @param raster the raster containing the source image - * @param forceARGB whether to use the default RGB color model - * - * @return the buffered image - * - * @throws IllegalArgumentException if the raster is not compatible with - * this color model + * @param raster + * the raster containing the source image. + * @param forceARGB + * whether to use the default RGB color model. + * @return the buffered image. + * @throws IllegalArgumentException + * if the raster is not compatible with this color model. */ - public BufferedImage convertToIntDiscrete(Raster raster, - boolean forceARGB) { + public BufferedImage convertToIntDiscrete(Raster raster, boolean forceARGB) { if (!isCompatibleRaster(raster)) { - // awt.265=The raster argument is not compatible with this IndexColorModel + // awt.265=The raster argument is not compatible with this + // IndexColorModel throw new IllegalArgumentException(Messages.getString("awt.265")); //$NON-NLS-1$ } @@ -490,8 +552,7 @@ public class IndexColorModel extends ColorModel { if (forceARGB || transparency == Transparency.TRANSLUCENT) { model = ColorModel.getRGBdefault(); } else if (transparency == Transparency.BITMASK) { - model = new DirectColorModel(25, 0x00ff0000, 0x0000ff00, - 0x000000ff, 0x01000000); + model = new DirectColorModel(25, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x01000000); } else { model = new DirectColorModel(24, 0x00ff0000, 0x0000ff00, 0x000000ff); } @@ -510,7 +571,7 @@ public class IndexColorModel extends ColorModel { for (int i = 0; i < h; i++, minY++) { obj = raster.getDataElements(minX, minY, w, 1, obj); if (obj instanceof byte[]) { - byte ba[] = (byte[]) obj; + byte ba[] = (byte[])obj; if (pixels == null) { pixels = new int[ba.length]; } @@ -518,7 +579,7 @@ public class IndexColorModel extends ColorModel { pixels[j] = colorMap[ba[j] & 0xff]; } } else if (obj instanceof short[]) { - short sa[] = (short[]) obj; + short sa[] = (short[])obj; if (pixels == null) { pixels = new int[sa.length]; } @@ -527,7 +588,7 @@ public class IndexColorModel extends ColorModel { } } if (obj instanceof int[]) { - int ia[] = (int[]) obj; + int ia[] = (int[])obj; if (pixels == null) { pixels = new int[ia.length]; } @@ -545,7 +606,7 @@ public class IndexColorModel extends ColorModel { /** * Gets the valid pixels. * - * @return the valid pixels + * @return the valid pixels. */ public BigInteger getValidPixels() { return validBits; @@ -553,14 +614,15 @@ public class IndexColorModel extends ColorModel { @Override public String toString() { - // The output format based on 1.5 release behaviour. + // The output format based on 1.5 release behaviour. // It could be reveled such way: - // BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_BYTE_INDEXED); + // BufferedImage bi = new BufferedImage(1, 1, + // BufferedImage.TYPE_BYTE_INDEXED); // ColorModel cm = bi.getColorModel(); // System.out.println(cm.toString()); String str = "IndexColorModel: #pixel_bits = " + pixel_bits + //$NON-NLS-1$ - " numComponents = " + numComponents + " color space = " + cs + //$NON-NLS-1$ //$NON-NLS-2$ - " transparency = "; //$NON-NLS-1$ + " numComponents = " + numComponents + " color space = " + cs + //$NON-NLS-1$ //$NON-NLS-2$ + " transparency = "; //$NON-NLS-1$ if (transparency == Transparency.OPAQUE) { str = str + "Transparency.OPAQUE"; //$NON-NLS-1$ @@ -571,7 +633,7 @@ public class IndexColorModel extends ColorModel { } str = str + " transIndex = " + transparentIndex + " has alpha = " + //$NON-NLS-1$ //$NON-NLS-2$ - hasAlpha + " isAlphaPre = " + isAlphaPremultiplied; //$NON-NLS-1$ + hasAlpha + " isAlphaPre = " + isAlphaPremultiplied; //$NON-NLS-1$ return str; } @@ -580,13 +642,13 @@ public class IndexColorModel extends ColorModel { public int[] getComponents(Object pixel, int components[], int offset) { int pixIdx = -1; if (pixel instanceof byte[]) { - byte ba[] = (byte[]) pixel; + byte ba[] = (byte[])pixel; pixIdx = ba[0] & 0xff; } else if (pixel instanceof short[]) { - short sa[] = (short[]) pixel; + short sa[] = (short[])pixel; pixIdx = sa[0] & 0xffff; } else if (pixel instanceof int[]) { - int ia[] = (int[]) pixel; + int ia[] = (int[])pixel; pixIdx = ia[0]; } else { // awt.219=This transferType is not supported by this color model @@ -600,14 +662,11 @@ public class IndexColorModel extends ColorModel { public WritableRaster createCompatibleWritableRaster(int w, int h) { WritableRaster raster; if (pixel_bits == 1 || pixel_bits == 2 || pixel_bits == 4) { - raster = Raster.createPackedRaster(DataBuffer.TYPE_BYTE, w, h, 1, - pixel_bits, null); + raster = Raster.createPackedRaster(DataBuffer.TYPE_BYTE, w, h, 1, pixel_bits, null); } else if (pixel_bits <= 8) { - raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, w, h, - 1, null); + raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, w, h, 1, null); } else if (pixel_bits <= 16) { - raster = Raster.createInterleavedRaster(DataBuffer.TYPE_USHORT, w, - h, 1, null); + raster = Raster.createInterleavedRaster(DataBuffer.TYPE_USHORT, w, h, 1, null); } else { // awt.266=The number of bits in a pixel is greater than 16 throw new UnsupportedOperationException(Messages.getString("awt.266")); //$NON-NLS-1$ @@ -622,8 +681,7 @@ public class IndexColorModel extends ColorModel { return false; } - if (!(sm instanceof MultiPixelPackedSampleModel) - && !(sm instanceof ComponentSampleModel)) { + if (!(sm instanceof MultiPixelPackedSampleModel) && !(sm instanceof ComponentSampleModel)) { return false; } @@ -640,48 +698,45 @@ public class IndexColorModel extends ColorModel { @Override public SampleModel createCompatibleSampleModel(int w, int h) { if (pixel_bits == 1 || pixel_bits == 2 || pixel_bits == 4) { - return new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, w, h, - pixel_bits); + return new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, w, h, pixel_bits); } int bandOffsets[] = new int[1]; bandOffsets[0] = 0; - return new ComponentSampleModel(transferType, w, h, 1, w, - bandOffsets); + return new ComponentSampleModel(transferType, w, h, 1, w, bandOffsets); } @Override public boolean isCompatibleRaster(Raster raster) { int sampleSize = raster.getSampleModel().getSampleSize(0); - return (raster.getTransferType() == transferType && - raster.getNumBands() == 1 && (1 << sampleSize) >= mapSize); + return (raster.getTransferType() == transferType && raster.getNumBands() == 1 && (1 << sampleSize) >= mapSize); } @Override public int getDataElement(int components[], int offset) { int rgb = (components[offset] << 16) | (components[offset + 1]) << 8 | components[offset + 2]; - + if (hasAlpha) { rgb |= components[offset + 3] << 24; } else { rgb |= 0xff000000; } - + int pixel; switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[]) getDataElements(rgb, null); - pixel = ba[0] & 0xff; - break; - case DataBuffer.TYPE_USHORT: - short sa[] = (short[]) getDataElements(rgb, null); - pixel = sa[0] & 0xffff; - break; - default: - // awt.267=The transferType is invalid - throw new UnsupportedOperationException(Messages.getString("awt.267")); //$NON-NLS-1$ + case DataBuffer.TYPE_BYTE: + byte ba[] = (byte[])getDataElements(rgb, null); + pixel = ba[0] & 0xff; + break; + case DataBuffer.TYPE_USHORT: + short sa[] = (short[])getDataElements(rgb, null); + pixel = sa[0] & 0xffff; + break; + default: + // awt.267=The transferType is invalid + throw new UnsupportedOperationException(Messages.getString("awt.267")); //$NON-NLS-1$ } return pixel; @@ -690,7 +745,8 @@ public class IndexColorModel extends ColorModel { /** * Gets the color map. * - * @param rgb the destination array where the color map is written + * @param rgb + * the destination array where the color map is written. */ public final void getRGBs(int rgb[]) { System.arraycopy(colorMap, 0, rgb, 0, mapSize); @@ -699,44 +755,48 @@ public class IndexColorModel extends ColorModel { /** * Gets the red component of the color map. * - * @param r the destination array + * @param r + * the destination array. */ public final void getReds(byte r[]) { for (int i = 0; i < mapSize; i++) { - r[i] = (byte) (colorMap[i] >> 16); + r[i] = (byte)(colorMap[i] >> 16); } } /** * Gets the green component of the color map. * - * @param g the destination array + * @param g + * the destination array. */ public final void getGreens(byte g[]) { for (int i = 0; i < mapSize; i++) { - g[i] = (byte) (colorMap[i] >> 8); + g[i] = (byte)(colorMap[i] >> 8); } } /** * Gets the blue component of the color map. * - * @param b the destination array + * @param b + * the destination array. */ public final void getBlues(byte b[]) { for (int i = 0; i < mapSize; i++) { - b[i] = (byte) colorMap[i]; + b[i] = (byte)colorMap[i]; } } /** * Gets the alpha component of the color map. * - * @param a the destination array + * @param a + * the destination array. */ public final void getAlphas(byte a[]) { for (int i = 0; i < mapSize; i++) { - a[i] = (byte) (colorMap[i] >> 24); + a[i] = (byte)(colorMap[i] >> 24); } } @@ -759,9 +819,9 @@ public class IndexColorModel extends ColorModel { /** * Checks if the specified pixel is valid for this color model. * - * @param pixel the pixel - * - * @return true, if the pixel is valid + * @param pixel + * the pixel. + * @return true, if the pixel is valid. */ public boolean isValid(int pixel) { if (validBits == null) { @@ -803,7 +863,7 @@ public class IndexColorModel extends ColorModel { /** * Checks if this color model validates pixels. * - * @return true, if all pixels are valid, otherwise false + * @return true, if all pixels are valid, otherwise false. */ public boolean isValid() { return (validBits == null); @@ -818,7 +878,7 @@ public class IndexColorModel extends ColorModel { /** * Gets the index that represents the transparent pixel. * - * @return the index that represents the transparent pixel + * @return the index that represents the transparent pixel. */ public final int getTransparentPixel() { return transparentIndex; @@ -832,7 +892,7 @@ public class IndexColorModel extends ColorModel { /** * Gets the size of the color map. * - * @return the map size + * @return the map size. */ public final int getMapSize() { return mapSize; @@ -841,15 +901,20 @@ public class IndexColorModel extends ColorModel { /** * Creates the color map. * - * @param size the size - * @param r the r - * @param g the g - * @param b the b - * @param a the a - * @param trans the trans - */ - private void createColorMap(int size, byte r[], byte g[], byte b[], - byte a[], int trans) { + * @param size + * the size. + * @param r + * the r. + * @param g + * the g. + * @param b + * the b. + * @param a + * the a. + * @param trans + * the trans. + */ + private void createColorMap(int size, byte r[], byte g[], byte b[], byte a[], int trans) { if (size < 1) { // awt.264=Size of the color map is less than 1 throw new IllegalArgumentException(Messages.getString("awt.264")); //$NON-NLS-1$ @@ -867,8 +932,7 @@ public class IndexColorModel extends ColorModel { int alpha = 0; for (int i = 0; i < mapSize; i++) { - colorMap[i] = ((r[i] & 0xff) << 16) | ((g[i] & 0xff) << 8) | - (b[i] & 0xff); + colorMap[i] = ((r[i] & 0xff) << 16) | ((g[i] & 0xff) << 8) | (b[i] & 0xff); if (trans == i) { continue; @@ -900,7 +964,7 @@ public class IndexColorModel extends ColorModel { } /** - * This method checking, if Color Map has Gray Palette. + * This method checking, if Color Map has Gray palette. */ private void checkPalette() { grayPalette = false; @@ -911,8 +975,7 @@ public class IndexColorModel extends ColorModel { for (int i = 0; i < mapSize; i++) { rgb = colorMap[i]; - if (((rgb >> 16) & 0xff) != ((rgb >> 8) & 0xff) || - ((rgb >> 8) & 0xff) != (rgb & 0xff)) { + if (((rgb >> 16) & 0xff) != ((rgb >> 8) & 0xff) || ((rgb >> 8) & 0xff) != (rgb & 0xff)) { return; } } @@ -922,40 +985,39 @@ public class IndexColorModel extends ColorModel { /** * Construction an array pixel representation. * - * @param colorMapIdx - index into Color Map - * @param pixel - pixel - * - * @return - an array pixel representation + * @param colorMapIdx + * the index into Color Map. + * @param pixel + * the pixel + * @return the pixel representation array. */ private Object createDataObject(int colorMapIdx, Object pixel) { if (pixel == null) { switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte[] ba = new byte[1]; - ba[0] = (byte) colorMapIdx; - pixel = ba; - break; - case DataBuffer.TYPE_USHORT: - short[] sa = new short[1]; - sa[0] = (short) colorMapIdx; - pixel = sa; - break; - default: - // awt.267=The transferType is invalid - throw new UnsupportedOperationException(Messages.getString("awt.267")); //$NON-NLS-1$ + case DataBuffer.TYPE_BYTE: + byte[] ba = new byte[1]; + ba[0] = (byte)colorMapIdx; + pixel = ba; + break; + case DataBuffer.TYPE_USHORT: + short[] sa = new short[1]; + sa[0] = (short)colorMapIdx; + pixel = sa; + break; + default: + // awt.267=The transferType is invalid + throw new UnsupportedOperationException(Messages.getString("awt.267")); //$NON-NLS-1$ } - } else if (pixel instanceof byte[] - && transferType == DataBuffer.TYPE_BYTE) { - byte ba[] = (byte[]) pixel; - ba[0] = (byte) colorMapIdx; + } else if (pixel instanceof byte[] && transferType == DataBuffer.TYPE_BYTE) { + byte ba[] = (byte[])pixel; + ba[0] = (byte)colorMapIdx; pixel = ba; - } else if (pixel instanceof short[]&& - transferType == DataBuffer.TYPE_USHORT) { - short[] sa = (short[]) pixel; - sa[0] = (short) colorMapIdx; + } else if (pixel instanceof short[] && transferType == DataBuffer.TYPE_USHORT) { + short[] sa = (short[])pixel; + sa[0] = (short)colorMapIdx; pixel = sa; } else if (pixel instanceof int[]) { - int ia[] = (int[]) pixel; + int ia[] = (int[])pixel; ia[0] = colorMapIdx; pixel = ia; } else { @@ -968,9 +1030,9 @@ public class IndexColorModel extends ColorModel { /** * Creates the bits. * - * @param hasAlpha the has alpha - * - * @return the int[] + * @param hasAlpha + * the has alpha. + * @return the int[]. */ private static int[] createBits(boolean hasAlpha) { @@ -993,28 +1055,26 @@ public class IndexColorModel extends ColorModel { /** * Validate transfer type. * - * @param transferType the transfer type - * - * @return the int + * @param transferType + * the transfer type. + * @return the int. */ private static int validateTransferType(int transferType) { - if (transferType != DataBuffer.TYPE_BYTE && - transferType != DataBuffer.TYPE_USHORT) { - // awt.269=The transferType is not one of DataBuffer.TYPE_BYTE or DataBuffer.TYPE_USHORT + if (transferType != DataBuffer.TYPE_BYTE && transferType != DataBuffer.TYPE_USHORT) { + // awt.269=The transferType is not one of DataBuffer.TYPE_BYTE or + // DataBuffer.TYPE_USHORT throw new IllegalArgumentException(Messages.getString("awt.269")); //$NON-NLS-1$ } return transferType; } /** - * Checks if is gray pallete. + * Checks if is gray palette. * - * @return true, if is gray pallete + * @return true, if is gray palette. */ - boolean isGrayPallete(){ + boolean isGrayPallete() { return grayPalette; } } - - diff --git a/awt/java/awt/image/Kernel.java b/awt/java/awt/image/Kernel.java index c6f00e2b8b..a59d27a114 100644 --- a/awt/java/awt/image/Kernel.java +++ b/awt/java/awt/image/Kernel.java @@ -27,38 +27,53 @@ import org.apache.harmony.awt.internal.nls.Messages; /** * The Kernel class provides a matrix. This matrix is stored as a float array - * which describes how a specified pixel affects the value calculated for - * the pixel's position in the output image of a filtering operation. - * The X, Y origins indicate the kernel matrix element which corresponds to - * the pixel position for which an output value is being calculated. + * which describes how a specified pixel affects the value calculated for the + * pixel's position in the output image of a filtering operation. The X, Y + * origins indicate the kernel matrix element which corresponds to the pixel + * position for which an output value is being calculated. + * + * @since Android 1.0 */ public class Kernel implements Cloneable { - - /** The x origin. */ + + /** + * The x origin. + */ private final int xOrigin; - - /** The y origin. */ + + /** + * The y origin. + */ private final int yOrigin; - - /** The width. */ + + /** + * The width. + */ private int width; - - /** The height. */ + + /** + * The height. + */ private int height; - - /** The data. */ + + /** + * The data. + */ float data[]; /** - * Instantiates a new Kernel with the specified float array. - * The width*height elements of the data array are copied. + * Instantiates a new Kernel with the specified float array. The + * width*height elements of the data array are copied. * - * @param width the width of the Kernel. - * @param height the height of the Kernel. - * @param data the data of Kernel. + * @param width + * the width of the Kernel. + * @param height + * the height of the Kernel. + * @param data + * the data of Kernel. */ public Kernel(int width, int height, float[] data) { - int dataLength = width*height; + int dataLength = width * height; if (data.length < dataLength) { // awt.22B=Length of data should not be less than width*height throw new IllegalArgumentException(Messages.getString("awt.22B")); //$NON-NLS-1$ @@ -70,8 +85,8 @@ public class Kernel implements Cloneable { this.data = new float[dataLength]; System.arraycopy(data, 0, this.data, 0, dataLength); - xOrigin = (width-1)/2; - yOrigin = (height-1)/2; + xOrigin = (width - 1) / 2; + yOrigin = (height - 1) / 2; } /** @@ -95,8 +110,8 @@ public class Kernel implements Cloneable { /** * Gets the float data array of this Kernel. * - * @param data the float array where the resulted data will be stored. - * + * @param data + * the float array where the resulted data will be stored. * @return the float data array of this Kernel. */ public final float[] getKernelData(float[] data) { diff --git a/awt/java/awt/image/LookupOp.java b/awt/java/awt/image/LookupOp.java index f9bd2c7b20..3362c5cf79 100644 --- a/awt/java/awt/image/LookupOp.java +++ b/awt/java/awt/image/LookupOp.java @@ -32,56 +32,76 @@ import org.apache.harmony.awt.gl.AwtImageBackdoorAccessor; import org.apache.harmony.awt.internal.nls.Messages; /** - * The LookupOp class perfoms a lookup operation which transforms a - * source image by filtering each band using a table of data. - * The table may contain a single array or it may contain a - * different data array for each band of the image. + * The LookupOp class performs a lookup operation which transforms a source + * image by filtering each band using a table of data. The table may contain a + * single array or it may contain a different data array for each band of the + * image. + * + * @since Android 1.0 */ public class LookupOp implements BufferedImageOp, RasterOp { - - /** The lut. */ + + /** + * The lut. + */ private final LookupTable lut; - - /** The hints. */ + + /** + * The hints. + */ private RenderingHints hints; - + // TODO remove when this field is used - /** The can use ipp. */ + /** + * The can use ipp. + */ @SuppressWarnings("unused") private final boolean canUseIpp; // We don't create levels/values when it is possible to reuse old - /** The cached levels. */ + /** + * The cached levels. + */ private int cachedLevels[]; - - /** The cached values. */ + + /** + * The cached values. + */ private int cachedValues[]; + // Number of channels for which cache is valid. - // If negative number of channels is same as positive but skipAlpha was specified - /** The valid for channels. */ + // If negative number of channels is same as positive but skipAlpha was + // specified + /** + * The valid for channels. + */ private int validForChannels; - /** The level initializer. */ + /** + * The level initializer. + */ static int levelInitializer[] = new int[0x10000]; static { // TODO // System.loadLibrary("imageops"); - for (int i=1; i<=0x10000; i++) { - levelInitializer[i-1] = i; + for (int i = 1; i <= 0x10000; i++) { + levelInitializer[i - 1] = i; } } /** - * Instantiates a new LookupOp object from the specified - * LookupTable object and a RenderingHints object. + * Instantiates a new LookupOp object from the specified LookupTable object + * and a RenderingHints object. * - * @param lookup the specified LookupTable object. - * @param hints the RenderingHints object or null. + * @param lookup + * the specified LookupTable object. + * @param hints + * the RenderingHints object or null. */ public LookupOp(LookupTable lookup, RenderingHints hints) { - if (lookup == null){ + if (lookup == null) { throw new NullPointerException(Messages.getString("awt.01", "lookup")); //$NON-NLS-1$ //$NON-NLS-2$ } lut = lookup; @@ -136,27 +156,16 @@ public class LookupOp implements BufferedImageOp, RasterOp { transferType = DataBuffer.TYPE_SHORT; } - dstCM = new ComponentColorModel( - dstCM.cs, - dstCM.hasAlpha(), - dstCM.isAlphaPremultiplied, - dstCM.transparency, - transferType - ); + dstCM = new ComponentColorModel(dstCM.cs, dstCM.hasAlpha(), + dstCM.isAlphaPremultiplied, dstCM.transparency, transferType); } } - WritableRaster r = - dstCM.isCompatibleSampleModel(src.getSampleModel()) ? - src.getRaster().createCompatibleWritableRaster(src.getWidth(), src.getHeight()) : - dstCM.createCompatibleWritableRaster(src.getWidth(), src.getHeight()); - - return new BufferedImage( - dstCM, - r, - dstCM.isAlphaPremultiplied(), - null - ); + WritableRaster r = dstCM.isCompatibleSampleModel(src.getSampleModel()) ? src.getRaster() + .createCompatibleWritableRaster(src.getWidth(), src.getHeight()) : dstCM + .createCompatibleWritableRaster(src.getWidth(), src.getHeight()); + + return new BufferedImage(dstCM, r, dstCM.isAlphaPremultiplied(), null); } public final WritableRaster filter(Raster src, WritableRaster dst) { @@ -166,25 +175,27 @@ public class LookupOp implements BufferedImageOp, RasterOp { if (src.getNumBands() != dst.getNumBands()) { throw new IllegalArgumentException(Messages.getString("awt.237")); //$NON-NLS-1$ } } - if (src.getWidth() != dst.getWidth()){ + if (src.getWidth() != dst.getWidth()) { throw new IllegalArgumentException(Messages.getString("awt.28F")); //$NON-NLS-1$ } } - if (src.getHeight() != dst.getHeight()){ + if (src.getHeight() != dst.getHeight()) { throw new IllegalArgumentException(Messages.getString("awt.290")); //$NON-NLS-1$ } } } if (lut.getNumComponents() != 1 && lut.getNumComponents() != src.getNumBands()) { - // awt.238=The number of arrays in the LookupTable does not meet the restrictions + // awt.238=The number of arrays in the LookupTable does not meet the + // restrictions throw new IllegalArgumentException(Messages.getString("awt.238")); //$NON-NLS-1$ } // TODO - // if (!canUseIpp || ippFilter(src, dst, BufferedImage.TYPE_CUSTOM, false) != 0) - if (slowFilter(src, dst, false) != 0) { - // awt.21F=Unable to transform source - throw new ImagingOpException (Messages.getString("awt.21F")); //$NON-NLS-1$ - } + // if (!canUseIpp || ippFilter(src, dst, BufferedImage.TYPE_CUSTOM, + // false) != 0) + if (slowFilter(src, dst, false) != 0) { + // awt.21F=Unable to transform source + throw new ImagingOpException(Messages.getString("awt.21F")); //$NON-NLS-1$ + } return dst; } @@ -202,18 +213,20 @@ public class LookupOp implements BufferedImageOp, RasterOp { int nLUTComponents = lut.getNumComponents(); boolean skipAlpha; if (srcCM.hasAlpha()) { - if (nLUTComponents == 1 || nLUTComponents == nComponents-1) { + if (nLUTComponents == 1 || nLUTComponents == nComponents - 1) { skipAlpha = true; } else if (nLUTComponents == nComponents) { skipAlpha = false; } else { - // awt.229=Number of components in the LUT does not match the number of bands + // awt.229=Number of components in the LUT does not match the + // number of bands throw new IllegalArgumentException(Messages.getString("awt.229")); //$NON-NLS-1$ } } else if (nLUTComponents == 1 || nLUTComponents == nComponents) { skipAlpha = false; } else { - // awt.229=Number of components in the LUT does not match the number of bands + // awt.229=Number of components in the LUT does not match the number + // of bands throw new IllegalArgumentException(Messages.getString("awt.229")); //$NON-NLS-1$ } @@ -222,21 +235,19 @@ public class LookupOp implements BufferedImageOp, RasterOp { finalDst = dst; dst = createCompatibleDestImage(src, null); } else { - if (src.getWidth() != dst.getWidth()){ + if (src.getWidth() != dst.getWidth()) { throw new IllegalArgumentException(Messages.getString("awt.291")); //$NON-NLS-1$ } - if (src.getHeight() != dst.getHeight()){ + if (src.getHeight() != dst.getHeight()) { throw new IllegalArgumentException(Messages.getString("awt.292")); //$NON-NLS-1$ } if (!srcCM.equals(dst.getColorModel())) { // Treat BufferedImage.TYPE_INT_RGB and // BufferedImage.TYPE_INT_ARGB as same - if (!((src.getType() == BufferedImage.TYPE_INT_RGB || src - .getType() == BufferedImage.TYPE_INT_ARGB) && (dst - .getType() == BufferedImage.TYPE_INT_RGB || dst - .getType() == BufferedImage.TYPE_INT_ARGB))) { + if (!((src.getType() == BufferedImage.TYPE_INT_RGB || src.getType() == BufferedImage.TYPE_INT_ARGB) && (dst + .getType() == BufferedImage.TYPE_INT_RGB || dst.getType() == BufferedImage.TYPE_INT_ARGB))) { finalDst = dst; dst = createCompatibleDestImage(src, null); } @@ -244,11 +255,12 @@ public class LookupOp implements BufferedImageOp, RasterOp { } // TODO - //if (!canUseIpp || ippFilter(src.getRaster(), dst.getRaster(), src.getType(), skipAlpha) != 0) - if (slowFilter(src.getRaster(), dst.getRaster(), skipAlpha) != 0) { - // awt.21F=Unable to transform source - throw new ImagingOpException (Messages.getString("awt.21F")); //$NON-NLS-1$ - } + // if (!canUseIpp || ippFilter(src.getRaster(), dst.getRaster(), + // src.getType(), skipAlpha) != 0) + if (slowFilter(src.getRaster(), dst.getRaster(), skipAlpha) != 0) { + // awt.21F=Unable to transform source + throw new ImagingOpException(Messages.getString("awt.21F")); //$NON-NLS-1$ + } if (finalDst != null) { Graphics2D g = finalDst.createGraphics(); @@ -264,11 +276,13 @@ public class LookupOp implements BufferedImageOp, RasterOp { /** * Slow filter. * - * @param src the src - * @param dst the dst - * @param skipAlpha the skip alpha - * - * @return the int + * @param src + * the src. + * @param dst + * the dst. + * @param skipAlpha + * the skip alpha. + * @return the int. */ private final int slowFilter(Raster src, WritableRaster dst, boolean skipAlpha) { int minSrcX = src.getMinX(); @@ -286,39 +300,39 @@ public class LookupOp implements BufferedImageOp, RasterOp { int[] pixels = null; int offset = lut.getOffset(); - if (lut instanceof ByteLookupTable){ + if (lut instanceof ByteLookupTable) { byte[][] byteData = ((ByteLookupTable)lut).getTable(); pixels = src.getPixels(minSrcX, minSrcY, srcWidth, srcHeight, pixels); - if (lut.getNumComponents() != 1){ - for (int i=0; i < pixels.length; i+= numBands){ - for (int b = 0; b < numBands2Process; b++){ - pixels[i+b] = byteData[b][pixels[i+b]-offset] & 0xFF; + if (lut.getNumComponents() != 1) { + for (int i = 0; i < pixels.length; i += numBands) { + for (int b = 0; b < numBands2Process; b++) { + pixels[i + b] = byteData[b][pixels[i + b] - offset] & 0xFF; } } } else { - for (int i=0; i < pixels.length; i+= numBands){ - for (int b = 0; b < numBands2Process; b++){ - pixels[i+b] = byteData[0][pixels[i+b]-offset] & 0xFF; + for (int i = 0; i < pixels.length; i += numBands) { + for (int b = 0; b < numBands2Process; b++) { + pixels[i + b] = byteData[0][pixels[i + b] - offset] & 0xFF; } } } dst.setPixels(minDstX, minDstY, srcWidth, srcHeight, pixels); - } else if (lut instanceof ShortLookupTable){ - short[][] shortData = ((ShortLookupTable)lut).getTable(); + } else if (lut instanceof ShortLookupTable) { + short[][] shortData = ((ShortLookupTable)lut).getTable(); pixels = src.getPixels(minSrcX, minSrcY, srcWidth, srcHeight, pixels); - if (lut.getNumComponents() != 1){ - for (int i=0; i < pixels.length; i+= numBands){ - for (int b = 0; b < numBands2Process; b++){ - pixels[i+b] = shortData[b][pixels[i+b]-offset] & 0xFFFF; + if (lut.getNumComponents() != 1) { + for (int i = 0; i < pixels.length; i += numBands) { + for (int b = 0; b < numBands2Process; b++) { + pixels[i + b] = shortData[b][pixels[i + b] - offset] & 0xFFFF; } } } else { - for (int i=0; i < pixels.length; i+= numBands){ - for (int b = 0; b < numBands2Process; b++){ - pixels[i+b] = shortData[0][pixels[i+b]-offset] & 0xFFFF; + for (int i = 0; i < pixels.length; i += numBands) { + for (int b = 0; b < numBands2Process; b++) { + pixels[i + b] = shortData[0][pixels[i + b] - offset] & 0xFFFF; } } } @@ -328,8 +342,8 @@ public class LookupOp implements BufferedImageOp, RasterOp { int pixel[] = new int[src.getNumBands()]; int maxY = minSrcY + srcHeight; int maxX = minSrcX + srcWidth; - for (int srcY=minSrcY, dstY = minDstY; srcY < maxY; srcY++, dstY++){ - for (int srcX=minSrcX, dstX = minDstX; srcX < maxX; srcX++, dstX++){ + for (int srcY = minSrcY, dstY = minDstY; srcY < maxY; srcY++, dstY++) { + for (int srcX = minSrcX, dstX = minDstX; srcX < maxX; srcX++, dstX++) { src.getPixel(srcX, srcY, pixel); lut.lookupPixel(pixel, pixel); dst.setPixel(dstX, dstY, pixel); @@ -343,16 +357,19 @@ public class LookupOp implements BufferedImageOp, RasterOp { /** * Creates the byte levels. * - * @param channels the channels - * @param skipAlpha the skip alpha - * @param levels the levels - * @param values the values - * @param channelsOrder the channels order + * @param channels + * the channels. + * @param skipAlpha + * the skip alpha. + * @param levels + * the levels. + * @param values + * the values. + * @param channelsOrder + * the channels order. */ - private final void createByteLevels( - int channels, boolean skipAlpha, - int levels[], int values[], int channelsOrder[] - ) { + private final void createByteLevels(int channels, boolean skipAlpha, int levels[], + int values[], int channelsOrder[]) { byte data[][] = ((ByteLookupTable)lut).getTable(); int nLevels = data[0].length; int offset = lut.getOffset(); @@ -360,18 +377,18 @@ public class LookupOp implements BufferedImageOp, RasterOp { // Use one data array for all channels or use several data arrays int dataIncrement = data.length > 1 ? 1 : 0; - for (int ch = 0, dataIdx = 0; ch= data.length)) { + if ((channelOffset == channels - 1 && skipAlpha) || (dataIdx >= data.length)) { continue; } System.arraycopy(levelInitializer, offset, levels, channelBase, nLevels); - for (int from=0, to=channelBase; from 1 ? 1 : 0; - for (int ch = 0, dataIdx = 0; ch= data.length)) { + if ((channelOffset == channels - 1 && skipAlpha) || (dataIdx >= data.length)) { continue; } int channelBase = nLevels * channelOffset; System.arraycopy(levelInitializer, offset, levels, channelBase, nLevels); - for (int from=0, to=channelBase; from properties; - - /** The consumers. */ + + /** + * The consumers. + */ Vector consumers; - - /** The animated. */ + + /** + * The animated. + */ boolean animated; - - /** The fullbuffers. */ + + /** + * The fullbuffers. + */ boolean fullbuffers; - - /** The data type. */ + + /** + * The data type. + */ int dataType; - /** The Constant DATA_TYPE_BYTE. */ + /** + * The Constant DATA_TYPE_BYTE. + */ static final int DATA_TYPE_BYTE = 0; - - /** The Constant DATA_TYPE_INT. */ + + /** + * The Constant DATA_TYPE_INT. + */ static final int DATA_TYPE_INT = 1; /** - * Instantiates a new MemoryImageSource with the specified - * parameters. + * Instantiates a new MemoryImageSource with the specified parameters. * - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param cm the specified ColorModel. - * @param pix the pixel array. - * @param off the offset in the pixel array. - * @param scan the distance from one pixel's row to the next - * in the pixel array. - * @param props the set of properties to be used for image - * processing. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param cm + * the specified ColorModel. + * @param pix + * the pixel array. + * @param off + * the offset in the pixel array. + * @param scan + * the distance from one pixel's row to the next in the pixel + * array. + * @param props + * the set of properties to be used for image processing. */ - public MemoryImageSource(int w, int h, ColorModel cm, int pix[], - int off, int scan, Hashtable props) { + public MemoryImageSource(int w, int h, ColorModel cm, int pix[], int off, int scan, + Hashtable props) { init(w, h, cm, pix, off, scan, props); } /** - * Instantiates a new MemoryImageSource with the specified - * parameters. + * Instantiates a new MemoryImageSource with the specified parameters. * - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param cm the specified ColorModel. - * @param pix the pixel array. - * @param off the offset in the pixel array. - * @param scan the distance from one pixel's row to the next - * in the pixel array. - * @param props the set of properties to be used for image - * processing. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param cm + * the specified ColorModel. + * @param pix + * the pixel array. + * @param off + * the offset in the pixel array. + * @param scan + * the distance from one pixel's row to the next in the pixel + * array. + * @param props + * the set of properties to be used for image processing. */ - public MemoryImageSource(int w, int h, ColorModel cm, byte pix[], - int off, int scan, Hashtable props) { + public MemoryImageSource(int w, int h, ColorModel cm, byte pix[], int off, int scan, + Hashtable props) { init(w, h, cm, pix, off, scan, props); } /** - * Instantiates a new MemoryImageSource with the specified - * parameters and default RGB ColorModel. + * Instantiates a new MemoryImageSource with the specified parameters and + * default RGB ColorModel. * - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param pix the pixel array. - * @param off the offset in the pixel array. - * @param scan the distance from one pixel's row to the next - * in the pixel array. - * @param props the set of properties to be used for image - * processing. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param pix + * the pixel array. + * @param off + * the offset in the pixel array. + * @param scan + * the distance from one pixel's row to the next in the pixel + * array. + * @param props + * the set of properties to be used for image processing. */ - public MemoryImageSource(int w, int h, int pix[], int off, int scan, - Hashtable props) { + public MemoryImageSource(int w, int h, int pix[], int off, int scan, Hashtable props) { init(w, h, ColorModel.getRGBdefault(), pix, off, scan, props); } /** - * Instantiates a new MemoryImageSource with the specified - * parameters. + * Instantiates a new MemoryImageSource with the specified parameters. * - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param cm the specified ColorModel. - * @param pix the pixel array. - * @param off the offset in the pixel array. - * @param scan the distance from one pixel's row to the next - * in the pixel array. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param cm + * the specified ColorModel. + * @param pix + * the pixel array. + * @param off + * the offset in the pixel array. + * @param scan + * the distance from one pixel's row to the next in the pixel + * array. */ - public MemoryImageSource(int w, int h, ColorModel cm, int pix[], - int off, int scan) { + public MemoryImageSource(int w, int h, ColorModel cm, int pix[], int off, int scan) { init(w, h, cm, pix, off, scan, null); } /** - * Instantiates a new MemoryImageSource with the specified - * parameters. + * Instantiates a new MemoryImageSource with the specified parameters. * - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param cm the specified ColorModel. - * @param pix the pixel array. - * @param off the offset in the pixel array. - * @param scan the distance from one pixel's row to the next - * in the pixel array. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param cm + * the specified ColorModel. + * @param pix + * the pixel array. + * @param off + * the offset in the pixel array. + * @param scan + * the distance from one pixel's row to the next in the pixel + * array. */ - public MemoryImageSource(int w, int h, ColorModel cm, byte pix[], - int off, int scan) { + public MemoryImageSource(int w, int h, ColorModel cm, byte pix[], int off, int scan) { init(w, h, cm, pix, off, scan, null); } /** - * Instantiates a new MemoryImageSource with the specified - * parameters and default RGB ColorModel. + * Instantiates a new MemoryImageSource with the specified parameters and + * default RGB ColorModel. * - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param pix the pixels array. - * @param off the offset in the pixel array. - * @param scan the distance from one pixel's row to the next - * in the pixel array. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param pix + * the pixels array. + * @param off + * the offset in the pixel array. + * @param scan + * the distance from one pixel's row to the next in the pixel + * array. */ public MemoryImageSource(int w, int h, int pix[], int off, int scan) { init(w, h, ColorModel.getRGBdefault(), pix, off, scan, null); @@ -184,25 +242,25 @@ public class MemoryImageSource implements ImageProducer { } public void startProduction(ImageConsumer ic) { - if(!isConsumer(ic) && ic != null) { + if (!isConsumer(ic) && ic != null) { consumers.addElement(ic); } - try{ + try { setHeader(ic); setPixels(ic, 0, 0, width, height); - if(animated){ + if (animated) { ic.imageComplete(ImageConsumer.SINGLEFRAMEDONE); - }else{ + } else { ic.imageComplete(ImageConsumer.STATICIMAGEDONE); - if(isConsumer(ic)) { + if (isConsumer(ic)) { removeConsumer(ic); } } - }catch(Exception e){ - if(isConsumer(ic)) { + } catch (Exception e) { + if (isConsumer(ic)) { ic.imageComplete(ImageConsumer.IMAGEERROR); } - if(isConsumer(ic)) { + if (isConsumer(ic)) { removeConsumer(ic); } } @@ -216,26 +274,29 @@ public class MemoryImageSource implements ImageProducer { } public synchronized void addConsumer(ImageConsumer ic) { - if(ic == null || consumers.contains(ic)) { + if (ic == null || consumers.contains(ic)) { return; } consumers.addElement(ic); } /** - * Replaces the pixel data with a new pixel array for holding - * the pixels for this image. If an animation - * flag is set to true value by the setAnimated() method, - * the new pixels will be immediately delivered to the ImageConsumers. + * Replaces the pixel data with a new pixel array for holding the pixels for + * this image. If an animation flag is set to true value by the + * setAnimated() method, the new pixels will be immediately delivered to the + * ImageConsumers. * - * @param newpix the new pixel array. - * @param newmodel the new ColorModel. - * @param offset the offset in the array. - * @param scansize the distance from one row of pixels to the next row - * in the pixel array + * @param newpix + * the new pixel array. + * @param newmodel + * the new ColorModel. + * @param offset + * the offset in the array. + * @param scansize + * the distance from one row of pixels to the next row in the + * pixel array. */ - public synchronized void newPixels(int newpix[], ColorModel newmodel, - int offset, int scansize) { + public synchronized void newPixels(int newpix[], ColorModel newmodel, int offset, int scansize) { this.dataType = DATA_TYPE_INT; this.iData = newpix; this.cm = newmodel; @@ -245,19 +306,22 @@ public class MemoryImageSource implements ImageProducer { } /** - * Replaces the pixel data with a new pixel array for holding - * the pixels for this image. If an animation - * flag is set to true value by the setAnimated() method, - * the new pixels will be immediately delivered to the ImageConsumers. + * Replaces the pixel data with a new pixel array for holding the pixels for + * this image. If an animation flag is set to true value by the + * setAnimated() method, the new pixels will be immediately delivered to the + * ImageConsumers. * - * @param newpix the new pixel array. - * @param newmodel the new ColorModel. - * @param offset the offset in the array. - * @param scansize the distance from one row of pixels to the next row - * in the pixel array + * @param newpix + * the new pixel array. + * @param newmodel + * the new ColorModel. + * @param offset + * the offset in the array. + * @param scansize + * the distance from one row of pixels to the next row in the + * pixel array. */ - public synchronized void newPixels(byte newpix[], ColorModel newmodel, - int offset, int scansize) { + public synchronized void newPixels(byte newpix[], ColorModel newmodel, int offset, int scansize) { this.dataType = DATA_TYPE_BYTE; this.bData = newpix; this.cm = newmodel; @@ -267,33 +331,33 @@ public class MemoryImageSource implements ImageProducer { } /** - * Sets the full buffer updates flag to true. If this is an - * animated image, the image consumers hints are updated - * accordingly. + * Sets the full buffer updates flag to true. If this is an animated image, + * the image consumers hints are updated accordingly. * - * @param fullbuffers the true if the pixel buffer should be sent always. + * @param fullbuffers + * the true if the pixel buffer should be sent always. */ public synchronized void setFullBufferUpdates(boolean fullbuffers) { - if(this.fullbuffers == fullbuffers) { + if (this.fullbuffers == fullbuffers) { return; } this.fullbuffers = fullbuffers; - if(animated){ + if (animated) { Object consAr[] = consumers.toArray(); for (Object element : consAr) { ImageConsumer con = (ImageConsumer)element; - try{ - if(fullbuffers){ - con.setHints(ImageConsumer.TOPDOWNLEFTRIGHT | - ImageConsumer.COMPLETESCANLINES); - }else{ + try { + if (fullbuffers) { + con.setHints(ImageConsumer.TOPDOWNLEFTRIGHT + | ImageConsumer.COMPLETESCANLINES); + } else { con.setHints(ImageConsumer.RANDOMPIXELORDER); } - }catch(Exception e){ - if(isConsumer(con)) { + } catch (Exception e) { + if (isConsumer(con)) { con.imageComplete(ImageConsumer.IMAGEERROR); } - if(isConsumer(con)) { + if (isConsumer(con)) { removeConsumer(con); } } @@ -302,27 +366,28 @@ public class MemoryImageSource implements ImageProducer { } /** - * Sets the flag that tells whether this memory image has more - * than one frame (for animation): true for multiple frames, - * false if this class represents a single frame image. - * - * @param animated whether this image represents an animation. + * Sets the flag that tells whether this memory image has more than one + * frame (for animation): true for multiple frames, false if this class + * represents a single frame image. + * + * @param animated + * whether this image represents an animation. */ public synchronized void setAnimated(boolean animated) { - if(this.animated == animated) { + if (this.animated == animated) { return; } Object consAr[] = consumers.toArray(); for (Object element : consAr) { ImageConsumer con = (ImageConsumer)element; - try{ + try { con.imageComplete(ImageConsumer.STATICIMAGEDONE); - }catch(Exception e){ - if(isConsumer(con)) { + } catch (Exception e) { + if (isConsumer(con)) { con.imageComplete(ImageConsumer.IMAGEERROR); } } - if(isConsumer(con)){ + if (isConsumer(con)) { removeConsumer(con); } } @@ -330,60 +395,63 @@ public class MemoryImageSource implements ImageProducer { } /** - * Sends the specified rectangular area of the buffer to - * ImageConsumers and notifies them that an animation frame - * is completed only if framenotify parameter is true. - * That works only if the animated flag has been set to true - * by the setAnimated() method. If the full buffer update flag - * has been set to true by the setFullBufferUpdates() method, - * then the entire buffer will always be sent ignoring parameters. + * Sends the specified rectangular area of the buffer to ImageConsumers and + * notifies them that an animation frame is completed only if the {@code + * framenotify} parameter is true. That works only if the animated flag has + * been set to true by the setAnimated() method. If the full buffer update + * flag has been set to true by the setFullBufferUpdates() method, then the + * entire buffer will always be sent ignoring parameters. * - * @param x the X coordinate of the rectangular area. - * @param y the Y coordinate of rthe ectangular area. - * @param w the width of the rectangular area. - * @param h the height of the rectangular area. - * @param framenotify true if a SINGLEFRAMEDONE notification - * should be sent to the registered consumers, false otherwise. + * @param x + * the X coordinate of the rectangular area. + * @param y + * the Y coordinate of the rectangular area. + * @param w + * the width of the rectangular area. + * @param h + * the height of the rectangular area. + * @param framenotify + * true if a SINGLEFRAMEDONE notification should be sent to the + * registered consumers, false otherwise. */ - public synchronized void newPixels(int x, int y, int w, int h, - boolean framenotify) { - if(animated){ - if(fullbuffers){ + public synchronized void newPixels(int x, int y, int w, int h, boolean framenotify) { + if (animated) { + if (fullbuffers) { x = 0; y = 0; w = width; h = height; - }else{ - if(x < 0){ + } else { + if (x < 0) { w += x; x = 0; } - if(w > width) { + if (w > width) { w = width - x; } - if(y < 0){ + if (y < 0) { h += y; y = 0; } } - if(h > height) { + if (h > height) { h = height - y; } Object consAr[] = consumers.toArray(); for (Object element : consAr) { ImageConsumer con = (ImageConsumer)element; - try{ - if(w > 0 && h > 0) { + try { + if (w > 0 && h > 0) { setPixels(con, x, y, w, h); } - if(framenotify) { + if (framenotify) { con.imageComplete(ImageConsumer.SINGLEFRAMEDONE); } - }catch(Exception ex){ - if(isConsumer(con)) { + } catch (Exception ex) { + if (isConsumer(con)) { con.imageComplete(ImageConsumer.IMAGEERROR); } - if(isConsumer(con)) { + if (isConsumer(con)) { removeConsumer(con); } } @@ -392,26 +460,29 @@ public class MemoryImageSource implements ImageProducer { } /** - * Sends the specified rectangular area of the buffer to - * the ImageConsumers and notifies them that an animation frame - * is completed if the animated flag has been set to true - * by the setAnimated() method. If the full buffer update flag - * has been set to true by the setFullBufferUpdates() method, + * Sends the specified rectangular area of the buffer to the ImageConsumers + * and notifies them that an animation frame is completed if the animated + * flag has been set to true by the setAnimated() method. If the full buffer + * update flag has been set to true by the setFullBufferUpdates() method, * then the entire buffer will always be sent ignoring parameters. * - * @param x the X coordinate of the rectangular area. - * @param y the Y coordinate of the rectangular area. - * @param w the width of the rectangular area. - * @param h the height of the rectangular area. + * @param x + * the X coordinate of the rectangular area. + * @param y + * the Y coordinate of the rectangular area. + * @param w + * the width of the rectangular area. + * @param h + * the height of the rectangular area. */ public synchronized void newPixels(int x, int y, int w, int h) { newPixels(x, y, w, h, true); } /** - * Sends a new buffer of pixels to the ImageConsumers - * and notifies them that an animation frame is completed if - * the animated flag has been set to true by the setAnimated() method. + * Sends a new buffer of pixels to the ImageConsumers and notifies them that + * an animation frame is completed if the animated flag has been set to true + * by the setAnimated() method. */ public void newPixels() { newPixels(0, 0, width, height, true); @@ -420,16 +491,23 @@ public class MemoryImageSource implements ImageProducer { /** * Inits the. * - * @param width the width - * @param height the height - * @param model the model - * @param pixels the pixels - * @param off the off - * @param scan the scan - * @param prop the prop + * @param width + * the width. + * @param height + * the height. + * @param model + * the model. + * @param pixels + * the pixels. + * @param off + * the off. + * @param scan + * the scan. + * @param prop + * the prop. */ - private void init(int width, int height, ColorModel model, byte pixels[], - int off, int scan, Hashtable prop){ + private void init(int width, int height, ColorModel model, byte pixels[], int off, int scan, + Hashtable prop) { this.width = width; this.height = height; @@ -446,16 +524,23 @@ public class MemoryImageSource implements ImageProducer { /** * Inits the. * - * @param width the width - * @param height the height - * @param model the model - * @param pixels the pixels - * @param off the off - * @param scan the scan - * @param prop the prop + * @param width + * the width. + * @param height + * the height. + * @param model + * the model. + * @param pixels + * the pixels. + * @param off + * the off. + * @param scan + * the scan. + * @param prop + * the prop. */ - private void init(int width, int height, ColorModel model, int pixels[], - int off, int scan, Hashtable prop){ + private void init(int width, int height, ColorModel model, int pixels[], int off, int scan, + Hashtable prop) { this.width = width; this.height = height; @@ -471,42 +556,48 @@ public class MemoryImageSource implements ImageProducer { /** * Sets the pixels. * - * @param con the con - * @param x the x - * @param y the y - * @param w the w - * @param h the h + * @param con + * the con. + * @param x + * the x. + * @param y + * the y. + * @param w + * the w. + * @param h + * the h. */ - private void setPixels(ImageConsumer con, int x, int y, int w, int h){ + private void setPixels(ImageConsumer con, int x, int y, int w, int h) { int pixelOff = scanline * y + offset + x; - switch(dataType){ - case DATA_TYPE_BYTE: - con.setPixels(x, y, w, h, cm, bData, pixelOff, scanline); - break; - case DATA_TYPE_INT: - con.setPixels(x, y, w, h, cm, iData, pixelOff, scanline); - break; - default: - // awt.22A=Wrong type of pixels array - throw new IllegalArgumentException(Messages.getString("awt.22A")); //$NON-NLS-1$ + switch (dataType) { + case DATA_TYPE_BYTE: + con.setPixels(x, y, w, h, cm, bData, pixelOff, scanline); + break; + case DATA_TYPE_INT: + con.setPixels(x, y, w, h, cm, iData, pixelOff, scanline); + break; + default: + // awt.22A=Wrong type of pixels array + throw new IllegalArgumentException(Messages.getString("awt.22A")); //$NON-NLS-1$ } } /** * Sets the header. * - * @param con the new header + * @param con + * the new header. */ - private synchronized void setHeader(ImageConsumer con){ + private synchronized void setHeader(ImageConsumer con) { con.setDimensions(width, height); con.setProperties(properties); con.setColorModel(cm); - con.setHints(animated ? (fullbuffers ? (ImageConsumer.TOPDOWNLEFTRIGHT | - ImageConsumer.COMPLETESCANLINES) : ImageConsumer.RANDOMPIXELORDER) : - (ImageConsumer.TOPDOWNLEFTRIGHT | ImageConsumer.COMPLETESCANLINES | - ImageConsumer.SINGLEPASS | ImageConsumer.SINGLEFRAME)); + con + .setHints(animated ? (fullbuffers ? (ImageConsumer.TOPDOWNLEFTRIGHT | ImageConsumer.COMPLETESCANLINES) + : ImageConsumer.RANDOMPIXELORDER) + : (ImageConsumer.TOPDOWNLEFTRIGHT | ImageConsumer.COMPLETESCANLINES + | ImageConsumer.SINGLEPASS | ImageConsumer.SINGLEFRAME)); } } - diff --git a/awt/java/awt/image/MultiPixelPackedSampleModel.java b/awt/java/awt/image/MultiPixelPackedSampleModel.java index dd44b49ec4..3dc13d8f4d 100644 --- a/awt/java/awt/image/MultiPixelPackedSampleModel.java +++ b/awt/java/awt/image/MultiPixelPackedSampleModel.java @@ -18,72 +18,93 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import org.apache.harmony.awt.internal.nls.Messages; /** - * The MultiPixelPackedSampleModel class represents image data with one - * band. This class packs multiple pixels with one sample in one data - * element and supports the following data types: DataBuffer.TYPE_BYTE, - * DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT. + * The MultiPixelPackedSampleModel class represents image data with one band. + * This class packs multiple pixels with one sample in one data element and + * supports the following data types: DataBuffer.TYPE_BYTE, + * DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT. + * + * @since Android 1.0 */ public class MultiPixelPackedSampleModel extends SampleModel { - /** The pixel bit stride. */ + /** + * The pixel bit stride. + */ private int pixelBitStride; - /** The scanline stride. */ + /** + * The scanline stride. + */ private int scanlineStride; - /** The data bit offset. */ + /** + * The data bit offset. + */ private int dataBitOffset; - /** The bit mask. */ + /** + * The bit mask. + */ private int bitMask; - /** The data element size. */ + /** + * The data element size. + */ private int dataElementSize; - /** The pixels per data element. */ + /** + * The pixels per data element. + */ private int pixelsPerDataElement; /** * Instantiates a new MultiPixelPackedSampleModel with the specified * parameters. * - * @param dataType the data type of the samples. - * @param w the width of the image data. - * @param h the height of the image data. - * @param numberOfBits the number of bits per pixel. - * @param scanlineStride the scanline stride of the of the image data. - * @param dataBitOffset the array of the band offsets. + * @param dataType + * the data type of the samples. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param numberOfBits + * the number of bits per pixel. + * @param scanlineStride + * the scanline stride of the of the image data. + * @param dataBitOffset + * the array of the band offsets. */ - public MultiPixelPackedSampleModel(int dataType, int w, int h, - int numberOfBits, int scanlineStride, int dataBitOffset) { + public MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits, + int scanlineStride, int dataBitOffset) { super(dataType, w, h, 1); - if (dataType != DataBuffer.TYPE_BYTE && - dataType != DataBuffer.TYPE_USHORT && - dataType != DataBuffer.TYPE_INT) { + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT + && dataType != DataBuffer.TYPE_INT) { // awt.61=Unsupported data type: {0} throw new IllegalArgumentException(Messages.getString("awt.61", //$NON-NLS-1$ dataType)); } this.scanlineStride = scanlineStride; - if(numberOfBits == 0) { + if (numberOfBits == 0) { // awt.20C=Number of Bits equals to zero throw new RasterFormatException(Messages.getString("awt.20C")); //$NON-NLS-1$ } this.pixelBitStride = numberOfBits; this.dataElementSize = DataBuffer.getDataTypeSize(dataType); - if(dataElementSize % pixelBitStride != 0) { - // awt.20D=The number of bits per pixel is not a power of 2 or pixels span data element boundaries + if (dataElementSize % pixelBitStride != 0) { + // awt.20D=The number of bits per pixel is not a power of 2 or + // pixels span data element boundaries throw new RasterFormatException(Messages.getString("awt.20D")); //$NON-NLS-1$ } - if(dataBitOffset % numberOfBits != 0) { + if (dataBitOffset % numberOfBits != 0) { // awt.20E=Data Bit offset is not a multiple of pixel bit stride throw new RasterFormatException(Messages.getString("awt.20E")); //$NON-NLS-1$ } @@ -97,17 +118,20 @@ public class MultiPixelPackedSampleModel extends SampleModel { * Instantiates a new MultiPixelPackedSampleModel with the specified * parameters. * - * @param dataType the data type of the samples. - * @param w the width of the image data. - * @param h the height of the image data. - * @param numberOfBits the number of bits per pixel. + * @param dataType + * the data type of the samples. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param numberOfBits + * the number of bits per pixel. */ - public MultiPixelPackedSampleModel(int dataType, int w, int h, - int numberOfBits) { + public MultiPixelPackedSampleModel(int dataType, int w, int h, int numberOfBits) { - this(dataType, w, h, numberOfBits, (numberOfBits * w + - DataBuffer.getDataTypeSize(dataType) - 1) / - DataBuffer.getDataTypeSize(dataType), 0); + this(dataType, w, h, numberOfBits, + (numberOfBits * w + DataBuffer.getDataTypeSize(dataType) - 1) + / DataBuffer.getDataTypeSize(dataType), 0); } @Override @@ -117,36 +141,36 @@ public class MultiPixelPackedSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } switch (getTransferType()) { - case DataBuffer.TYPE_BYTE: - byte bdata[]; - if (obj == null) { - bdata = new byte[1]; - } else { - bdata = (byte[]) obj; - } - bdata[0] = (byte) getSample(x, y, 0, data); - obj = bdata; - break; - case DataBuffer.TYPE_USHORT: - short sdata[]; - if (obj == null) { - sdata = new short[1]; - } else { - sdata = (short[]) obj; - } - sdata[0] = (short) getSample(x, y, 0, data); - obj = sdata; - break; - case DataBuffer.TYPE_INT: - int idata[]; - if (obj == null) { - idata = new int[1]; - } else { - idata = (int[]) obj; - } - idata[0] = getSample(x, y, 0, data); - obj = idata; - break; + case DataBuffer.TYPE_BYTE: + byte bdata[]; + if (obj == null) { + bdata = new byte[1]; + } else { + bdata = (byte[])obj; + } + bdata[0] = (byte)getSample(x, y, 0, data); + obj = bdata; + break; + case DataBuffer.TYPE_USHORT: + short sdata[]; + if (obj == null) { + sdata = new short[1]; + } else { + sdata = (short[])obj; + } + sdata[0] = (short)getSample(x, y, 0, data); + obj = sdata; + break; + case DataBuffer.TYPE_INT: + int idata[]; + if (obj == null) { + idata = new int[1]; + } else { + idata = (int[])obj; + } + idata[0] = getSample(x, y, 0, data); + obj = idata; + break; } return obj; @@ -158,14 +182,14 @@ public class MultiPixelPackedSampleModel extends SampleModel { } /** - * Compares this MultiPixelPackedSampleModel object with - * the specified object. - * - * @param o the Object to be compared. + * Compares this MultiPixelPackedSampleModel object with the specified + * object. * - * @return true, if the object is a MultiPixelPackedSampleModel - * with the same data parameter values as this MultiPixelPackedSampleModel, - * false otherwise. + * @param o + * the Object to be compared. + * @return true, if the object is a MultiPixelPackedSampleModel with the + * same data parameter values as this MultiPixelPackedSampleModel, + * false otherwise. */ @Override public boolean equals(Object o) { @@ -173,17 +197,14 @@ public class MultiPixelPackedSampleModel extends SampleModel { return false; } - MultiPixelPackedSampleModel model = (MultiPixelPackedSampleModel) o; - return this.width == model.width && - this.height == model.height && - this.numBands == model.numBands && - this.dataType == model.dataType && - this.pixelBitStride == model.pixelBitStride && - this.bitMask == model.bitMask && - this.pixelsPerDataElement == model.pixelsPerDataElement && - this.dataElementSize == model.dataElementSize && - this.dataBitOffset == model.dataBitOffset && - this.scanlineStride == model.scanlineStride; + MultiPixelPackedSampleModel model = (MultiPixelPackedSampleModel)o; + return this.width == model.width && this.height == model.height + && this.numBands == model.numBands && this.dataType == model.dataType + && this.pixelBitStride == model.pixelBitStride && this.bitMask == model.bitMask + && this.pixelsPerDataElement == model.pixelsPerDataElement + && this.dataElementSize == model.dataElementSize + && this.dataBitOffset == model.dataBitOffset + && this.scanlineStride == model.scanlineStride; } @Override @@ -231,8 +252,7 @@ public class MultiPixelPackedSampleModel extends SampleModel { int bitnum = dataBitOffset + x * pixelBitStride; int elem = data.getElem(y * scanlineStride + bitnum / dataElementSize); - int shift = dataElementSize - (bitnum & (dataElementSize - 1)) - - pixelBitStride; + int shift = dataElementSize - (bitnum & (dataElementSize - 1)) - pixelBitStride; return (elem >> shift) & bitMask; } @@ -253,15 +273,15 @@ public class MultiPixelPackedSampleModel extends SampleModel { int size = scanlineStride * height; switch (dataType) { - case DataBuffer.TYPE_BYTE: - dataBuffer = new DataBufferByte(size + (dataBitOffset + 7) / 8); - break; - case DataBuffer.TYPE_USHORT: - dataBuffer = new DataBufferUShort(size + (dataBitOffset + 15) / 16); - break; - case DataBuffer.TYPE_INT: - dataBuffer = new DataBufferInt(size + (dataBitOffset + 31) / 32); - break; + case DataBuffer.TYPE_BYTE: + dataBuffer = new DataBufferByte(size + (dataBitOffset + 7) / 8); + break; + case DataBuffer.TYPE_USHORT: + dataBuffer = new DataBufferUShort(size + (dataBitOffset + 15) / 16); + break; + case DataBuffer.TYPE_INT: + dataBuffer = new DataBufferInt(size + (dataBitOffset + 31) / 32); + break; } return dataBuffer; } @@ -269,14 +289,14 @@ public class MultiPixelPackedSampleModel extends SampleModel { /** * Gets the offset of the specified pixel in the data array. * - * @param x the X coordinate of the specified pixel. - * @param y the Y coordinate of the specified pixel. - * + * @param x + * the X coordinate of the specified pixel. + * @param y + * the Y coordinate of the specified pixel. * @return the offset of the specified pixel. */ public int getOffset(int x, int y) { - return y * scanlineStride + (x * pixelBitStride + dataBitOffset) / - dataElementSize; + return y * scanlineStride + (x * pixelBitStride + dataBitOffset) / dataElementSize; } @Override @@ -285,11 +305,11 @@ public class MultiPixelPackedSampleModel extends SampleModel { } /** - * Gets the bit offset in the data element which - * is stored for the specified pixel of a scanline. - * - * @param x the pixel. + * Gets the bit offset in the data element which is stored for the specified + * pixel of a scanline. * + * @param x + * the pixel. * @return the bit offset of the pixel in the data element. */ public int getBitOffset(int x) { @@ -298,7 +318,9 @@ public class MultiPixelPackedSampleModel extends SampleModel { @Override public int[] getSampleSize() { - int sampleSizes[] = { pixelBitStride }; + int sampleSizes[] = { + pixelBitStride + }; return sampleSizes; } @@ -396,54 +418,58 @@ public class MultiPixelPackedSampleModel extends SampleModel { } /** - * This method is used by other methods of this class. The behaviour of - * this method depends on the method which has been invoke this one. The - * argument methodId is used to choose valid behaviour in a particular case. - * If methodId is equal to 1 it means that this method has been invoked by - * the setDataElements() method, 2 - means setPixel(), and setSample() in - * any other cases. + * This method is used by other methods of this class. The behavior of this + * method depends on the method which has been invoke this one. The argument + * methodId is used to choose valid behavior in a particular case. If + * methodId is equal to 1 it means that this method has been invoked by the + * setDataElements() method, 2 - means setPixel(), and setSample() in any + * other cases. * - * @param x the x - * @param y the y - * @param obj the obj - * @param data the data - * @param methodId the method id - * @param s the s + * @param x + * the x. + * @param y + * the y. + * @param obj + * the obj. + * @param data + * the data. + * @param methodId + * the method id. + * @param s + * the s. */ - private void setSample(final int x, final int y, final Object obj, - final DataBuffer data, final int methodId, int s) { + private void setSample(final int x, final int y, final Object obj, final DataBuffer data, + final int methodId, int s) { if ((x < 0) || (y < 0) || (x >= this.width) || (y >= this.height)) { // awt.63=Coordinates are not in bounds - throw new ArrayIndexOutOfBoundsException(Messages - .getString("awt.63")); //$NON-NLS-1$ + throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } final int bitnum = dataBitOffset + x * pixelBitStride; final int idx = y * scanlineStride + bitnum / dataElementSize; - final int shift = dataElementSize - (bitnum & (dataElementSize - 1)) - - pixelBitStride; + final int shift = dataElementSize - (bitnum & (dataElementSize - 1)) - pixelBitStride; final int mask = ~(bitMask << shift); int elem = data.getElem(idx); switch (methodId) { - case 1: { // Invoked from setDataElements() - switch (getTransferType()) { - case DataBuffer.TYPE_BYTE: - s = ((byte[]) obj)[0] & 0xff; - break; - case DataBuffer.TYPE_USHORT: - s = ((short[]) obj)[0] & 0xffff; + case 1: { // Invoked from setDataElements() + switch (getTransferType()) { + case DataBuffer.TYPE_BYTE: + s = ((byte[])obj)[0] & 0xff; + break; + case DataBuffer.TYPE_USHORT: + s = ((short[])obj)[0] & 0xffff; + break; + case DataBuffer.TYPE_INT: + s = ((int[])obj)[0]; + break; + } break; - case DataBuffer.TYPE_INT: - s = ((int[]) obj)[0]; + } + case 2: { // Invoked from setPixel() + s = ((int[])obj)[0]; break; } - break; - } - case 2: { // Invoked from setPixel() - s = ((int[]) obj)[0]; - break; - } } elem &= mask; @@ -451,4 +477,3 @@ public class MultiPixelPackedSampleModel extends SampleModel { data.setElem(idx, elem); } } - diff --git a/awt/java/awt/image/PackedColorModel.java b/awt/java/awt/image/PackedColorModel.java index 7aaefbfe5c..4d1c2e5003 100644 --- a/awt/java/awt/image/PackedColorModel.java +++ b/awt/java/awt/image/PackedColorModel.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.Transparency; @@ -27,44 +28,57 @@ import java.util.Arrays; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class PackedColorModel represents a color model where the - * components are just the red, green, and blue bands, plus an alpha - * band if alpha is supported. + * The class PackedColorModel represents a color model where the components are + * just the red, green, and blue bands, plus an alpha band if alpha is + * supported. + * + * @since Android 1.0 */ public abstract class PackedColorModel extends ColorModel { - /** The component masks. */ + /** + * The component masks. + */ int componentMasks[]; - /** The offsets. */ + /** + * The offsets. + */ int offsets[]; - /** The scales. */ + /** + * The scales. + */ float scales[]; /** * Instantiates a new packed color model. * - * @param space the color space - * @param bits the array of component masks - * @param colorMaskArray the array that gives the bitmask corresponding - * to each color band (red, green, and blue) - * @param alphaMask the bitmask corresponding to the alpha band - * @param isAlphaPremultiplied whether the alpha is premultiplied in this color model - * @param trans the transparency strategy, @see java.awt.Transparency - * @param transferType the transfer type (primitive java type - * to use for the components) - * - * @throws IllegalArgumentException if the number of bits in the combined - * bitmasks for the color bands is less than one or greater than 32 + * @param space + * the color space. + * @param bits + * the array of component masks. + * @param colorMaskArray + * the array that gives the bitmask corresponding to each color + * band (red, green, and blue). + * @param alphaMask + * the bitmask corresponding to the alpha band. + * @param isAlphaPremultiplied + * whether the alpha is pre-multiplied in this color model. + * @param trans + * the transparency strategy, @see java.awt.Transparency. + * @param transferType + * the transfer type (primitive java type to use for the + * components). + * @throws IllegalArgumentException + * if the number of bits in the combined bitmasks for the color + * bands is less than one or greater than 32. */ - public PackedColorModel(ColorSpace space, int bits, int colorMaskArray[], - int alphaMask, boolean isAlphaPremultiplied, int trans, - int transferType) { + public PackedColorModel(ColorSpace space, int bits, int colorMaskArray[], int alphaMask, + boolean isAlphaPremultiplied, int trans, int transferType) { - super(bits, createBits(colorMaskArray, alphaMask), space, - (alphaMask == 0 ? false : true), isAlphaPremultiplied, trans, - validateTransferType(transferType)); + super(bits, createBits(colorMaskArray, alphaMask), space, (alphaMask == 0 ? false : true), + isAlphaPremultiplied, trans, validateTransferType(transferType)); if (pixel_bits < 1 || pixel_bits > 32) { // awt.236=The bits is less than 1 or greater than 32 @@ -89,27 +103,34 @@ public abstract class PackedColorModel extends ColorModel { /** * Instantiates a new packed color model. * - * @param space the color space - * @param bits the array of component masks - * @param rmask the bitmask corresponding to the red band - * @param gmask the bitmask corresponding to the green band - * @param bmask the bitmask corresponding to the blue band - * @param amask the bitmask corresponding to the alpha band - * @param isAlphaPremultiplied whether the alpha is premultiplied in this color model - * @param trans the transparency strategy, @see java.awt.Transparency - * @param transferType the transfer type (primitive java type - * to use for the components) - * - * @throws IllegalArgumentException if the number of bits in the combined - * bitmasks for the color bands is less than one or greater than 32 + * @param space + * the color space. + * @param bits + * the array of component masks. + * @param rmask + * the bitmask corresponding to the red band. + * @param gmask + * the bitmask corresponding to the green band. + * @param bmask + * the bitmask corresponding to the blue band. + * @param amask + * the bitmask corresponding to the alpha band. + * @param isAlphaPremultiplied + * whether the alpha is pre-multiplied in this color model. + * @param trans + * the transparency strategy, @see java.awt.Transparency. + * @param transferType + * the transfer type (primitive java type to use for the + * components). + * @throws IllegalArgumentException + * if the number of bits in the combined bitmasks for the color + * bands is less than one or greater than 32. */ - public PackedColorModel(ColorSpace space, int bits, int rmask, int gmask, - int bmask, int amask, boolean isAlphaPremultiplied, int trans, - int transferType) { + public PackedColorModel(ColorSpace space, int bits, int rmask, int gmask, int bmask, int amask, + boolean isAlphaPremultiplied, int trans, int transferType) { - super(bits, createBits(rmask, gmask, bmask, amask), space, - (amask == 0 ? false : true), isAlphaPremultiplied, trans, - validateTransferType(transferType)); + super(bits, createBits(rmask, gmask, bmask, amask), space, (amask == 0 ? false : true), + isAlphaPremultiplied, trans, validateTransferType(transferType)); if (pixel_bits < 1 || pixel_bits > 32) { // awt.236=The bits is less than 1 or greater than 32 @@ -123,7 +144,8 @@ public abstract class PackedColorModel extends ColorModel { for (int i = 0; i < numColorComponents; i++) { if (cs.getMinValue(i) != 0.0f || cs.getMaxValue(i) != 1.0f) { - // awt.23A=The min/max normalized component values are not 0.0/1.0 + // awt.23A=The min/max normalized component values are not + // 0.0/1.0 throw new IllegalArgumentException(Messages.getString("awt.23A")); //$NON-NLS-1$ } } @@ -144,7 +166,7 @@ public abstract class PackedColorModel extends ColorModel { @Override public WritableRaster getAlphaRaster(WritableRaster raster) { - if(!hasAlpha) { + if (!hasAlpha) { return null; } @@ -165,18 +187,16 @@ public abstract class PackedColorModel extends ColorModel { if (!(obj instanceof PackedColorModel)) { return false; } - PackedColorModel cm = (PackedColorModel) obj; - - return (pixel_bits == cm.getPixelSize() && - transferType == cm.getTransferType() && - cs.getType() == cm.getColorSpace().getType() && - hasAlpha == cm.hasAlpha() && - isAlphaPremultiplied == cm.isAlphaPremultiplied() && - transparency == cm.getTransparency() && - numColorComponents == cm.getNumColorComponents()&& - numComponents == cm.getNumComponents() && - Arrays.equals(bits, cm.getComponentSize()) && - Arrays.equals(componentMasks, cm.getMasks())); + PackedColorModel cm = (PackedColorModel)obj; + + return (pixel_bits == cm.getPixelSize() && transferType == cm.getTransferType() + && cs.getType() == cm.getColorSpace().getType() && hasAlpha == cm.hasAlpha() + && isAlphaPremultiplied == cm.isAlphaPremultiplied() + && transparency == cm.getTransparency() + && numColorComponents == cm.getNumColorComponents() + && numComponents == cm.getNumComponents() + && Arrays.equals(bits, cm.getComponentSize()) && Arrays.equals(componentMasks, cm + .getMasks())); } @Override @@ -187,25 +207,23 @@ public abstract class PackedColorModel extends ColorModel { if (!(sm instanceof SinglePixelPackedSampleModel)) { return false; } - SinglePixelPackedSampleModel esm = (SinglePixelPackedSampleModel) sm; + SinglePixelPackedSampleModel esm = (SinglePixelPackedSampleModel)sm; - return ((esm.getNumBands() == numComponents) && - (esm.getTransferType() == transferType) && - Arrays.equals(esm.getBitMasks(), componentMasks)); + return ((esm.getNumBands() == numComponents) && (esm.getTransferType() == transferType) && Arrays + .equals(esm.getBitMasks(), componentMasks)); } @Override public SampleModel createCompatibleSampleModel(int w, int h) { - return new SinglePixelPackedSampleModel(transferType, w, h, - componentMasks); + return new SinglePixelPackedSampleModel(transferType, w, h, componentMasks); } /** * Gets the bitmask corresponding to the specified color component. * - * @param index the index of the desired color - * - * @return the mask + * @param index + * the index of the desired color. + * @return the mask. */ public final int getMask(int index) { return componentMasks[index]; @@ -214,7 +232,7 @@ public abstract class PackedColorModel extends ColorModel { /** * Gets the bitmasks of the components. * - * @return the masks + * @return the masks. */ public final int[] getMasks() { return (componentMasks.clone()); @@ -223,10 +241,11 @@ public abstract class PackedColorModel extends ColorModel { /** * Creates the bits. * - * @param colorMaskArray the color mask array - * @param alphaMask the alpha mask - * - * @return the int[] + * @param colorMaskArray + * the color mask array. + * @param alphaMask + * the alpha mask. + * @return the int[]. */ private static int[] createBits(int colorMaskArray[], int alphaMask) { int bits[]; @@ -262,15 +281,17 @@ public abstract class PackedColorModel extends ColorModel { /** * Creates the bits. * - * @param rmask the rmask - * @param gmask the gmask - * @param bmask the bmask - * @param amask the amask - * - * @return the int[] + * @param rmask + * the rmask. + * @param gmask + * the gmask. + * @param bmask + * the bmask. + * @param amask + * the amask. + * @return the int[]. */ - private static int[] createBits(int rmask, int gmask, int bmask, - int amask) { + private static int[] createBits(int rmask, int gmask, int bmask, int amask) { int numComp; if (amask == 0) { @@ -312,9 +333,9 @@ public abstract class PackedColorModel extends ColorModel { /** * Count comp bits. * - * @param compMask the comp mask - * - * @return the int + * @param compMask + * the comp mask. + * @return the int. */ private static int countCompBits(int compMask) { int bits = 0; @@ -340,20 +361,19 @@ public abstract class PackedColorModel extends ColorModel { /** * Validate transfer type. * - * @param transferType the transfer type - * - * @return the int + * @param transferType + * the transfer type. + * @return the int. */ private static int validateTransferType(int transferType) { - if (transferType != DataBuffer.TYPE_BYTE && - transferType != DataBuffer.TYPE_USHORT && - transferType != DataBuffer.TYPE_INT) { + if (transferType != DataBuffer.TYPE_BYTE && transferType != DataBuffer.TYPE_USHORT + && transferType != DataBuffer.TYPE_INT) { // awt.240=The transferType not is one of DataBuffer.TYPE_BYTE, - // DataBuffer.TYPE_USHORT or DataBuffer.TYPE_INT + // DataBuffer.TYPE_USHORT or DataBuffer.TYPE_INT throw new IllegalArgumentException(Messages.getString("awt.240")); //$NON-NLS-1$ } return transferType; -} + } /** * Parses the components. @@ -380,4 +400,3 @@ public abstract class PackedColorModel extends ColorModel { } } - diff --git a/awt/java/awt/image/PixelInterleavedSampleModel.java b/awt/java/awt/image/PixelInterleavedSampleModel.java index e41473ec93..8e646f80b9 100644 --- a/awt/java/awt/image/PixelInterleavedSampleModel.java +++ b/awt/java/awt/image/PixelInterleavedSampleModel.java @@ -18,30 +18,39 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import org.apache.harmony.awt.internal.nls.Messages; /** - * The PixelInterleavedSampleModel class represents image data - * as represented as interleaved pixels and for which each sample of - * a pixel takes one data element of the DataBuffer. + * The PixelInterleavedSampleModel class represents image data as represented as + * interleaved pixels and for which each sample of a pixel takes one data + * element of the DataBuffer. + * + * @since Android 1.0 */ public class PixelInterleavedSampleModel extends ComponentSampleModel { /** - * Instantiates a new PixelInterleavedSampleModel with the - * specified parameters. + * Instantiates a new PixelInterleavedSampleModel with the specified + * parameters. * - * @param dataType the data type of the samples. - * @param w the width of the image data. - * @param h the height of the image data. - * @param pixelStride the pixel stride of the image data. - * @param scanlineStride the scanline stride of the of the image data. - * @param bandOffsets the array of the band offsets. + * @param dataType + * the data type of the samples. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param pixelStride + * the pixel stride of the image data. + * @param scanlineStride + * the scanline stride of the of the image data. + * @param bandOffsets + * the array of the band offsets. */ - public PixelInterleavedSampleModel(int dataType, int w, int h, - int pixelStride, int scanlineStride, int bandOffsets[]) { + public PixelInterleavedSampleModel(int dataType, int w, int h, int pixelStride, + int scanlineStride, int bandOffsets[]) { super(dataType, w, h, pixelStride, scanlineStride, bandOffsets); @@ -59,7 +68,8 @@ public class PixelInterleavedSampleModel extends ComponentSampleModel { maxOffset -= minOffset; if (maxOffset > scanlineStride) { - // awt.241=Any offset between bands is greater than the Scanline stride + // awt.241=Any offset between bands is greater than the Scanline + // stride throw new IllegalArgumentException(Messages.getString("awt.241")); //$NON-NLS-1$ } @@ -69,7 +79,8 @@ public class PixelInterleavedSampleModel extends ComponentSampleModel { } if (pixelStride * w > scanlineStride) { - // awt.243=Product of Pixel stride and w is greater than Scanline stride + // awt.243=Product of Pixel stride and w is greater than Scanline + // stride throw new IllegalArgumentException(Messages.getString("awt.243")); //$NON-NLS-1$ } @@ -82,8 +93,8 @@ public class PixelInterleavedSampleModel extends ComponentSampleModel { newOffsets[i] = bandOffsets[bands[i]]; } - return new PixelInterleavedSampleModel(dataType, width, height, - pixelStride, scanlineStride, newOffsets); + return new PixelInterleavedSampleModel(dataType, width, height, pixelStride, + scanlineStride, newOffsets); } @Override @@ -106,8 +117,8 @@ public class PixelInterleavedSampleModel extends ComponentSampleModel { newOffsets = bandOffsets; } - return new PixelInterleavedSampleModel(dataType, w, h, pixelStride, - pixelStride * w, newOffsets); + return new PixelInterleavedSampleModel(dataType, w, h, pixelStride, pixelStride * w, + newOffsets); } @Override @@ -121,4 +132,3 @@ public class PixelInterleavedSampleModel extends ComponentSampleModel { } } - diff --git a/awt/java/awt/image/RGBImageFilter.java b/awt/java/awt/image/RGBImageFilter.java index 9a7699793e..f5fe5d9ff9 100644 --- a/awt/java/awt/image/RGBImageFilter.java +++ b/awt/java/awt/image/RGBImageFilter.java @@ -18,46 +18,48 @@ * @author Igor V. Stolyarov * @version $Revision$ */ -package java.awt.image; +package java.awt.image; /** - * The RGBImageFilter class represents a filter which modifies - * pixels of an image in the default RGB ColorModel. + * The RGBImageFilter class represents a filter which modifies pixels of an + * image in the default RGB ColorModel. + * + * @since Android 1.0 */ public abstract class RGBImageFilter extends ImageFilter { - /** - * The origmodel is the ColorModel to be replaced by newmodel - * when substituteColorModel is called. + /** + * The original model is the ColorModel to be replaced by the new model when + * substituteColorModel is called. */ protected ColorModel origmodel; - /** - * The newmodel is the ColorModel with which to replace origmodel - * when substituteColorModel is called. + /** + * The new model is the ColorModel with which to replace the original model + * when substituteColorModel is called. */ protected ColorModel newmodel; - /** - * The canFilterIndexColorModel indicates if it is - * acceptable to apply the color filtering of the filterRGB - * method to the color table entries of an IndexColorModel - * object. - * */ + /** + * The canFilterIndexColorModel indicates if it is acceptable to apply the + * color filtering of the filterRGB method to the color table entries of an + * IndexColorModel object. + */ protected boolean canFilterIndexColorModel; /** * Instantiates a new RGBImageFilter. */ - public RGBImageFilter() {} + public RGBImageFilter() { + } /** - * Filters an IndexColorModel object by calling filterRGB function for - * each entry of IndexColorModel. - * - * @param icm the IndexColorModel to be filtered. + * Filters an IndexColorModel object by calling filterRGB function for each + * entry of IndexColorModel. * + * @param icm + * the IndexColorModel to be filtered. * @return the IndexColorModel. */ public IndexColorModel filterIndexColorModel(IndexColorModel icm) { @@ -69,28 +71,30 @@ public abstract class RGBImageFilter extends ImageFilter { icm.getRGBs(colorMap); int trans = -1; boolean hasAlpha = false; - for(int i = 0; i < mapSize; i++){ + for (int i = 0; i < mapSize; i++) { filteredColorMap[i] = filterRGB(-1, -1, colorMap[i]); int alpha = filteredColorMap[i] >>> 24; - if(alpha != 0xff){ - if(!hasAlpha) { + if (alpha != 0xff) { + if (!hasAlpha) { hasAlpha = true; } - if(alpha == 0 && trans < 0) { + if (alpha == 0 && trans < 0) { trans = i; } } } - return new IndexColorModel(bits, mapSize, filteredColorMap, 0, - hasAlpha, trans, transferType); + return new IndexColorModel(bits, mapSize, filteredColorMap, 0, hasAlpha, trans, + transferType); } /** * Replaces the original color model and the new one. * - * @param oldcm the old ColorModel. - * @param newcm the new ColorModel. + * @param oldcm + * the old ColorModel. + * @param newcm + * the new ColorModel. */ public void substituteColorModel(ColorModel oldcm, ColorModel newcm) { origmodel = oldcm; @@ -99,29 +103,27 @@ public abstract class RGBImageFilter extends ImageFilter { @Override public void setColorModel(ColorModel model) { - if(model instanceof IndexColorModel && - canFilterIndexColorModel){ - IndexColorModel icm = (IndexColorModel) model; + if (model instanceof IndexColorModel && canFilterIndexColorModel) { + IndexColorModel icm = (IndexColorModel)model; ColorModel filteredModel = filterIndexColorModel(icm); substituteColorModel(model, filteredModel); consumer.setColorModel(filteredModel); - }else{ + } else { consumer.setColorModel(ColorModel.getRGBdefault()); } } @Override - public void setPixels(int x, int y, int w, int h, ColorModel model, - int[] pixels, int off, int scansize) { - - if(model == null || model == origmodel){ + public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, + int scansize) { + + if (model == null || model == origmodel) { consumer.setPixels(x, y, w, h, newmodel, pixels, off, scansize); - }else{ + } else { int rgbPixels[] = new int[w]; - for(int sy = y, pixelsOff = off; sy < y + h; - sy++, pixelsOff += scansize){ - - for(int sx = x, idx = 0; sx < x + w; sx++, idx++){ + for (int sy = y, pixelsOff = off; sy < y + h; sy++, pixelsOff += scansize) { + + for (int sx = x, idx = 0; sx < x + w; sx++, idx++) { rgbPixels[idx] = model.getRGB(pixels[pixelsOff + idx]); } filterRGBPixels(x, sy, w, 1, rgbPixels, 0, w); @@ -130,19 +132,17 @@ public abstract class RGBImageFilter extends ImageFilter { } @Override - public void setPixels(int x, int y, int w, int h, ColorModel model, - byte[] pixels, int off, int scansize) { - - if(model == null || model == origmodel){ + public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, + int scansize) { + + if (model == null || model == origmodel) { consumer.setPixels(x, y, w, h, newmodel, pixels, off, scansize); - }else{ + } else { int rgbPixels[] = new int[w]; - for(int sy = y, pixelsOff = off; sy < y + h; - sy++, pixelsOff += scansize){ - - for(int sx = x, idx = 0; sx < x + w; sx++, idx++){ - rgbPixels[idx] = - model.getRGB(pixels[pixelsOff + idx] & 0xff); + for (int sy = y, pixelsOff = off; sy < y + h; sy++, pixelsOff += scansize) { + + for (int sx = x, idx = 0; sx < x + w; sx++, idx++) { + rgbPixels[idx] = model.getRGB(pixels[pixelsOff + idx] & 0xff); } filterRGBPixels(x, sy, w, 1, rgbPixels, 0, w); } @@ -150,41 +150,46 @@ public abstract class RGBImageFilter extends ImageFilter { } /** - * Filters a region of pixels in the default RGB ColorModel - * by calling the filterRGB method for them. + * Filters a region of pixels in the default RGB ColorModel by calling the + * filterRGB method for them. * - * @param x the X coordinate of region. - * @param y the Y coordinate of region. - * @param w the width ofregion. - * @param h the height of region. - * @param pixels the pixels array. - * @param off the offset of array. - * @param scansize the distance between rows of pixels in the array. + * @param x + * the X coordinate of region. + * @param y + * the Y coordinate of region. + * @param w + * the width of region. + * @param h + * the height of region. + * @param pixels + * the pixels array. + * @param off + * the offset of array. + * @param scansize + * the distance between rows of pixels in the array. */ - public void filterRGBPixels(int x, int y, int w, int h, - int[] pixels, int off, int scansize) { - - for(int sy = y, lineOff = off; sy < y + h; sy++, lineOff += scansize){ - for(int sx = x, idx = 0; sx < x + w; sx++, idx++){ - pixels[lineOff + idx] = - filterRGB(sx, sy, pixels[lineOff + idx]); + public void filterRGBPixels(int x, int y, int w, int h, int[] pixels, int off, int scansize) { + + for (int sy = y, lineOff = off; sy < y + h; sy++, lineOff += scansize) { + for (int sx = x, idx = 0; sx < x + w; sx++, idx++) { + pixels[lineOff + idx] = filterRGB(sx, sy, pixels[lineOff + idx]); } } - consumer.setPixels(x, y, w, h, ColorModel.getRGBdefault(), - pixels, off, scansize); + consumer.setPixels(x, y, w, h, ColorModel.getRGBdefault(), pixels, off, scansize); } /** - * Coverts a single input pixel in the default RGB ColorModel - * to a single output pixel. - * - * @param x the X pixel's coordinate. - * @param y the Y pixel's coordinate. - * @param rgb a pixel in the default RGB color model. + * Converts a single input pixel in the default RGB ColorModel to a single + * output pixel. * + * @param x + * the X pixel's coordinate. + * @param y + * the Y pixel's coordinate. + * @param rgb + * a pixel in the default RGB color model. * @return a filtered pixel in the default RGB color model. */ public abstract int filterRGB(int x, int y, int rgb); } - diff --git a/awt/java/awt/image/Raster.java b/awt/java/awt/image/Raster.java index 4b2426e51a..6749fde9e4 100644 --- a/awt/java/awt/image/Raster.java +++ b/awt/java/awt/image/Raster.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.Point; @@ -27,70 +28,95 @@ import org.apache.harmony.awt.gl.image.OrdinaryWritableRaster; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Raster class represents a rectangular area of pixels. - * This class is defined by DataBuffer and SampleModel objects. - * The DataBuffer object stores sample values and DSampleModel defines - * the location of sample in this DataBuffer. + * The Raster class represents a rectangular area of pixels. This class is + * defined by DataBuffer and SampleModel objects. The DataBuffer object stores + * sample values and DSampleModel defines the location of sample in this + * DataBuffer. + * + * @since Android 1.0 */ public class Raster { - /** The DataBuffer of this Raster. */ + /** + * The DataBuffer of this Raster. + */ protected DataBuffer dataBuffer; - /** The height of this Raster. */ + /** + * The height of this Raster. + */ protected int height; - /** The X coordinate of the upper left pixel in this Raster. */ + /** + * The X coordinate of the upper left pixel in this Raster. + */ protected int minX; - /** The Y coordinate of the upper left pixel in this Raster. */ + /** + * The Y coordinate of the upper left pixel in this Raster. + */ protected int minY; - /** The number of bands in this Raster. */ + /** + * The number of bands in this Raster. + */ protected int numBands; - /** The number of data elements. */ + /** + * The number of data elements. + */ protected int numDataElements; - /** The parent of this Raster. */ + /** + * The parent of this Raster. + */ protected Raster parent; - /** The SampleModel of this Raster. */ + /** + * The SampleModel of this Raster. + */ protected SampleModel sampleModel; - /** - * The X translation from the coordinate space of the - * SampleModel of this Raster. + /** + * The X translation from the coordinate space of the SampleModel of this + * Raster. */ protected int sampleModelTranslateX; - /** - * The Y translation from the coordinate space of the - * SampleModel of this Raster. + /** + * The Y translation from the coordinate space of the SampleModel of this + * Raster. */ protected int sampleModelTranslateY; - /** The width of this Raster. */ + /** + * The width of this Raster. + */ protected int width; /** - * Creates a Raster object with a BandedSampleModel and the specified + * Creates a Raster object with a BandedSampleModel and the specified * DataBuffer. The number of bands is defined by the length of bandOffsets * or bankIndices arrays. * - * @param dataBuffer the specified DataBuffer. - * @param w the width of the image data. - * @param h the height of the image data. - * @param bankIndices the bank indices of bands. - * @param bandOffsets the band offsets of bands. - * @param location the location which defines the upper left corner - * of Raster. - * + * @param dataBuffer + * the specified DataBuffer. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param scanlineStride + * the scanline stride of the image data. + * @param bankIndices + * the bank indices of bands. + * @param bandOffsets + * the band offsets of bands. + * @param location + * the location which defines the upper left corner of Raster. * @return the WritableRaster object. */ - public static WritableRaster createBandedRaster(DataBuffer dataBuffer, - int w, int h, int scanlineStride, int bankIndices[], - int bandOffsets[], Point location) { + public static WritableRaster createBandedRaster(DataBuffer dataBuffer, int w, int h, + int scanlineStride, int bankIndices[], int bandOffsets[], Point location) { if (w <= 0 || h <= 0) { // awt.22E=w or h is less than or equal to zero @@ -101,9 +127,9 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } @@ -119,39 +145,43 @@ public class Raster { int dataType = dataBuffer.getDataType(); - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT && dataType != DataBuffer.TYPE_INT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ } - BandedSampleModel sampleModel = new BandedSampleModel(dataType, w, h, - scanlineStride, bankIndices, bandOffsets); + BandedSampleModel sampleModel = new BandedSampleModel(dataType, w, h, scanlineStride, + bankIndices, bandOffsets); return new OrdinaryWritableRaster(sampleModel, dataBuffer, location); } /** - * Creates a Raster object with a BandedSampleModel and the specified - * data type. The Data type can be one of the following values: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * - * @param dataType the data type of the samples: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * @param w the width of the image data. - * @param h the height of the image data. - * @param scanlineStride the scanline stride of the image data. - * @param bankIndices the bank indices of bands. - * @param bandOffsets the band offsets of bands. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a BandedSampleModel and the specified data + * type. The Data type can be one of the following values: TYPE_BYTE, + * TYPE_USHORT, or TYPE_INT. + * + * @param dataType + * the data type of the samples: TYPE_BYTE, TYPE_USHORT, or + * TYPE_INT. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param scanlineStride + * the scanline stride of the image data. + * @param bankIndices + * the bank indices of bands. + * @param bandOffsets + * the band offsets of bands. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster object. */ - public static WritableRaster createBandedRaster(int dataType, int w, int h, - int scanlineStride, int bankIndices[], int bandOffsets[], - Point location) { + public static WritableRaster createBandedRaster(int dataType, int w, int h, int scanlineStride, + int bankIndices[], int bandOffsets[], Point location) { if (w <= 0 || h <= 0) { // awt.22E=w or h is less than or equal to zero @@ -162,9 +192,9 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } @@ -173,8 +203,7 @@ public class Raster { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.277")); //$NON-NLS-1$ } - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT && dataType != DataBuffer.TYPE_INT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ @@ -198,37 +227,40 @@ public class Raster { DataBuffer data = null; switch (dataType) { - case DataBuffer.TYPE_BYTE: - data = new DataBufferByte(dataSize, numBanks); - break; - case DataBuffer.TYPE_USHORT: - data = new DataBufferUShort(dataSize, numBanks); - break; - case DataBuffer.TYPE_INT: - data = new DataBufferInt(dataSize, numBanks); - break; - } - return createBandedRaster(data, w, h, scanlineStride, bankIndices, - bandOffsets, location); + case DataBuffer.TYPE_BYTE: + data = new DataBufferByte(dataSize, numBanks); + break; + case DataBuffer.TYPE_USHORT: + data = new DataBufferUShort(dataSize, numBanks); + break; + case DataBuffer.TYPE_INT: + data = new DataBufferInt(dataSize, numBanks); + break; + } + return createBandedRaster(data, w, h, scanlineStride, bankIndices, bandOffsets, location); } /** - * Creates a Raster object with a BandedSampleModel and the specified - * data type. The Data type can be one of the following values: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * - * @param dataType the data type of the samples: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * @param w the width of the image data. - * @param h the height of the image data. - * @param bands the number of bands. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a BandedSampleModel and the specified data + * type. The Data type can be one of the following values: TYPE_BYTE, + * TYPE_USHORT, or TYPE_INT. + * + * @param dataType + * the data type of the samples: TYPE_BYTE, TYPE_USHORT, or + * TYPE_INT. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param bands + * the number of bands. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster object. */ - public static WritableRaster createBandedRaster(int dataType, int w, int h, - int bands, Point location) { + public static WritableRaster createBandedRaster(int dataType, int w, int h, int bands, + Point location) { if (w <= 0 || h <= 0) { // awt.22E=w or h is less than or equal to zero @@ -239,9 +271,9 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } @@ -257,28 +289,32 @@ public class Raster { bandOffsets[i] = 0; bankIndices[i] = i; } - return createBandedRaster(dataType, w, h, w, bankIndices, bandOffsets, - location); + return createBandedRaster(dataType, w, h, w, bankIndices, bandOffsets, location); } /** - * Creates a Raster object with a PixelInterleavedSampleModel - * and the specified DataBuffer. - * - * @param dataBuffer the DataBuffer. - * @param w the width of image data. - * @param h the height of image data. - * @param scanlineStride the scanline stride of the image data. - * @param pixelStride the pixel stride of image data. - * @param bandOffsets the band offsets of bands. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a PixelInterleavedSampleModel and the + * specified DataBuffer. + * + * @param dataBuffer + * the DataBuffer. + * @param w + * the width of image data. + * @param h + * the height of image data. + * @param scanlineStride + * the scanline stride of the image data. + * @param pixelStride + * the pixel stride of image data. + * @param bandOffsets + * the band offsets of bands. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster object. */ - public static WritableRaster createInterleavedRaster(DataBuffer dataBuffer, - int w, int h, int scanlineStride, int pixelStride, - int bandOffsets[], Point location) { + public static WritableRaster createInterleavedRaster(DataBuffer dataBuffer, int w, int h, + int scanlineStride, int pixelStride, int bandOffsets[], Point location) { if (w <= 0 || h <= 0) { // awt.22E=w or h is less than or equal to zero @@ -289,9 +325,9 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } @@ -301,8 +337,7 @@ public class Raster { } int dataType = dataBuffer.getDataType(); - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT) { + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ } @@ -317,35 +352,38 @@ public class Raster { throw new NullPointerException(Messages.getString("awt.27B")); //$NON-NLS-1$ } - PixelInterleavedSampleModel sampleModel = - new PixelInterleavedSampleModel(dataType, w, h, - pixelStride, scanlineStride, bandOffsets); + PixelInterleavedSampleModel sampleModel = new PixelInterleavedSampleModel(dataType, w, h, + pixelStride, scanlineStride, bandOffsets); return new OrdinaryWritableRaster(sampleModel, dataBuffer, location); } /** - * Creates a Raster object with a PixelInterleavedSampleModel - * and the specified data type. The Data type can be one of the - * following values: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * - * @param dataType the data type of the samples: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * @param w the width of image data. - * @param h the height of image data. - * @param scanlineStride the scanline stride of the image data. - * @param pixelStride the pixel stride of image data. - * @param bandOffsets the band offsets of bands. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a PixelInterleavedSampleModel and the + * specified data type. The Data type can be one of the following values: + * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. + * + * @param dataType + * the data type of the samples: TYPE_BYTE, TYPE_USHORT, or + * TYPE_INT. + * @param w + * the width of image data. + * @param h + * the height of image data. + * @param scanlineStride + * the scanline stride of the image data. + * @param pixelStride + * the pixel stride of image data. + * @param bandOffsets + * the band offsets of bands. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster object. */ - public static WritableRaster createInterleavedRaster(int dataType, int w, - int h, int scanlineStride, int pixelStride, int bandOffsets[], - Point location) { + public static WritableRaster createInterleavedRaster(int dataType, int w, int h, + int scanlineStride, int pixelStride, int bandOffsets[], Point location) { if (w <= 0 || h <= 0) { // awt.22E=w or h is less than or equal to zero @@ -356,14 +394,13 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT) { + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ } @@ -383,36 +420,38 @@ public class Raster { DataBuffer data = null; switch (dataType) { - case DataBuffer.TYPE_BYTE: - data = new DataBufferByte(size); - break; - case DataBuffer.TYPE_USHORT: - data = new DataBufferUShort(size); - break; + case DataBuffer.TYPE_BYTE: + data = new DataBufferByte(size); + break; + case DataBuffer.TYPE_USHORT: + data = new DataBufferUShort(size); + break; } - return createInterleavedRaster(data, w, h, scanlineStride, pixelStride, - bandOffsets, location); + return createInterleavedRaster(data, w, h, scanlineStride, pixelStride, bandOffsets, + location); } /** - * Creates a Raster object with a PixelInterleavedSampleModel - * and the specified data type. The Data type can be one of the - * following values: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * - * @param dataType the data type of samples: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * @param w the width of image data. - * @param h the height of image data. - * @param bands the number of bands. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a PixelInterleavedSampleModel and the + * specified data type. The Data type can be one of the following values: + * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. + * + * @param dataType + * the data type of samples: TYPE_BYTE, TYPE_USHORT, or TYPE_INT. + * @param w + * the width of image data. + * @param h + * the height of image data. + * @param bands + * the number of bands. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster. */ - public static WritableRaster createInterleavedRaster(int dataType, int w, - int h, int bands, Point location) { + public static WritableRaster createInterleavedRaster(int dataType, int w, int h, int bands, + Point location) { if (w <= 0 || h <= 0) { // awt.22E=w or h is less than or equal to zero @@ -423,14 +462,13 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT) { + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ } @@ -440,26 +478,30 @@ public class Raster { bandOffsets[i] = i; } - return createInterleavedRaster(dataType, w, h, w * bands, bands, - bandOffsets, location); + return createInterleavedRaster(dataType, w, h, w * bands, bands, bandOffsets, location); } /** - * Creates a Raster object with a SinglePixelPackedSampleModel - * and the specified DataBuffer. - * - * @param dataBuffer the DataBuffer. - * @param w the width of the image data. - * @param h the height of the image data. - * @param scanlineStride the scanline stride of the image data. - * @param bandMasks the band masks. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a SinglePixelPackedSampleModel and the + * specified DataBuffer. + * + * @param dataBuffer + * the DataBuffer. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param scanlineStride + * the scanline stride of the image data. + * @param bandMasks + * the band masks. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster. */ - public static WritableRaster createPackedRaster(DataBuffer dataBuffer, - int w, int h, int scanlineStride, int bandMasks[], Point location) { + public static WritableRaster createPackedRaster(DataBuffer dataBuffer, int w, int h, + int scanlineStride, int bandMasks[], Point location) { if (dataBuffer == null) { // awt.278=dataBuffer is null throw new NullPointerException(Messages.getString("awt.278")); //$NON-NLS-1$ @@ -474,9 +516,9 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } @@ -491,35 +533,37 @@ public class Raster { } int dataType = dataBuffer.getDataType(); - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT && dataType != DataBuffer.TYPE_INT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ } - SinglePixelPackedSampleModel sampleModel = - new SinglePixelPackedSampleModel(dataType, w, h, - scanlineStride, bandMasks); + SinglePixelPackedSampleModel sampleModel = new SinglePixelPackedSampleModel(dataType, w, h, + scanlineStride, bandMasks); return new OrdinaryWritableRaster(sampleModel, dataBuffer, location); } /** - * Creates a Raster object with a MultiPixelPackedSampleModel - * and the specified DataBuffer. - * - * @param dataBuffer the DataBuffer. - * @param w the width of the image data. - * @param h the height of the image data. - * @param bitsPerPixel the number of bits per pixel. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a MultiPixelPackedSampleModel and the + * specified DataBuffer. + * + * @param dataBuffer + * the DataBuffer. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param bitsPerPixel + * the number of bits per pixel. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster. */ - public static WritableRaster createPackedRaster(DataBuffer dataBuffer, - int w, int h, int bitsPerPixel, Point location) { + public static WritableRaster createPackedRaster(DataBuffer dataBuffer, int w, int h, + int bitsPerPixel, Point location) { if (w <= 0 || h <= 0) { // awt.22E=w or h is less than or equal to zero @@ -530,9 +574,9 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } @@ -547,37 +591,40 @@ public class Raster { } int dataType = dataBuffer.getDataType(); - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT && dataType != DataBuffer.TYPE_INT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ } - MultiPixelPackedSampleModel sampleModel = - new MultiPixelPackedSampleModel(dataType, w, h, bitsPerPixel); + MultiPixelPackedSampleModel sampleModel = new MultiPixelPackedSampleModel(dataType, w, h, + bitsPerPixel); return new OrdinaryWritableRaster(sampleModel, dataBuffer, location); } /** - * Creates a Raster object with a MultiPixelPackedSampleModel - * and the specified DataBuffer. - * - * @param dataType the data type of samples: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * @param w the width of the image data. - * @param h the height of the image data. - * @param bands the number of bands. - * @param bitsPerBand the number of bits per band. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a MultiPixelPackedSampleModel and the + * specified DataBuffer. + * + * @param dataType + * the data type of samples: TYPE_BYTE, TYPE_USHORT, or TYPE_INT. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param bands + * the number of bands. + * @param bitsPerBand + * the number of bits per band. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster. */ - public static WritableRaster createPackedRaster(int dataType, int w, int h, - int bands, int bitsPerBand, Point location) { + public static WritableRaster createPackedRaster(int dataType, int w, int h, int bands, + int bitsPerBand, Point location) { if (w <= 0 || h <= 0) { // awt.22E=w or h is less than or equal to zero @@ -588,9 +635,9 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } @@ -599,15 +646,15 @@ public class Raster { throw new IllegalArgumentException(Messages.getString("awt.27D")); //$NON-NLS-1$ } - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT && dataType != DataBuffer.TYPE_INT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ } if (bitsPerBand * bands > DataBuffer.getDataTypeSize(dataType)) { - // awt.27E=The product of bitsPerBand and bands is greater than the number of bits held by dataType + // awt.27E=The product of bitsPerBand and bands is greater than the + // number of bits held by dataType throw new IllegalArgumentException(Messages.getString("awt.27E")); //$NON-NLS-1$ } @@ -623,43 +670,45 @@ public class Raster { return createPackedRaster(dataType, w, h, bandMasks, location); } DataBuffer data = null; - int size = ((bitsPerBand * w + - DataBuffer.getDataTypeSize(dataType) - 1) / - DataBuffer.getDataTypeSize(dataType)) * h; + int size = ((bitsPerBand * w + DataBuffer.getDataTypeSize(dataType) - 1) / DataBuffer + .getDataTypeSize(dataType)) + * h; switch (dataType) { - case DataBuffer.TYPE_BYTE: - data = new DataBufferByte(size); - break; - case DataBuffer.TYPE_USHORT: - data = new DataBufferUShort(size); - break; - case DataBuffer.TYPE_INT: - data = new DataBufferInt(size); - break; + case DataBuffer.TYPE_BYTE: + data = new DataBufferByte(size); + break; + case DataBuffer.TYPE_USHORT: + data = new DataBufferUShort(size); + break; + case DataBuffer.TYPE_INT: + data = new DataBufferInt(size); + break; } return createPackedRaster(data, w, h, bitsPerBand, location); } /** - * Creates a Raster object with a SinglePixelPackedSampleModel - * and the specified DataBuffer. - * - * @param dataType the data type of samples: - * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. - * @param w the width of the image data. - * @param h the height of the image data. - * @param bandMasks the band masks. - * @param location the location which defines the upper left corner - * of the Raster. - * + * Creates a Raster object with a SinglePixelPackedSampleModel and the + * specified DataBuffer. + * + * @param dataType + * the data type of samples: TYPE_BYTE, TYPE_USHORT, or TYPE_INT. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param bandMasks + * the band masks. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster. */ - public static WritableRaster createPackedRaster(int dataType, int w, int h, - int bandMasks[], Point location) { - - if (dataType != DataBuffer.TYPE_BYTE - && dataType != DataBuffer.TYPE_USHORT + public static WritableRaster createPackedRaster(int dataType, int w, int h, int bandMasks[], + Point location) { + + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT && dataType != DataBuffer.TYPE_INT) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ @@ -674,9 +723,9 @@ public class Raster { location = new Point(0, 0); } - if ((long) location.x + w > Integer.MAX_VALUE - || (long) location.y + h > Integer.MAX_VALUE) { - // awt.276=location.x + w or location.y + h results in integer overflow + if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { + // awt.276=location.x + w or location.y + h results in integer + // overflow throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ } @@ -688,15 +737,15 @@ public class Raster { DataBuffer data = null; switch (dataType) { - case DataBuffer.TYPE_BYTE: - data = new DataBufferByte(w * h); - break; - case DataBuffer.TYPE_USHORT: - data = new DataBufferUShort(w * h); - break; - case DataBuffer.TYPE_INT: - data = new DataBufferInt(w * h); - break; + case DataBuffer.TYPE_BYTE: + data = new DataBufferByte(w * h); + break; + case DataBuffer.TYPE_USHORT: + data = new DataBufferUShort(w * h); + break; + case DataBuffer.TYPE_INT: + data = new DataBufferInt(w * h); + break; } return createPackedRaster(data, w, h, w, bandMasks, location); @@ -705,15 +754,16 @@ public class Raster { /** * Creates a Raster object with the specified DataBuffer and SampleModel. * - * @param sm the specified SampleModel. - * @param db the specified DataBuffer. - * @param location the location which defines the upper left corner - * of the Raster. - * + * @param sm + * the specified SampleModel. + * @param db + * the specified DataBuffer. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the Raster. */ - public static Raster createRaster(SampleModel sm, DataBuffer db, - Point location) { + public static Raster createRaster(SampleModel sm, DataBuffer db, Point location) { if (sm == null || db == null) { // awt.27F=SampleModel or DataBuffer is null @@ -730,15 +780,16 @@ public class Raster { /** * Creates a WritableRaster with the specified SampleModel and DataBuffer. * - * @param sm the specified SampleModel. - * @param db the specified DataBuffer. - * @param location the location which defines the upper left corner - * of the Raster. - * + * @param sm + * the specified SampleModel. + * @param db + * the specified DataBuffer. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster. */ - public static WritableRaster createWritableRaster(SampleModel sm, - DataBuffer db, Point location) { + public static WritableRaster createWritableRaster(SampleModel sm, DataBuffer db, Point location) { if (sm == null || db == null) { // awt.27F=SampleModel or DataBuffer is null @@ -755,14 +806,14 @@ public class Raster { /** * Creates a WritableRaster with the specified SampleModel. * - * @param sm the specified SampleModel. - * @param location the location which defines the upper left corner - * of the Raster. - * + * @param sm + * the specified SampleModel. + * @param location + * the location which defines the upper left corner of the + * Raster. * @return the WritableRaster. */ - public static WritableRaster createWritableRaster(SampleModel sm, - Point location) { + public static WritableRaster createWritableRaster(SampleModel sm, Point location) { if (sm == null) { // awt.280=SampleModel is null @@ -780,34 +831,42 @@ public class Raster { * Instantiates a new Raster object with the specified SampleModel and * DataBuffer. * - * @param sampleModel the specified SampleModel. - * @param dataBuffer the specified DataBuffer. - * @param origin the specified origin. + * @param sampleModel + * the specified SampleModel. + * @param dataBuffer + * the specified DataBuffer. + * @param origin + * the specified origin. */ - protected Raster(SampleModel sampleModel, DataBuffer dataBuffer, - Point origin) { + protected Raster(SampleModel sampleModel, DataBuffer dataBuffer, Point origin) { - this(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y, - sampleModel.getWidth(), sampleModel.getHeight()), origin, null); + this(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y, sampleModel.getWidth(), + sampleModel.getHeight()), origin, null); } /** * Instantiates a new Raster object with the specified SampleModel, - * DataBuffer, rectangular region and parent Raster. - * - * @param sampleModel the specified SampleModel. - * @param dataBuffer the specified DataBuffer. - * @param aRegion the a rectangular region which defines the new image bounds. - * @param sampleModelTranslate this point defines the translation point - * from the SampleModel coordinates to the new Raster coordinates. - * @param parent the parent of this Raster. + * DataBuffer, rectangular region and parent Raster. + * + * @param sampleModel + * the specified SampleModel. + * @param dataBuffer + * the specified DataBuffer. + * @param aRegion + * the a rectangular region which defines the new image bounds. + * @param sampleModelTranslate + * this point defines the translation point from the SampleModel + * coordinates to the new Raster coordinates. + * @param parent + * the parent of this Raster. */ - protected Raster(SampleModel sampleModel, DataBuffer dataBuffer, - Rectangle aRegion, Point sampleModelTranslate, Raster parent) { + protected Raster(SampleModel sampleModel, DataBuffer dataBuffer, Rectangle aRegion, + Point sampleModelTranslate, Raster parent) { if (sampleModel == null || dataBuffer == null || aRegion == null || sampleModelTranslate == null) { - // awt.281=sampleModel, dataBuffer, aRegion or sampleModelTranslate is null + // awt.281=sampleModel, dataBuffer, aRegion or sampleModelTranslate + // is null throw new NullPointerException(Messages.getString("awt.281")); //$NON-NLS-1$ } @@ -816,27 +875,25 @@ public class Raster { throw new RasterFormatException(Messages.getString("awt.282")); //$NON-NLS-1$ } - if ((long) aRegion.x + (long) aRegion.width > Integer.MAX_VALUE) { + if ((long)aRegion.x + (long)aRegion.width > Integer.MAX_VALUE) { // awt.283=Overflow X coordinate of Raster throw new RasterFormatException(Messages.getString("awt.283")); //$NON-NLS-1$ } - if ((long) aRegion.y + (long) aRegion.height > Integer.MAX_VALUE) { + if ((long)aRegion.y + (long)aRegion.height > Integer.MAX_VALUE) { // awt.284=Overflow Y coordinate of Raster throw new RasterFormatException(Messages.getString("awt.284")); //$NON-NLS-1$ } - + if (sampleModel instanceof ComponentSampleModel) { validateDataBuffer(dataBuffer, aRegion.width, aRegion.height, - ((ComponentSampleModel) sampleModel).getScanlineStride()); + ((ComponentSampleModel)sampleModel).getScanlineStride()); } else if (sampleModel instanceof MultiPixelPackedSampleModel) { validateDataBuffer(dataBuffer, aRegion.width, aRegion.height, - ((MultiPixelPackedSampleModel) sampleModel) - .getScanlineStride()); + ((MultiPixelPackedSampleModel)sampleModel).getScanlineStride()); } else if (sampleModel instanceof SinglePixelPackedSampleModel) { validateDataBuffer(dataBuffer, aRegion.width, aRegion.height, - ((SinglePixelPackedSampleModel) sampleModel) - .getScanlineStride()); + ((SinglePixelPackedSampleModel)sampleModel).getScanlineStride()); } this.sampleModel = sampleModel; @@ -856,36 +913,44 @@ public class Raster { /** * Instantiates a new Raster with the specified SampleModel. * - * @param sampleModel the specified SampleModel. - * @param origin the origin. + * @param sampleModel + * the specified SampleModel. + * @param origin + * the origin. */ protected Raster(SampleModel sampleModel, Point origin) { - this(sampleModel, sampleModel.createDataBuffer(), new Rectangle( - origin.x, origin.y, sampleModel.getWidth(), sampleModel - .getHeight()), origin, null); + this(sampleModel, sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, + sampleModel.getWidth(), sampleModel.getHeight()), origin, null); } /** * Creates the child of this Raster by sharing the specified rectangular - * area in this Raste. The parentX, parentY, width - * and height parameters specify the rectangular area to be shared. - * - * @param parentX the X coordinate of the upper left corner of this Raster. - * @param parentY the Y coordinate of the upper left corner of this Raster. - * @param width the width of the child area. - * @param height the height of the child area. - * @param childMinX the X coordinate of child area mapped to the parentX - * coordinate. - * @param childMinY the Y coordinate of child area mapped to the parentY - * coordinate. - * @param bandList the array of band indicies. - * + * area in this raster. The parentX, parentY, width and height parameters + * specify the rectangular area to be shared. + * + * @param parentX + * the X coordinate of the upper left corner of this Raster. + * @param parentY + * the Y coordinate of the upper left corner of this Raster. + * @param width + * the width of the child area. + * @param height + * the height of the child area. + * @param childMinX + * the X coordinate of child area mapped to the parentX + * coordinate. + * @param childMinY + * the Y coordinate of child area mapped to the parentY + * coordinate. + * @param bandList + * the array of band indices. * @return the Raster. */ - public Raster createChild(int parentX, int parentY, int width, int height, - int childMinX, int childMinY, int bandList[]) { + public Raster createChild(int parentX, int parentY, int width, int height, int childMinX, + int childMinY, int bandList[]) { if (width <= 0 || height <= 0) { - // awt.285=Width or Height of child Raster is less than or equal to zero + // awt.285=Width or Height of child Raster is less than or equal to + // zero throw new RasterFormatException(Messages.getString("awt.285")); //$NON-NLS-1$ } @@ -899,22 +964,22 @@ public class Raster { throw new RasterFormatException(Messages.getString("awt.287")); //$NON-NLS-1$ } - if ((long) parentX + width > Integer.MAX_VALUE) { + if ((long)parentX + width > Integer.MAX_VALUE) { // awt.288=parentX + width results in integer overflow throw new RasterFormatException(Messages.getString("awt.288")); //$NON-NLS-1$ } - if ((long) parentY + height > Integer.MAX_VALUE) { + if ((long)parentY + height > Integer.MAX_VALUE) { // awt.289=parentY + height results in integer overflow throw new RasterFormatException(Messages.getString("awt.289")); //$NON-NLS-1$ } - if ((long) childMinX + width > Integer.MAX_VALUE) { + if ((long)childMinX + width > Integer.MAX_VALUE) { // awt.28A=childMinX + width results in integer overflow throw new RasterFormatException(Messages.getString("awt.28A")); //$NON-NLS-1$ } - if ((long) childMinY + height > Integer.MAX_VALUE) { + if ((long)childMinY + height > Integer.MAX_VALUE) { // awt.28B=childMinY + height results in integer overflow throw new RasterFormatException(Messages.getString("awt.28B")); //$NON-NLS-1$ } @@ -930,15 +995,14 @@ public class Raster { int childTranslateX = childMinX - parentX; int childTranslateY = childMinY - parentY; - return new Raster(childModel, dataBuffer, new Rectangle(childMinX, - childMinY, width, height), new Point(childTranslateX - + sampleModelTranslateX, childTranslateY - + sampleModelTranslateY), this); + return new Raster(childModel, dataBuffer, + new Rectangle(childMinX, childMinY, width, height), new Point(childTranslateX + + sampleModelTranslateX, childTranslateY + sampleModelTranslateY), this); } /** - * Create a compatible WritableRaster with the same parameters - * as this Raster. + * Create a compatible WritableRaster with the same parameters as this + * Raster. * * @return the WritableRaster. */ @@ -947,12 +1011,13 @@ public class Raster { } /** - * Create a compatible WritableRaster with the same parameters - * as this Raster and the specified size. - * - * @param w the width of the new WritableRaster. - * @param h the height of the new WritableRaster. + * Create a compatible WritableRaster with the same parameters as this + * Raster and the specified size. * + * @param w + * the width of the new WritableRaster. + * @param h + * the height of the new WritableRaster. * @return the WritableRaster. */ public WritableRaster createCompatibleWritableRaster(int w, int h) { @@ -967,18 +1032,20 @@ public class Raster { } /** - * Create a compatible WritableRaster with the same parameters - * as this Raster and the specified size and location. - * - * @param x the X coordinate of the new WritableRaster. - * @param y the Y coordinate of the new WritableRaster. - * @param w the width of the new WritableRaster. - * @param h the height of the new WritableRaster. - * + * Create a compatible WritableRaster with the same parameters as this + * Raster and the specified size and location. + * + * @param x + * the X coordinate of the new WritableRaster. + * @param y + * the Y coordinate of the new WritableRaster. + * @param w + * the width of the new WritableRaster. + * @param h + * the height of the new WritableRaster. * @return the WritableRaster. */ - public WritableRaster createCompatibleWritableRaster(int x, int y, int w, - int h) { + public WritableRaster createCompatibleWritableRaster(int x, int y, int w, int h) { WritableRaster raster = createCompatibleWritableRaster(w, h); @@ -986,12 +1053,12 @@ public class Raster { } /** - * Create a compatible WritableRaster with the same parameters - * as this Raster and the specified rectangle which determines - * new WritableRaster's location and size. - * - * @param rect the specified Rectangle. + * Create a compatible WritableRaster with the same parameters as this + * Raster and the specified rectangle which determines new WritableRaster's + * location and size. * + * @param rect + * the specified Rectangle. * @return the WritableRaster. */ public WritableRaster createCompatibleWritableRaster(Rectangle rect) { @@ -1000,23 +1067,21 @@ public class Raster { throw new NullPointerException(Messages.getString("awt.28C")); //$NON-NLS-1$ } - return createCompatibleWritableRaster(rect.x, rect.y, rect.width, - rect.height); + return createCompatibleWritableRaster(rect.x, rect.y, rect.width, rect.height); } /** - * Creates the translated child of this Raster. The New Raster - * object is a reference to the this Raster with a - * different location. - * - * @param childMinX the X coordinate of the new Raster. - * @param childMinY the Y coordinate of the new Raster. + * Creates the translated child of this Raster. The New Raster object is a + * reference to the this Raster with a different location. * + * @param childMinX + * the X coordinate of the new Raster. + * @param childMinY + * the Y coordinate of the new Raster. * @return the Raster. */ public Raster createTranslatedChild(int childMinX, int childMinY) { - return createChild(minX, minY, width, height, childMinX, childMinY, - null); + return createChild(minX, minY, width, height, childMinX, childMinY, null); } /** @@ -1038,41 +1103,46 @@ public class Raster { } /** - * Gets the data elements which represent the pixel data of the specified - * rectangle area as a primitive array. The following image data types - * are supported: DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, - * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, - * or DataBuffer.TYPE_DOUBLE. - * - * @param x the X coordinate of the area of pixels. - * @param y the Y coordinate of the area of pixels. - * @param w the width of the area of pixels. - * @param h the height of the area of pixels. - * @param outData the resulting array. - * + * Gets the data elements which represent the pixel data of the specified + * rectangle area as a primitive array. The following image data types are + * supported: DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, + * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or + * DataBuffer.TYPE_DOUBLE. + * + * @param x + * the X coordinate of the area of pixels. + * @param y + * the Y coordinate of the area of pixels. + * @param w + * the width of the area of pixels. + * @param h + * the height of the area of pixels. + * @param outData + * the resulting array. * @return the data elements of the specified area of this Raster. */ public Object getDataElements(int x, int y, int w, int h, Object outData) { - return sampleModel.getDataElements(x - sampleModelTranslateX, y - - sampleModelTranslateY, w, h, outData, dataBuffer); + return sampleModel.getDataElements(x - sampleModelTranslateX, y - sampleModelTranslateY, w, + h, outData, dataBuffer); } /** - * Gets the data elements which represent the specified pixel of - * this Raster as a primitive array. The following image data types - * are supported: DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, - * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, - * or DataBuffer.TYPE_DOUBLE. - * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param outData the resulting data. - * + * Gets the data elements which represent the specified pixel of this Raster + * as a primitive array. The following image data types are supported: + * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, + * DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. + * + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param outData + * the resulting data. * @return the data elements of the specified pixel of this Raster. */ public Object getDataElements(int x, int y, Object outData) { - return sampleModel.getDataElements(x - sampleModelTranslateX, y - - sampleModelTranslateY, outData, dataBuffer); + return sampleModel.getDataElements(x - sampleModelTranslateX, y - sampleModelTranslateY, + outData, dataBuffer); } /** @@ -1121,7 +1191,7 @@ public class Raster { } /** - * Gets the parent Raster for this Raster object. + * Gets the parent Raster for this Raster object. * * @return the parent Raster for this Raster object. */ @@ -1130,150 +1200,173 @@ public class Raster { } /** - * Gets a double array of samples for the specified pixel in this Raster. - * - * @param x the pixel's X coordinate. - * @param y the pixel's Y coordinate. - * @param dArray the double array where result array will be stored. - * - * @return the double array of samples for the specified pixel in - * this Raster. + * Gets a double array of samples for the specified pixel in this Raster. + * + * @param x + * the pixel's X coordinate. + * @param y + * the pixel's Y coordinate. + * @param dArray + * the double array where result array will be stored. + * @return the double array of samples for the specified pixel in this + * Raster. */ public double[] getPixel(int x, int y, double dArray[]) { - return sampleModel.getPixel(x - sampleModelTranslateX, y - - sampleModelTranslateY, dArray, dataBuffer); + return sampleModel.getPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, dArray, + dataBuffer); } /** - * Gets a float array of samples for the specified pixel in this Raster. - * - * @param x the pixel's X coordinate. - * @param y the pixel's Y coordinate. - * @param fArray the float array where the result array will be stored. - * - * @return the float array of samples for the specified pixel in - * this Raster. + * Gets a float array of samples for the specified pixel in this Raster. + * + * @param x + * the pixel's X coordinate. + * @param y + * the pixel's Y coordinate. + * @param fArray + * the float array where the result array will be stored. + * @return the float array of samples for the specified pixel in this + * Raster. */ public float[] getPixel(int x, int y, float fArray[]) { - return sampleModel.getPixel(x - sampleModelTranslateX, y - - sampleModelTranslateY, fArray, dataBuffer); + return sampleModel.getPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, fArray, + dataBuffer); } /** - * Gets an int array of samples for the specified pixel in this Raster. - * - * @param x the pixel's X coordinate. - * @param y the pixel's Y coordinate. - * @param iArray the int array where the result array will be stored. - * - * @return the int array of samples for the specified pixel in - * this Raster. + * Gets an integer array of samples for the specified pixel in this Raster. + * + * @param x + * the pixel's X coordinate. + * @param y + * the pixel's Y coordinate. + * @param iArray + * the integer array where the result array will be stored. + * @return the integer array of samples for the specified pixel in this + * Raster. */ public int[] getPixel(int x, int y, int iArray[]) { - return sampleModel.getPixel(x - sampleModelTranslateX, y - - sampleModelTranslateY, iArray, dataBuffer); + return sampleModel.getPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, iArray, + dataBuffer); } /** - * Gets an double array of samples for the specified rectangular - * area of pixels in this Raster. - * - * @param x the X coordinate of the area of pixels. - * @param y the Y coordinate of the area of pixels. - * @param w the width of the area of pixels. - * @param h the height of the area of pixels. - * @param dArray the resulting array. - * - * @return the double array of samples for the specified rectangular - * area of pixels in this Raster. + * Gets an double array of samples for the specified rectangular area of + * pixels in this Raster. + * + * @param x + * the X coordinate of the area of pixels. + * @param y + * the Y coordinate of the area of pixels. + * @param w + * the width of the area of pixels. + * @param h + * the height of the area of pixels. + * @param dArray + * the resulting array. + * @return the double array of samples for the specified rectangular area of + * pixels in this Raster. */ public double[] getPixels(int x, int y, int w, int h, double dArray[]) { - return sampleModel.getPixels(x - sampleModelTranslateX, y - - sampleModelTranslateY, w, h, dArray, dataBuffer); + return sampleModel.getPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, + dArray, dataBuffer); } /** - * Gets an float array of samples for the specified rectangular - * area of pixels in this Raster. - * - * @param x the X coordinate of the area of pixels. - * @param y the Y coordinate of the area of pixels. - * @param w the width of the area of pixels. - * @param h the height of the area of pixels. - * @param fArray the resulting array. - * - * @return the float array of samples for the specified rectangular - * area of pixels in this Raster. + * Gets an float array of samples for the specified rectangular area of + * pixels in this Raster. + * + * @param x + * the X coordinate of the area of pixels. + * @param y + * the Y coordinate of the area of pixels. + * @param w + * the width of the area of pixels. + * @param h + * the height of the area of pixels. + * @param fArray + * the resulting array. + * @return the float array of samples for the specified rectangular area of + * pixels in this Raster. */ public float[] getPixels(int x, int y, int w, int h, float fArray[]) { - return sampleModel.getPixels(x - sampleModelTranslateX, y - - sampleModelTranslateY, w, h, fArray, dataBuffer); + return sampleModel.getPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, + fArray, dataBuffer); } /** - * Gets an int array of samples for the specified rectangular - * area of pixels in this Raster. - * - * @param x the X coordinate of the area of pixels. - * @param y the Y coordinate of the area of pixels. - * @param w the width of pixel's the area of pixels. - * @param h the height of pixel's the area of pixels. - * @param iArray the resulting array. - * - * @return the int array of samples for the specified rectangular - * area of pixels in this Raster. + * Gets an integer array of samples for the specified rectangular area of + * pixels in this raster. + * + * @param x + * the X coordinate of the area of pixels. + * @param y + * the Y coordinate of the area of pixels. + * @param w + * the width of pixel's the area of pixels. + * @param h + * the height of pixel's the area of pixels. + * @param iArray + * the resulting array. + * @return the integer array of samples for the specified rectangular area + * of pixels in this Raster. */ public int[] getPixels(int x, int y, int w, int h, int iArray[]) { - return sampleModel.getPixels(x - sampleModelTranslateX, y - - sampleModelTranslateY, w, h, iArray, dataBuffer); + return sampleModel.getPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, + iArray, dataBuffer); } /** - * Gets the sample for the specified band of the specified - * pixel as an int. - * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the band. - * - * @return the sample for the specified band of the specified - * pixel as an int. + * Gets the sample for the specified band of the specified pixel as an + * integer. + * + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the band. + * @return the sample for the specified band of the specified pixel as an + * integer. */ public int getSample(int x, int y, int b) { - return sampleModel.getSample(x - sampleModelTranslateX, y - - sampleModelTranslateY, b, dataBuffer); + return sampleModel.getSample(x - sampleModelTranslateX, y - sampleModelTranslateY, b, + dataBuffer); } /** - * Gets the sample for the specified band of the specified - * pixel as a double. - * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the band. - * - * @return the sample for the specified band of the specified - * pixel as a double. + * Gets the sample for the specified band of the specified pixel as a + * double. + * + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the band. + * @return the sample for the specified band of the specified pixel as a + * double. */ public double getSampleDouble(int x, int y, int b) { - return sampleModel.getSampleDouble(x - sampleModelTranslateX, y - - sampleModelTranslateY, b, dataBuffer); + return sampleModel.getSampleDouble(x - sampleModelTranslateX, y - sampleModelTranslateY, b, + dataBuffer); } /** - * Gets the sample for the specified band of the specified - * pixel as a float. - * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the band. - * - * @return the sample for the specified band of the specified - * pixel as a float. + * Gets the sample for the specified band of the specified pixel as a float. + * + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the band. + * @return the sample for the specified band of the specified pixel as a + * float. */ public float getSampleFloat(int x, int y, int b) { - return sampleModel.getSampleFloat(x - sampleModelTranslateX, y - - sampleModelTranslateY, b, dataBuffer); + return sampleModel.getSampleFloat(x - sampleModelTranslateX, y - sampleModelTranslateY, b, + dataBuffer); } /** @@ -1286,97 +1379,105 @@ public class Raster { } /** - * Gets the translation of the X coordinate from the SampleModel - * coordinate system to the Rasters's coordinate system. + * Gets the translation of the X coordinate from the SampleModel coordinate + * system to the Rasters's coordinate system. * - * @return the value of the translation of the X coordinate from - * the SampleModel coordinate system to the Rasters's - * coordinate system. + * @return the value of the translation of the X coordinate from the + * SampleModel coordinate system to the Rasters's coordinate system. */ public final int getSampleModelTranslateX() { return sampleModelTranslateX; } /** - * Gets the translation of the Y coordinate from the SampleModel - * coordinate system to the Rasters's coordinate system. + * Gets the translation of the Y coordinate from the SampleModel coordinate + * system to the Rasters's coordinate system. * - * @return the value of the translation of the Y coordinate from - * the SampleModel coordinate system to the Rasters's - * coordinate system. - + * @return the value of the translation of the Y coordinate from the + * SampleModel coordinate system to the Rasters's coordinate system. */ public final int getSampleModelTranslateY() { return sampleModelTranslateY; } /** - * Gets the double array of samples for the specified band - * of the specified rectangular area of pixels in this Raster - * as a double array. - * - * @param x the X coordinate of the rectangular area of pixels. - * @param y the Y coordinate of the rectangular area of pixels. - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param b the band. - * @param dArray the resulting double array. - * - * @return the double array of samples for the specified band - * of the specified rectangular area of pixels. + * Gets the double array of samples for the specified band of the specified + * rectangular area of pixels in this Raster as a double array. + * + * @param x + * the X coordinate of the rectangular area of pixels. + * @param y + * the Y coordinate of the rectangular area of pixels. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param b + * the band. + * @param dArray + * the resulting double array. + * @return the double array of samples for the specified band of the + * specified rectangular area of pixels. */ - public double[] getSamples(int x, int y, int w, int h, int b, - double dArray[]) { + public double[] getSamples(int x, int y, int w, int h, int b, double dArray[]) { - return sampleModel.getSamples(x - sampleModelTranslateX, y - - sampleModelTranslateY, w, h, b, dArray, dataBuffer); + return sampleModel.getSamples(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, + b, dArray, dataBuffer); } /** - * Gets the float array of samples for the specified band - * of the specified rectangular area of pixels in this Raster - * as a float array. - * - * @param x the X coordinate of the rectangular area of pixels. - * @param y the Y coordinate of the rectangular area of pixels. - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param b the band. - * @param fArray the resulting float array. - * - * @return the float array of samples for the specified band - * of the specified rectangular area of pixels. + * Gets the float array of samples for the specified band of the specified + * rectangular area of pixels in this Raster as a float array. + * + * @param x + * the X coordinate of the rectangular area of pixels. + * @param y + * the Y coordinate of the rectangular area of pixels. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param b + * the band. + * @param fArray + * the resulting float array. + * @return the float array of samples for the specified band of the + * specified rectangular area of pixels. */ public float[] getSamples(int x, int y, int w, int h, int b, float fArray[]) { - return sampleModel.getSamples(x - sampleModelTranslateX, y - - sampleModelTranslateY, w, h, b, fArray, dataBuffer); + return sampleModel.getSamples(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, + b, fArray, dataBuffer); } /** - * Gets the int array of samples for the specified band - * of the specified rectangular area of pixels in this Raster - * as a int array. - * - * @param x the X coordinate of the rectangular area of pixels. - * @param y the Y coordinate of the rectangular area of pixels. - * @param w the width of the rectangular area of pixels. - * @param h the height of the rectangular area of pixels. - * @param b the band. - * @param iArray the resulting int array. - * - * @return the int array of samples for the specified band - * of the specified rectangular area of pixels. + * Gets the integer array of samples for the specified band of the specified + * rectangular area of pixels in this Raster as a integer array. + * + * @param x + * the X coordinate of the rectangular area of pixels. + * @param y + * the Y coordinate of the rectangular area of pixels. + * @param w + * the width of the rectangular area of pixels. + * @param h + * the height of the rectangular area of pixels. + * @param b + * the band. + * @param iArray + * the resulting integer array. + * @return the integer array of samples for the specified band of the + * specified rectangular area of pixels. */ public int[] getSamples(int x, int y, int w, int h, int b, int iArray[]) { - return sampleModel.getSamples(x - sampleModelTranslateX, y - - sampleModelTranslateY, w, h, b, iArray, dataBuffer); + return sampleModel.getSamples(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, + b, iArray, dataBuffer); } /** * Gets the transfer type for pixels of this Raster. - * @see SampleModel#getTransferType() * + * @see SampleModel#getTransferType() * @return the transfer type for pixels of this Raster. */ public final int getTransferType() { @@ -1395,18 +1496,20 @@ public class Raster { /** * Validate data buffer. * - * @param dataBuffer the data buffer - * @param w the w - * @param h the h - * @param scanlineStride the scanline stride + * @param dataBuffer + * the data buffer. + * @param w + * the w. + * @param h + * the h. + * @param scanlineStride + * the scanline stride. */ - private static void validateDataBuffer(final DataBuffer dataBuffer, final int w, - final int h, final int scanlineStride) { + private static void validateDataBuffer(final DataBuffer dataBuffer, final int w, final int h, + final int scanlineStride) { if (dataBuffer.getSize() < (scanlineStride * (h - 1) + w - 1)) { // awt.298=dataBuffer is too small throw new RasterFormatException(Messages.getString("awt.298")); //$NON-NLS-1$ } } } - - diff --git a/awt/java/awt/image/RasterFormatException.java b/awt/java/awt/image/RasterFormatException.java index 8577dad4b0..c667141ff5 100644 --- a/awt/java/awt/image/RasterFormatException.java +++ b/awt/java/awt/image/RasterFormatException.java @@ -18,28 +18,31 @@ * @author Igor V. Stolyarov * @version $Revision$ */ -package java.awt.image; +package java.awt.image; /** - * The RasterFormatException class represents the exception - * that is thrown when there's an invalid layout - * in the Raster. + * The RasterFormatException class represents the exception that is thrown when + * there's an invalid layout in the Raster. + * + * @since Android 1.0 */ public class RasterFormatException extends RuntimeException { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = 96598996116164315L; /** - * Instantiates a new RasterFormatException with the - * specified detail message. + * Instantiates a new RasterFormatException with the specified detail + * message. * - * @param s the detail message. + * @param s + * the detail message. */ public RasterFormatException(String s) { super(s); } } - diff --git a/awt/java/awt/image/RasterOp.java b/awt/java/awt/image/RasterOp.java index e8933ee4b6..19a84c9df0 100644 --- a/awt/java/awt/image/RasterOp.java +++ b/awt/java/awt/image/RasterOp.java @@ -18,6 +18,7 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt.image; import java.awt.RenderingHints; @@ -25,20 +26,22 @@ import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; /** - * The RasterOp interface provides methods for performing transformations - * from source data to destination data for Raster objects. The source and - * destination objects should contain the appropriate number of bands for - * the particular classes which implement this interface. + * The RasterOp interface provides methods for performing transformations from + * source data to destination data for Raster objects. The source and + * destination objects should contain the appropriate number of bands for the + * particular classes which implement this interface. + * + * @since Android 1.0 */ public interface RasterOp { - + /** - * Creates a destination WritableRaster with the specified Raster; - * this destination image data is empty and has the correct size - * and number of bands. - * - * @param src the source Raster. + * Creates a destination WritableRaster with the specified Raster; this + * destination image data is empty and has the correct size and number of + * bands. * + * @param src + * the source Raster. * @return the WritableRaster. */ public WritableRaster createCompatibleDestRaster(Raster src); @@ -47,9 +50,10 @@ public interface RasterOp { * Performs a filter operation on the source Raster and stores the resulting * image data to the destination WritableRaster. * - * @param src the source Raster. - * @param dst the destination WritableRaster, where the result is stored. - * + * @param src + * the source Raster. + * @param dst + * the destination WritableRaster, where the result is stored. * @return the filtered WritableRaster. */ public WritableRaster filter(Raster src, WritableRaster dst); @@ -57,19 +61,20 @@ public interface RasterOp { /** * Gets the bounds of the filtered Raster. * - * @param src the source Raster to be filtered. - * + * @param src + * the source Raster to be filtered. * @return the rectangle bounds of the filtered Raster. */ public Rectangle2D getBounds2D(Raster src); /** - * Gets the point of the destination image which corresponds - * to the specified point in the source raster. - * - * @param srcPoint the point of the source raster. - * @param dstPoint the point where the result will be stored. + * Gets the point of the destination image which corresponds to the + * specified point in the source raster. * + * @param srcPoint + * the point of the source raster. + * @param dstPoint + * the point where the result will be stored. * @return the destination point. */ public Point2D getPoint2D(Point2D srcPoint, Point2D dstPoint); diff --git a/awt/java/awt/image/RenderedImage.java b/awt/java/awt/image/RenderedImage.java index db3a4c842d..5eafa649a1 100644 --- a/awt/java/awt/image/RenderedImage.java +++ b/awt/java/awt/image/RenderedImage.java @@ -18,35 +18,37 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.Rectangle; import java.util.Vector; /** - * The RenderedImage interface should be implemented by all objects which - * contains image data. The image data is represented as a single tile or - * an array of tiles. + * The RenderedImage interface should be implemented by all objects which + * contains image data. The image data is represented as a single tile or an + * array of tiles. + * + * @since Android 1.0 */ public interface RenderedImage { /** - * Gets the property with the specified name from the property set - * of this RenderedImage. - * - * @param name the property's name. + * Gets the property with the specified name from the property set of this + * RenderedImage. * + * @param name + * the property's name. * @return the property value corresponded to this property's name. */ public Object getProperty(String name); /** - * Copies the region of this RenderedImage to the specified - * WritableRaster. The bounds of the region are the bounds of the - * WritableRaster. - * - * @param raster the WritableRaster. + * Copies the region of this RenderedImage to the specified WritableRaster. + * The bounds of the region are the bounds of the WritableRaster. * + * @param raster + * the WritableRaster. * @return the created WritableRaster. */ public WritableRaster copyData(WritableRaster raster); @@ -54,19 +56,19 @@ public interface RenderedImage { /** * Gets the image data of the image's region as one tile. * - * @param rect the rectangular region of RenderedImage. - * + * @param rect + * the rectangular region of RenderedImage. * @return the image data of the image's region as one tile. */ public Raster getData(Rectangle rect); /** - * Gets all RenderedImage objects which are the source of this - * RenderedImage object. + * Gets all RenderedImage objects which are the source of this RenderedImage + * object. * - * @return a Vector of RenderedImage objects which are the source - * of this RenderedImage object or null, if there is no information - * about them. + * @return a Vector of RenderedImage objects which are the source of this + * RenderedImage object or null, if there is no information about + * them. */ public Vector getSources(); @@ -85,14 +87,13 @@ public interface RenderedImage { public SampleModel getSampleModel(); /** - * Gets the tile corresponded to the specified indices in the tile - * array. - * - * @param tileX the X index of the tile. - * @param tileY the Y index of the tile. + * Gets the tile corresponded to the specified indices in the tile array. * - * @return the tile corresponded to the specified indices in the tile - * array. + * @param tileX + * the X index of the tile. + * @param tileY + * the Y index of the tile. + * @return the tile corresponded to the specified indices in the tile array. */ public Raster getTile(int tileX, int tileY); @@ -195,4 +196,3 @@ public interface RenderedImage { public int getHeight(); } - diff --git a/awt/java/awt/image/ReplicateScaleFilter.java b/awt/java/awt/image/ReplicateScaleFilter.java index 9298125e0d..51c0f49942 100644 --- a/awt/java/awt/image/ReplicateScaleFilter.java +++ b/awt/java/awt/image/ReplicateScaleFilter.java @@ -18,53 +18,69 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.util.Hashtable; import org.apache.harmony.awt.internal.nls.Messages; - /** - * The ReplicateScaleFilter class scales an source image - * by replicating rows and columns of pixels to scale up or - * omitting rows and columns of pixels to scale down. + * The ReplicateScaleFilter class scales an source image by replicating rows and + * columns of pixels to scale up or omitting rows and columns of pixels to scale + * down. + * + * @since Android 1.0 */ public class ReplicateScaleFilter extends ImageFilter { - /** The width of a source image. */ + /** + * The width of a source image. + */ protected int srcWidth; - /** The height of a source image. */ + /** + * The height of a source image. + */ protected int srcHeight; - /** The width of a destination image. */ + /** + * The width of a destination image. + */ protected int destWidth; - /** The height of a destination image. */ + /** + * The height of a destination image. + */ protected int destHeight; - /** The int array of source rows. */ + /** + * The integer array of source rows. + */ protected int[] srcrows; - /** The int array of source columns. */ + /** + * The integer array of source columns. + */ protected int[] srccols; - /** - * An Object (byte array with a destination width) provides - * a row of pixel data to the ImageConsumer. + /** + * An Object (byte array with a destination width) provides a row of pixel + * data to the ImageConsumer. */ protected Object outpixbuf; /** - * Instantiates a new ReplicateScaleFilter that filters - * the image with the specified width and height. + * Instantiates a new ReplicateScaleFilter that filters the image with the + * specified width and height. * - * @param width the width of scaled image. - * @param height the height of scaled image. + * @param width + * the width of scaled image. + * @param height + * the height of scaled image. */ public ReplicateScaleFilter(int width, int height) { - if(width == 0 || height == 0) { + if (width == 0 || height == 0) { // awt.234=Width or Height equals zero throw new IllegalArgumentException(Messages.getString("awt.234")); //$NON-NLS-1$ } @@ -77,40 +93,40 @@ public class ReplicateScaleFilter extends ImageFilter { @Override public void setProperties(Hashtable props) { Hashtable fprops; - if(props == null) { + if (props == null) { fprops = new Hashtable(); } else { - fprops = (Hashtable) props.clone(); + fprops = (Hashtable)props.clone(); } String propName = "Rescale Filters"; //$NON-NLS-1$ - String prop = "destWidth=" + destWidth + "; " + //$NON-NLS-1$ //$NON-NLS-2$ - "destHeight=" + destHeight; //$NON-NLS-1$ + String prop = "destWidth=" + destWidth + "; " + //$NON-NLS-1$ //$NON-NLS-2$ + "destHeight=" + destHeight; //$NON-NLS-1$ Object o = fprops.get(propName); - if(o != null){ - if(o instanceof String){ + if (o != null) { + if (o instanceof String) { prop = (String)o + "; " + prop; //$NON-NLS-1$ - }else{ - prop = o.toString() + "; " + prop; //$NON-NLS-1$ + } else { + prop = o.toString() + "; " + prop; //$NON-NLS-1$ } } fprops.put(propName, prop); consumer.setProperties(fprops); - } + } // setPixels methods produce pixels according to Java API Spacification @Override - public void setPixels(int x, int y, int w, int h, - ColorModel model, int[] pixels, int off, int scansize) { - - if(srccols == null) { + public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, + int scansize) { + + if (srccols == null) { initArrays(); } int buff[]; - if(outpixbuf == null || !(outpixbuf instanceof int[])){ + if (outpixbuf == null || !(outpixbuf instanceof int[])) { buff = new int[destWidth]; outpixbuf = buff; - }else{ + } else { buff = (int[])outpixbuf; } @@ -121,32 +137,31 @@ public class ReplicateScaleFilter extends ImageFilter { int sx, sy, dx, dy; dy = dstY; - while((dy < destHeight) && ((sy = srcrows[dy]) < y + h)){ + while ((dy < destHeight) && ((sy = srcrows[dy]) < y + h)) { dx = dstX; int srcOff = off + (sy - y) * scansize; - while((dx < destWidth) && ((sx = srccols[dx]) < x + w)){ + while ((dx < destWidth) && ((sx = srccols[dx]) < x + w)) { buff[dx] = pixels[srcOff + (sx - x)]; dx++; } - consumer.setPixels(dstX, dy, dx - dstX, 1, model, buff, - dstX, destWidth); + consumer.setPixels(dstX, dy, dx - dstX, 1, model, buff, dstX, destWidth); dy++; } } @Override - public void setPixels(int x, int y, int w, int h, - ColorModel model, byte[] pixels, int off, int scansize) { - - if(srccols == null) { + public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, + int scansize) { + + if (srccols == null) { initArrays(); } byte buff[]; - if(outpixbuf == null || !(outpixbuf instanceof byte[])){ + if (outpixbuf == null || !(outpixbuf instanceof byte[])) { buff = new byte[destWidth]; outpixbuf = buff; - }else{ + } else { buff = (byte[])outpixbuf; } @@ -157,16 +172,15 @@ public class ReplicateScaleFilter extends ImageFilter { int sx, sy, dx, dy; dy = dstY; - while((dy < destHeight) && ((sy = srcrows[dy]) < y + h)){ + while ((dy < destHeight) && ((sy = srcrows[dy]) < y + h)) { dx = dstX; int srcOff = off + (sy - y) * scansize; - while((dx < destWidth) && ((sx = srccols[dx]) < x + w)){ + while ((dx < destWidth) && ((sx = srccols[dx]) < x + w)) { buff[dx] = pixels[srcOff + (sx - x)]; dx++; } - consumer.setPixels(dstX, dy, dx - dstX, 1, model, buff, - dstX, destWidth); + consumer.setPixels(dstX, dy, dx - dstX, 1, model, buff, dstX, destWidth); dy++; } } @@ -176,12 +190,12 @@ public class ReplicateScaleFilter extends ImageFilter { srcWidth = w; srcHeight = h; - if(destWidth < 0 && destHeight < 0){ + if (destWidth < 0 && destHeight < 0) { destWidth = srcWidth; destHeight = srcHeight; - }else if(destWidth < 0){ + } else if (destWidth < 0) { destWidth = destHeight * srcWidth / srcHeight; - }else if(destHeight < 0){ + } else if (destHeight < 0) { destHeight = destWidth * srcHeight / srcWidth; } consumer.setDimensions(destWidth, destHeight); @@ -190,24 +204,22 @@ public class ReplicateScaleFilter extends ImageFilter { /** * Initialization of srccols and srcrows arrays. */ - private void initArrays(){ + private void initArrays() { if ((destWidth < 0) || (destHeight < 0)) { throw new IndexOutOfBoundsException(); } - + srccols = new int[destWidth]; int ca = srcWidth >>> 1; - for(int i = 0; i < destWidth; i++){ + for (int i = 0; i < destWidth; i++) { srccols[i] = (i * srcWidth + ca) / destWidth; } srcrows = new int[destHeight]; int ra = srcHeight >>> 1; - for(int i = 0; i < destHeight; i++){ + for (int i = 0; i < destHeight; i++) { srcrows[i] = (i * srcHeight + ra) / destHeight; } } } - - diff --git a/awt/java/awt/image/RescaleOp.java b/awt/java/awt/image/RescaleOp.java index 0e96031cd8..d7e2bd7684 100644 --- a/awt/java/awt/image/RescaleOp.java +++ b/awt/java/awt/image/RescaleOp.java @@ -32,33 +32,43 @@ import org.apache.harmony.awt.gl.AwtImageBackdoorAccessor; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class RescaleOp performs rescaling of the source image data - * by multiplying the pixel values with a scale factor - * and then adding an offset. + * The Class RescaleOp performs rescaling of the source image data by + * multiplying the pixel values with a scale factor and then adding an offset. + * + * @since Android 1.0 */ public class RescaleOp implements BufferedImageOp, RasterOp { - - /** The scale factors. */ + + /** + * The scale factors. + */ private float scaleFactors[]; - - /** The offsets. */ + + /** + * The offsets. + */ private float offsets[]; - - /** The hints. */ + + /** + * The hints. + */ private RenderingHints hints; static { // TODO - //System.loadLibrary("imageops"); + // System.loadLibrary("imageops"); } /** - * Instantiates a new RescaleOp object with the specified - * scale factors and offsets. + * Instantiates a new RescaleOp object with the specified scale factors and + * offsets. * - * @param scaleFactors the array of scale factor values. - * @param offsets the array of offset values. - * @param hints the RenderingHints or null. + * @param scaleFactors + * the array of scale factor values. + * @param offsets + * the array of offset values. + * @param hints + * the RenderingHints or null. */ public RescaleOp(float[] scaleFactors, float[] offsets, RenderingHints hints) { int numFactors = Math.min(scaleFactors.length, offsets.length); @@ -73,12 +83,15 @@ public class RescaleOp implements BufferedImageOp, RasterOp { } /** - * Instantiates a new RescaleOp object with the specified - * scale factor and offset. + * Instantiates a new RescaleOp object with the specified scale factor and + * offset. * - * @param scaleFactor the scale factor. - * @param offset the offset. - * @param hints the RenderingHints or null. + * @param scaleFactor + * the scale factor. + * @param offset + * the offset. + * @param hints + * the RenderingHints or null. */ public RescaleOp(float scaleFactor, float offset, RenderingHints hints) { scaleFactors = new float[1]; @@ -106,9 +119,8 @@ public class RescaleOp implements BufferedImageOp, RasterOp { /** * Gets the scale factors of this RescaleOp. * - * @param scaleFactors the desired scale factors array will be copied - * to this array. - * + * @param scaleFactors + * the desired scale factors array will be copied to this array. * @return the scale factors array. */ public final float[] getScaleFactors(float[] scaleFactors) { @@ -124,8 +136,8 @@ public class RescaleOp implements BufferedImageOp, RasterOp { /** * Gets the offsets array of this RescaleOp. * - * @param offsets the desired offsets array will be copied to this array. - * + * @param offsets + * the desired offsets array will be copied to this array. * @return the offsets array of this RescaleOp. */ public final float[] getOffsets(float[] offsets) { @@ -168,17 +180,11 @@ public class RescaleOp implements BufferedImageOp, RasterOp { dstCM = ColorModel.getRGBdefault(); } - WritableRaster r = - dstCM.isCompatibleSampleModel(src.getSampleModel()) ? - src.getRaster().createCompatibleWritableRaster(src.getWidth(), src.getHeight()) : - dstCM.createCompatibleWritableRaster(src.getWidth(), src.getHeight()); - - return new BufferedImage( - dstCM, - r, - dstCM.isAlphaPremultiplied(), - null - ); + WritableRaster r = dstCM.isCompatibleSampleModel(src.getSampleModel()) ? src.getRaster() + .createCompatibleWritableRaster(src.getWidth(), src.getHeight()) : dstCM + .createCompatibleWritableRaster(src.getWidth(), src.getHeight()); + + return new BufferedImage(dstCM, r, dstCM.isAlphaPremultiplied(), null); } public final WritableRaster filter(Raster src, WritableRaster dst) { @@ -186,26 +192,25 @@ public class RescaleOp implements BufferedImageOp, RasterOp { dst = createCompatibleDestRaster(src); } else { if (src.getNumBands() != dst.getNumBands()) { - // awt.21D=Number of src bands ({0}) does not match number of dst bands ({1}) + // awt.21D=Number of src bands ({0}) does not match number of + // dst bands ({1}) throw new IllegalArgumentException(Messages.getString("awt.21D", //$NON-NLS-1$ src.getNumBands(), dst.getNumBands())); } } - if ( - this.scaleFactors.length != 1 && - this.scaleFactors.length != src.getNumBands() - ) { - // awt.21E=Number of scaling constants is not equal to the number of bands + if (this.scaleFactors.length != 1 && this.scaleFactors.length != src.getNumBands()) { + // awt.21E=Number of scaling constants is not equal to the number of + // bands throw new IllegalArgumentException(Messages.getString("awt.21E")); //$NON-NLS-1$ } // TODO - //if (ippFilter(src, dst, BufferedImage.TYPE_CUSTOM, false) != 0) - if (slowFilter(src, dst, false) != 0) { - // awt.21F=Unable to transform source - throw new ImagingOpException (Messages.getString("awt.21F")); //$NON-NLS-1$ - } + // if (ippFilter(src, dst, BufferedImage.TYPE_CUSTOM, false) != 0) + if (slowFilter(src, dst, false) != 0) { + // awt.21F=Unable to transform source + throw new ImagingOpException(Messages.getString("awt.21F")); //$NON-NLS-1$ + } return dst; } @@ -213,11 +218,13 @@ public class RescaleOp implements BufferedImageOp, RasterOp { /** * Slow filter. * - * @param src the src - * @param dst the dst - * @param skipAlpha the skip alpha - * - * @return the int + * @param src + * the src. + * @param dst + * the dst. + * @param skipAlpha + * the skip alpha. + * @return the int. */ private final int slowFilter(Raster src, WritableRaster dst, boolean skipAlpha) { SampleModel sm = src.getSampleModel(); @@ -235,7 +242,7 @@ public class RescaleOp implements BufferedImageOp, RasterOp { int[] masks = new int[numBands]; int[] sampleSizes = sm.getSampleSize(); - for (int i=0; i < numBands; i++){ + for (int i = 0; i < numBands; i++) { maxValues[i] = (1 << sampleSizes[i]) - 1; masks[i] = ~(maxValues[i]); } @@ -247,8 +254,8 @@ public class RescaleOp implements BufferedImageOp, RasterOp { // Cycle over pixels to be calculated if (skipAlpha) { // Always suppose that alpha channel is the last band if (scaleFactors.length > 1) { - for (int i = 0; i < pixels.length; ){ - for (int bandIdx = 0; bandIdx < numBands-1; bandIdx++, i++){ + for (int i = 0; i < pixels.length;) { + for (int bandIdx = 0; bandIdx < numBands - 1; bandIdx++, i++) { pixels[i] = pixels[i] * scaleFactors[bandIdx] + offsets[bandIdx]; // Check for overflow now if (((int)pixels[i] & masks[bandIdx]) != 0) { @@ -263,8 +270,8 @@ public class RescaleOp implements BufferedImageOp, RasterOp { i++; } } else { - for (int i = 0; i < pixels.length; ){ - for (int bandIdx = 0; bandIdx < numBands-1; bandIdx++, i++){ + for (int i = 0; i < pixels.length;) { + for (int bandIdx = 0; bandIdx < numBands - 1; bandIdx++, i++) { pixels[i] = pixels[i] * scaleFactors[0] + offsets[0]; // Check for overflow now if (((int)pixels[i] & masks[bandIdx]) != 0) { @@ -281,8 +288,8 @@ public class RescaleOp implements BufferedImageOp, RasterOp { } } else { if (scaleFactors.length > 1) { - for (int i = 0; i < pixels.length; ){ - for (int bandIdx = 0; bandIdx < numBands; bandIdx++, i++){ + for (int i = 0; i < pixels.length;) { + for (int bandIdx = 0; bandIdx < numBands; bandIdx++, i++) { pixels[i] = pixels[i] * scaleFactors[bandIdx] + offsets[bandIdx]; // Check for overflow now if (((int)pixels[i] & masks[bandIdx]) != 0) { @@ -295,8 +302,8 @@ public class RescaleOp implements BufferedImageOp, RasterOp { } } } else { - for (int i = 0; i < pixels.length; ){ - for (int bandIdx = 0; bandIdx < numBands; bandIdx++, i++){ + for (int i = 0; i < pixels.length;) { + for (int bandIdx = 0; bandIdx < numBands; bandIdx++, i++) { pixels[i] = pixels[i] * scaleFactors[0] + offsets[0]; // Check for overflow now if (((int)pixels[i] & masks[bandIdx]) != 0) { @@ -328,18 +335,20 @@ public class RescaleOp implements BufferedImageOp, RasterOp { int nComponents = srcCM.getNumComponents(); boolean skipAlpha; if (srcCM.hasAlpha()) { - if (scaleFactors.length == 1 || scaleFactors.length == nComponents-1) { + if (scaleFactors.length == 1 || scaleFactors.length == nComponents - 1) { skipAlpha = true; } else if (scaleFactors.length == nComponents) { skipAlpha = false; } else { - // awt.21E=Number of scaling constants is not equal to the number of bands + // awt.21E=Number of scaling constants is not equal to the + // number of bands throw new IllegalArgumentException(Messages.getString("awt.21E")); //$NON-NLS-1$ } } else if (scaleFactors.length == 1 || scaleFactors.length == nComponents) { skipAlpha = false; } else { - // awt.21E=Number of scaling constants is not equal to the number of bands + // awt.21E=Number of scaling constants is not equal to the number of + // bands throw new IllegalArgumentException(Messages.getString("awt.21E")); //$NON-NLS-1$ } @@ -348,24 +357,22 @@ public class RescaleOp implements BufferedImageOp, RasterOp { finalDst = dst; dst = createCompatibleDestImage(src, srcCM); } else if (!srcCM.equals(dst.getColorModel())) { - // Treat BufferedImage.TYPE_INT_RGB and BufferedImage.TYPE_INT_ARGB as same - if ( - !((src.getType() == BufferedImage.TYPE_INT_RGB || - src.getType() == BufferedImage.TYPE_INT_ARGB) && - (dst.getType() == BufferedImage.TYPE_INT_RGB || - dst.getType() == BufferedImage.TYPE_INT_ARGB)) - ) { + // Treat BufferedImage.TYPE_INT_RGB and BufferedImage.TYPE_INT_ARGB + // as same + if (!((src.getType() == BufferedImage.TYPE_INT_RGB || src.getType() == BufferedImage.TYPE_INT_ARGB) && (dst + .getType() == BufferedImage.TYPE_INT_RGB || dst.getType() == BufferedImage.TYPE_INT_ARGB))) { finalDst = dst; dst = createCompatibleDestImage(src, srcCM); } } // TODO - //if (ippFilter(src.getRaster(), dst.getRaster(), src.getType(), skipAlpha) != 0) - if (slowFilter(src.getRaster(), dst.getRaster(), skipAlpha) != 0) { - // awt.21F=Unable to transform source - throw new ImagingOpException (Messages.getString("awt.21F")); //$NON-NLS-1$ - } + // if (ippFilter(src.getRaster(), dst.getRaster(), src.getType(), + // skipAlpha) != 0) + if (slowFilter(src.getRaster(), dst.getRaster(), skipAlpha) != 0) { + // awt.21F=Unable to transform source + throw new ImagingOpException(Messages.getString("awt.21F")); //$NON-NLS-1$ + } if (finalDst != null) { Graphics2D g = finalDst.createGraphics(); @@ -378,21 +385,26 @@ public class RescaleOp implements BufferedImageOp, RasterOp { return finalDst; } - // Don't forget to pass allocated arrays for levels and values, size should be numBands*4 + // Don't forget to pass allocated arrays for levels and values, size should + // be numBands*4 /** * Creates the levels. * - * @param sm the sm - * @param numBands the num bands - * @param skipAlpha the skip alpha - * @param levels the levels - * @param values the values - * @param channelsOrder the channels order + * @param sm + * the sm. + * @param numBands + * the num bands. + * @param skipAlpha + * the skip alpha. + * @param levels + * the levels. + * @param values + * the values. + * @param channelsOrder + * the channels order. */ - private final void createLevels( - SampleModel sm, int numBands, boolean skipAlpha, - int levels[], int values[], int channelsOrder[] - ) { + private final void createLevels(SampleModel sm, int numBands, boolean skipAlpha, int levels[], + int values[], int channelsOrder[]) { // Suppose same sample size for all channels, otherwise use slow filter int maxValue = (1 << sm.getSampleSize(0)) - 1; @@ -411,17 +423,17 @@ public class RescaleOp implements BufferedImageOp, RasterOp { } if (skipAlpha) { - extScaleFactors[numBands-1] = 1; - extOffsets[numBands-1] = 0; + extScaleFactors[numBands - 1] = 1; + extOffsets[numBands - 1] = 0; } // Create a levels - for (int i=0; i maxValue){ + } else if (minLevel > maxValue) { minLevel = maxValue; } if (maxLevel < 0) { maxLevel = 0; - } else if (maxLevel > maxValue){ + } else if (maxLevel > maxValue) { maxLevel = maxValue; } - levels[i*4] = 0; + levels[i * 4] = 0; if (minLevel > maxLevel) { - levels[i*4+1] = (int) maxLevel; - levels[i*4+2] = (int) minLevel; + levels[i * 4 + 1] = (int)maxLevel; + levels[i * 4 + 2] = (int)minLevel; } else { - levels[i*4+1] = (int) minLevel; - levels[i*4+2] = (int) maxLevel; + levels[i * 4 + 1] = (int)minLevel; + levels[i * 4 + 2] = (int)maxLevel; } - levels[i*4+3] = maxValue+1; + levels[i * 4 + 3] = maxValue + 1; // Fill values - for (int k=0; k<4; k++) { - int idx = i*4+k; - values[idx] = (int) (extScaleFactors[i] * levels[idx] + extOffsets[i]); + for (int k = 0; k < 4; k++) { + int idx = i * 4 + k; + values[idx] = (int)(extScaleFactors[i] * levels[idx] + extOffsets[i]); if (values[idx] < 0) { values[idx] = 0; - } else if (values[idx] > maxValue){ + } else if (values[idx] > maxValue) { values[idx] = maxValue; } } @@ -463,14 +475,14 @@ public class RescaleOp implements BufferedImageOp, RasterOp { // Reorder data if channels are stored in different order if (channelsOrder != null) { - int len = numBands*4; + int len = numBands * 4; int savedLevels[] = new int[len]; int savedValues[] = new int[len]; System.arraycopy(levels, 0, savedLevels, 0, len); System.arraycopy(values, 0, savedValues, 0, len); for (int i = 0; i < channelsOrder.length; i++) { - System.arraycopy(savedLevels, i*4, levels, channelsOrder[i]*4, 4); - System.arraycopy(savedValues, i*4, values, channelsOrder[i]*4, 4); + System.arraycopy(savedLevels, i * 4, levels, channelsOrder[i] * 4, 4); + System.arraycopy(savedValues, i * 4, values, channelsOrder[i] * 4, 4); } } } @@ -479,18 +491,18 @@ public class RescaleOp implements BufferedImageOp, RasterOp { /** * Ipp filter. * - * @param src the src - * @param dst the dst - * @param imageType the image type - * @param skipAlpha the skip alpha - * - * @return the int + * @param src + * the src. + * @param dst + * the dst. + * @param imageType + * the image type. + * @param skipAlpha + * the skip alpha. + * @return the int. */ @SuppressWarnings("unused") - private final int ippFilter( - Raster src, WritableRaster dst, - int imageType, boolean skipAlpha - ) { + private final int ippFilter(Raster src, WritableRaster dst, int imageType, boolean skipAlpha) { int res; int srcStride, dstStride; @@ -503,9 +515,11 @@ public class RescaleOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_INT_ARGB_PRE: case BufferedImage.TYPE_INT_RGB: { channels = 4; - srcStride = src.getWidth()*4; - dstStride = dst.getWidth()*4; - channelsOrder = new int[] {2, 1, 0, 3}; + srcStride = src.getWidth() * 4; + dstStride = dst.getWidth() * 4; + channelsOrder = new int[] { + 2, 1, 0, 3 + }; break; } @@ -513,8 +527,8 @@ public class RescaleOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_4BYTE_ABGR_PRE: case BufferedImage.TYPE_INT_BGR: { channels = 4; - srcStride = src.getWidth()*4; - dstStride = dst.getWidth()*4; + srcStride = src.getWidth() * 4; + dstStride = dst.getWidth() * 4; break; } @@ -527,9 +541,11 @@ public class RescaleOp implements BufferedImageOp, RasterOp { case BufferedImage.TYPE_3BYTE_BGR: { channels = 3; - srcStride = src.getWidth()*3; - dstStride = dst.getWidth()*3; - channelsOrder = new int[] {2, 1, 0}; + srcStride = src.getWidth() * 3; + dstStride = dst.getWidth() * 3; + channelsOrder = new int[] { + 2, 1, 0 + }; break; } @@ -544,55 +560,46 @@ public class RescaleOp implements BufferedImageOp, RasterOp { SampleModel srcSM = src.getSampleModel(); SampleModel dstSM = dst.getSampleModel(); - if ( - srcSM instanceof PixelInterleavedSampleModel && - dstSM instanceof PixelInterleavedSampleModel - ) { + if (srcSM instanceof PixelInterleavedSampleModel + && dstSM instanceof PixelInterleavedSampleModel) { // Check PixelInterleavedSampleModel - if ( - srcSM.getDataType() != DataBuffer.TYPE_BYTE || - dstSM.getDataType() != DataBuffer.TYPE_BYTE - ) { + if (srcSM.getDataType() != DataBuffer.TYPE_BYTE + || dstSM.getDataType() != DataBuffer.TYPE_BYTE) { return slowFilter(src, dst, skipAlpha); } - channels = srcSM.getNumBands(); // Have IPP functions for 1, 3 and 4 channels + channels = srcSM.getNumBands(); // Have IPP functions for 1, + // 3 and 4 channels if (!(channels == 1 || channels == 3 || channels == 4)) { return slowFilter(src, dst, skipAlpha); } - srcStride = ((ComponentSampleModel) srcSM).getScanlineStride(); - dstStride = ((ComponentSampleModel) dstSM).getScanlineStride(); + srcStride = ((ComponentSampleModel)srcSM).getScanlineStride(); + dstStride = ((ComponentSampleModel)dstSM).getScanlineStride(); - channelsOrder = ((ComponentSampleModel) srcSM).getBandOffsets(); - } else if ( - srcSM instanceof SinglePixelPackedSampleModel && - dstSM instanceof SinglePixelPackedSampleModel - ) { + channelsOrder = ((ComponentSampleModel)srcSM).getBandOffsets(); + } else if (srcSM instanceof SinglePixelPackedSampleModel + && dstSM instanceof SinglePixelPackedSampleModel) { // Check SinglePixelPackedSampleModel - SinglePixelPackedSampleModel sppsm1 = (SinglePixelPackedSampleModel) srcSM; - SinglePixelPackedSampleModel sppsm2 = (SinglePixelPackedSampleModel) dstSM; + SinglePixelPackedSampleModel sppsm1 = (SinglePixelPackedSampleModel)srcSM; + SinglePixelPackedSampleModel sppsm2 = (SinglePixelPackedSampleModel)dstSM; channels = sppsm1.getNumBands(); - // TYPE_INT_RGB, TYPE_INT_ARGB... - if ( - sppsm1.getDataType() != DataBuffer.TYPE_INT || - sppsm2.getDataType() != DataBuffer.TYPE_INT || - !(channels == 3 || channels == 4) - ) { + // TYPE_INT_RGB, TYPE_INT_ARGB... + if (sppsm1.getDataType() != DataBuffer.TYPE_INT + || sppsm2.getDataType() != DataBuffer.TYPE_INT + || !(channels == 3 || channels == 4)) { return slowFilter(src, dst, skipAlpha); } // Check compatibility of sample models - if ( - !Arrays.equals(sppsm1.getBitOffsets(), sppsm2.getBitOffsets()) || - !Arrays.equals(sppsm1.getBitMasks(), sppsm2.getBitMasks()) - ) { + if (!Arrays.equals(sppsm1.getBitOffsets(), sppsm2.getBitOffsets()) + || !Arrays.equals(sppsm1.getBitMasks(), sppsm2.getBitMasks())) { return slowFilter(src, dst, skipAlpha); } - for (int i=0; i - * The image data is represented as a Raster with a DataBuffer - * and a SampleModel. The SampleModel allows access to the samples in the - * DataBuffer. + * The SampleModel class is abstract class for retrieving pixel's samples in the + * data of an image. Each pixel contains several samples. A sample is the set of + * values of the bands for single pixel. For example, each pixel in the RGB + * model contains three samples and there are three corresponding bands in the + * image data of such pixels representing red, green and blue components. + *

    + * The image data is represented as a Raster with a DataBuffer and a + * SampleModel. The SampleModel allows access to the samples in the DataBuffer. + * + * @since Android 1.0 */ public abstract class SampleModel { - /** The width of the image data which this SampleModel describes. */ + /** + * The width of the image data which this SampleModel describes. + */ protected int width; - /** The height of the image data which this SampleModel describes. */ + /** + * The height of the image data which this SampleModel describes. + */ protected int height; - /** The number of bands of image data which this SampleModel describes. */ + /** + * The number of bands of image data which this SampleModel describes. + */ protected int numBands; - /** The data type of the image data which this SampleModel describes. */ + /** + * The data type of the image data which this SampleModel describes. + */ protected int dataType; /** - * Instantiates a new SampleModel with the specified data type, - * width, height and number of bands. + * Instantiates a new SampleModel with the specified data type, width, + * height and number of bands. * - * @param dataType the data type of the image data. - * @param w the width of the image data. - * @param h the height of the image data. - * @param numBands the number of bands of the image data. + * @param dataType + * the data type of the image data. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param numBands + * the number of bands of the image data. */ public SampleModel(int dataType, int w, int h, int numBands) { if (w <= 0 || h <= 0) { @@ -63,15 +76,14 @@ public abstract class SampleModel { throw new IllegalArgumentException(Messages.getString("awt.22E")); //$NON-NLS-1$ } - double squre = ((double) w) * ((double) h); + double squre = ((double)w) * ((double)h); if (squre >= Integer.MAX_VALUE) { // awt.22F=The product of w and h is greater than Integer.MAX_VALUE throw new IllegalArgumentException(Messages.getString("awt.22F")); //$NON-NLS-1$ } - if (dataType < DataBuffer.TYPE_BYTE || - dataType > DataBuffer.TYPE_DOUBLE && - dataType != DataBuffer.TYPE_UNDEFINED) { + if (dataType < DataBuffer.TYPE_BYTE || dataType > DataBuffer.TYPE_DOUBLE + && dataType != DataBuffer.TYPE_UNDEFINED) { // awt.230=dataType is not one of the supported data types throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ } @@ -89,154 +101,156 @@ public abstract class SampleModel { } /** - * Gets the data array for the specified pixel of the specified - * DataBuffer with one of the following types: - * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, - * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, + * Gets the data array for the specified pixel of the specified DataBuffer + * with one of the following types: DataBuffer.TYPE_BYTE, + * DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, * DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param obj the Object is a data where the result will be stored. - * @param data the image data. - * - * @return the data array for the specified pixel of the specified - * DataBuffer. + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param obj + * the Object is a data where the result will be stored. + * @param data + * the image data. + * @return the data array for the specified pixel of the specified + * DataBuffer. */ - public abstract Object getDataElements(int x, int y, Object obj, - DataBuffer data); + public abstract Object getDataElements(int x, int y, Object obj, DataBuffer data); /** - * Gets the array of pixel data for the specified rectangular - * area of pixels of the specified DataBuffer with one of - * the following types: - * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, - * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, - * DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. + * Gets the array of pixel data for the specified rectangular area of pixels + * of the specified DataBuffer with one of the following types: + * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, + * DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. * - * - * @param x the X coordinate of the rectangular pixel area. - * @param y the Y coordinate of the rectangular pixel area. - * @param w the width of the rectangular pixel area. - * @param h the height of the rectangular pixel area. - * @param obj the Object is an array with the primitive type, - * where the result array will be stored. - * @param data the image data. - * - * @return the array of pixel data for the specified rectangular - * area of pixels of the specified DataBuffer object. + * @param x + * the X coordinate of the rectangular pixel area. + * @param y + * the Y coordinate of the rectangular pixel area. + * @param w + * the width of the rectangular pixel area. + * @param h + * the height of the rectangular pixel area. + * @param obj + * the Object is an array with the primitive type, where the + * result array will be stored. + * @param data + * the image data. + * @return the array of pixel data for the specified rectangular area of + * pixels of the specified DataBuffer object. */ - public Object getDataElements(int x, int y, int w, int h, Object obj, - DataBuffer data) { + public Object getDataElements(int x, int y, int w, int h, Object obj, DataBuffer data) { int numDataElements = getNumDataElements(); int idx = 0; switch (getTransferType()) { - case DataBuffer.TYPE_BYTE: - byte bdata[]; - byte bbuf[] = null; - - if (obj == null) { - bdata = new byte[numDataElements * w * h]; - } else { - bdata = (byte[]) obj; - } + case DataBuffer.TYPE_BYTE: + byte bdata[]; + byte bbuf[] = null; + + if (obj == null) { + bdata = new byte[numDataElements * w * h]; + } else { + bdata = (byte[])obj; + } - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - bbuf = (byte[]) getDataElements(j, i, bbuf, data); - for (int n = 0; n < numDataElements; n++) { - bdata[idx++] = bbuf[n]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + bbuf = (byte[])getDataElements(j, i, bbuf, data); + for (int n = 0; n < numDataElements; n++) { + bdata[idx++] = bbuf[n]; + } } } - } - obj = bdata; - break; - - case DataBuffer.TYPE_SHORT: - case DataBuffer.TYPE_USHORT: - short sdata[]; - short sbuf[] = null; - - if (obj == null) { - sdata = new short[numDataElements * w * h]; - } else { - sdata = (short[]) obj; - } + obj = bdata; + break; + + case DataBuffer.TYPE_SHORT: + case DataBuffer.TYPE_USHORT: + short sdata[]; + short sbuf[] = null; + + if (obj == null) { + sdata = new short[numDataElements * w * h]; + } else { + sdata = (short[])obj; + } - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - sbuf = (short[]) getDataElements(j, i, sbuf, data); - for (int n = 0; n < numDataElements; n++) { - sdata[idx++] = sbuf[n]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + sbuf = (short[])getDataElements(j, i, sbuf, data); + for (int n = 0; n < numDataElements; n++) { + sdata[idx++] = sbuf[n]; + } } } - } - obj = sdata; - break; + obj = sdata; + break; - case DataBuffer.TYPE_INT: - int idata[]; - int ibuf[] = null; + case DataBuffer.TYPE_INT: + int idata[]; + int ibuf[] = null; - if (obj == null) { - idata = new int[numDataElements * w * h]; - } else { - idata = (int[]) obj; - } + if (obj == null) { + idata = new int[numDataElements * w * h]; + } else { + idata = (int[])obj; + } - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - ibuf = (int[]) getDataElements(j, i, ibuf, data); - for (int n = 0; n < numDataElements; n++) { - idata[idx++] = ibuf[n]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + ibuf = (int[])getDataElements(j, i, ibuf, data); + for (int n = 0; n < numDataElements; n++) { + idata[idx++] = ibuf[n]; + } } } - } - obj = idata; - break; + obj = idata; + break; - case DataBuffer.TYPE_FLOAT: - float fdata[]; - float fbuf[] = null; + case DataBuffer.TYPE_FLOAT: + float fdata[]; + float fbuf[] = null; - if (obj == null) { - fdata = new float[numDataElements * w * h]; - } else { - fdata = (float[]) obj; - } + if (obj == null) { + fdata = new float[numDataElements * w * h]; + } else { + fdata = (float[])obj; + } - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - fbuf = (float[]) getDataElements(j, i, fbuf, data); - for (int n = 0; n < numDataElements; n++) { - fdata[idx++] = fbuf[n]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + fbuf = (float[])getDataElements(j, i, fbuf, data); + for (int n = 0; n < numDataElements; n++) { + fdata[idx++] = fbuf[n]; + } } } - } - obj = fdata; - break; + obj = fdata; + break; - case DataBuffer.TYPE_DOUBLE: - double ddata[]; - double dbuf[] = null; + case DataBuffer.TYPE_DOUBLE: + double ddata[]; + double dbuf[] = null; - if (obj == null) { - ddata = new double[numDataElements * w * h]; - } else { - ddata = (double[]) obj; - } + if (obj == null) { + ddata = new double[numDataElements * w * h]; + } else { + ddata = (double[])obj; + } - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - dbuf = (double[]) getDataElements(j, i, dbuf, data); - for (int n = 0; n < numDataElements; n++) { - ddata[idx++] = dbuf[n]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + dbuf = (double[])getDataElements(j, i, dbuf, data); + for (int n = 0; n < numDataElements; n++) { + ddata[idx++] = dbuf[n]; + } } } - } - obj = ddata; - break; + obj = ddata; + break; } @@ -244,140 +258,145 @@ public abstract class SampleModel { } /** - * Sets the data for a single pixel in the specified DataBuffer - * from a primitive array with one of the following types: - * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, - * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, - * DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. + * Sets the data for a single pixel in the specified DataBuffer from a + * primitive array with one of the following types: DataBuffer.TYPE_BYTE, + * DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, + * DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param obj the Object - the array of primitive pixel data - * to be set. - * @param data the image data. + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param obj + * the Object - the array of primitive pixel data to be set. + * @param data + * the image data. */ - public abstract void setDataElements(int x, int y, Object obj, - DataBuffer data); + public abstract void setDataElements(int x, int y, Object obj, DataBuffer data); /** - * Sets the data elements for a rectangular area of pixels in - * the specified DataBuffer from a primitive array with one of - * the following types: DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, - * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, - * DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. + * Sets the data elements for a rectangular area of pixels in the specified + * DataBuffer from a primitive array with one of the following types: + * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, + * DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. * - * @param x the X coordinate of the specified rectangular area. - * @param y the Y coordinate of the specified rectangular area. - * @param w the width of rectangle. - * @param h the height of rectangle. - * @param obj the Object - the array of primitive pixel data - * to be set. - * @param data the image data. + * @param x + * the X coordinate of the specified rectangular area. + * @param y + * the Y coordinate of the specified rectangular area. + * @param w + * the width of rectangle. + * @param h + * the height of rectangle. + * @param obj + * the Object - the array of primitive pixel data to be set. + * @param data + * the image data. */ - public void setDataElements(int x, int y, int w, int h, Object obj, - DataBuffer data) { + public void setDataElements(int x, int y, int w, int h, Object obj, DataBuffer data) { int numDataElements = getNumDataElements(); int idx = 0; switch (getTransferType()) { - case DataBuffer.TYPE_BYTE: - byte bbuf[] = new byte[numDataElements]; - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - for (int n = 0; n < numDataElements; n++) { - bbuf[n] = ((byte[]) obj)[idx++]; + case DataBuffer.TYPE_BYTE: + byte bbuf[] = new byte[numDataElements]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + for (int n = 0; n < numDataElements; n++) { + bbuf[n] = ((byte[])obj)[idx++]; + } + setDataElements(j, i, bbuf, data); } - setDataElements(j, i, bbuf, data); } - } - break; - - case DataBuffer.TYPE_SHORT: - case DataBuffer.TYPE_USHORT: - short sbuf[] = new short[numDataElements]; - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - for (int n = 0; n < numDataElements; n++) { - sbuf[n] = ((short[]) obj)[idx++]; + break; + + case DataBuffer.TYPE_SHORT: + case DataBuffer.TYPE_USHORT: + short sbuf[] = new short[numDataElements]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + for (int n = 0; n < numDataElements; n++) { + sbuf[n] = ((short[])obj)[idx++]; + } + setDataElements(j, i, sbuf, data); } - setDataElements(j, i, sbuf, data); } - } - break; - - case DataBuffer.TYPE_INT: - int ibuf[] = new int[numDataElements]; - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - for (int n = 0; n < numDataElements; n++) { - ibuf[n] = ((int[]) obj)[idx++]; + break; + + case DataBuffer.TYPE_INT: + int ibuf[] = new int[numDataElements]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + for (int n = 0; n < numDataElements; n++) { + ibuf[n] = ((int[])obj)[idx++]; + } + setDataElements(j, i, ibuf, data); } - setDataElements(j, i, ibuf, data); } - } - break; - - case DataBuffer.TYPE_FLOAT: - float fbuf[] = new float[numDataElements]; - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - for (int n = 0; n < numDataElements; n++) { - fbuf[n] = ((float[]) obj)[idx++]; + break; + + case DataBuffer.TYPE_FLOAT: + float fbuf[] = new float[numDataElements]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + for (int n = 0; n < numDataElements; n++) { + fbuf[n] = ((float[])obj)[idx++]; + } + setDataElements(j, i, fbuf, data); } - setDataElements(j, i, fbuf, data); } - } - break; - - case DataBuffer.TYPE_DOUBLE: - double dbuf[] = new double[numDataElements]; - for (int i = y; i < y + h; i++) { - for (int j = x; j < x + w; j++) { - for (int n = 0; n < numDataElements; n++) { - dbuf[n] = ((double[]) obj)[idx++]; + break; + + case DataBuffer.TYPE_DOUBLE: + double dbuf[] = new double[numDataElements]; + for (int i = y; i < y + h; i++) { + for (int j = x; j < x + w; j++) { + for (int n = 0; n < numDataElements; n++) { + dbuf[n] = ((double[])obj)[idx++]; + } + setDataElements(j, i, dbuf, data); } - setDataElements(j, i, dbuf, data); } - } - break; + break; } } /** - * Creates a new SampleModel with the specified bands of - * this SampleModel. + * Creates a new SampleModel with the specified bands of this SampleModel. * - * @param bands the array of bands from this SampleModel. - * - * @return the SampleModel with the specified bands of - * this SampleModel. + * @param bands + * the array of bands from this SampleModel. + * @return the SampleModel with the specified bands of this SampleModel. */ public abstract SampleModel createSubsetSampleModel(int bands[]); /** - * Creates the SampleModel which has the same data as in - * this SampleModel with a different width and height. - * - * @param a0 the width of the image data. - * @param a1 the height of the image data. + * Creates the SampleModel which has the same data as in this SampleModel + * with a different width and height. * - * @return the SampleModel which has the same data as in - * this SampleModel with a different width and height. + * @param a0 + * the width of the image data. + * @param a1 + * the height of the image data. + * @return the SampleModel which has the same data as in this SampleModel + * with a different width and height. */ public abstract SampleModel createCompatibleSampleModel(int a0, int a1); /** - * Gets the samples of the specified pixel as a int array. + * Gets the samples of the specified pixel as an integer array. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param iArray the int array where result will be stored. - * @param data the image data. - * - * @return the int array with the samples of the specified pixel. - + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param iArray + * the integer array where result will be stored. + * @param data + * the image data. + * @return the integer array with the samples of the specified pixel. */ public int[] getPixel(int x, int y, int iArray[], DataBuffer data) { if (x < 0 || y < 0 || x >= this.width || y >= this.height) { @@ -400,12 +419,16 @@ public abstract class SampleModel { } /** - * Sets a pixel of the DataBuffer from a int array of samples. + * Sets a pixel of the DataBuffer from a integer array of samples. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param iArray the int array. - * @param data the image data. + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param iArray + * the integer array. + * @param data + * the image data. */ public void setPixel(int x, int y, int iArray[], DataBuffer data) { if (x < 0 || y < 0 || x >= this.width || y >= this.height) { @@ -420,11 +443,14 @@ public abstract class SampleModel { /** * Gets the samples of the specified pixel as a float array. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param fArray the float array where result will be stored. - * @param data the image data. - * + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param fArray + * the float array where result will be stored. + * @param data + * the image data. * @return the float array with the samples of the specified pixel. */ public float[] getPixel(int x, int y, float fArray[], DataBuffer data) { @@ -448,12 +474,16 @@ public abstract class SampleModel { } /** - * Sets a pixel of the DataBuffer from a float array of samples. + * Sets a pixel of the DataBuffer from a float array of samples. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param fArray the float array. - * @param data the image data. + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param fArray + * the float array. + * @param data + * the image data. */ public void setPixel(int x, int y, float fArray[], DataBuffer data) { if (x < 0 || y < 0 || x >= this.width || y >= this.height) { @@ -468,11 +498,14 @@ public abstract class SampleModel { /** * Gets the samples of the specified pixel as a double array. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param dArray the double array where result will be stored. - * @param data the image data. - * + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param dArray + * the double array where result will be stored. + * @param data + * the image data. * @return the double array with the samples of the specified pixel. */ public double[] getPixel(int x, int y, double dArray[], DataBuffer data) { @@ -496,12 +529,16 @@ public abstract class SampleModel { } /** - * Sets a pixel of the DataBuffer from a double array of samples. + * Sets a pixel of the DataBuffer from a double array of samples. * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param dArray the double array. - * @param data the image data. + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param dArray + * the double array. + * @param data + * the image data. */ public void setPixel(int x, int y, double dArray[], DataBuffer data) { if (x < 0 || y < 0 || x >= this.width || y >= this.height) { @@ -514,43 +551,49 @@ public abstract class SampleModel { } /** - * Gets the sample of a specified band for the specified pixel - * as an int. - * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param b the specified band. - * @param data the image data. + * Gets the sample of a specified band for the specified pixel as an + * integer. * + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param b + * the specified band. + * @param data + * the image data. * @return the sample of a specified band for the specified pixel. */ public abstract int getSample(int x, int y, int b, DataBuffer data); /** - * Gets the sample of a specified band for the specified pixel - * as a float. - * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param b the specified band. - * @param data the image data. + * Gets the sample of a specified band for the specified pixel as a float. * + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param b + * the specified band. + * @param data + * the image data. * @return the sample of a specified band for the specified pixel. - */ public float getSampleFloat(int x, int y, int b, DataBuffer data) { return getSample(x, y, b, data); } /** - * Gets the sample of a specified band for the specified pixel - * as a double. - * - * @param x the X coordinate of pixel. - * @param y the Y coordinate of pixel. - * @param b the specified band. - * @param data the image data. + * Gets the sample of a specified band for the specified pixel as a double. * + * @param x + * the X coordinate of pixel. + * @param y + * the Y coordinate of pixel. + * @param b + * the specified band. + * @param data + * the image data. * @return the sample of a specified band for the specified pixel. */ public double getSampleDouble(int x, int y, int b, DataBuffer data) { @@ -558,21 +601,25 @@ public abstract class SampleModel { } /** - * Gets the samples of the specified rectangular area of pixels - * as a int array. - * - * @param x the X coordinate of the rectangle of pixels. - * @param y the Y coordinate of the rectangle of pixels. - * @param w the width of the rectangle of pixels. - * @param h the height of the rectangle of pixels. - * @param iArray the int array where result will be stored. - * @param data the image data. + * Gets the samples of the specified rectangular area of pixels as an + * integer array. * - * @return the int array with the samples of the specified - * rectangular area of pixels. + * @param x + * the X coordinate of the rectangle of pixels. + * @param y + * the Y coordinate of the rectangle of pixels. + * @param w + * the width of the rectangle of pixels. + * @param h + * the height of the rectangle of pixels. + * @param iArray + * the integer array where result will be stored. + * @param data + * the image data. + * @return the integer array with the samples of the specified rectangular + * area of pixels. */ - public int[] getPixels(int x, int y, int w, int h, int iArray[], - DataBuffer data) { + public int[] getPixels(int x, int y, int w, int h, int iArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -597,18 +644,23 @@ public abstract class SampleModel { } /** - * Sets all of the samples for a rectangular area of pixels of the DataBuffer - * from an int array. + * Sets all of the samples for a rectangular area of pixels of the + * DataBuffer from an integer array. * - * @param x the X coordinate of the rectangle of pixels. - * @param y the Y coordinate of the rectangle of pixels. - * @param w the width of the rectangle of pixels. - * @param h the height of the rectangle of pixels. - * @param iArray the int array. - * @param data the image data. + * @param x + * the X coordinate of the rectangle of pixels. + * @param y + * the Y coordinate of the rectangle of pixels. + * @param w + * the width of the rectangle of pixels. + * @param h + * the height of the rectangle of pixels. + * @param iArray + * the integer array. + * @param data + * the image data. */ - public void setPixels(int x, int y, int w, int h, int iArray[], - DataBuffer data) { + public void setPixels(int x, int y, int w, int h, int iArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -624,21 +676,25 @@ public abstract class SampleModel { } /** - * Gets the samples of the specified rectangular area of pixels - * as a float array. + * Gets the samples of the specified rectangular area of pixels as a float + * array. * - * @param x the X coordinate of the rectangle of pixels. - * @param y the Y coordinate of the rectangle of pixels. - * @param w the width of the rectangle of pixels. - * @param h the height of the rectangle of pixels. - * @param fArray the float array where result will be stored. - * @param data the image data. - * - * @return the float array with the samples of the specified - * rectangular area of pixels. + * @param x + * the X coordinate of the rectangle of pixels. + * @param y + * the Y coordinate of the rectangle of pixels. + * @param w + * the width of the rectangle of pixels. + * @param h + * the height of the rectangle of pixels. + * @param fArray + * the float array where result will be stored. + * @param data + * the image data. + * @return the float array with the samples of the specified rectangular + * area of pixels. */ - public float[] getPixels(int x, int y, int w, int h, float fArray[], - DataBuffer data) { + public float[] getPixels(int x, int y, int w, int h, float fArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -663,18 +719,23 @@ public abstract class SampleModel { } /** - * Sets all of the samples for a rectangular area of pixels of the DataBuffer - * from a float array. + * Sets all of the samples for a rectangular area of pixels of the + * DataBuffer from a float array. * - * @param x the X coordinate of the rectangle of pixels. - * @param y the Y coordinate of the rectangle of pixels. - * @param w the width of the rectangle of pixels. - * @param h the height of the rectangle of pixels. - * @param fArray the float array. - * @param data the image data. + * @param x + * the X coordinate of the rectangle of pixels. + * @param y + * the Y coordinate of the rectangle of pixels. + * @param w + * the width of the rectangle of pixels. + * @param h + * the height of the rectangle of pixels. + * @param fArray + * the float array. + * @param data + * the image data. */ - public void setPixels(int x, int y, int w, int h, float fArray[], - DataBuffer data) { + public void setPixels(int x, int y, int w, int h, float fArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -690,21 +751,25 @@ public abstract class SampleModel { } /** - * Gets the samples of the specified rectangular area of pixels - * as a double array. - * - * @param x the X coordinate of the rectangle of pixels. - * @param y the Y coordinate of the rectangle of pixels. - * @param w the width of the rectangle of pixels. - * @param h the height of the rectangle of pixels. - * @param dArray the double array where result will be stored. - * @param data the image data. + * Gets the samples of the specified rectangular area of pixels as a double + * array. * - * @return the double array with the samples of the specified - * rectangular area of pixels. + * @param x + * the X coordinate of the rectangle of pixels. + * @param y + * the Y coordinate of the rectangle of pixels. + * @param w + * the width of the rectangle of pixels. + * @param h + * the height of the rectangle of pixels. + * @param dArray + * the double array where result will be stored. + * @param data + * the image data. + * @return the double array with the samples of the specified rectangular + * area of pixels. */ - public double[] getPixels(int x, int y, int w, int h, double dArray[], - DataBuffer data) { + public double[] getPixels(int x, int y, int w, int h, double dArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -729,18 +794,23 @@ public abstract class SampleModel { } /** - * Sets all of the samples for a rectangular area of pixels of the DataBuffer - * from a double array. + * Sets all of the samples for a rectangular area of pixels of the + * DataBuffer from a double array. * - * @param x the X coordinate of the rectangle of pixels. - * @param y the Y coordinate of the rectangle of pixels. - * @param w the width of the rectangle of pixels. - * @param h the height of the rectangle of pixels. - * @param dArray the double array. - * @param data the image data. + * @param x + * the X coordinate of the rectangle of pixels. + * @param y + * the Y coordinate of the rectangle of pixels. + * @param w + * the width of the rectangle of pixels. + * @param h + * the height of the rectangle of pixels. + * @param dArray + * the double array. + * @param data + * the image data. */ - public void setPixels(int x, int y, int w, int h, double dArray[], - DataBuffer data) { + public void setPixels(int x, int y, int w, int h, double dArray[], DataBuffer data) { if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ @@ -756,34 +826,44 @@ public abstract class SampleModel { } /** - * Sets a sample of the specified band for the specified pixel - * in the DataBuffer as int value. + * Sets a sample of the specified band for the specified pixel in the + * DataBuffer as integer value. * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the specified band. - * @param s the sample as an int value. - * @param data the image data. + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the specified band. + * @param s + * the sample as an integer value. + * @param data + * the image data. */ public abstract void setSample(int x, int y, int b, int s, DataBuffer data); /** - * Gets the samples of a specified band for a specified rectangular - * area of pixels as a int array. - * - * @param x the X coordinate of the rectangle. - * @param y the Y coordinate of the rectangle. - * @param w the width of the rectangle. - * @param h the height of the rectangle. - * @param b the specified band. - * @param iArray the int array where result will be stored. - * @param data the image data. + * Gets the samples of a specified band for a specified rectangular area of + * pixels as a integer array. * - * @return the samples of a specified band for a specified rectangular - * area of pixels. + * @param x + * the X coordinate of the rectangle. + * @param y + * the Y coordinate of the rectangle. + * @param w + * the width of the rectangle. + * @param h + * the height of the rectangle. + * @param b + * the specified band. + * @param iArray + * the integer array where result will be stored. + * @param data + * the image data. + * @return the samples of a specified band for a specified rectangular area + * of pixels. */ - public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], - DataBuffer data) { + public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { int samples[]; int idx = 0; @@ -803,19 +883,25 @@ public abstract class SampleModel { } /** - * Sets the samples from an int array in the specified band for - * the specified rectangle of pixels. + * Sets the samples from an integer array in the specified band for the + * specified rectangle of pixels. * - * @param x the X coordinate of the rectangle. - * @param y the Y coordinate of the rectangle. - * @param w the width of the rectangle. - * @param h the height of the rectangle. - * @param b the specified band. - * @param iArray the int array. - * @param data the image data. + * @param x + * the X coordinate of the rectangle. + * @param y + * the Y coordinate of the rectangle. + * @param w + * the width of the rectangle. + * @param h + * the height of the rectangle. + * @param b + * the specified band. + * @param iArray + * the integer array. + * @param data + * the image data. */ - public void setSamples(int x, int y, int w, int h, int b, int iArray[], - DataBuffer data) { + public void setSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { int idx = 0; for (int i = y; i < y + h; i++) { for (int j = x; j < x + w; j++) { @@ -825,22 +911,27 @@ public abstract class SampleModel { } /** - * Gets the samples of a specified band for a specified rectangular - * area of pixels as a float array. + * Gets the samples of a specified band for a specified rectangular area of + * pixels as a float array. * - * @param x the X coordinate of the rectangle. - * @param y the Y coordinate of the rectangle. - * @param w the width of the rectangle. - * @param h the height of the rectangle. - * @param b the specified band. - * @param fArray the float array where result will be stored. - * @param data the image data. - * - * @return the samples of a specified band for a specified rectangular - * area of pixels. + * @param x + * the X coordinate of the rectangle. + * @param y + * the Y coordinate of the rectangle. + * @param w + * the width of the rectangle. + * @param h + * the height of the rectangle. + * @param b + * the specified band. + * @param fArray + * the float array where result will be stored. + * @param data + * the image data. + * @return the samples of a specified band for a specified rectangular area + * of pixels. */ - public float[] getSamples(int x, int y, int w, int h, int b, - float fArray[], DataBuffer data) { + public float[] getSamples(int x, int y, int w, int h, int b, float fArray[], DataBuffer data) { float samples[]; int idx = 0; @@ -860,19 +951,25 @@ public abstract class SampleModel { } /** - * Sets the samples from an float array in the specified band for - * the specified rectangle of pixels. + * Sets the samples from an float array in the specified band for the + * specified rectangle of pixels. * - * @param x the X coordinate of the rectangle. - * @param y the Y coordinate of the rectangle. - * @param w the width of the rectangle. - * @param h the height of the rectangle. - * @param b the specified band. - * @param fArray the float array - * @param data the image data. + * @param x + * the X coordinate of the rectangle. + * @param y + * the Y coordinate of the rectangle. + * @param w + * the width of the rectangle. + * @param h + * the height of the rectangle. + * @param b + * the specified band. + * @param fArray + * the float array. + * @param data + * the image data. */ - public void setSamples(int x, int y, int w, int h, int b, float fArray[], - DataBuffer data) { + public void setSamples(int x, int y, int w, int h, int b, float fArray[], DataBuffer data) { int idx = 0; for (int i = y; i < y + h; i++) { for (int j = x; j < x + w; j++) { @@ -882,22 +979,27 @@ public abstract class SampleModel { } /** - * Gets the samples of a specified band for a specified rectangular - * area of pixels as a double array. - * - * @param x the X coordinate of the rectangle. - * @param y the Y coordinate of the rectangle. - * @param w the width of the rectangle. - * @param h the height of the rectangle. - * @param b the specified band. - * @param dArray the double array where result will be stored. - * @param data the image data. + * Gets the samples of a specified band for a specified rectangular area of + * pixels as a double array. * - * @return the samples of a specified band for a specified rectangular - * area of pixels. + * @param x + * the X coordinate of the rectangle. + * @param y + * the Y coordinate of the rectangle. + * @param w + * the width of the rectangle. + * @param h + * the height of the rectangle. + * @param b + * the specified band. + * @param dArray + * the double array where result will be stored. + * @param data + * the image data. + * @return the samples of a specified band for a specified rectangular area + * of pixels. */ - public double[] getSamples(int x, int y, int w, int h, int b, - double dArray[], DataBuffer data) { + public double[] getSamples(int x, int y, int w, int h, int b, double dArray[], DataBuffer data) { double samples[]; int idx = 0; @@ -917,19 +1019,25 @@ public abstract class SampleModel { } /** - * Sets the samples from an double array in the specified band for - * the specified rectangle of pixels. + * Sets the samples from an double array in the specified band for the + * specified rectangle of pixels. * - * @param x the X coordinate of the rectangle. - * @param y the Y coordinate of the rectangle. - * @param w the width of the rectangle. - * @param h the height of the rectangle. - * @param b the specified band. - * @param dArray the double array - * @param data the image data. + * @param x + * the X coordinate of the rectangle. + * @param y + * the Y coordinate of the rectangle. + * @param w + * the width of the rectangle. + * @param h + * the height of the rectangle. + * @param b + * the specified band. + * @param dArray + * the double array. + * @param data + * the image data. */ - public void setSamples(int x, int y, int w, int h, int b, double dArray[], - DataBuffer data) { + public void setSamples(int x, int y, int w, int h, int b, double dArray[], DataBuffer data) { int idx = 0; for (int i = y; i < y + h; i++) { for (int j = x; j < x + w; j++) { @@ -939,53 +1047,62 @@ public abstract class SampleModel { } /** - * Sets a sample of the specified band for the specified pixel - * in the DataBuffer as float value. + * Sets a sample of the specified band for the specified pixel in the + * DataBuffer as float value. * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the specified band. - * @param s the sample as float value. - * @param data the image data. + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the specified band. + * @param s + * the sample as float value. + * @param data + * the image data. */ public void setSample(int x, int y, int b, float s, DataBuffer data) { - setSample(x, y, b, (int) s, data); + setSample(x, y, b, (int)s, data); } /** - * Sets a sample of the specified band for the specified pixel - * in the DataBuffer as double value. + * Sets a sample of the specified band for the specified pixel in the + * DataBuffer as double value. * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the specified band. - * @param s the sample as double value. - * @param data the image data. + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the specified band. + * @param s + * the sample as double value. + * @param data + * the image data. */ public void setSample(int x, int y, int b, double s, DataBuffer data) { - setSample(x, y, b, (int) s, data); + setSample(x, y, b, (int)s, data); } /** - * Creates a DataBuffer object which corresponds to the SampleModel. - * - * @return the DataBuffer object which corresponds to - * the SampleModel. + * Creates a DataBuffer object which corresponds to the SampleModel. + * + * @return the DataBuffer object which corresponds to the SampleModel. */ public abstract DataBuffer createDataBuffer(); /** * Gets the sample size in bits for the specified band. * - * @param band the specified band. - * + * @param band + * the specified band. * @return the sample size in bits for the specified band. */ public abstract int getSampleSize(int band); /** * Gets an array of the sample size in bits for all bands. - * + * * @return an array of the sample size in bits for all bands. */ public abstract int[] getSampleSize(); @@ -1000,10 +1117,9 @@ public abstract class SampleModel { } /** - * Gets the transfer type used to transfer pixels via - * the getDataElements and setDataElements methods. - * Transfer type value can be one of the predefined type - * from DataBuffer class or not. + * Gets the transfer type used to transfer pixels via the getDataElements + * and setDataElements methods. Transfer type value can be one of the + * predefined type from DataBuffer class or not. * * @return the transfer type. */ @@ -1012,20 +1128,18 @@ public abstract class SampleModel { } /** - * Returns the number of data elements for pixel transfering - * via the getDataElements and setDataElements methods. + * Returns the number of data elements for pixel transferring via the + * getDataElements and setDataElements methods. * - * @return the number of data elements for pixel transfering - * via the getDataElements and setDataElements methods. + * @return the number of data elements for pixel transferring via the + * getDataElements and setDataElements methods. */ public abstract int getNumDataElements(); /** - * Gets the number of bands in the image data of this - * SampleModel object. + * Gets the number of bands in the image data of this SampleModel object. * - * @return the number of bands in the image data of this - * SampleModel object. + * @return the number of bands in the image data of this SampleModel object. */ public final int getNumBands() { return numBands; @@ -1050,4 +1164,3 @@ public abstract class SampleModel { } } - diff --git a/awt/java/awt/image/ShortLookupTable.java b/awt/java/awt/image/ShortLookupTable.java index 77c9c45722..4319d58056 100644 --- a/awt/java/awt/image/ShortLookupTable.java +++ b/awt/java/awt/image/ShortLookupTable.java @@ -23,27 +23,30 @@ package java.awt.image; - /** - * The ShortLookupTable class provides provides functionality for - * lookup operations, and is defined by an input short array for - * bands or components of image and an offset value. - * The offset value will be subtracted from the input values before - * indexing the input arrays. The output of a lookup operation is + * The ShortLookupTable class provides provides functionality for lookup + * operations, and is defined by an input short array for bands or components of + * image and an offset value. The offset value will be subtracted from the input + * values before indexing the input arrays. The output of a lookup operation is * represented as an unsigned short array. + * + * @since Android 1.0 */ public class ShortLookupTable extends LookupTable { - - /** The data. */ + + /** + * The data. + */ private short data[][]; /** - * Instantiates a new ShortLookupTable with the specified offset value - * and the specified short array which represents lookup table for - * all bands. + * Instantiates a new ShortLookupTable with the specified offset value and + * the specified short array which represents lookup table for all bands. * - * @param offset the offset value. - * @param data the data array. + * @param offset + * the offset value. + * @param data + * the data array. */ public ShortLookupTable(int offset, short[] data) { super(offset, 1); @@ -53,12 +56,14 @@ public class ShortLookupTable extends LookupTable { } /** - * Instantiates a new ShortLookupTable with the specified offset value - * and the specified short array of arrays which represents lookup table - * for each band. + * Instantiates a new ShortLookupTable with the specified offset value and + * the specified short array of arrays which represents lookup table for + * each band. * - * @param offset the offset value. - * @param data the data array of arrays for each band. + * @param offset + * the offset value. + * @param data + * the data array of arrays for each band. */ public ShortLookupTable(int offset, short[][] data) { super(offset, data.length); @@ -70,9 +75,9 @@ public class ShortLookupTable extends LookupTable { } /** - * Gets the lookup table of this ShortLookupTable object. If - * this ShortLookupTable object has one short array for all bands, - * the returned array length is one. + * Gets the lookup table of this ShortLookupTable object. If this + * ShortLookupTable object has one short array for all bands, the returned + * array length is one. * * @return the lookup table of this ShortLookupTable object. */ @@ -81,14 +86,14 @@ public class ShortLookupTable extends LookupTable { } /** - * Returns a short array which contains samples of the specified - * pixel which is translated with the lookup table of this - * ShortLookupTable object. The resulted array is stored to - * the dst array. - * - * @param src the source array. - * @param dst the destination array where the result can be stored. + * Returns a short array which contains samples of the specified pixel which + * is translated with the lookup table of this ShortLookupTable object. The + * resulted array is stored to the dst array. * + * @param src + * the source array. + * @param dst + * the destination array where the result can be stored. * @return the short array of translated samples of a pixel. */ public short[] lookupPixel(short[] src, short[] dst) { @@ -99,11 +104,11 @@ public class ShortLookupTable extends LookupTable { int offset = getOffset(); if (getNumComponents() == 1) { for (int i = 0; i < src.length; i++) { - dst[i] = data[0][src[i]-offset]; + dst[i] = data[0][src[i] - offset]; } } else { for (int i = 0; i < getNumComponents(); i++) { - dst[i] = data[i][src[i]-offset]; + dst[i] = data[i][src[i] - offset]; } } @@ -119,11 +124,11 @@ public class ShortLookupTable extends LookupTable { int offset = getOffset(); if (getNumComponents() == 1) { for (int i = 0; i < src.length; i++) { - dst[i] = data[0][src[i]-offset]; + dst[i] = data[0][src[i] - offset]; } } else { for (int i = 0; i < getNumComponents(); i++) { - dst[i] = data[i][src[i]-offset]; + dst[i] = data[i][src[i] - offset]; } } diff --git a/awt/java/awt/image/SinglePixelPackedSampleModel.java b/awt/java/awt/image/SinglePixelPackedSampleModel.java index 311395a1d6..69f3353b3a 100644 --- a/awt/java/awt/image/SinglePixelPackedSampleModel.java +++ b/awt/java/awt/image/SinglePixelPackedSampleModel.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.util.Arrays; @@ -25,39 +26,54 @@ import java.util.Arrays; import org.apache.harmony.awt.internal.nls.Messages; /** - * The SinglePixelPackedSampleModel class represents pixel data - * where several samples combine to create a single pixel and - * are stored in a single data array element. This class - * supports TYPE_BYTE, TYPE_USHORT, TYPE_INT data types. + * The SinglePixelPackedSampleModel class represents pixel data where several + * samples combine to create a single pixel and are stored in a single data + * array element. This class supports TYPE_BYTE, TYPE_USHORT, TYPE_INT data + * types. + * + * @since Android 1.0 */ public class SinglePixelPackedSampleModel extends SampleModel { - /** The bit masks. */ + /** + * The bit masks. + */ private int bitMasks[]; - /** The bit offsets. */ + /** + * The bit offsets. + */ private int bitOffsets[]; - /** The bit sizes. */ + /** + * The bit sizes. + */ private int bitSizes[]; - /** The scanline stride. */ + /** + * The scanline stride. + */ private int scanlineStride; - /** The max bit size. */ + /** + * The max bit size. + */ private int maxBitSize; /** * Instantiates a new SinglePixelPackedSampleModel with the specified * parameters. * - * @param dataType the data type of samples. - * @param w the width of the image data. - * @param h the height of the image data. - * @param bitMasks the bit masks for all the bands. + * @param dataType + * the data type of samples. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param bitMasks + * the bit masks for all the bands. */ - public SinglePixelPackedSampleModel(int dataType, int w, int h, - int bitMasks[]) { + public SinglePixelPackedSampleModel(int dataType, int w, int h, int bitMasks[]) { this(dataType, w, h, w, bitMasks); } @@ -65,20 +81,24 @@ public class SinglePixelPackedSampleModel extends SampleModel { * Instantiates a new SinglePixelPackedSampleModel with the specified * parameters. * - * @param dataType the data type of the samples. - * @param w the width of the image data. - * @param h the height of the image data. - * @param scanlineStride The scanline stride of the image data. - * @param bitMasks the bit masks for all the bands. + * @param dataType + * the data type of the samples. + * @param w + * the width of the image data. + * @param h + * the height of the image data. + * @param scanlineStride + * the scanline stride of the image data. + * @param bitMasks + * the bit masks for all the bands. */ - public SinglePixelPackedSampleModel(int dataType, int w, int h, - int scanlineStride, int bitMasks[]) { + public SinglePixelPackedSampleModel(int dataType, int w, int h, int scanlineStride, + int bitMasks[]) { super(dataType, w, h, bitMasks.length); - if (dataType != DataBuffer.TYPE_BYTE && - dataType != DataBuffer.TYPE_USHORT && - dataType != DataBuffer.TYPE_INT) { + if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT + && dataType != DataBuffer.TYPE_INT) { // awt.61=Unsupported data type: {0} throw new IllegalArgumentException(Messages.getString("awt.61", //$NON-NLS-1$ dataType)); @@ -109,8 +129,7 @@ public class SinglePixelPackedSampleModel extends SampleModel { if (mask != 0) { // awt.62=Wrong mask : {0} - throw new IllegalArgumentException(Messages.getString( - "awt.62", bitMasks[i])); //$NON-NLS-1$ + throw new IllegalArgumentException(Messages.getString("awt.62", bitMasks[i])); //$NON-NLS-1$ } } @@ -132,39 +151,39 @@ public class SinglePixelPackedSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } switch (getTransferType()) { - case DataBuffer.TYPE_BYTE: - byte bdata[]; - if (obj == null) { - bdata = new byte[1]; - } else { - bdata = (byte[]) obj; - } + case DataBuffer.TYPE_BYTE: + byte bdata[]; + if (obj == null) { + bdata = new byte[1]; + } else { + bdata = (byte[])obj; + } - bdata[0] = (byte) data.getElem(y * scanlineStride + x); - obj = bdata; - break; - case DataBuffer.TYPE_USHORT: - short sdata[]; - if (obj == null) { - sdata = new short[1]; - } else { - sdata = (short[]) obj; - } + bdata[0] = (byte)data.getElem(y * scanlineStride + x); + obj = bdata; + break; + case DataBuffer.TYPE_USHORT: + short sdata[]; + if (obj == null) { + sdata = new short[1]; + } else { + sdata = (short[])obj; + } - sdata[0] = (short) data.getElem(y * scanlineStride + x); - obj = sdata; - break; - case DataBuffer.TYPE_INT: - int idata[]; - if (obj == null) { - idata = new int[1]; - } else { - idata = (int[]) obj; - } + sdata[0] = (short)data.getElem(y * scanlineStride + x); + obj = sdata; + break; + case DataBuffer.TYPE_INT: + int idata[]; + if (obj == null) { + idata = new int[1]; + } else { + idata = (int[])obj; + } - idata[0] = data.getElem(y * scanlineStride + x); - obj = idata; - break; + idata[0] = data.getElem(y * scanlineStride + x); + obj = idata; + break; } return obj; } @@ -176,26 +195,26 @@ public class SinglePixelPackedSampleModel extends SampleModel { throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } switch (getTransferType()) { - case DataBuffer.TYPE_BYTE: - data.setElem(y * scanlineStride + x, ((byte[]) obj)[0] & 0xff); - break; - case DataBuffer.TYPE_USHORT: - data.setElem(y * scanlineStride + x, ((short[]) obj)[0] & 0xffff); - break; - case DataBuffer.TYPE_INT: - data.setElem(y * scanlineStride + x, ((int[]) obj)[0]); - break; + case DataBuffer.TYPE_BYTE: + data.setElem(y * scanlineStride + x, ((byte[])obj)[0] & 0xff); + break; + case DataBuffer.TYPE_USHORT: + data.setElem(y * scanlineStride + x, ((short[])obj)[0] & 0xffff); + break; + case DataBuffer.TYPE_INT: + data.setElem(y * scanlineStride + x, ((int[])obj)[0]); + break; } } /** - * Compares this SinglePixelPackedSampleModel object with - * the specified object. - * - * @param o the Object to be compared. + * Compares this SinglePixelPackedSampleModel object with the specified + * object. * - * @return true, if this SinglePixelPackedSampleModel object is - * equal to the specified object, false otherwise. + * @param o + * the Object to be compared. + * @return true, if this SinglePixelPackedSampleModel object is equal to the + * specified object, false otherwise. */ @Override public boolean equals(Object o) { @@ -203,21 +222,20 @@ public class SinglePixelPackedSampleModel extends SampleModel { return false; } - SinglePixelPackedSampleModel model = (SinglePixelPackedSampleModel) o; - return this.width == model.width && - this.height == model.height && - this.numBands == model.numBands && - this.dataType == model.dataType && - Arrays.equals(this.bitMasks, model.bitMasks) && - Arrays.equals(this.bitOffsets, model.bitOffsets) && - Arrays.equals(this.bitSizes, model.bitSizes) && - this.scanlineStride == model.scanlineStride; + SinglePixelPackedSampleModel model = (SinglePixelPackedSampleModel)o; + return this.width == model.width && this.height == model.height + && this.numBands == model.numBands && this.dataType == model.dataType + && Arrays.equals(this.bitMasks, model.bitMasks) + && Arrays.equals(this.bitOffsets, model.bitOffsets) + && Arrays.equals(this.bitSizes, model.bitSizes) + && this.scanlineStride == model.scanlineStride; } @Override public SampleModel createSubsetSampleModel(int bands[]) { if (bands.length > this.numBands) { - // awt.64=The number of the bands in the subset is greater than the number of bands in the sample model + // awt.64=The number of the bands in the subset is greater than the + // number of bands in the sample model throw new RasterFormatException(Messages.getString("awt.64")); //$NON-NLS-1$ } @@ -225,14 +243,13 @@ public class SinglePixelPackedSampleModel extends SampleModel { for (int i = 0; i < bands.length; i++) { masks[i] = this.bitMasks[bands[i]]; } - return new SinglePixelPackedSampleModel(this.dataType, this.width, - this.height, this.scanlineStride, masks); + return new SinglePixelPackedSampleModel(this.dataType, this.width, this.height, + this.scanlineStride, masks); } @Override public SampleModel createCompatibleSampleModel(int w, int h) { - return new SinglePixelPackedSampleModel(this.dataType, w, h, - this.bitMasks); + return new SinglePixelPackedSampleModel(this.dataType, w, h, this.bitMasks); } @Override @@ -277,10 +294,9 @@ public class SinglePixelPackedSampleModel extends SampleModel { } @Override - public int[] getPixels(int x, int y, int w, int h, int iArray[], - DataBuffer data) { - if ((x < 0) || (y < 0) || ((long) x + (long) w > this.width) - || ((long) y + (long) h > this.height)) { + public int[] getPixels(int x, int y, int w, int h, int iArray[], DataBuffer data) { + if ((x < 0) || (y < 0) || ((long)x + (long)w > this.width) + || ((long)y + (long)h > this.height)) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } @@ -306,13 +322,11 @@ public class SinglePixelPackedSampleModel extends SampleModel { } @Override - public void setPixels(int x, int y, int w, int h, int iArray[], - DataBuffer data) { - if ((x < 0) || (y < 0) || ((long) x + (long) w > this.width) - || ((long) y + (long) h > this.height)) { + public void setPixels(int x, int y, int w, int h, int iArray[], DataBuffer data) { + if ((x < 0) || (y < 0) || ((long)x + (long)w > this.width) + || ((long)y + (long)h > this.height)) { // awt.63=Coordinates are not in bounds - throw new ArrayIndexOutOfBoundsException(Messages - .getString("awt.63")); //$NON-NLS-1$ + throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } int idx = 0; @@ -339,13 +353,11 @@ public class SinglePixelPackedSampleModel extends SampleModel { } @Override - public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], - DataBuffer data) { - if ((x < 0) || (y < 0) || ((long) x + (long) w > this.width) - || ((long) y + (long) h > this.height)) { + public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { + if ((x < 0) || (y < 0) || ((long)x + (long)w > this.width) + || ((long)y + (long)h > this.height)) { // awt.63=Coordinates are not in bounds - throw new ArrayIndexOutOfBoundsException(Messages - .getString("awt.63")); //$NON-NLS-1$ + throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } int samples[]; @@ -367,10 +379,9 @@ public class SinglePixelPackedSampleModel extends SampleModel { } @Override - public void setSamples(int x, int y, int w, int h, int b, int iArray[], - DataBuffer data) { - if ((x < 0) || (y < 0) || ((long) x + (long) w > this.width) - || ((long) y + (long) h > this.height)) { + public void setSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { + if ((x < 0) || (y < 0) || ((long)x + (long)w > this.width) + || ((long)y + (long)h > this.height)) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } @@ -389,15 +400,15 @@ public class SinglePixelPackedSampleModel extends SampleModel { int size = (this.height - 1) * scanlineStride + width; switch (this.dataType) { - case DataBuffer.TYPE_BYTE: - data = new DataBufferByte(size); - break; - case DataBuffer.TYPE_USHORT: - data = new DataBufferUShort(size); - break; - case DataBuffer.TYPE_INT: - data = new DataBufferInt(size); - break; + case DataBuffer.TYPE_BYTE: + data = new DataBufferByte(size); + break; + case DataBuffer.TYPE_USHORT: + data = new DataBufferUShort(size); + break; + case DataBuffer.TYPE_INT: + data = new DataBufferInt(size); + break; } return data; } @@ -405,9 +416,10 @@ public class SinglePixelPackedSampleModel extends SampleModel { /** * Gets the offset of the specified pixel in the data array. * - * @param x the X coordinate of the specified pixel. - * @param y the Y coordinate of the specified pixel. - * + * @param x + * the X coordinate of the specified pixel. + * @param y + * the Y coordinate of the specified pixel. * @return the offset of the specified pixel. */ public int getOffset(int x, int y) { @@ -425,7 +437,7 @@ public class SinglePixelPackedSampleModel extends SampleModel { } /** - * Gets an array of the bit offsets of the data array elements. + * Gets an array of the bit offsets of the data array elements. * * @return an array of the bit offsets. */ @@ -505,4 +517,3 @@ public class SinglePixelPackedSampleModel extends SampleModel { } } - diff --git a/awt/java/awt/image/TileObserver.java b/awt/java/awt/image/TileObserver.java index 39ded02ef4..7dd97e29b5 100644 --- a/awt/java/awt/image/TileObserver.java +++ b/awt/java/awt/image/TileObserver.java @@ -18,27 +18,32 @@ * @author Igor V. Stolyarov * @version $Revision$ */ -package java.awt.image; +package java.awt.image; /** - * An asynchronous update interface for receiving notifications - * about tile information when tiles of a WritableRenderedImage - * become modifiable or unmodifiable. + * An asynchronous update interface for receiving notifications about tile + * information when tiles of a WritableRenderedImage become modifiable or + * unmodifiable. + * + * @since Android 1.0 */ public interface TileObserver { /** - * This method is called when information about a tile - * update is available. + * This method is called when information about a tile update is available. * - * @param source the source image. - * @param tileX the X index of the tile. - * @param tileY the Y index of the tile. - * @param willBeWritable parameter which indicates whether - * the tile will be grabbed for writing or be released. + * @param source + * the source image. + * @param tileX + * the X index of the tile. + * @param tileY + * the Y index of the tile. + * @param willBeWritable + * parameter which indicates whether the tile will be grabbed for + * writing or be released. */ - public void tileUpdate(WritableRenderedImage source, int tileX, int tileY, boolean willBeWritable); + public void tileUpdate(WritableRenderedImage source, int tileX, int tileY, + boolean willBeWritable); } - diff --git a/awt/java/awt/image/VolatileImage.java b/awt/java/awt/image/VolatileImage.java index 3b0cfb2d37..f24e866bdb 100644 --- a/awt/java/awt/image/VolatileImage.java +++ b/awt/java/awt/image/VolatileImage.java @@ -18,6 +18,7 @@ * @author Alexey A. Petrenko * @version $Revision$ */ + package java.awt.image; import java.awt.Graphics; @@ -28,35 +29,36 @@ import java.awt.ImageCapabilities; import java.awt.Transparency; /** - * The VolatileImage abstract class represents an image which can lose - * its contents at any point. VolatileImage objects are device specific. - * This class provies methods for checking if operation of this image - * are compatible for the GraphicsConfiguration. + * The VolatileImage abstract class represents an image which can lose its + * contents at any point. VolatileImage objects are device specific. This class + * provides methods for checking if operation of this image are compatible for + * the GraphicsConfiguration. + * + * @since Android 1.0 */ public abstract class VolatileImage extends Image - // Volatile image implements Transparency since 1.5 - implements Transparency { - - /** - * The Constant IMAGE_INCOMPATIBLE indicates that this VolatileImage - * is not applicable for the GraphicsConfiguration object. +// Volatile image implements Transparency since 1.5 + implements Transparency { + + /** + * The Constant IMAGE_INCOMPATIBLE indicates that this VolatileImage is not + * applicable for the GraphicsConfiguration object. */ public static final int IMAGE_INCOMPATIBLE = 2; - /** - * The Constant IMAGE_OK indicates that VolatileImage is ready - * for using. + /** + * The Constant IMAGE_OK indicates that VolatileImage is ready for using. */ public static final int IMAGE_OK = 0; - /** - * The Constant IMAGE_RESTORED indicates that VolatileImage - * will be ready to use after restoring. + /** + * The Constant IMAGE_RESTORED indicates that VolatileImage will be ready to + * use after restoring. */ public static final int IMAGE_RESTORED = 1; - /** - * The transparency value of this image. + /** + * The transparency value of this image. */ protected int transparency = OPAQUE; @@ -68,8 +70,8 @@ public abstract class VolatileImage extends Image } /** - * Returns true if rendering data is lost during validating. - * This method should be called after rendering operation of image. + * Returns true if rendering data is lost during validating. This method + * should be called after rendering operation of image. * * @return true, if contents lost during validating, false otherwise. */ @@ -98,8 +100,8 @@ public abstract class VolatileImage extends Image public abstract int getHeight(); /** - * Gets a BufferedImage representation of current VolatileImage that - * won't be affected by any changes to this VolatileImage. + * Gets a BufferedImage representation of current VolatileImage that won't + * be affected by any changes to this VolatileImage. * * @return a BufferedImage representation of current VolatileImage. */ @@ -113,14 +115,14 @@ public abstract class VolatileImage extends Image public abstract int getWidth(); /** - * Validates the drawing surface of the image if the surface had been - * lost and if the spacified GraphicsConfiguration object is - * applicable to this image. - * - * @param gc GraphicsConfiguration object. + * Validates the drawing surface of the image if the surface had been lost + * and if the specified GraphicsConfiguration object is applicable to this + * image. * + * @param gc + * the GraphicsConfiguration object. * @return one of the image status constants: IMAGE_OK, IMAGE_RESTORED or - * IMAGE_INCOMPATIBLE. + * IMAGE_INCOMPATIBLE. */ public abstract int validate(GraphicsConfiguration gc); diff --git a/awt/java/awt/image/WritableRaster.java b/awt/java/awt/image/WritableRaster.java index 0893915ea4..51366ee64c 100644 --- a/awt/java/awt/image/WritableRaster.java +++ b/awt/java/awt/image/WritableRaster.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.Point; @@ -26,114 +27,136 @@ import java.awt.Rectangle; import org.apache.harmony.awt.internal.nls.Messages; /** - * The WritableRaster class provides functionality for - * writing samples and pixel capabilities to the Raster. + * The WritableRaster class provides functionality for writing samples and pixel + * capabilities to the Raster. + * + * @since Android 1.0 */ public class WritableRaster extends Raster { /** - * Instantiates a new WritableRaster object with the specified - * SampleModel, DataBuffer, rectangular region and parent - * WritableRaster. + * Instantiates a new WritableRaster object with the specified SampleModel, + * DataBuffer, rectangular region and parent WritableRaster. * - * @param sampleModel the specified SampleModel. - * @param dataBuffer the specified DataBuffer. - * @param aRegion the rectangular region which defines the new image bounds. - * @param sampleModelTranslate this point defines the translation point - * from the SampleModel to the new WritableRaster coordinates. - * @param parent the parent of this WritableRaster. + * @param sampleModel + * the specified SampleModel. + * @param dataBuffer + * the specified DataBuffer. + * @param aRegion + * the rectangular region which defines the new image bounds. + * @param sampleModelTranslate + * this point defines the translation point from the SampleModel + * to the new WritableRaster coordinates. + * @param parent + * the parent of this WritableRaster. */ - protected WritableRaster(SampleModel sampleModel, DataBuffer dataBuffer, - Rectangle aRegion, Point sampleModelTranslate, - WritableRaster parent) { + protected WritableRaster(SampleModel sampleModel, DataBuffer dataBuffer, Rectangle aRegion, + Point sampleModelTranslate, WritableRaster parent) { super(sampleModel, dataBuffer, aRegion, sampleModelTranslate, parent); } /** - * Instantiates a new WritableRaster object with the specified - * SampleModel which defines a layout of this WritableRaster and - * DataBuffer objects which defines the image data. + * Instantiates a new WritableRaster object with the specified SampleModel + * which defines a layout of this WritableRaster and DataBuffer objects + * which defines the image data. * - * @param sampleModel the specified SampleModel. - * @param dataBuffer the specified DataBuffer. - * @param origin the point of origin. + * @param sampleModel + * the specified SampleModel. + * @param dataBuffer + * the specified DataBuffer. + * @param origin + * the point of origin. */ - protected WritableRaster(SampleModel sampleModel, DataBuffer dataBuffer, - Point origin) { - this(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y, - sampleModel.width, sampleModel.height), origin, null); + protected WritableRaster(SampleModel sampleModel, DataBuffer dataBuffer, Point origin) { + this(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y, sampleModel.width, + sampleModel.height), origin, null); } /** * Instantiates a new WritableRaster with the specified SampleModel. * - * @param sampleModel the specified SampleModel. - * @param origin the origin. + * @param sampleModel + * the specified SampleModel. + * @param origin + * the origin. */ protected WritableRaster(SampleModel sampleModel, Point origin) { - this(sampleModel, sampleModel.createDataBuffer(), new Rectangle( - origin.x, origin.y, sampleModel.width, sampleModel.height), - origin, null); + this(sampleModel, sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, + sampleModel.width, sampleModel.height), origin, null); } /** - * Sets the data for a single pixel from an input Object which - * represents an array of primitive types: DataBuffer.TYPE_BYTE, - * DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, - * DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. + * Sets the data for a single pixel from an input Object which represents an + * array of primitive types: DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, + * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or + * DataBuffer.TYPE_DOUBLE. * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param inData the input data. + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param inData + * the input data. */ public void setDataElements(int x, int y, Object inData) { - sampleModel.setDataElements(x - sampleModelTranslateX, - y - sampleModelTranslateY, inData, dataBuffer); + sampleModel.setDataElements(x - sampleModelTranslateX, y - sampleModelTranslateY, inData, + dataBuffer); } /** - * Sets the data elements which represent pixel data to the specified - * rectangle area as a primitive array. The following image data types - * are supported: DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, - * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, - * or DataBuffer.TYPE_DOUBLE. + * Sets the data elements which represent pixel data to the specified + * rectangle area as a primitive array. The following image data types are + * supported: DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, + * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or + * DataBuffer.TYPE_DOUBLE. * - * @param x the X coordinate of the rectangle of pixels. - * @param y the Y coordinate of the rectangle of pixels. - * @param w the width of the rectangle of pixels. - * @param h the height of the rectangle of pixels. - * @param inData the array of primitive type data to be set to the - * specified area. + * @param x + * the X coordinate of the rectangle of pixels. + * @param y + * the Y coordinate of the rectangle of pixels. + * @param w + * the width of the rectangle of pixels. + * @param h + * the height of the rectangle of pixels. + * @param inData + * the array of primitive type data to be set to the specified + * area. */ public void setDataElements(int x, int y, int w, int h, Object inData) { - sampleModel.setDataElements(x - sampleModelTranslateX, - y - sampleModelTranslateY, w, h, inData, dataBuffer); + sampleModel.setDataElements(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, + inData, dataBuffer); } /** - * Creates the child of this WritableRaster by sharing the specified - * rectangular area in this WritableRaster. - * The parentX, parentY, width and height parameters specify rectangular - * area to be shared. - * - * @param parentX the X coordinate of the upper left corner of - * the shared rectangle with respect to this WritableRaster' coordinates. - * @param parentY the Y coordinate of the upper left corner of - * the shared rectangle with respect to this WritableRaster' coordinates. - * @param w the width of the child area. - * @param h the height of the child area. - * @param childMinX the X coordinate of child area mapped to the parentX - * coordinate. - * @param childMinY the Y coordinate of child area mapped to the parentY - * coordinate. - * @param bandList the array of band indicies. + * Creates the child of this WritableRaster by sharing the specified + * rectangular area in this WritableRaster. The parentX, parentY, width and + * height parameters specify rectangular area to be shared. * + * @param parentX + * the X coordinate of the upper left corner of the shared + * rectangle with respect to this WritableRaster' coordinates. + * @param parentY + * the Y coordinate of the upper left corner of the shared + * rectangle with respect to this WritableRaster' coordinates. + * @param w + * the width of the child area. + * @param h + * the height of the child area. + * @param childMinX + * the X coordinate of child area mapped to the parentX + * coordinate. + * @param childMinY + * the Y coordinate of child area mapped to the parentY + * coordinate. + * @param bandList + * the array of band indices. * @return the child WritableRaster. */ - public WritableRaster createWritableChild(int parentX, int parentY, int w, - int h, int childMinX, int childMinY, int bandList[]) { + public WritableRaster createWritableChild(int parentX, int parentY, int w, int h, + int childMinX, int childMinY, int bandList[]) { if (w <= 0 || h <= 0) { - // awt.244=Width or Height of child Raster is less than or equal to zero + // awt.244=Width or Height of child Raster is less than or equal to + // zero throw new RasterFormatException(Messages.getString("awt.244")); //$NON-NLS-1$ } @@ -147,22 +170,22 @@ public class WritableRaster extends Raster { throw new RasterFormatException(Messages.getString("awt.246")); //$NON-NLS-1$ } - if ((long) parentX + w > Integer.MAX_VALUE) { + if ((long)parentX + w > Integer.MAX_VALUE) { // awt.247=parentX + w results in integer overflow throw new RasterFormatException(Messages.getString("awt.247")); //$NON-NLS-1$ } - if ((long) parentY + h > Integer.MAX_VALUE) { + if ((long)parentY + h > Integer.MAX_VALUE) { // awt.248=parentY + h results in integer overflow throw new RasterFormatException(Messages.getString("awt.248")); //$NON-NLS-1$ } - if ((long) childMinX + w > Integer.MAX_VALUE) { + if ((long)childMinX + w > Integer.MAX_VALUE) { // awt.249=childMinX + w results in integer overflow throw new RasterFormatException(Messages.getString("awt.249")); //$NON-NLS-1$ } - if ((long) childMinY + h > Integer.MAX_VALUE) { + if ((long)childMinY + h > Integer.MAX_VALUE) { // awt.24A=childMinY + h results in integer overflow throw new RasterFormatException(Messages.getString("awt.24A")); //$NON-NLS-1$ } @@ -179,59 +202,60 @@ public class WritableRaster extends Raster { int childTranslateY = childMinY - parentY; return new WritableRaster(childModel, dataBuffer, - new Rectangle(childMinX, childMinY, w, h), - new Point(childTranslateX + sampleModelTranslateX, - childTranslateY + sampleModelTranslateY), - this); + new Rectangle(childMinX, childMinY, w, h), new Point(childTranslateX + + sampleModelTranslateX, childTranslateY + sampleModelTranslateY), this); } /** - * Creates the translated child of this WritableRaster. - * New WritableRaster object is a reference to the this - * WritableRaster and with different location. - * - * @param childMinX the X coordinate of the new WritableRaster. - * @param childMinY the Y coordinate of the new WritableRaster. + * Creates the translated child of this WritableRaster. New WritableRaster + * object is a reference to the this WritableRaster and with different + * location. * + * @param childMinX + * the X coordinate of the new WritableRaster. + * @param childMinY + * the Y coordinate of the new WritableRaster. * @return the WritableRaster. */ - public WritableRaster createWritableTranslatedChild(int childMinX, - int childMinY) { - return createWritableChild(minX, minY, width, height, childMinX, - childMinY, null); + public WritableRaster createWritableTranslatedChild(int childMinX, int childMinY) { + return createWritableChild(minX, minY, width, height, childMinX, childMinY, null); } /** - * Gets the parent WritableRaster for this WritableRaster object. + * Gets the parent WritableRaster for this WritableRaster object. * * @return the parent WritableRaster for this WritableRaster object. */ public WritableRaster getWritableParent() { - return (WritableRaster) parent; + return (WritableRaster)parent; } /** - * Sets pixels from the specified source Raster srcRaster to this + * Sets pixels from the specified source Raster srcRaster to this * WritableRaster. * - * @param srcRaster the source Raster. + * @param srcRaster + * the source Raster. */ public void setRect(Raster srcRaster) { setRect(0, 0, srcRaster); } /** - * Sets pixels from the specified source Raster srcRaster to this - * WritableRaster. Each pixel with (x, y) coordinates from the source - * Raster is copied to pixel with (x+dx, y+dy) coordinates in this - * WritableRaster. The pixels with (x+dx, y+dy) coordinates which - * are out the bounds of this raster are ignored. - * - * @param dx the distance the pixel's X coordinate in the source - * Raster is translated when writtien to this WritableRaster. - * @param dy the distance the pixel's Y coordinate in the source - * Raster is translated when writtien to this WritableRaster. - * @param srcRaster the source Raster. + * Sets pixels from the specified source Raster srcRaster to this + * WritableRaster. Each pixel with (x, y) coordinates from the source Raster + * is copied to pixel with (x+dx, y+dy) coordinates in this WritableRaster. + * The pixels with (x+dx, y+dy) coordinates which are out the bounds of this + * raster are ignored. + * + * @param dx + * the distance the pixel's X coordinate in the source Raster is + * translated when writtien to this WritableRaster. + * @param dy + * the distance the pixel's Y coordinate in the source Raster is + * translated when writtien to this WritableRaster. + * @param srcRaster + * the source Raster. */ public void setRect(int dx, int dy, Raster srcRaster) { int w = srcRaster.getWidth(); @@ -272,47 +296,47 @@ public class WritableRaster extends Raster { } switch (sampleModel.getDataType()) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_SHORT: - case DataBuffer.TYPE_USHORT: - case DataBuffer.TYPE_INT: - int iPixelsLine[] = null; - for (int i = 0; i < h; i++) { - iPixelsLine = srcRaster.getPixels(srcX, srcY + i, w, 1, - iPixelsLine); - setPixels(dstX, dstY + i, w, 1, iPixelsLine); - } - break; - - case DataBuffer.TYPE_FLOAT: - float fPixelsLine[] = null; - for (int i = 0; i < h; i++) { - fPixelsLine = srcRaster.getPixels(srcX, srcY + i, w, 1, - fPixelsLine); - setPixels(dstX, dstY + i, w, 1, fPixelsLine); - } - break; - - case DataBuffer.TYPE_DOUBLE: - double dPixelsLine[] = null; - for (int i = 0; i < h; i++) { - dPixelsLine = srcRaster.getPixels(srcX, srcY + i, w, 1, - dPixelsLine); - setPixels(dstX, dstY + i, w, 1, dPixelsLine); - } - break; + case DataBuffer.TYPE_BYTE: + case DataBuffer.TYPE_SHORT: + case DataBuffer.TYPE_USHORT: + case DataBuffer.TYPE_INT: + int iPixelsLine[] = null; + for (int i = 0; i < h; i++) { + iPixelsLine = srcRaster.getPixels(srcX, srcY + i, w, 1, iPixelsLine); + setPixels(dstX, dstY + i, w, 1, iPixelsLine); + } + break; + + case DataBuffer.TYPE_FLOAT: + float fPixelsLine[] = null; + for (int i = 0; i < h; i++) { + fPixelsLine = srcRaster.getPixels(srcX, srcY + i, w, 1, fPixelsLine); + setPixels(dstX, dstY + i, w, 1, fPixelsLine); + } + break; + + case DataBuffer.TYPE_DOUBLE: + double dPixelsLine[] = null; + for (int i = 0; i < h; i++) { + dPixelsLine = srcRaster.getPixels(srcX, srcY + i, w, 1, dPixelsLine); + setPixels(dstX, dstY + i, w, 1, dPixelsLine); + } + break; } } /** - * Sets the data for a rectangle of pixels from an input Raster to - * this WritableRaster. + * Sets the data for a rectangle of pixels from an input Raster to this + * WritableRaster. * - * @param x the X coordinate of the point where the data of - * the input Raster is to be written. - * @param y the Y coordinate of the point where the data of - * the input Raster is to be written. - * @param inRaster the input Raster. + * @param x + * the X coordinate of the point where the data of the input + * Raster is to be written. + * @param y + * the Y coordinate of the point where the data of the input + * Raster is to be written. + * @param inRaster + * the input Raster. */ public void setDataElements(int x, int y, Raster inRaster) { int dstX = x + inRaster.getMinX(); @@ -321,8 +345,8 @@ public class WritableRaster extends Raster { int w = inRaster.getWidth(); int h = inRaster.getHeight(); - if (dstX < this.minX || dstX + w > this.minX + this.width || - dstY < this.minY || dstY + h > this.minY + this.height) { + if (dstX < this.minX || dstX + w > this.minX + this.width || dstY < this.minY + || dstY + h > this.minY + this.height) { // awt.63=Coordinates are not in bounds throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ } @@ -338,179 +362,231 @@ public class WritableRaster extends Raster { } /** - * Sets a int array of samples for the specified pixel - * in this WritableRaster. + * Sets an integer array of samples for the specified pixel in this + * WritableRaster. * - * @param x the pixel's X coordinate. - * @param y the pixel's Y coordinate. - * @param iArray the int array of samples. + * @param x + * the pixel's X coordinate. + * @param y + * the pixel's Y coordinate. + * @param iArray + * the integer array of samples. */ public void setPixel(int x, int y, int iArray[]) { - sampleModel.setPixel(x - sampleModelTranslateX, - y - sampleModelTranslateY, iArray, dataBuffer); + sampleModel.setPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, iArray, + dataBuffer); } /** - * Sets a float array of samples for the specified pixel - * in this WritableRaster. + * Sets a float array of samples for the specified pixel in this + * WritableRaster. * - * @param x the pixel's X coordinate. - * @param y the pixel's Y coordinate. - * @param fArray the float array of samples. + * @param x + * the pixel's X coordinate. + * @param y + * the pixel's Y coordinate. + * @param fArray + * the float array of samples. */ public void setPixel(int x, int y, float fArray[]) { - sampleModel.setPixel(x - sampleModelTranslateX, - y - sampleModelTranslateY, fArray, dataBuffer); + sampleModel.setPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, fArray, + dataBuffer); } /** - * Sets a double array of samples for the specified pixel - * in this WritableRaster. + * Sets a double array of samples for the specified pixel in this + * WritableRaster. * - * @param x the pixel's X coordinate. - * @param y the pixel's Y coordinate. - * @param dArray the double array of samples. + * @param x + * the pixel's X coordinate. + * @param y + * the pixel's Y coordinate. + * @param dArray + * the double array of samples. */ public void setPixel(int x, int y, double dArray[]) { - sampleModel.setPixel(x - sampleModelTranslateX, - y - sampleModelTranslateY, dArray, dataBuffer); + sampleModel.setPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, dArray, + dataBuffer); } /** - * Sets a int array of samples for the specified rectangular area - * of pixels in this WritableRaster. + * Sets a integer array of samples for the specified rectangular area of + * pixels in this WritableRaster. * - * @param x the X coordinate of rectangular area. - * @param y the Y coordinate of rectangular area. - * @param w the width of rectangular area. - * @param h the height of rectangular area. - * @param iArray the int array of samples. + * @param x + * the X coordinate of rectangular area. + * @param y + * the Y coordinate of rectangular area. + * @param w + * the width of rectangular area. + * @param h + * the height of rectangular area. + * @param iArray + * the integer array of samples. */ public void setPixels(int x, int y, int w, int h, int iArray[]) { - sampleModel.setPixels(x - sampleModelTranslateX, - y - sampleModelTranslateY, w, h, iArray, dataBuffer); + sampleModel.setPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, iArray, + dataBuffer); } /** - * Sets a float array of samples for the specified rectangular area - * of pixels in this WritableRaster. + * Sets a float array of samples for the specified rectangular area of + * pixels in this WritableRaster. * - * @param x the X coordinate of rectangular area. - * @param y the Y coordinate of rectangular area. - * @param w the width of rectangular area. - * @param h the height of rectangular area. - * @param fArray the float array of samples. + * @param x + * the X coordinate of rectangular area. + * @param y + * the Y coordinate of rectangular area. + * @param w + * the width of rectangular area. + * @param h + * the height of rectangular area. + * @param fArray + * the float array of samples. */ public void setPixels(int x, int y, int w, int h, float fArray[]) { - sampleModel.setPixels(x - sampleModelTranslateX, - y - sampleModelTranslateY, w, h, fArray, dataBuffer); + sampleModel.setPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, fArray, + dataBuffer); } /** - * Sets a double array of samples for the specified rectangular area - * of pixels in this WritableRaster. + * Sets a double array of samples for the specified rectangular area of + * pixels in this WritableRaster. * - * @param x the X coordinate of rectangular area. - * @param y the Y coordinate of rectangular area. - * @param w the width of rectangular area. - * @param h the height of rectangular area. - * @param dArray the double array of samples. + * @param x + * the X coordinate of rectangular area. + * @param y + * the Y coordinate of rectangular area. + * @param w + * the width of rectangular area. + * @param h + * the height of rectangular area. + * @param dArray + * the double array of samples. */ public void setPixels(int x, int y, int w, int h, double dArray[]) { - sampleModel.setPixels(x - sampleModelTranslateX, - y - sampleModelTranslateY, w, h, dArray, dataBuffer); + sampleModel.setPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, dArray, + dataBuffer); } /** - * Sets the samples for the specified band and the specified - * rectangular area of pixels with an int array of samples. + * Sets the samples for the specified band and the specified rectangular + * area of pixels with an integer array of samples. * - * @param x the X coordinate of the area of pixels. - * @param y the Y coordinate of the area of pixels. - * @param w the width of the area of pixels. - * @param h the height of the area of pixels. - * @param b the specified band. - * @param iArray the int array of samples. - + * @param x + * the X coordinate of the area of pixels. + * @param y + * the Y coordinate of the area of pixels. + * @param w + * the width of the area of pixels. + * @param h + * the height of the area of pixels. + * @param b + * the specified band. + * @param iArray + * the integer array of samples. */ public void setSamples(int x, int y, int w, int h, int b, int iArray[]) { - sampleModel.setSamples(x - sampleModelTranslateX, - y - sampleModelTranslateY, w, h, b, iArray, dataBuffer); + sampleModel.setSamples(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, b, + iArray, dataBuffer); } /** - * Sets the samples for the specified band and the specified - * rectangular area of pixels with a float array of samples. + * Sets the samples for the specified band and the specified rectangular + * area of pixels with a float array of samples. * - * @param x the X coordinate of the area of pixels. - * @param y the Y coordinate of the area of pixels. - * @param w the width of the area of pixels. - * @param h the height of the area of pixels. - * @param b the specified band. - * @param fArray the float array of samples. + * @param x + * the X coordinate of the area of pixels. + * @param y + * the Y coordinate of the area of pixels. + * @param w + * the width of the area of pixels. + * @param h + * the height of the area of pixels. + * @param b + * the specified band. + * @param fArray + * the float array of samples. */ public void setSamples(int x, int y, int w, int h, int b, float fArray[]) { - sampleModel.setSamples(x - sampleModelTranslateX, - y - sampleModelTranslateY, w, h, b, fArray, dataBuffer); + sampleModel.setSamples(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, b, + fArray, dataBuffer); } /** - * Sets the samples for the specified band and the specified - * rectangular area of pixels with a double array of samples. + * Sets the samples for the specified band and the specified rectangular + * area of pixels with a double array of samples. * - * @param x the X coordinate of the area of pixels. - * @param y the Y coordinate of the area of pixels. - * @param w the width of the area of pixels. - * @param h the height of the area of pixels. - * @param b the specified band. - * @param dArray the double array of samples. + * @param x + * the X coordinate of the area of pixels. + * @param y + * the Y coordinate of the area of pixels. + * @param w + * the width of the area of pixels. + * @param h + * the height of the area of pixels. + * @param b + * the specified band. + * @param dArray + * the double array of samples. */ public void setSamples(int x, int y, int w, int h, int b, double dArray[]) { - sampleModel.setSamples(x - sampleModelTranslateX, - y - sampleModelTranslateY, w, h, b, dArray, dataBuffer); + sampleModel.setSamples(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, b, + dArray, dataBuffer); } /** - * Sets the sample for the specified band and the specified - * pixel with an int sample. + * Sets the sample for the specified band and the specified pixel with an + * integer sample. * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the specified band. - * @param s the sample to be set. + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the specified band. + * @param s + * the sample to be set. */ public void setSample(int x, int y, int b, int s) { - sampleModel.setSample(x - sampleModelTranslateX, - y - sampleModelTranslateY, b, s, dataBuffer); + sampleModel.setSample(x - sampleModelTranslateX, y - sampleModelTranslateY, b, s, + dataBuffer); } /** - * Sets the sample for the specified band and the specified - * pixel with a float sample. + * Sets the sample for the specified band and the specified pixel with a + * float sample. * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the specified band. - * @param s the sample to be set. + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the specified band. + * @param s + * the sample to be set. */ public void setSample(int x, int y, int b, float s) { - sampleModel.setSample(x - sampleModelTranslateX, - y - sampleModelTranslateY, b, s, dataBuffer); + sampleModel.setSample(x - sampleModelTranslateX, y - sampleModelTranslateY, b, s, + dataBuffer); } /** - * Sets the sample for the specified band and the specified - * pixel with a int sample. + * Sets the sample for the specified band and the specified pixel with an + * integer sample. * - * @param x the X coordinate of the pixel. - * @param y the Y coordinate of the pixel. - * @param b the specified band. - * @param s the sample to be set. + * @param x + * the X coordinate of the pixel. + * @param y + * the Y coordinate of the pixel. + * @param b + * the specified band. + * @param s + * the sample to be set. */ public void setSample(int x, int y, int b, double s) { - sampleModel.setSample(x - sampleModelTranslateX, - y - sampleModelTranslateY, b, s, dataBuffer); + sampleModel.setSample(x - sampleModelTranslateX, y - sampleModelTranslateY, b, s, + dataBuffer); } } - diff --git a/awt/java/awt/image/WritableRenderedImage.java b/awt/java/awt/image/WritableRenderedImage.java index ee1cb9e25a..052353b60f 100644 --- a/awt/java/awt/image/WritableRenderedImage.java +++ b/awt/java/awt/image/WritableRenderedImage.java @@ -18,23 +18,27 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image; import java.awt.Point; /** - * The WriteableRenderedImage interface is interface for objects which - * contains Raster data of one or several tiles. This interface provides - * notification mehanism for obtaining tile's writing status. + * The WriteableRenderedImage interface is interface for objects which contains + * Raster data of one or several tiles. This interface provides notification + * mechanism for obtaining tile's writing status. + * + * @since Android 1.0 */ public interface WritableRenderedImage extends RenderedImage { /** - * Gets and checks out the writable tile for writing. - * - * @param tileX the X index of the tile. - * @param tileY the Y index of the tile. + * Gets and checks out the writable tile for writing. * + * @param tileX + * the X index of the tile. + * @param tileY + * the Y index of the tile. * @return the WritableRaster. */ public WritableRaster getWritableTile(int tileX, int tileY); @@ -42,60 +46,64 @@ public interface WritableRenderedImage extends RenderedImage { /** * Removes the registered TileObserver. * - * @param to the TileObserver which is registered for this - * WritableRenderedImage. + * @param to + * the TileObserver which is registered for this + * WritableRenderedImage. */ public void removeTileObserver(TileObserver to); /** * Adds the specified TileObserver to this WritableRenderedImage. * - * @param to the TileObserver object to be added. + * @param to + * the TileObserver object to be added. */ public void addTileObserver(TileObserver to); /** - * Sets this image to the contents of the specified Raster. + * Sets this image to the contents of the specified Raster. * - * @param r the specified Raster. + * @param r + * the specified Raster. */ public void setData(Raster r); /** - * Gets the array of points wich represent indices of tiles which - * are check out for writing. + * Gets the array of points which represent indices of tiles which are check + * out for writing. * - * @return the array of Points. + * @return the array of points. */ public Point[] getWritableTileIndices(); /** * Checks if the specified tile is writable or not. * - * @param tileX the X index of tile. - * @param tileY the Y index of tile. - * - * @return true, if the specified tile is writable, - * false otherwise. + * @param tileX + * the X index of tile. + * @param tileY + * the Y index of tile. + * @return true, if the specified tile is writable, false otherwise. */ public boolean isTileWritable(int tileX, int tileY); /** - * Release the specified writable tile. This method removes the writer - * from the tile. + * Release the specified writable tile. This method removes the writer from + * the tile. * - * @param tileX the X index of the tile. - * @param tileY the Y index of the tile. + * @param tileX + * the X index of the tile. + * @param tileY + * the Y index of the tile. */ public void releaseWritableTile(int tileX, int tileY); /** * Checks if there is a tile which is checked out for writing. * - * @return true, if any tile is checked out for writing, false if there - * is no such tile. + * @return true, if any tile is checked out for writing, false if there is + * no such tile. */ public boolean hasTileWriters(); } - diff --git a/awt/java/awt/image/package.html b/awt/java/awt/image/package.html new file mode 100644 index 0000000000..b4d6ef0a8d --- /dev/null +++ b/awt/java/awt/image/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes and interfaces that allow to modify existing images or to create a new image rather than loading it from a file. +

    + @since Android 1.0 + + diff --git a/awt/java/awt/image/renderable/ContextualRenderedImageFactory.java b/awt/java/awt/image/renderable/ContextualRenderedImageFactory.java index 3e966379e2..1881a0c276 100644 --- a/awt/java/awt/image/renderable/ContextualRenderedImageFactory.java +++ b/awt/java/awt/image/renderable/ContextualRenderedImageFactory.java @@ -18,72 +18,80 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image.renderable; import java.awt.geom.Rectangle2D; import java.awt.image.RenderedImage; /** - * A factory for creating ContextualRenderedImage objects with utilities - * for manipulating the properties in the parameter block. + * A factory for creating ContextualRenderedImage objects with utilities for + * manipulating the properties in the parameter block. + * + * @since Android 1.0 */ public interface ContextualRenderedImageFactory extends RenderedImageFactory { /** * Maps a render context to a parameter block and a renderable image. * - * @param a0 the index - * @param a1 the RenderContext - * @param a2 the ParameterBlock - * @param a3 the RenderableImage - * - * @return the render context + * @param a0 + * the index. + * @param a1 + * the RenderContext. + * @param a2 + * the ParameterBlock. + * @param a3 + * the RenderableImage. + * @return the render context. */ - public RenderContext mapRenderContext(int a0, RenderContext a1, ParameterBlock a2, RenderableImage a3); + public RenderContext mapRenderContext(int a0, RenderContext a1, ParameterBlock a2, + RenderableImage a3); /** * Gets the value of the property from the parameter block. * - * @param a0 the parameter block to examine to find the property - * @param a1 the name of the property - * - * @return the value of the property + * @param a0 + * the parameter block to examine to find the property. + * @param a1 + * the name of the property. + * @return the value of the property. */ public Object getProperty(ParameterBlock a0, String a1); /** - * Creates the rendered image determined by the render context and - * parameter block. + * Creates the rendered image determined by the render context and parameter + * block. * - * @param a0 the RenderContext - * @param a1 the ParameterBlock - * - * @return the rendered image + * @param a0 + * the RenderContext. + * @param a1 + * the ParameterBlock. + * @return the rendered image. */ public RenderedImage create(RenderContext a0, ParameterBlock a1); /** * Gets the bounding rectangle from the parameter block. * - * @param a0 the parameter block to read the bounds from - * - * @return the bounding rectangle + * @param a0 + * the parameter block to read the bounds from. + * @return the bounding rectangle. */ public Rectangle2D getBounds2D(ParameterBlock a0); /** * Gets the names of all of the supported properties. * - * @return the property names + * @return the property names. */ public String[] getPropertyNames(); /** * Checks if this image factory is dynamic. * - * @return true, if this image factory is dynamic + * @return true, if this image factory is dynamic. */ public boolean isDynamic(); } - diff --git a/awt/java/awt/image/renderable/ParameterBlock.java b/awt/java/awt/image/renderable/ParameterBlock.java index 1555f45b78..7dde73a945 100644 --- a/awt/java/awt/image/renderable/ParameterBlock.java +++ b/awt/java/awt/image/renderable/ParameterBlock.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image.renderable; import java.awt.image.RenderedImage; @@ -25,28 +26,36 @@ import java.io.Serializable; import java.util.Vector; /** - * The Class ParameterBlock groups an indexed set of parameter data - * with a set of renderable (source) images. The mapping between - * the indexed parameters and their property names is provided - * by a {@link ContextualRenderedImageFactory} + * The class ParameterBlock groups an indexed set of parameter data with a set + * of renderable (source) images. The mapping between the indexed parameters and + * their property names is provided by a {@link ContextualRenderedImageFactory}. + * + * @since Android 1.0 */ public class ParameterBlock implements Cloneable, Serializable { - - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -7577115551785240750L; - /** The sources (renderable images). */ + /** + * The sources (renderable images). + */ protected Vector sources = new Vector(); - /** The parameters. */ + /** + * The parameters. + */ protected Vector parameters = new Vector(); /** * Instantiates a new parameter block. * - * @param sources the vector of source images - * @param parameters the vector of parameters + * @param sources + * the vector of source images. + * @param parameters + * the vector of parameters. */ public ParameterBlock(Vector sources, Vector parameters) { setSources(sources); @@ -56,7 +65,8 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Instantiates a new parameter block with no parameters. * - * @param sources the vector of source images + * @param sources + * the vector of source images. */ public ParameterBlock(Vector sources) { setSources(sources); @@ -65,18 +75,20 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Instantiates a new parameter block with no image or parameter vectors. */ - public ParameterBlock() {} + public ParameterBlock() { + } /** * Sets the source image at the specified index. * - * @param source the source image - * @param index the index where the source will be placed - * - * @return this parameter block + * @param source + * the source image. + * @param index + * the index where the source will be placed. + * @return this parameter block. */ public ParameterBlock setSource(Object source, int index) { - if(sources.size() < index + 1){ + if (sources.size() < index + 1) { sources.setSize(index + 1); } sources.setElementAt(source, index); @@ -86,14 +98,15 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Sets the parameter value object at the specified index. * - * @param obj the parameter value to place at the desired index - * @param index the index where the object is to be placed in the - * vector of parameters - * - * @return this parameter block + * @param obj + * the parameter value to place at the desired index. + * @param index + * the index where the object is to be placed in the vector of + * parameters. + * @return this parameter block. */ public ParameterBlock set(Object obj, int index) { - if(parameters.size() < index + 1){ + if (parameters.size() < index + 1) { parameters.setSize(index + 1); } parameters.setElementAt(obj, index); @@ -103,9 +116,9 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Adds a source to the vector of sources. * - * @param source the source to add - * - * @return this parameter block + * @param source + * the source to add. + * @return this parameter block. */ public ParameterBlock addSource(Object source) { sources.addElement(source); @@ -115,9 +128,9 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Adds the object to the vector of parameter values * - * @param obj the obj to add - * - * @return this parameter block + * @param obj + * the obj to add. + * @return this parameter block. */ public ParameterBlock add(Object obj) { parameters.addElement(obj); @@ -125,20 +138,22 @@ public class ParameterBlock implements Cloneable, Serializable { } /** - * Sets the vector of sources, replacing the existing - * vector of sources, if any. + * Sets the vector of sources, replacing the existing vector of sources, if + * any. * - * @param sources the new sources + * @param sources + * the new sources. */ public void setSources(Vector sources) { this.sources = sources; } /** - * Sets the vector of parameters, replacing the existing - * vector of parameters, if any. + * Sets the vector of parameters, replacing the existing vector of + * parameters, if any. * - * @param parameters the new parameters + * @param parameters + * the new parameters. */ public void setParameters(Vector parameters) { this.parameters = parameters; @@ -147,7 +162,7 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Gets the vector of sources. * - * @return the sources + * @return the sources. */ public Vector getSources() { return sources; @@ -156,7 +171,7 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Gets the vector of parameters. * - * @return the parameters + * @return the parameters. */ public Vector getParameters() { return parameters; @@ -165,9 +180,9 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Gets the source at the specified index. * - * @param index the index - * - * @return the source object found at the specified index + * @param index + * the index. + * @return the source object found at the specified index. */ public Object getSource(int index) { return sources.elementAt(index); @@ -176,9 +191,9 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Gets the object parameter found at the specified index. * - * @param index the index - * - * @return the parameter object found at the specified index + * @param index + * the index. + * @return the parameter object found at the specified index. */ public Object getObjectParameter(int index) { return parameters.elementAt(index); @@ -187,328 +202,333 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Shallow clone (clones using the superclass clone method). * - * @return the clone of this object + * @return the clone of this object. */ public Object shallowClone() { - try{ + try { return super.clone(); - }catch(Exception e){ + } catch (Exception e) { return null; } } + /** + * Returns a copy of this ParameterBlock instance. + * + * @return the identical copy of this instance. + */ @SuppressWarnings("unchecked") @Override public Object clone() { ParameterBlock replica; - try{ + try { replica = (ParameterBlock)super.clone(); - }catch(Exception e){ + } catch (Exception e) { return null; } - if(sources != null){ + if (sources != null) { replica.setSources((Vector)(sources.clone())); } - if(parameters != null){ + if (parameters != null) { replica.setParameters((Vector)(parameters.clone())); } return replica; } /** - * Gets an array of classes corresponding to all of the parameter - * values found in the array of parameters, in order. + * Gets an array of classes corresponding to all of the parameter values + * found in the array of parameters, in order. * - * @return the parameter classes + * @return the parameter classes. */ public Class[] getParamClasses() { int count = parameters.size(); Class paramClasses[] = new Class[count]; - for(int i = 0; i < count; i++){ + for (int i = 0; i < count; i++) { paramClasses[i] = parameters.elementAt(i).getClass(); } return paramClasses; } /** - * Gets the renderable source image found at the specified index - * in the source array. - * - * @param index the index + * Gets the renderable source image found at the specified index in the + * source array. * - * @return the renderable source image + * @param index + * the index. + * @return the renderable source image. */ public RenderableImage getRenderableSource(int index) { return (RenderableImage)sources.elementAt(index); } /** - * Wraps the short value in a Short and places it in the - * parameter block at the specified index. + * Wraps the short value in a Short and places it in the parameter block at + * the specified index. * - * @param s the short value of the parameter - * @param index the index - * - * @return this parameter block + * @param s + * the short value of the parameter. + * @param index + * the index. + * @return this parameter block. */ public ParameterBlock set(short s, int index) { return set(new Short(s), index); } /** - * Wraps the short value in a Short and adds it to the - * parameter block. - * - * @param s the short value of the parameter + * Wraps the short value in a Short and adds it to the parameter block. * - * @return this parameter block + * @param s + * the short value of the parameter. + * @return this parameter block. */ public ParameterBlock add(short s) { return add(new Short(s)); } /** - * Wraps the long value in a Long and places it in the - * parameter block at the specified index. + * Wraps the long value in a Long and places it in the parameter block at + * the specified index. * - * @param l the long value of the parameter - * @param index the index - * - * @return this parameter block + * @param l + * the long value of the parameter. + * @param index + * the index. + * @return this parameter block. */ public ParameterBlock set(long l, int index) { return set(new Long(l), index); } /** - * Wraps the long value in a Long and adds it to the - * parameter block. - * - * @param l the long value of the parameter + * Wraps the long value in a Long and adds it to the parameter block. * - * @return this parameter block + * @param l + * the long value of the parameter. + * @return this parameter block. */ public ParameterBlock add(long l) { return add(new Long(l)); } /** - * Wraps the int value in an Integer and places it in the - * parameter block at the specified index. - * - * @param i the int value of the parameter - * @param index the index + * Wraps the integer value in an Integer and places it in the parameter + * block at the specified index. * - * @return this parameter block + * @param i + * the integer value of the parameter. + * @param index + * the index. + * @return this parameter block. */ public ParameterBlock set(int i, int index) { return set(new Integer(i), index); } /** - * Wraps the int value in an Integer and adds it to the - * parameter block. + * Wraps the integer value in an Integer and adds it to the parameter block. * - * @param i the int value of the parameter - * - * @return this parameter block + * @param i + * the integer value of the parameter. + * @return this parameter block. */ public ParameterBlock add(int i) { return add(new Integer(i)); } /** - * Wraps the float value in a Float and places it in the - * parameter block at the specified index. - * - * @param f the float value of the parameter - * @param index the index + * Wraps the float value in a Float and places it in the parameter block at + * the specified index. * - * @return this parameter block + * @param f + * the float value of the parameter. + * @param index + * the index. + * @return this parameter block. */ public ParameterBlock set(float f, int index) { return set(new Float(f), index); } /** - * Wraps the float value in a Float and adds it to the - * parameter block. + * Wraps the float value in a Float and adds it to the parameter block. * - * @param f the float value of the parameter - * - * @return this parameter block + * @param f + * the float value of the parameter. + * @return this parameter block. */ public ParameterBlock add(float f) { return add(new Float(f)); } /** - * Wraps the double value in a Double and places it in the - * parameter block at the specified index. - * - * @param d the double value of the parameter - * @param index the index + * Wraps the double value in a Double and places it in the parameter block + * at the specified index. * - * @return this parameter block + * @param d + * the double value of the parameter. + * @param index + * the index. + * @return this parameter block. */ public ParameterBlock set(double d, int index) { return set(new Double(d), index); } /** - * Wraps the double value in a Double and adds it to the - * parameter block. - * - * @param d the double value of the parameter + * Wraps the double value in a Double and adds it to the parameter block. * - * @return this parameter block + * @param d + * the double value of the parameter. + * @return this parameter block. */ public ParameterBlock add(double d) { return add(new Double(d)); } /** - * Wraps the char value in a Character and places it in the - * parameter block at the specified index. + * Wraps the char value in a Character and places it in the parameter block + * at the specified index. * - * @param c the char value of the parameter - * @param index the index - * - * @return this parameter block + * @param c + * the char value of the parameter. + * @param index + * the index. + * @return this parameter block. */ public ParameterBlock set(char c, int index) { return set(new Character(c), index); } /** - * Wraps the char value in a Character and adds it to the - * parameter block. - * - * @param c the char value of the parameter + * Wraps the char value in a Character and adds it to the parameter block. * - * @return this parameter block + * @param c + * the char value of the parameter. + * @return this parameter block. */ public ParameterBlock add(char c) { return add(new Character(c)); } /** - * Wraps the byte value in a Byte and places it in the - * parameter block at the specified index. + * Wraps the byte value in a Byte and places it in the parameter block at + * the specified index. * - * @param b the byte value of the parameter - * @param index the index - * - * @return this parameter block + * @param b + * the byte value of the parameter. + * @param index + * the index. + * @return this parameter block. */ public ParameterBlock set(byte b, int index) { return set(new Byte(b), index); } /** - * Wraps the byte value in a Byte and adds it to the - * parameter block. - * - * @param b the byte value of the parameter + * Wraps the byte value in a Byte and adds it to the parameter block. * - * @return the parameter block + * @param b + * the byte value of the parameter. + * @return the parameter block. */ public ParameterBlock add(byte b) { return add(new Byte(b)); } /** - * Gets the RenderedImage at the specified index from the - * vector of source images. - * - * @param index the index + * Gets the RenderedImage at the specified index from the vector of source + * images. * - * @return the rendered image + * @param index + * the index. + * @return the rendered image. */ public RenderedImage getRenderedSource(int index) { return (RenderedImage)sources.elementAt(index); } /** - * Gets the short-valued parameter found at the desired index - * in the vector of parameter values. + * Gets the short-valued parameter found at the desired index in the vector + * of parameter values. * - * @param index the index - * - * @return the short parameter + * @param index + * the index. + * @return the short parameter. */ public short getShortParameter(int index) { return ((Short)parameters.elementAt(index)).shortValue(); } /** - * Gets the long-valued parameter found at the desired index - * in the vector of parameter values. - * - * @param index the index + * Gets the long-valued parameter found at the desired index in the vector + * of parameter values. * - * @return the long parameter + * @param index + * the index. + * @return the long parameter. */ public long getLongParameter(int index) { return ((Long)parameters.elementAt(index)).longValue(); } /** - * Gets the int-valued parameter found at the desired index - * in the vector of parameter values. + * Gets the integer-valued parameter found at the desired index in the + * vector of parameter values. * - * @param index the index - * - * @return the int parameter + * @param index + * the index. + * @return the integer parameter. */ public int getIntParameter(int index) { return ((Integer)parameters.elementAt(index)).intValue(); } /** - * Gets the float-valued parameter found at the desired index - * in the vector of parameter values. - * - * @param index the index + * Gets the float-valued parameter found at the desired index in the vector + * of parameter values. * - * @return the float parameter + * @param index + * the index. + * @return the float parameter. */ public float getFloatParameter(int index) { return ((Float)parameters.elementAt(index)).floatValue(); } /** - * Gets the double-valued parameter found at the desired index - * in the vector of parameter values. - * - * @param index the index + * Gets the double-valued parameter found at the desired index in the vector + * of parameter values. * - * @return the double parameter + * @param index + * the index. + * @return the double parameter. */ public double getDoubleParameter(int index) { return ((Double)parameters.elementAt(index)).doubleValue(); } /** - * Gets the char-valued parameter found at the desired index - * in the vector of parameter values. + * Gets the char-valued parameter found at the desired index in the vector + * of parameter values. * - * @param index the index - * - * @return the char parameter + * @param index + * the index. + * @return the char parameter. */ public char getCharParameter(int index) { return ((Character)parameters.elementAt(index)).charValue(); } /** - * Gets the byte-valued parameter found at the desired index - * in the vector of parameter values. - * - * @param index the index + * Gets the byte-valued parameter found at the desired index in the vector + * of parameter values. * - * @return the byte parameter + * @param index + * the index. + * @return the byte parameter. */ public byte getByteParameter(int index) { return ((Byte)parameters.elementAt(index)).byteValue(); @@ -531,7 +551,7 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Gets the number of elements in the vector of sources. * - * @return the number of elements in the vector of sources + * @return the number of elements in the vector of sources. */ public int getNumSources() { return sources.size(); @@ -540,7 +560,7 @@ public class ParameterBlock implements Cloneable, Serializable { /** * Gets the number of elements in the vector of parameters. * - * @return the number of elements in the vector of parameters + * @return the number of elements in the vector of parameters. */ public int getNumParameters() { return parameters.size(); diff --git a/awt/java/awt/image/renderable/RenderContext.java b/awt/java/awt/image/renderable/RenderContext.java index 3a3b93c7af..0db512faf1 100644 --- a/awt/java/awt/image/renderable/RenderContext.java +++ b/awt/java/awt/image/renderable/RenderContext.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image.renderable; import java.awt.RenderingHints; @@ -25,27 +26,37 @@ import java.awt.Shape; import java.awt.geom.AffineTransform; /** - * The Class RenderContext stores data on how an image is to be - * rendered: the affine transform, the area of interest, and - * the rendering hints. + * The Class RenderContext stores data on how an image is to be rendered: the + * affine transform, the area of interest, and the rendering hints. + * + * @since Android 1.0 */ public class RenderContext implements Cloneable { - /** The affine transform. */ + /** + * The affine transform. + */ AffineTransform transform; - - /** The area of interest. */ + + /** + * The area of interest. + */ Shape aoi; - - /** The rendering hints. */ + + /** + * The rendering hints. + */ RenderingHints hints; /** * Instantiates a new render context. * - * @param usr2dev the affine transform - * @param aoi the area of interest - * @param hints the rendering hints + * @param usr2dev + * the affine transform. + * @param aoi + * the area of interest. + * @param hints + * the rendering hints. */ public RenderContext(AffineTransform usr2dev, Shape aoi, RenderingHints hints) { this.transform = (AffineTransform)usr2dev.clone(); @@ -56,8 +67,10 @@ public class RenderContext implements Cloneable { /** * Instantiates a new render context with no specified hints. * - * @param usr2dev the affine transform - * @param aoi the area of interest + * @param usr2dev + * the affine transform. + * @param aoi + * the area of interest. */ public RenderContext(AffineTransform usr2dev, Shape aoi) { this(usr2dev, aoi, null); @@ -66,18 +79,21 @@ public class RenderContext implements Cloneable { /** * Instantiates a new render context with no specified area of interest. * - * @param usr2dev the affine transform - * @param hints the rendering hints + * @param usr2dev + * the affine transform. + * @param hints + * the rendering hints. */ public RenderContext(AffineTransform usr2dev, RenderingHints hints) { this(usr2dev, null, hints); } /** - * Instantiates a new render context with no rendering hints or - * area of interest. + * Instantiates a new render context with no rendering hints or area of + * interest. * - * @param usr2dev the affine transform + * @param usr2dev + * the affine transform. */ public RenderContext(AffineTransform usr2dev) { this(usr2dev, null, null); @@ -91,36 +107,36 @@ public class RenderContext implements Cloneable { /** * Sets the affine transform for this render context. * - * @param newTransform the new affine transform + * @param newTransform + * the new affine transform. */ public void setTransform(AffineTransform newTransform) { transform = (AffineTransform)newTransform.clone(); } /** - * Concatenates the current transform with the specified transform - * (so they are applied with the specified transform acting first) - * and sets the resulting transform as the affine transform of - * this rendering context. - * - * @param modTransform the new transform which modifies the - * current transform - * - * @deprecated use {@link RenderContext#preConcatenateTransform(AffineTransform)} + * Concatenates the current transform with the specified transform (so they + * are applied with the specified transform acting first) and sets the + * resulting transform as the affine transform of this rendering context. + * + * @param modTransform + * the new transform which modifies the current transform. + * @deprecated use + * {@link RenderContext#preConcatenateTransform(AffineTransform)} + * . */ - @Deprecated + @Deprecated public void preConcetenateTransform(AffineTransform modTransform) { preConcatenateTransform(modTransform); } /** - * Concatenates the current transform with the specified transform - * (so they are applied with the specified transform acting first) - * and sets the resulting transform as the affine transform of - * this rendering context. + * Concatenates the current transform with the specified transform (so they + * are applied with the specified transform acting first) and sets the + * resulting transform as the affine transform of this rendering context. * - * @param modTransform the new transform which modifies the - * current transform + * @param modTransform + * the new transform which modifies the current transform. */ public void preConcatenateTransform(AffineTransform modTransform) { transform.preConcatenate(modTransform); @@ -129,10 +145,10 @@ public class RenderContext implements Cloneable { /** * Concatenate the specified transform with the current transform. * - * @param modTransform the new transform which modifies the - * current transform - * - * @deprecated use {@link RenderContext#concatenateTransform(AffineTransform)} + * @param modTransform + * the new transform which modifies the current transform. + * @deprecated use + * {@link RenderContext#concatenateTransform(AffineTransform)}. */ @Deprecated public void concetenateTransform(AffineTransform modTransform) { @@ -142,8 +158,8 @@ public class RenderContext implements Cloneable { /** * Concatenate the specified transform with the current transform. * - * @param modTransform the new transform which modifies the - * current transform + * @param modTransform + * the new transform which modifies the current transform. */ public void concatenateTransform(AffineTransform modTransform) { transform.concatenate(modTransform); @@ -152,7 +168,7 @@ public class RenderContext implements Cloneable { /** * Gets the transform. * - * @return the transform + * @return the transform. */ public AffineTransform getTransform() { return (AffineTransform)transform.clone(); @@ -161,7 +177,8 @@ public class RenderContext implements Cloneable { /** * Sets the area of interest. * - * @param newAoi the new area of interest + * @param newAoi + * the new area of interest. */ public void setAreaOfInterest(Shape newAoi) { aoi = newAoi; @@ -170,7 +187,7 @@ public class RenderContext implements Cloneable { /** * Gets the area of interest. * - * @return the area of interest + * @return the area of interest. */ public Shape getAreaOfInterest() { return aoi; @@ -179,7 +196,8 @@ public class RenderContext implements Cloneable { /** * Sets the rendering hints. * - * @param hints the new rendering hints + * @param hints + * the new rendering hints. */ public void setRenderingHints(RenderingHints hints) { this.hints = hints; @@ -188,7 +206,7 @@ public class RenderContext implements Cloneable { /** * Gets the rendering hints. * - * @return the rendering hints + * @return the rendering hints. */ public RenderingHints getRenderingHints() { return hints; diff --git a/awt/java/awt/image/renderable/RenderableImage.java b/awt/java/awt/image/renderable/RenderableImage.java index 885dc0609f..21332f7d15 100644 --- a/awt/java/awt/image/renderable/RenderableImage.java +++ b/awt/java/awt/image/renderable/RenderableImage.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image.renderable; import java.awt.RenderingHints; @@ -25,108 +26,113 @@ import java.awt.image.RenderedImage; import java.util.Vector; /** - * The Interface RenderableImage is implemented by an object that - * collects all of the image-specific data that defines a single image - * that could be rendered to different rendering targets. + * The Interface RenderableImage is implemented by an object that collects all + * of the image-specific data that defines a single image that could be rendered + * to different rendering targets. + * + * @since Android 1.0 */ public interface RenderableImage { - /** The Constant HINTS_OBSERVED indicates that the rendering - * hints are applied rather than ignored. */ + /** + * The Constant HINTS_OBSERVED indicates that the rendering hints are + * applied rather than ignored. + */ public static final String HINTS_OBSERVED = "HINTS_OBSERVED"; //$NON-NLS-1$ /** * Gets the property from the RenderableImage's parameter block. * - * @param name the name of the property to get. - * - * @return the value of the property + * @param name + * the name of the property to get. + * @return the value of the property. */ public Object getProperty(String name); /** - * Creates the rendered image based on the information contained - * in the parameters and the render context. + * Creates the rendered image based on the information contained in the + * parameters and the render context. * - * @param renderContext the render context giving rendering specifications - * such as transformations - * - * @return the rendered image + * @param renderContext + * the render context giving rendering specifications such as + * transformations. + * @return the rendered image. */ public RenderedImage createRendering(RenderContext renderContext); /** - * Creates the scaled rendered image based on the information contained - * in the parameters and the render context. - * - * @param w the desired width after scaling or zero if the scaling - * should be proportional, based on the height - * @param h the desired height after scaling or zero if the scaling - * should be proportional, based on the width - * @param hints the rendering hints to use + * Creates the scaled rendered image based on the information contained in + * the parameters and the render context. * - * @return the rendered image - * - * @throws IllegalArgumentException if both the height and width are zero + * @param w + * the desired width after scaling or zero if the scaling should + * be proportional, based on the height. + * @param h + * the desired height after scaling or zero if the scaling should + * be proportional, based on the width. + * @param hints + * the rendering hints to use. + * @return the rendered image. + * @throws IllegalArgumentException + * if both the height and width are zero. */ public RenderedImage createScaledRendering(int w, int h, RenderingHints hints); /** * Gets the vector of sources from the parameter block. * - * @return the sources + * @return the sources. */ public Vector getSources(); /** * Gets the names of all of the supported properties in the current context. * - * @return the property names + * @return the property names. */ public String[] getPropertyNames(); /** - * Creates the default rendering (using the identity transform - * and default render context). + * Creates the default rendering (using the identity transform and default + * render context). * - * @return the rendered image + * @return the rendered image. */ public RenderedImage createDefaultRendering(); /** * Checks if this context supports dynamic rendering. * - * @return true, if this context supports dynamic rendering + * @return true, if this context supports dynamic rendering. */ public boolean isDynamic(); /** * Gets the width of the image. * - * @return the width of the image + * @return the width of the image. */ public float getWidth(); /** * Gets the y coordinate of the upper left corner. * - * @return the y coordinate of the upper left corner + * @return the y coordinate of the upper left corner. */ public float getMinY(); /** * Gets the x coordinate of the upper left corner. * - * @return the x coordinate of the upper left corner + * @return the x coordinate of the upper left corner. */ public float getMinX(); /** * Gets the height of the image. * - * @return the height of the image + * @return the height of the image. */ public float getHeight(); } - diff --git a/awt/java/awt/image/renderable/RenderableImageOp.java b/awt/java/awt/image/renderable/RenderableImageOp.java index 993ba5fdc3..dc453727bb 100644 --- a/awt/java/awt/image/renderable/RenderableImageOp.java +++ b/awt/java/awt/image/renderable/RenderableImageOp.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image.renderable; import java.awt.RenderingHints; @@ -29,35 +30,44 @@ import java.util.Vector; import org.apache.harmony.awt.internal.nls.Messages; /** - * The Class RenderableImageOp is a basic implementation of RenderableImage, - * with methods to access the parameter data and perform rendering - * operations. + * The Class RenderableImageOp is a basic implementation of RenderableImage, + * with methods to access the parameter data and perform rendering operations. + * + * @since Android 1.0 */ public class RenderableImageOp implements RenderableImage { - /** The CRIF. */ + /** + * The CRIF. + */ ContextualRenderedImageFactory CRIF; - - /** The param block. */ + + /** + * The param block. + */ ParameterBlock paramBlock; - - /** The height. */ + + /** + * The height. + */ float minX, minY, width, height; /** * Instantiates a new renderable image op. * - * @param CRIF the cRIF - * @param paramBlock the param block + * @param CRIF + * the cRIF. + * @param paramBlock + * the param block. */ public RenderableImageOp(ContextualRenderedImageFactory CRIF, ParameterBlock paramBlock) { this.CRIF = CRIF; - this.paramBlock = (ParameterBlock) paramBlock.clone(); + this.paramBlock = (ParameterBlock)paramBlock.clone(); Rectangle2D r = CRIF.getBounds2D(paramBlock); - minX = (float) r.getMinX(); - minY = (float) r.getMinY(); - width = (float) r.getWidth(); - height = (float) r.getHeight(); + minX = (float)r.getMinX(); + minY = (float)r.getMinY(); + width = (float)r.getWidth(); + height = (float)r.getHeight(); } public Object getProperty(String name) { @@ -67,27 +77,27 @@ public class RenderableImageOp implements RenderableImage { /** * Sets the parameter block. * - * @param paramBlock the param block - * - * @return the parameter block + * @param paramBlock + * the param block. + * @return the parameter block. */ public ParameterBlock setParameterBlock(ParameterBlock paramBlock) { ParameterBlock oldParam = this.paramBlock; - this.paramBlock = (ParameterBlock) paramBlock.clone(); + this.paramBlock = (ParameterBlock)paramBlock.clone(); return oldParam; } public RenderedImage createRendering(RenderContext renderContext) { Vector sources = getSources(); - ParameterBlock rdParam = (ParameterBlock) paramBlock.clone(); + ParameterBlock rdParam = (ParameterBlock)paramBlock.clone(); if (sources != null) { Vector rdSources = new Vector(); int i = 0; while (i < sources.size()) { - RenderContext newContext = CRIF.mapRenderContext(i, renderContext, paramBlock, - this); + RenderContext newContext = CRIF + .mapRenderContext(i, renderContext, paramBlock, this); RenderedImage rdim = sources.elementAt(i).createRendering(newContext); if (rdim != null) { @@ -103,20 +113,20 @@ public class RenderableImageOp implements RenderableImage { } public RenderedImage createScaledRendering(int w, int h, RenderingHints hints) { - if(w == 0 && h == 0) { + if (w == 0 && h == 0) { // awt.60=Width and Height mustn't be equal zero both throw new IllegalArgumentException(Messages.getString("awt.60")); //$NON-NLS-1$ } - if(w == 0){ - w = Math.round(h*(getWidth()/getHeight())); + if (w == 0) { + w = Math.round(h * (getWidth() / getHeight())); } - if(h == 0){ - h = Math.round(w*(getHeight()/getWidth())); + if (h == 0) { + h = Math.round(w * (getHeight() / getWidth())); } - double sx = (double)w/getWidth(); - double sy = (double)h/getHeight(); + double sx = (double)w / getWidth(); + double sy = (double)h / getHeight(); AffineTransform at = AffineTransform.getScaleInstance(sx, sy); RenderContext context = new RenderContext(at, hints); @@ -124,15 +134,15 @@ public class RenderableImageOp implements RenderableImage { } public Vector getSources() { - if(paramBlock.getNumSources() == 0) { + if (paramBlock.getNumSources() == 0) { return null; } Vector v = new Vector(); - int i = 0; - while(i < paramBlock.getNumSources()){ + int i = 0; + while (i < paramBlock.getNumSources()) { Object o = paramBlock.getSource(i); - if(o instanceof RenderableImage){ - v.addElement((RenderableImage) o); + if (o instanceof RenderableImage) { + v.addElement((RenderableImage)o); } i++; } @@ -179,4 +189,3 @@ public class RenderableImageOp implements RenderableImage { } } - diff --git a/awt/java/awt/image/renderable/RenderableImageProducer.java b/awt/java/awt/image/renderable/RenderableImageProducer.java index 7fda98cb56..e83ebc76be 100644 --- a/awt/java/awt/image/renderable/RenderableImageProducer.java +++ b/awt/java/awt/image/renderable/RenderableImageProducer.java @@ -18,6 +18,7 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image.renderable; import java.awt.image.ColorModel; @@ -28,25 +29,35 @@ import java.awt.image.RenderedImage; import java.util.Vector; /** - * The Class RenderableImageProducer provides the implementation for - * the image rendering. + * The Class RenderableImageProducer provides the implementation for the image + * rendering. + * + * @since Android 1.0 */ public class RenderableImageProducer implements ImageProducer, Runnable { - /** The rbl. */ + /** + * The rbl. + */ RenderableImage rbl; - - /** The rc. */ + + /** + * The rc. + */ RenderContext rc; - - /** The consumers. */ + + /** + * The consumers. + */ Vector consumers = new Vector(); /** * Instantiates a new renderable image producer. * - * @param rdblImage the rdbl image - * @param rc the rc + * @param rdblImage + * the rdbl image. + * @param rc + * the rc. */ public RenderableImageProducer(RenderableImage rdblImage, RenderContext rc) { this.rbl = rdblImage; @@ -56,7 +67,8 @@ public class RenderableImageProducer implements ImageProducer, Runnable { /** * Sets the render context. * - * @param rc the new render context + * @param rc + * the new render context. */ public synchronized void setRenderContext(RenderContext rc) { this.rc = rc; @@ -72,16 +84,17 @@ public class RenderableImageProducer implements ImageProducer, Runnable { t.start(); } - public void requestTopDownLeftRightResend(ImageConsumer ic) {} + public void requestTopDownLeftRightResend(ImageConsumer ic) { + } public synchronized void removeConsumer(ImageConsumer ic) { - if(ic != null) { + if (ic != null) { consumers.removeElement(ic); } } public synchronized void addConsumer(ImageConsumer ic) { - if(ic != null && !consumers.contains(ic)){ + if (ic != null && !consumers.contains(ic)) { consumers.addElement(ic); } } @@ -90,19 +103,19 @@ public class RenderableImageProducer implements ImageProducer, Runnable { * Creates the rendered image in a new thread. */ public void run() { - if(rbl == null) { + if (rbl == null) { return; } RenderedImage rd; - if(rc != null) { + if (rc != null) { rd = rbl.createRendering(rc); } else { rd = rbl.createDefaultRendering(); } ColorModel cm = rd.getColorModel(); - if(cm == null) { + if (cm == null) { cm = ColorModel.getRGBdefault(); } @@ -112,17 +125,15 @@ public class RenderableImageProducer implements ImageProducer, Runnable { for (ImageConsumer c : consumers) { c.setDimensions(w, h); - c.setHints(ImageConsumer.TOPDOWNLEFTRIGHT | - ImageConsumer.COMPLETESCANLINES | - ImageConsumer.SINGLEFRAME | - ImageConsumer.SINGLEPASS); + c.setHints(ImageConsumer.TOPDOWNLEFTRIGHT | ImageConsumer.COMPLETESCANLINES + | ImageConsumer.SINGLEFRAME | ImageConsumer.SINGLEPASS); } int scanLine[] = new int[w]; int pixel[] = null; - for(int y = 0; y < h; y++){ - for(int x = 0; x < w; x++){ + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) { pixel = r.getPixel(x, y, pixel); scanLine[x] = cm.getDataElement(pixel, 0); } @@ -138,4 +149,3 @@ public class RenderableImageProducer implements ImageProducer, Runnable { } } - diff --git a/awt/java/awt/image/renderable/RenderedImageFactory.java b/awt/java/awt/image/renderable/RenderedImageFactory.java index 345d82c61a..881a40ab79 100644 --- a/awt/java/awt/image/renderable/RenderedImageFactory.java +++ b/awt/java/awt/image/renderable/RenderedImageFactory.java @@ -18,26 +18,29 @@ * @author Igor V. Stolyarov * @version $Revision$ */ + package java.awt.image.renderable; import java.awt.RenderingHints; import java.awt.image.RenderedImage; /** - * A factory for creating RenderedImage objects based on parameters - * and rendering hints. + * A factory for creating RenderedImage objects based on parameters and + * rendering hints. + * + * @since Android 1.0 */ public interface RenderedImageFactory { /** * Creates the rendered image. * - * @param a0 the ParameterBlock - * @param a1 the RenderingHints - * - * @return the rendered image + * @param a0 + * the ParameterBlock. + * @param a1 + * the RenderingHints. + * @return the rendered image. */ public RenderedImage create(ParameterBlock a0, RenderingHints a1); } - diff --git a/awt/java/awt/image/renderable/package.html b/awt/java/awt/image/renderable/package.html new file mode 100644 index 0000000000..43aaabc836 --- /dev/null +++ b/awt/java/awt/image/renderable/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes to create images which are rendering-independent. +

    + @since Android 1.0 + + diff --git a/awt/java/awt/package.html b/awt/java/awt/package.html new file mode 100644 index 0000000000..5a6f9f011f --- /dev/null +++ b/awt/java/awt/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes and interfaces for creating (graphical) user interfaces (GUI), painting 2D graphics and creating, manipulating and drawing images. +

    + @since Android 1.0 + + diff --git a/awt/java/beans/IndexedPropertyChangeEvent.java b/awt/java/beans/IndexedPropertyChangeEvent.java deleted file mode 100644 index c9084c6c54..0000000000 --- a/awt/java/beans/IndexedPropertyChangeEvent.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package java.beans; - -/** - * A type of {@link PropertyChangeEvent} that indicates that an indexed property - * has changed. - * - * @since 1.5 - */ -public class IndexedPropertyChangeEvent extends PropertyChangeEvent { - - private static final long serialVersionUID = -320227448495806870L; - - private final int index; - - /** - * Creates a new property changed event with an indication of the property - * index. - * - * @param source - * the changed bean. - * @param propertyName - * the changed property, or null to indicate an - * unspecified set of the properties have changed. - * @param oldValue - * the previous value of the property, or null if - * the propertyName is null or the - * previous value is unknown. - * @param newValue - * the new value of the property, or null if the - * propertyName is null or the new - * value is unknown.. - * @param index - * the index of the property. - */ - public IndexedPropertyChangeEvent(Object source, String propertyName, - Object oldValue, Object newValue, int index) { - super(source, propertyName, oldValue, newValue); - this.index = index; - } - - /** - * Answer the index of the property that was changed in this event. - * - * @return The property element index. - */ - public int getIndex() { - return index; - } -} diff --git a/awt/java/beans/PropertyChangeEvent.java b/awt/java/beans/PropertyChangeEvent.java deleted file mode 100644 index 97c703af5d..0000000000 --- a/awt/java/beans/PropertyChangeEvent.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.beans; - -import java.util.EventObject; - -public class PropertyChangeEvent extends EventObject { - - private static final long serialVersionUID = 7042693688939648123L; - - String propertyName; - - Object oldValue; - - Object newValue; - - Object propagationId; - - public PropertyChangeEvent(Object source, String propertyName, - Object oldValue, Object newValue) { - super(source); - - this.propertyName = propertyName; - this.oldValue = oldValue; - this.newValue = newValue; - } - - public String getPropertyName() { - return propertyName; - } - - public void setPropagationId(Object propagationId) { - this.propagationId = propagationId; - } - - public Object getPropagationId() { - return propagationId; - } - - public Object getOldValue() { - return oldValue; - } - - public Object getNewValue() { - return newValue; - } -} diff --git a/awt/java/beans/PropertyChangeListener.java b/awt/java/beans/PropertyChangeListener.java deleted file mode 100644 index 94422c0b6f..0000000000 --- a/awt/java/beans/PropertyChangeListener.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.beans; - -import java.util.EventListener; - -public interface PropertyChangeListener extends EventListener { - - public void propertyChange(PropertyChangeEvent event); -} diff --git a/awt/java/beans/PropertyChangeListenerProxy.java b/awt/java/beans/PropertyChangeListenerProxy.java deleted file mode 100644 index f4f3aec06e..0000000000 --- a/awt/java/beans/PropertyChangeListenerProxy.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.beans; - -import java.util.EventListenerProxy; - -public class PropertyChangeListenerProxy extends EventListenerProxy implements - PropertyChangeListener { - - String propertyName; - - public PropertyChangeListenerProxy(String propertyName, - PropertyChangeListener listener) { - super(listener); - this.propertyName = propertyName; - } - - public String getPropertyName() { - return propertyName; - } - - public void propertyChange(PropertyChangeEvent event) { - PropertyChangeListener listener = (PropertyChangeListener) getListener(); - listener.propertyChange(event); - } -} diff --git a/awt/java/beans/PropertyChangeSupport.java b/awt/java/beans/PropertyChangeSupport.java deleted file mode 100644 index d56e63a784..0000000000 --- a/awt/java/beans/PropertyChangeSupport.java +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.beans; - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -public class PropertyChangeSupport implements Serializable { - - private static final long serialVersionUID = 6401253773779951803l; - - private transient Object sourceBean; - - private transient List allPropertiesChangeListeners = - new ArrayList(); - - private transient Map> - selectedPropertiesChangeListeners = - new HashMap>(); - - // fields for serialization compatibility - private Hashtable> children; - - private Object source; - - private int propertyChangeSupportSerializedDataVersion = 1; - - public PropertyChangeSupport(Object sourceBean) { - if (sourceBean == null) { - throw new NullPointerException(); - } - this.sourceBean = sourceBean; - } - - public void firePropertyChange(String propertyName, Object oldValue, - Object newValue) { - PropertyChangeEvent event = createPropertyChangeEvent(propertyName, - oldValue, newValue); - doFirePropertyChange(event); - } - - public void fireIndexedPropertyChange(String propertyName, int index, - Object oldValue, Object newValue) { - - // nulls and equals check done in doFire... - doFirePropertyChange(new IndexedPropertyChangeEvent(sourceBean, - propertyName, oldValue, newValue, index)); - } - - public synchronized void removePropertyChangeListener(String propertyName, - PropertyChangeListener listener) { - if ((propertyName != null) && (listener != null)) { - List listeners = - selectedPropertiesChangeListeners.get(propertyName); - - if (listeners != null) { - listeners.remove(listener); - } - } - } - - public synchronized void addPropertyChangeListener(String propertyName, - PropertyChangeListener listener) { - if ((listener != null) && (propertyName != null)) { - List listeners = - selectedPropertiesChangeListeners.get(propertyName); - - if (listeners == null) { - listeners = new ArrayList(); - selectedPropertiesChangeListeners.put(propertyName, listeners); - } - - // RI compatibility - if (listener instanceof PropertyChangeListenerProxy) { - PropertyChangeListenerProxy proxy = - (PropertyChangeListenerProxy) listener; - - listeners.add(new PropertyChangeListenerProxy( - proxy.getPropertyName(), - (PropertyChangeListener) proxy.getListener())); - } else { - listeners.add(listener); - } - } - } - - public synchronized PropertyChangeListener[] getPropertyChangeListeners( - String propertyName) { - List listeners = null; - - if (propertyName != null) { - listeners = selectedPropertiesChangeListeners.get(propertyName); - } - - return (listeners == null) ? new PropertyChangeListener[] {} - : listeners.toArray( - new PropertyChangeListener[listeners.size()]); - } - - public void firePropertyChange(String propertyName, boolean oldValue, - boolean newValue) { - PropertyChangeEvent event = createPropertyChangeEvent(propertyName, - oldValue, newValue); - doFirePropertyChange(event); - } - - public void fireIndexedPropertyChange(String propertyName, int index, - boolean oldValue, boolean newValue) { - - if (oldValue != newValue) { - fireIndexedPropertyChange(propertyName, index, Boolean - .valueOf(oldValue), Boolean.valueOf(newValue)); - } - } - - public void firePropertyChange(String propertyName, int oldValue, - int newValue) { - PropertyChangeEvent event = createPropertyChangeEvent(propertyName, - oldValue, newValue); - doFirePropertyChange(event); - } - - public void fireIndexedPropertyChange(String propertyName, int index, - int oldValue, int newValue) { - - if (oldValue != newValue) { - fireIndexedPropertyChange(propertyName, index, - new Integer(oldValue), new Integer(newValue)); - } - } - - public synchronized boolean hasListeners(String propertyName) { - boolean result = allPropertiesChangeListeners.size() > 0; - if (!result && (propertyName != null)) { - List listeners = - selectedPropertiesChangeListeners.get(propertyName); - if (listeners != null) { - result = listeners.size() > 0; - } - } - return result; - } - - public synchronized void removePropertyChangeListener( - PropertyChangeListener listener) { - if (listener != null) { - if (listener instanceof PropertyChangeListenerProxy) { - String name = ((PropertyChangeListenerProxy) listener) - .getPropertyName(); - PropertyChangeListener lst = (PropertyChangeListener) - ((PropertyChangeListenerProxy) listener).getListener(); - - removePropertyChangeListener(name, lst); - } else { - allPropertiesChangeListeners.remove(listener); - } - } - } - - public synchronized void addPropertyChangeListener( - PropertyChangeListener listener) { - if (listener != null) { - if (listener instanceof PropertyChangeListenerProxy) { - String name = ((PropertyChangeListenerProxy) listener) - .getPropertyName(); - PropertyChangeListener lst = (PropertyChangeListener) - ((PropertyChangeListenerProxy) listener).getListener(); - addPropertyChangeListener(name, lst); - } else { - allPropertiesChangeListeners.add(listener); - } - } - } - - public synchronized PropertyChangeListener[] getPropertyChangeListeners() { - ArrayList result = - new ArrayList( - allPropertiesChangeListeners); - - for (String propertyName : selectedPropertiesChangeListeners.keySet()) { - List selectedListeners = - selectedPropertiesChangeListeners.get(propertyName); - - if (selectedListeners != null) { - - for (PropertyChangeListener listener : selectedListeners) { - result.add(new PropertyChangeListenerProxy(propertyName, - listener)); - } - } - } - - return result.toArray(new PropertyChangeListener[result.size()]); - } - - private void writeObject(ObjectOutputStream oos) throws IOException { - List allSerializedPropertiesChangeListeners = - new ArrayList(); - - for (PropertyChangeListener pcl : allPropertiesChangeListeners) { - if (pcl instanceof Serializable) { - allSerializedPropertiesChangeListeners.add(pcl); - } - } - - Map> - selectedSerializedPropertiesChangeListeners = - new HashMap>(); - - for (String propertyName : selectedPropertiesChangeListeners.keySet()) { - List keyValues = - selectedPropertiesChangeListeners.get(propertyName); - - if (keyValues != null) { - List serializedPropertiesChangeListeners - = new ArrayList(); - - for (PropertyChangeListener pcl : keyValues) { - if (pcl instanceof Serializable) { - serializedPropertiesChangeListeners.add(pcl); - } - } - - if (!serializedPropertiesChangeListeners.isEmpty()) { - selectedSerializedPropertiesChangeListeners.put( - propertyName, serializedPropertiesChangeListeners); - } - } - } - - children = new Hashtable>( - selectedSerializedPropertiesChangeListeners); - children.put("", allSerializedPropertiesChangeListeners); //$NON-NLS-1$ - oos.writeObject(children); - - Object source = null; - if (sourceBean instanceof Serializable) { - source = sourceBean; - } - oos.writeObject(source); - - oos.writeInt(propertyChangeSupportSerializedDataVersion); - } - - @SuppressWarnings("unchecked") - private void readObject(ObjectInputStream ois) throws IOException, - ClassNotFoundException { - children = (Hashtable>) ois - .readObject(); - - selectedPropertiesChangeListeners = new HashMap>( - children); - allPropertiesChangeListeners = selectedPropertiesChangeListeners - .remove(""); //$NON-NLS-1$ - if (allPropertiesChangeListeners == null) { - allPropertiesChangeListeners = new ArrayList(); - } - - sourceBean = ois.readObject(); - propertyChangeSupportSerializedDataVersion = ois.readInt(); - } - - public void firePropertyChange(PropertyChangeEvent event) { - doFirePropertyChange(event); - } - - private PropertyChangeEvent createPropertyChangeEvent(String propertyName, - Object oldValue, Object newValue) { - return new PropertyChangeEvent(sourceBean, propertyName, oldValue, - newValue); - } - - private PropertyChangeEvent createPropertyChangeEvent(String propertyName, - boolean oldValue, boolean newValue) { - return new PropertyChangeEvent(sourceBean, propertyName, oldValue, - newValue); - } - - private PropertyChangeEvent createPropertyChangeEvent(String propertyName, - int oldValue, int newValue) { - return new PropertyChangeEvent(sourceBean, propertyName, oldValue, - newValue); - } - - private void doFirePropertyChange(PropertyChangeEvent event) { - String propertyName = event.getPropertyName(); - Object oldValue = event.getOldValue(); - Object newValue = event.getNewValue(); - - if ((newValue != null) && (oldValue != null) - && newValue.equals(oldValue)) { - return; - } - - /* - * Copy the listeners collections so they can be modified while we fire - * events. - */ - - // Listeners to all property change events - PropertyChangeListener[] listensToAll; - // Listens to a given property change - PropertyChangeListener[] listensToOne = null; - synchronized (this) { - listensToAll = allPropertiesChangeListeners - .toArray(new PropertyChangeListener[allPropertiesChangeListeners - .size()]); - - List listeners = selectedPropertiesChangeListeners - .get(propertyName); - if (listeners != null) { - listensToOne = listeners - .toArray(new PropertyChangeListener[listeners.size()]); - } - } - - // Fire the listeners - for (PropertyChangeListener listener : listensToAll) { - listener.propertyChange(event); - } - if (listensToOne != null) { - for (PropertyChangeListener listener : listensToOne) { - listener.propertyChange(event); - } - } - } - -} diff --git a/awt/javax/imageio/IIOException.java b/awt/javax/imageio/IIOException.java index fbfeb42fd0..c77716c439 100644 --- a/awt/javax/imageio/IIOException.java +++ b/awt/javax/imageio/IIOException.java @@ -18,22 +18,28 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import java.io.IOException; /** * The IIOException class indicates errors in reading/writing operations. + * + * @since Android 1.0 */ public class IIOException extends IOException { - /** The Constant serialVersionUID. */ + /** + * The Constant serialVersionUID. + */ private static final long serialVersionUID = -3216210718638985251L; /** * Instantiates a new IIOException. * - * @param message the detailed message. + * @param message + * the detailed message. */ public IIOException(String message) { super(message); @@ -42,8 +48,10 @@ public class IIOException extends IOException { /** * Instantiates a new IIOException. * - * @param message the detailed message. - * @param cause the cause of this exception. + * @param message + * the detailed message. + * @param cause + * the cause of this exception. */ public IIOException(String message, Throwable cause) { super(message); diff --git a/awt/javax/imageio/IIOImage.java b/awt/javax/imageio/IIOImage.java index e17a9fc07c..e9e5130cfa 100644 --- a/awt/javax/imageio/IIOImage.java +++ b/awt/javax/imageio/IIOImage.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import javax.imageio.metadata.IIOMetadata; @@ -27,33 +28,47 @@ import java.awt.image.BufferedImage; import java.util.List; /** - * The IIOImage class combines the image, image's thumbnail and image's metadata. - * The image can be presented as RenderedImage or Raster object. + * The IIOImage class combines the image, image's thumbnail and image's + * metadata. The image can be presented as RenderedImage or Raster object. + * + * @since Android 1.0 */ public class IIOImage { - /** The image of this IIOImage. */ + /** + * The image of this IIOImage. + */ protected RenderedImage image; - - /** The raster of this IIOImage. */ + + /** + * The raster of this IIOImage. + */ protected Raster raster; - - /** The list with thumbnails associated with the image. */ + + /** + * The list with thumbnails associated with the image. + */ protected List thumbnails; - - /** The metadata associated with the image. */ + + /** + * The metadata associated with the image. + */ protected IIOMetadata metadata; /** - * Instantiates a new IIOImage with the specified RenderedImage, - * list of thumbnails and metadata. + * Instantiates a new IIOImage with the specified RenderedImage, list of + * thumbnails and metadata. * - * @param image the image specified by RenderedImage. - * @param thumbnails the list of BufferedImage objects which - * represent the thumbnails of the image. - * @param metadata the metadata of the image. + * @param image + * the image specified by RenderedImage. + * @param thumbnails + * the list of BufferedImage objects which represent the + * thumbnails of the image. + * @param metadata + * the metadata of the image. */ - public IIOImage(RenderedImage image, List thumbnails, IIOMetadata metadata) { + public IIOImage(RenderedImage image, List thumbnails, + IIOMetadata metadata) { if (image == null) { throw new IllegalArgumentException("image should not be NULL"); } @@ -64,13 +79,16 @@ public class IIOImage { } /** - * Instantiates a new IIOImage with the specified Raster, list of - * thumbnails and metadata. + * Instantiates a new IIOImage with the specified Raster, list of thumbnails + * and metadata. * - * @param raster the Raster. - * @param thumbnails the list of BufferedImage objects which - * represent the thumbnails of Raster data. - * @param metadata the metadata. + * @param raster + * the Raster. + * @param thumbnails + * the list of BufferedImage objects which represent the + * thumbnails of Raster data. + * @param metadata + * the metadata. */ public IIOImage(Raster raster, List thumbnails, IIOMetadata metadata) { if (raster == null) { @@ -83,11 +101,11 @@ public class IIOImage { } /** - * Gets the RenderedImage object or returns null if this IIOImage - * object is associated with a Raster. + * Gets the RenderedImage object or returns null if this IIOImage object is + * associated with a Raster. * - * @return the RenderedImage object or null if this IIOImage - * object is associated with a Raster. + * @return the RenderedImage object or null if this IIOImage object is + * associated with a Raster. */ public RenderedImage getRenderedImage() { return image; @@ -96,7 +114,8 @@ public class IIOImage { /** * Sets the RenderedImage to this IIOImage object. * - * @param image the RenderedImage to be set to this IIOImage. + * @param image + * the RenderedImage to be set to this IIOImage. */ public void setRenderedImage(RenderedImage image) { if (image == null) { @@ -107,11 +126,11 @@ public class IIOImage { } /** - * Returns true if the IIOImage object associated with a Raster, or - * false if it's associated with a RenderedImage. + * Returns true if the IIOImage object associated with a Raster, or false if + * it's associated with a RenderedImage. * - * @return true if the IIOImage object associated with a Raster, or - * false if it's associated with a RenderedImage. + * @return true, if the IIOImage object associated with a Raster, or false + * if it's associated with a RenderedImage. */ public boolean hasRaster() { return raster != null; @@ -121,8 +140,8 @@ public class IIOImage { * Gets the Raster object or returns null if this IIOImage object is * associated with a RenderedImage. * - * @return the Raster or null if this IIOImage object - * is associated with a RenderedImage. + * @return the Raster or null if this IIOImage object is associated with a + * RenderedImage. */ public Raster getRaster() { return raster; @@ -131,7 +150,8 @@ public class IIOImage { /** * Sets the Raster to the IIOImage. * - * @param raster the new Raster to the IIOImage. + * @param raster + * the new Raster to the IIOImage. */ public void setRaster(Raster raster) { if (raster == null) { @@ -153,8 +173,8 @@ public class IIOImage { /** * Gets the thumbnail with the specified index in the list. * - * @param index the index of the thumbnail in the list. - * + * @param index + * the index of the thumbnail in the list. * @return the thumbnail with the specified index in the list. */ public BufferedImage getThumbnail(int index) { @@ -176,8 +196,8 @@ public class IIOImage { /** * Sets the list of thumbnails images to this IIOImage object. * - * @param thumbnails the list of BufferedImage which represent - * thumbnails. + * @param thumbnails + * the list of BufferedImage which represent thumbnails. */ public void setThumbnails(List thumbnails) { this.thumbnails = thumbnails; @@ -195,7 +215,8 @@ public class IIOImage { /** * Sets the metadata to this IIOImage object. * - * @param metadata the IIOMetadata, or null. + * @param metadata + * the IIOMetadata, or null. */ public void setMetadata(IIOMetadata metadata) { this.metadata = metadata; diff --git a/awt/javax/imageio/IIOParam.java b/awt/javax/imageio/IIOParam.java index d998b6e513..2ccc9450f5 100644 --- a/awt/javax/imageio/IIOParam.java +++ b/awt/javax/imageio/IIOParam.java @@ -18,56 +18,80 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import java.awt.*; /** - * The IIOParam abstract class is superclass for - * ImageReadParam and ImageWriteParam classes and provides - * methods and variables which they share. + * The IIOParam abstract class is superclass for ImageReadParam and + * ImageWriteParam classes and provides methods and variables which they share. + * + * @since Android 1.0 */ public abstract class IIOParam { - - /** The source region. */ + + /** + * The source region. + */ protected Rectangle sourceRegion; - - /** The source x subsampling. */ + + /** + * The source x subsampling. + */ protected int sourceXSubsampling = 1; - - /** The source y subsampling. */ + + /** + * The source y subsampling. + */ protected int sourceYSubsampling = 1; - - /** The subsampling x offset. */ + + /** + * The subsampling x offset. + */ protected int subsamplingXOffset; - - /** The subsampling y offset. */ + + /** + * The subsampling y offset. + */ protected int subsamplingYOffset; - - /** The source bands. */ + + /** + * The source bands. + */ protected int[] sourceBands; - - /** The destination type. */ + + /** + * The destination type. + */ protected ImageTypeSpecifier destinationType; - - /** The destination offset. */ + + /** + * The destination offset. + */ protected Point destinationOffset = new Point(0, 0); - - /** The default controller. */ + + /** + * The default controller. + */ protected IIOParamController defaultController; - - /** The controller. */ + + /** + * The controller. + */ protected IIOParamController controller; /** * Instantiates a new IIOParam. */ - protected IIOParam() {} + protected IIOParam() { + } /** * Sets the source region as a Rectangle object. * - * @param sourceRegion the Rectangle which specifies the source region. + * @param sourceRegion + * the Rectangle which specifies the source region. */ public void setSourceRegion(Rectangle sourceRegion) { if (sourceRegion != null) { @@ -91,8 +115,8 @@ public abstract class IIOParam { if (sourceRegion.height <= subsamplingYOffset) { throw new IllegalArgumentException("height <= subsamplingXOffset"); } - //-- clone it to avoid unexpected modifications - this.sourceRegion = (Rectangle) sourceRegion.clone(); + // -- clone it to avoid unexpected modifications + this.sourceRegion = (Rectangle)sourceRegion.clone(); } else { this.sourceRegion = null; } @@ -107,24 +131,26 @@ public abstract class IIOParam { if (sourceRegion == null) { return null; } - //-- clone it to avoid unexpected modifications - return (Rectangle) sourceRegion.clone(); + // -- clone it to avoid unexpected modifications + return (Rectangle)sourceRegion.clone(); } /** - * Sets the source subsampling. The sourceXSubsampling and - * sourceYSubsampling parameters specify the number of rows - * and columns to advance after every source pixel. + * Sets the source subsampling. The sourceXSubsampling and + * sourceYSubsampling parameters specify the number of rows and columns to + * advance after every source pixel. * - * @param sourceXSubsampling the source X subsampling. - * @param sourceYSubsampling the source Y subsampling. - * @param subsamplingXOffset the subsampling X offset. - * @param subsamplingYOffset the subsampling Y offset. + * @param sourceXSubsampling + * the source X subsampling. + * @param sourceYSubsampling + * the source Y subsampling. + * @param subsamplingXOffset + * the subsampling X offset. + * @param subsamplingYOffset + * the subsampling Y offset. */ - public void setSourceSubsampling(int sourceXSubsampling, - int sourceYSubsampling, - int subsamplingXOffset, - int subsamplingYOffset) { + public void setSourceSubsampling(int sourceXSubsampling, int sourceYSubsampling, + int subsamplingXOffset, int subsamplingYOffset) { if (sourceXSubsampling <= 0) { throw new IllegalArgumentException("sourceXSubsampling <= 0"); @@ -141,10 +167,10 @@ public abstract class IIOParam { throw new IllegalArgumentException("subsamplingYOffset is wrong"); } - //-- does region contain pixels + // -- does region contain pixels if (sourceRegion != null) { - if (sourceRegion.width <= subsamplingXOffset || - sourceRegion.height <= subsamplingYOffset) { + if (sourceRegion.width <= subsamplingXOffset + || sourceRegion.height <= subsamplingYOffset) { throw new IllegalArgumentException("there are no pixels in region"); } } @@ -156,8 +182,8 @@ public abstract class IIOParam { } /** - * Gets the source X subsampling - the number of source - * columns to advance for each pixel. + * Gets the source X subsampling - the number of source columns to advance + * for each pixel. * * @return the source X subsampling. */ @@ -166,8 +192,8 @@ public abstract class IIOParam { } /** - * Gets the source Y subsampling - the number of source - * rows to advance for each pixel. + * Gets the source Y subsampling - the number of source rows to advance for + * each pixel. * * @return the source Y subsampling. */ @@ -196,7 +222,8 @@ public abstract class IIOParam { /** * Sets the indices of the source bands. * - * @param sourceBands the indices of the source bands. + * @param sourceBands + * the indices of the source bands. */ public void setSourceBands(int[] sourceBands) { // TODO implement @@ -216,7 +243,8 @@ public abstract class IIOParam { /** * Sets the specified ImageTypeSpecifier for the destination image. * - * @param destinationType the ImageTypeSpecifier. + * @param destinationType + * the ImageTypeSpecifier. */ public void setDestinationType(ImageTypeSpecifier destinationType) { // TODO implement @@ -225,7 +253,7 @@ public abstract class IIOParam { /** * Gets the type of the destination image as an ImageTypeSpecifier. . - * + * * @return the ImageTypeSpecifier. */ public ImageTypeSpecifier getDestinationType() { @@ -234,18 +262,19 @@ public abstract class IIOParam { } /** - * Sets the offset in the destination image where - * the decoded pixels are placed as a result of reading, - * or specified an area to be written while writing operation. + * Sets the offset in the destination image where the decoded pixels are + * placed as a result of reading, or specified an area to be written while + * writing operation. * - * @param destinationOffset the destination offset. + * @param destinationOffset + * the destination offset. */ public void setDestinationOffset(Point destinationOffset) { if (destinationOffset == null) { throw new IllegalArgumentException("destinationOffset == null!"); } - - this.destinationOffset = (Point) destinationOffset.clone(); + + this.destinationOffset = (Point)destinationOffset.clone(); } /** @@ -254,14 +283,15 @@ public abstract class IIOParam { * @return the offset in the destination image. */ public Point getDestinationOffset() { - return (Point) destinationOffset.clone(); + return (Point)destinationOffset.clone(); } /** - * Sets the IIOParamController to this IIOParam object for - * providing settings to this IIOParam. + * Sets the IIOParamController to this IIOParam object for providing + * settings to this IIOParam. * - * @param controller the new IIOParamController. + * @param controller + * the new IIOParamController. */ public void setController(IIOParamController controller) { // TODO implement @@ -269,11 +299,9 @@ public abstract class IIOParam { } /** - * Gets the current IIOParamController controller - * for this IIOParam. + * Gets the current IIOParamController controller for this IIOParam. * - * @return the current IIOParamController controller - * for this IIOParam. + * @return the current IIOParamController controller for this IIOParam. */ public IIOParamController getController() { // TODO implement @@ -281,11 +309,10 @@ public abstract class IIOParam { } /** - * Gets the default IIOParamController controller - * for this IIOParam. + * Gets the default IIOParamController controller for this IIOParam. * - * @return the default IIOParamController controller - * for this IIOParam, or null. + * @return the default IIOParamController controller for this IIOParam, or + * null. */ public IIOParamController getDefaultController() { // TODO implement @@ -293,11 +320,10 @@ public abstract class IIOParam { } /** - * Returns true if IIOParamController is installed for - * this IIOParam. + * Returns true if IIOParamController is installed for this IIOParam. * - * @return true if IIOParamController is installed for - * this IIOParam, false otherwise. + * @return true, if IIOParamController is installed for this IIOParam, false + * otherwise. */ public boolean hasController() { // TODO implement diff --git a/awt/javax/imageio/IIOParamController.java b/awt/javax/imageio/IIOParamController.java index 31522c19ba..338cb25a72 100644 --- a/awt/javax/imageio/IIOParamController.java +++ b/awt/javax/imageio/IIOParamController.java @@ -18,6 +18,7 @@ * @author Sergey I. Salishev * @version $Revision: 1.2 $ */ + package javax.imageio; /* @@ -26,18 +27,19 @@ package javax.imageio; */ /** - * The IIOParamController specifies an activate method that invokes the + * The IIOParamController specifies an activate method that invokes the * controller. + * + * @since Android 1.0 */ public interface IIOParamController { /** - * Activates the controller. - * - * @param param the IIOParam. + * Activates the controller. * - * @return true if the IIOParam has been modified, false otherwise. + * @param param + * the IIOParam. + * @return true, if the IIOParam has been modified, false otherwise. */ boolean activate(IIOParam param); } - diff --git a/awt/javax/imageio/ImageIO.java b/awt/javax/imageio/ImageIO.java index d4cd1dda1a..e0d7ec9904 100644 --- a/awt/javax/imageio/ImageIO.java +++ b/awt/javax/imageio/ImageIO.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import javax.imageio.stream.ImageInputStream; @@ -34,44 +35,47 @@ import java.awt.image.RenderedImage; import java.net.URL; /** - * The ImageIO class provides static methods to perfom - * reading and writing operations using registered - * ImageReader and ImageWriter objects. + * The ImageIO class provides static methods to perform reading and writing + * operations using registered ImageReader and ImageWriter objects. + * + * @since Android 1.0 */ public final class ImageIO { - /** The Constant registry. */ + /** + * The constant registry. + */ private static final IIORegistry registry = IIORegistry.getDefaultInstance(); /** - * Instantiates a new image io. + * Instantiates a new ImageIO. */ - private ImageIO() {} - + private ImageIO() { + } /** - * Scans for plug-ins in the class path, - * loads spi classes, and registers them with the IIORegistry. + * Scans for plug-ins in the class path, loads spi classes, and registers + * them with the IIORegistry. */ public static void scanForPlugins() { throw new UnsupportedOperationException("Not supported yet"); } /** - * Sets flag which indicates whether a cache file is used when - * creating ImageInputStreams and ImageOutputStreams or not. + * Sets flag which indicates whether a cache file is used when creating + * ImageInputStreams and ImageOutputStreams or not. * - * @param useCache the use cache flag. + * @param useCache + * the use cache flag. */ public static void setUseCache(boolean useCache) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Gets the flag which indicates whether a cache file is used when - * creating ImageInputStreams and ImageOutputStreams or not. - * This method returns the current value which is set by setUseCache - * method. + * Gets the flag which indicates whether a cache file is used when creating + * ImageInputStreams and ImageOutputStreams or not. This method returns the + * current value which is set by setUseCache method. * * @return the use cache flag. */ @@ -83,44 +87,44 @@ public final class ImageIO { /** * Sets the cache directory. * - * @param cacheDirectory the File which specifies a cache directory. + * @param cacheDirectory + * the File which specifies a cache directory. */ public static void setCacheDirectory(File cacheDirectory) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Gets the directory where cache files are created, returned - * the file which is set by setCacheDirectory method, or null. + * Gets the directory where cache files are created, returned the file which + * is set by setCacheDirectory method, or null. * - * @return the File object which is set by setCacheDirectory method, - * or null. + * @return the File object which is set by setCacheDirectory method, or + * null. */ public static File getCacheDirectory() { // TODO implement - //-- null indicates system-dep default temporary directory + // -- null indicates system-dep default temporary directory return null; } /** - * Creates an ImageInputStream from the specified Object. - * The specified Object should obtain the input source - * such as File, or InputStream. - * - * @param input the input Object such as File, or InputStream. + * Creates an ImageInputStream from the specified Object. The specified + * Object should obtain the input source such as File, or InputStream. * + * @param input + * the input Object such as File, or InputStream. * @return the ImageInputStream object, or null. - * - * @throws IOException signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ - public static ImageInputStream createImageInputStream(Object input) - throws IOException { + public static ImageInputStream createImageInputStream(Object input) throws IOException { if (input == null) { throw new IllegalArgumentException("input source cannot be NULL"); } - Iterator it = registry.getServiceProviders(ImageInputStreamSpi.class, true); + Iterator it = registry.getServiceProviders(ImageInputStreamSpi.class, + true); while (it.hasNext()) { ImageInputStreamSpi spi = it.next(); @@ -132,23 +136,22 @@ public final class ImageIO { } /** - * Creates an ImageOutputStream using the specified Object. - * The specified Object should obtain the output source - * such as File, or OutputStream. - * - * @param output the output Object such as File, or OutputStream. + * Creates an ImageOutputStream using the specified Object. The specified + * Object should obtain the output source such as File, or OutputStream. * + * @param output + * the output Object such as File, or OutputStream. * @return the ImageOutputStream object, or null. - * - * @throws IOException signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ - public static ImageOutputStream createImageOutputStream(Object output) - throws IOException { + public static ImageOutputStream createImageOutputStream(Object output) throws IOException { if (output == null) { throw new IllegalArgumentException("output destination cannot be NULL"); } - Iterator it = registry.getServiceProviders(ImageOutputStreamSpi.class, true); + Iterator it = registry.getServiceProviders( + ImageOutputStreamSpi.class, true); while (it.hasNext()) { ImageOutputStreamSpi spi = it.next(); @@ -161,8 +164,8 @@ public final class ImageIO { } /** - * Gets the array of format names as String which can be - * decoded by registered ImageReader objects. + * Gets the array of format names as String which can be decoded by + * registered ImageReader objects. * * @return the array of format names. */ @@ -171,8 +174,8 @@ public final class ImageIO { } /** - * Gets the array of MIME types as String which can be - * decoded by registered ImageReader objects. + * Gets the array of MIME types as String which can be decoded by registered + * ImageReader objects. * * @return the array of MIME types. */ @@ -181,13 +184,13 @@ public final class ImageIO { } /** - * Gets the Iterator of registered ImageReader which are able to - * decode an imput data specified by input Object. - * - * @param input the input Object with encoded data such as - * ImageInputStream object. + * Gets the Iterator of registered ImageReader which are able to decode an + * input data specified by input Object. * - * @return the Iterator of registered ImageReader. + * @param input + * the input Object with encoded data such as ImageInputStream + * object. + * @return the Iterator of registered ImageReader. */ public static Iterator getImageReaders(Object input) { if (input == null) { @@ -201,11 +204,11 @@ public final class ImageIO { } /** - * Gets the Iterator of registered ImageReader which are able to - * decode the specified format. - * - * @param formatName the format name such as "jpeg", or "gif". + * Gets the Iterator of registered ImageReader which are able to decode the + * specified format. * + * @param formatName + * the format name such as "jpeg", or "gif". * @return the Iterator of registered ImageReader. */ public static Iterator getImageReadersByFormatName(String formatName) { @@ -220,11 +223,11 @@ public final class ImageIO { } /** - * Gets the Iterator which lists the registered ImageReader objects that - * are able to decode files with the specified suffix. - * - * @param fileSuffix the file suffix such as "jpg". + * Gets the Iterator which lists the registered ImageReader objects that are + * able to decode files with the specified suffix. * + * @param fileSuffix + * the file suffix such as "jpg". * @return the Iterator of registered ImageReaders. */ public static Iterator getImageReadersBySuffix(String fileSuffix) { @@ -238,11 +241,11 @@ public final class ImageIO { } /** - * Gets the Iterator of registered ImageReader objects that - * are able to decode files with the specified MIME type. - * - * @param MIMEType the MIME type such as "image/jpeg". + * Gets the Iterator of registered ImageReader objects that are able to + * decode files with the specified MIME type. * + * @param MIMEType + * the MIME type such as "image/jpeg". * @return the Iterator of registered ImageReaders. */ public static Iterator getImageReadersByMIMEType(String MIMEType) { @@ -250,8 +253,8 @@ public final class ImageIO { } /** - * Gets an array of Strings giving the names of the formats supported - * by registered ImageWriter objects. + * Gets an array of Strings giving the names of the formats supported by + * registered ImageWriter objects. * * @return the array of format names. */ @@ -260,7 +263,7 @@ public final class ImageIO { } /** - * Gets an array of Strings giving the MIME types of the formats supported + * Gets an array of Strings giving the MIME types of the formats supported * by registered ImageWriter objects. * * @return the array of MIME types. @@ -270,11 +273,11 @@ public final class ImageIO { } /** - * Gets the Iterator which lists the registered ImageReader objects that - * are able to encode the specified image format. - * - * @param formatName the image format name such as "jpeg". + * Gets the Iterator which lists the registered ImageReader objects that are + * able to encode the specified image format. * + * @param formatName + * the image format name such as "jpeg". * @return the Iterator of registered ImageWriter. */ public static Iterator getImageWritersByFormatName(String formatName) { @@ -289,11 +292,11 @@ public final class ImageIO { } /** - * Gets the Iterator which lists the registered ImageReader objects that - * are able to encode the specified suffix. - * - * @param fileSuffix the file suffix such as "jpg". + * Gets the Iterator which lists the registered ImageReader objects that are + * able to encode the specified suffix. * + * @param fileSuffix + * the file suffix such as "jpg". * @return the Iterator of registered ImageWriter. */ public static Iterator getImageWritersBySuffix(String fileSuffix) { @@ -306,11 +309,11 @@ public final class ImageIO { } /** - * Gets the Iterator which lists the registered ImageReader objects that - * are able to encode the specified MIME type. - * - * @param MIMEType the MIME type such as "image/jpeg". + * Gets the Iterator which lists the registered ImageReader objects that are + * able to encode the specified MIME type. * + * @param MIMEType + * the MIME type such as "image/jpeg". * @return the Iterator of registered ImageWriter. */ public static Iterator getImageWritersByMIMEType(String MIMEType) { @@ -318,12 +321,12 @@ public final class ImageIO { } /** - * Gets an ImageWriter object which corresponds to the - * specified ImageReader, or returns null if the specified - * ImageReader is not registered. - * - * @param reader the specified ImageReader. + * Gets an ImageWriter object which corresponds to the specified + * ImageReader, or returns null if the specified ImageReader is not + * registered. * + * @param reader + * the specified ImageReader. * @return the ImageWriter, or null. */ public static ImageWriter getImageWriter(ImageReader reader) { @@ -331,12 +334,12 @@ public final class ImageIO { } /** - * Gets an ImageReader object which corresponds to the - * specified ImageWriter, or returns null if the specified - * ImageWriter is not registered. - * - * @param writer the registered ImageWriter object. + * Gets an ImageReader object which corresponds to the specified + * ImageWriter, or returns null if the specified ImageWriter is not + * registered. * + * @param writer + * the registered ImageWriter object. * @return the ImageReader. */ public static ImageReader getImageReader(ImageWriter writer) { @@ -344,17 +347,16 @@ public final class ImageIO { } /** - * Gets the Iterator of ImageWriter objects which are able to - * encode images with the specified ImageTypeSpecifier and - * format. - * - * @param type the ImageTypeSpecifier, which defines layout. - * @param formatName the format name. + * Gets the Iterator of ImageWriter objects which are able to encode images + * with the specified ImageTypeSpecifier and format. * + * @param type + * the ImageTypeSpecifier, which defines layout. + * @param formatName + * the format name. * @return the Iterator of ImageWriter objects. */ - public static Iterator getImageWriters(ImageTypeSpecifier type, - String formatName) { + public static Iterator getImageWriters(ImageTypeSpecifier type, String formatName) { if (type == null) { throw new NullPointerException("type cannot be NULL"); } @@ -370,31 +372,31 @@ public final class ImageIO { } /** - * Gets the Iterator of registered ImageTranscoders which - * are able to transcode the metadata of the specified - * ImageReader object to a suitable object for encoding - * by the specified ImageWriter. - * - * @param reader the specified ImageReader. - * @param writer the specified ImageWriter. + * Gets the Iterator of registered ImageTranscoders which are able to + * transcode the metadata of the specified ImageReader object to a suitable + * object for encoding by the specified ImageWriter. * + * @param reader + * the specified ImageReader. + * @param writer + * the specified ImageWriter. * @return the Iterator of registered ImageTranscoders. */ public static Iterator getImageTranscoders(ImageReader reader, - ImageWriter writer) { + ImageWriter writer) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Reads image data from the specified File and decodes it using - * the appropriate registered ImageReader object. - * The File is wrapped in an ImageInputStream. - * - * @param input the File to be read. + * Reads image data from the specified File and decodes it using the + * appropriate registered ImageReader object. The File is wrapped in an + * ImageInputStream. * + * @param input + * the File to be read. * @return the BufferedImage decoded from the specified File, or null. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public static BufferedImage read(File input) throws IOException { if (input == null) { @@ -406,15 +408,15 @@ public final class ImageIO { } /** - * Reads image data from the specified InputStream and decodes it - * using an appropriate registered an ImageReader object. + * Reads image data from the specified InputStream and decodes it using an + * appropriate registered an ImageReader object. * - * @param input the InputStream. - * - * @return the BufferedImage decoded from the specified InputStream, - * or null. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param input + * the InputStream. + * @return the BufferedImage decoded from the specified InputStream, or + * null. + * @throws IOException + * if an I/O exception has occurred. */ public static BufferedImage read(InputStream input) throws IOException { if (input == null) { @@ -426,14 +428,14 @@ public final class ImageIO { } /** - * Reads image data from the specified URL and decodes it using - * the appropriate registered ImageReader object. - * - * @param input the URL to be read. + * Reads image data from the specified URL and decodes it using the + * appropriate registered ImageReader object. * + * @param input + * the URL to be read. * @return the BufferedImage decoded from the specified URL, or null. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public static BufferedImage read(URL input) throws IOException { if (input == null) { @@ -443,20 +445,20 @@ public final class ImageIO { InputStream stream = input.openStream(); BufferedImage res = read(stream); stream.close(); - + return res; } /** - * Reads image data from the specified ImageInputStream and decodes it - * using appropriate registered an ImageReader object. - * - * @param stream the ImageInputStream. + * Reads image data from the specified ImageInputStream and decodes it using + * appropriate registered an ImageReader object. * - * @return the BufferedImage decoded from the specified ImageInputStream, - * or null. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param stream + * the ImageInputStream. + * @return the BufferedImage decoded from the specified ImageInputStream, or + * null. + * @throws IOException + * if an I/O exception has occurred. */ public static BufferedImage read(ImageInputStream stream) throws IOException { if (stream == null) { @@ -478,25 +480,25 @@ public final class ImageIO { } catch (IOException e) { // Stream could be already closed, proceed silently in this case } - + return res; } /** - * Writes the specified image in the specified format (using an - * appropriate ImageWriter) to the specified ImageOutputStream. - * - * @param im the RenderedImage. - * @param formatName the format name. - * @param output the ImageOutputStream where Image to be written. + * Writes the specified image in the specified format (using an appropriate + * ImageWriter) to the specified ImageOutputStream. * + * @param im + * the RenderedImage. + * @param formatName + * the format name. + * @param output + * the ImageOutputStream where Image to be written. * @return true, if Image is written successfully, false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ - public static boolean write(RenderedImage im, - String formatName, - ImageOutputStream output) + public static boolean write(RenderedImage im, String formatName, ImageOutputStream output) throws IOException { if (im == null) { @@ -509,7 +511,8 @@ public final class ImageIO { throw new IllegalArgumentException("output cannot be NULL"); } - Iterator it = getImageWriters(ImageTypeSpecifier.createFromRenderedImage(im), formatName); + Iterator it = getImageWriters(ImageTypeSpecifier.createFromRenderedImage(im), + formatName); if (it.hasNext()) { ImageWriter writer = it.next(); writer.setOutput(output); @@ -522,20 +525,20 @@ public final class ImageIO { } /** - * Writes the specified image in the specified format (using an - * appropriate ImageWriter) to the specified File. - * - * @param im the RenderedImage. - * @param formatName the format name. - * @param output the output File where Image to be written. + * Writes the specified image in the specified format (using an appropriate + * ImageWriter) to the specified File. * + * @param im + * the RenderedImage. + * @param formatName + * the format name. + * @param output + * the output File where Image to be written. * @return true, if Image is written successfully, false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ - public static boolean write(RenderedImage im, - String formatName, - File output) + public static boolean write(RenderedImage im, String formatName, File output) throws IOException { if (output == null) { @@ -553,20 +556,20 @@ public final class ImageIO { } /** - * Writes the specified image in the specified format (using an - * appropriate ImageWriter) to the specified OutputStream. - * - * @param im the RenderedImage. - * @param formatName the format name. - * @param output the OutputStream where Image is to be written. + * Writes the specified image in the specified format (using an appropriate + * ImageWriter) to the specified OutputStream. * + * @param im + * the RenderedImage. + * @param formatName + * the format name. + * @param output + * the OutputStream where Image is to be written. * @return true, if Image is written successfully, false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ - public static boolean write(RenderedImage im, - String formatName, - OutputStream output) + public static boolean write(RenderedImage im, String formatName, OutputStream output) throws IOException { if (output == null) { @@ -579,26 +582,28 @@ public final class ImageIO { return rt; } - /** * Filter to match spi by format name. */ static class FormatFilter implements ServiceRegistry.Filter { - - /** The name. */ + + /** + * The name. + */ private String name; /** * Instantiates a new format filter. * - * @param name the name + * @param name + * the name. */ public FormatFilter(String name) { this.name = name; } public boolean filter(Object provider) { - ImageReaderWriterSpi spi = (ImageReaderWriterSpi) provider; + ImageReaderWriterSpi spi = (ImageReaderWriterSpi)provider; return Arrays.asList(spi.getFormatNames()).contains(name); } } @@ -608,14 +613,18 @@ public final class ImageIO { */ static class FormatAndEncodeFilter extends FormatFilter { - /** The type. */ + /** + * The type. + */ private ImageTypeSpecifier type; /** * Instantiates a new format and encode filter. * - * @param type the type - * @param name the name + * @param type + * the type. + * @param name + * the name. */ public FormatAndEncodeFilter(ImageTypeSpecifier type, String name) { super(name); @@ -624,7 +633,7 @@ public final class ImageIO { @Override public boolean filter(Object provider) { - ImageWriterSpi spi = (ImageWriterSpi) provider; + ImageWriterSpi spi = (ImageWriterSpi)provider; return super.filter(provider) && spi.canEncodeImage(type); } } @@ -633,21 +642,24 @@ public final class ImageIO { * Filter to match spi by suffix. */ static class SuffixFilter implements ServiceRegistry.Filter { - - /** The suf. */ + + /** + * The suf. + */ private String suf; /** * Instantiates a new suffix filter. * - * @param suf the suf + * @param suf + * the suf. */ public SuffixFilter(String suf) { this.suf = suf; } public boolean filter(Object provider) { - ImageReaderWriterSpi spi = (ImageReaderWriterSpi) provider; + ImageReaderWriterSpi spi = (ImageReaderWriterSpi)provider; return Arrays.asList(spi.getFileSuffixes()).contains(suf); } } @@ -656,21 +668,24 @@ public final class ImageIO { * Filter to match spi by decoding possibility. */ static class CanReadFilter implements ServiceRegistry.Filter { - - /** The input. */ + + /** + * The input. + */ private Object input; /** * Instantiates a new can read filter. * - * @param input the input + * @param input + * the input. */ public CanReadFilter(Object input) { this.input = input; } public boolean filter(Object provider) { - ImageReaderSpi spi = (ImageReaderSpi) provider; + ImageReaderSpi spi = (ImageReaderSpi)provider; try { return spi.canDecodeInput(input); } catch (IOException e) { @@ -684,13 +699,16 @@ public final class ImageIO { */ static class SpiIteratorToWritersIteratorWrapper implements Iterator { - /** The backend. */ + /** + * The backend. + */ private Iterator backend; /** * Instantiates a new spi iterator to writers iterator wrapper. * - * @param backend the backend + * @param backend + * the backend. */ public SpiIteratorToWritersIteratorWrapper(Iterator backend) { this.backend = backend; @@ -699,7 +717,7 @@ public final class ImageIO { /** * Next. * - * @return the image writer + * @return the image writer. */ public ImageWriter next() { try { @@ -713,7 +731,7 @@ public final class ImageIO { /** * Checks for next. * - * @return true, if successful + * @return true, if successful. */ public boolean hasNext() { return backend.hasNext(); @@ -723,7 +741,8 @@ public final class ImageIO { * Removes the. */ public void remove() { - throw new UnsupportedOperationException("Use deregisterServiceprovider instead of Iterator.remove()"); + throw new UnsupportedOperationException( + "Use deregisterServiceprovider instead of Iterator.remove()"); } } @@ -731,14 +750,17 @@ public final class ImageIO { * Wraps spi's iterator to ImageReader iterator. */ static class SpiIteratorToReadersIteratorWrapper implements Iterator { - - /** The backend. */ + + /** + * The backend. + */ private Iterator backend; /** * Instantiates a new spi iterator to readers iterator wrapper. * - * @param backend the backend + * @param backend + * the backend. */ public SpiIteratorToReadersIteratorWrapper(Iterator backend) { this.backend = backend; @@ -747,7 +769,7 @@ public final class ImageIO { /** * Next. * - * @return the image reader + * @return the image reader. */ public ImageReader next() { try { @@ -761,7 +783,7 @@ public final class ImageIO { /** * Checks for next. * - * @return true, if successful + * @return true, if successful. */ public boolean hasNext() { return backend.hasNext(); @@ -771,7 +793,8 @@ public final class ImageIO { * Removes the. */ public void remove() { - throw new UnsupportedOperationException("Use deregisterServiceprovider instead of Iterator.remove()"); + throw new UnsupportedOperationException( + "Use deregisterServiceprovider instead of Iterator.remove()"); } } } diff --git a/awt/javax/imageio/ImageReadParam.java b/awt/javax/imageio/ImageReadParam.java index e67ed7d91e..9cc5c5f1b1 100644 --- a/awt/javax/imageio/ImageReadParam.java +++ b/awt/javax/imageio/ImageReadParam.java @@ -18,6 +18,7 @@ * @author Sergey I. Salishev * @version $Revision: 1.2 $ */ + package javax.imageio; import java.awt.Dimension; @@ -29,45 +30,50 @@ import java.awt.image.BufferedImage; */ /** - * The ImageReadParam class provides information to the ImageReader about - * how an image is to be decoded. + * The ImageReadParam class provides information to the ImageReader about how an + * image is to be decoded. + * + * @since Android 1.0 */ - public class ImageReadParam extends IIOParam { - /** - * This flag indicates if this ImageReadParam supports setting the source - * rendering size. + /** + * This flag indicates if this ImageReadParam supports setting the source + * rendering size. */ protected boolean canSetSourceRenderSize; - - /** - * The destination BufferedImage. + + /** + * The destination BufferedImage. */ protected BufferedImage destination; - - /** The destination bands. */ + + /** + * The destination bands. + */ protected int[] destinationBands; - - /** - * The minimum progressive pass. + + /** + * The minimum progressive pass. */ protected int minProgressivePass; - - /** - * The number of progressive passes. + + /** + * The number of progressive passes. */ protected int numProgressivePasses; - - /** The source render size. */ + + /** + * The source render size. + */ protected Dimension sourceRenderSize; /** - * Returns true if this ImageReaderParam supports rendering a - * source image at an arbitrary size. + * Returns true if this ImageReaderParam supports rendering a source image + * at an arbitrary size. * - * @return true if this ImageReaderParam supports rendering a - * source image at an arbitrary size, false otherwise. + * @return true, if this ImageReaderParam supports rendering a source image + * at an arbitrary size, false otherwise. */ public boolean canSetSourceRenderSize() { return canSetSourceRenderSize; @@ -92,11 +98,9 @@ public class ImageReadParam extends IIOParam { } /** - * Gets the index of the maximum pass to be decoded. - * This method returns Integer.MAX_VALUE, if - * getSourceNumProgressivePasses() method returns value - * that is equal to Integer.MAX_VALUE. Otherwise - * this method returns + * Gets the index of the maximum pass to be decoded. This method returns + * Integer.MAX_VALUE, if getSourceNumProgressivePasses() method returns + * value that is equal to Integer.MAX_VALUE. Otherwise this method returns * getSourceMinProgressivePass() + getSourceNumProgressivePasses() - 1. * * @return the index of the maximum pass to be decoded. @@ -109,19 +113,19 @@ public class ImageReadParam extends IIOParam { } /** - * Gets the index of the minimum progressive pass that is decoded, - * default is 0. + * Gets the index of the minimum progressive pass that is decoded, default + * is 0. * * @return the index of the minimum progressive pass that is decoded, - * default is 0. + * default is 0. */ public int getSourceMinProgressivePass() { return minProgressivePass; } /** - * Gets the number of progressive passes. - * The default value is Integer.MAX_VALUE. + * Gets the number of progressive passes. The default value is + * Integer.MAX_VALUE. * * @return the number of progressive passes. */ @@ -130,8 +134,8 @@ public class ImageReadParam extends IIOParam { } /** - * Gets the dimension of source image which will be rendered - * during decoding process. + * Gets the dimension of source image which will be rendered during decoding + * process. * * @return the source render size. */ @@ -140,11 +144,12 @@ public class ImageReadParam extends IIOParam { } /** - * Sets the specified destination image. - * This image will be used by read, readAll, and readRaster methods, - * and a reference to it will be returned by those methods. + * Sets the specified destination image. This image will be used by read, + * readAll, and readRaster methods, and a reference to it will be returned + * by those methods. * - * @param destination the destination image. + * @param destination + * the destination image. */ public void setDestination(BufferedImage destination) { this.destination = destination; @@ -153,7 +158,8 @@ public class ImageReadParam extends IIOParam { /** * Sets the indices of the destination bands. * - * @param destinationBands the indices of the destination bands. + * @param destinationBands + * the indices of the destination bands. */ public void setDestinationBands(int[] destinationBands) { this.destinationBands = destinationBands; @@ -167,8 +173,10 @@ public class ImageReadParam extends IIOParam { /** * Sets the source progressive passes. * - * @param minPass the index of the minimum pass to be decoded. - * @param numPasses the number of passes to be decoded. + * @param minPass + * the index of the minimum pass to be decoded. + * @param numPasses + * the number of passes to be decoded. */ public void setSourceProgressivePasses(int minPass, int numPasses) { minProgressivePass = minPass; @@ -176,18 +184,18 @@ public class ImageReadParam extends IIOParam { } /** - * Sets the dimension size of source image if an - * image can be rendered at an arbitrary size. + * Sets the dimension size of source image if an image can be rendered at an + * arbitrary size. * - * @param size the size of rendered image. - * - * @throws UnsupportedOperationException the unsupported operation exception + * @param size + * the size of rendered image. + * @throws UnsupportedOperationException + * the unsupported operation exception. */ public void setSourceRenderSize(Dimension size) throws UnsupportedOperationException { if (!canSetSourceRenderSize) { throw new UnsupportedOperationException("can't set source renderer size"); } - sourceRenderSize = size; + sourceRenderSize = size; } } - diff --git a/awt/javax/imageio/ImageReader.java b/awt/javax/imageio/ImageReader.java index 780de266a3..cf282ed2a8 100644 --- a/awt/javax/imageio/ImageReader.java +++ b/awt/javax/imageio/ImageReader.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import javax.imageio.spi.ImageReaderSpi; @@ -37,56 +38,77 @@ import java.awt.image.RenderedImage; import java.awt.*; /** - * The ImageReader class is an abstract class for decoding images. - * ImageReader objects are instantiated by the service provider - * interface, ImageReaderSpi class, for the specific format. - * ImageReaderSpi class should be registered with the IIORegistry, - * which uses them for format recognition and presentation of available - * format readers and writers. + * The ImageReader class is an abstract class for decoding images. ImageReader + * objects are instantiated by the service provider interface, ImageReaderSpi + * class, for the specific format. ImageReaderSpi class should be registered + * with the IIORegistry, which uses them for format recognition and presentation + * of available format readers and writers. + * + * @since Android 1.0 */ public abstract class ImageReader { - /** The originating provider. */ + /** + * The originating provider. + */ protected ImageReaderSpi originatingProvider; - /** The input object such as ImageInputStream. */ + /** + * The input object such as ImageInputStream. + */ protected Object input; - /** The seek forward only. */ + /** + * The seek forward only. + */ protected boolean seekForwardOnly; - /** - * The ignore metadata flag indicates whether current input source - * has been marked as metadata is allowed to be ignored by setInput. + /** + * The ignore metadata flag indicates whether current input source has been + * marked as metadata is allowed to be ignored by setInput. */ protected boolean ignoreMetadata; - /** The minimum index. */ + /** + * The minimum index. + */ protected int minIndex; - /** The available locales. */ + /** + * The available locales. + */ protected Locale[] availableLocales; - /** The locale. */ + /** + * The locale. + */ protected Locale locale; - /** The list of warning listeners. */ + /** + * The list of warning listeners. + */ protected List warningListeners; - /** The list of warning locales. */ + /** + * The list of warning locales. + */ protected List warningLocales; - /** The list of progress listeners. */ + /** + * The list of progress listeners. + */ protected List progressListeners; - /** The list of update listeners. */ + /** + * The list of update listeners. + */ protected List updateListeners; /** * Instantiates a new ImageReader. * - * @param originatingProvider the ImageReaderSpi which - * instanties this ImageReader. + * @param originatingProvider + * the ImageReaderSpi which instantiates this ImageReader. */ protected ImageReader(ImageReaderSpi originatingProvider) { this.originatingProvider = originatingProvider; @@ -96,15 +118,15 @@ public abstract class ImageReader { * Gets the format name of this input source. * * @return the format name of this input source. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public String getFormatName() throws IOException { return originatingProvider.getFormatNames()[0]; } /** - * Gets the ImageReaderSpi which instantiated this ImageReader. + * Gets the ImageReaderSpi which instantiated this ImageReader. * * @return the ImageReaderSpi. */ @@ -113,14 +135,17 @@ public abstract class ImageReader { } /** - * Sets the specified Object as the input source of this ImageReader. + * Sets the specified Object as the input source of this ImageReader. * - * @param input the input source, it can - * be an ImageInputStream or other supported objects. - * @param seekForwardOnly indicates whether the stream must - * be read sequentially from its current starting point. - * @param ignoreMetadata parameter which indicates - * if metadata may be ignored during reads or not. + * @param input + * the input source, it can be an ImageInputStream or other + * supported objects. + * @param seekForwardOnly + * indicates whether the stream must be read sequentially from + * its current starting point. + * @param ignoreMetadata + * parameter which indicates if metadata may be ignored during + * reads or not. */ public void setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata) { if (input != null) { @@ -137,9 +162,9 @@ public abstract class ImageReader { /** * Checks if is supported. * - * @param input the input - * - * @return true, if is supported + * @param input + * the input. + * @return true, if is supported. */ private boolean isSupported(Object input) { ImageReaderSpi spi = getOriginatingProvider(); @@ -158,10 +183,12 @@ public abstract class ImageReader { * Sets the specified Object as the input source of this ImageReader. * Metadata is not ignored. * - * @param input the input source, it can - * be an ImageInputStream or other supported objects. - * @param seekForwardOnly indicates whether the stream must - * be read sequentially from its current starting point. + * @param input + * the input source, it can be an ImageInputStream or other + * supported objects. + * @param seekForwardOnly + * indicates whether the stream must be read sequentially from + * its current starting point. */ public void setInput(Object input, boolean seekForwardOnly) { setInput(input, seekForwardOnly, false); @@ -171,8 +198,8 @@ public abstract class ImageReader { * Sets the specified Object as the input source of this ImageReader. * Metadata is not ignored and forward seeking is not required. * - * @param input the input source, it can - * be ImageInputStream or other objects. + * @param input + * the input source, it can be ImageInputStream or other objects. */ public void setInput(Object input) { setInput(input, false, false); @@ -181,8 +208,7 @@ public abstract class ImageReader { /** * Gets the input source object of this ImageReader, or returns null. * - * @return the the input source object such as ImageInputStream, - * or null. + * @return the input source object such as ImageInputStream, or null. */ public Object getInput() { return input; @@ -191,32 +217,31 @@ public abstract class ImageReader { /** * Checks if the input source supports only forward reading, or not. * - * @return true, if the input source supports only forward reading, - * false otherwise. + * @return true, if the input source supports only forward reading, false + * otherwise. */ public boolean isSeekForwardOnly() { return seekForwardOnly; } /** - * Returns true if the current input source allows - * to metadata to be ignored by passing true as - * the ignoreMetadata argument to the setInput method. + * Returns true if the current input source allows to metadata to be ignored + * by passing true as the ignoreMetadata argument to the setInput method. * - * @return true, if true if the current input source allows - * to metadata to be ignored by passing true as - * the ignoreMetadata argument to the setInput method. + * @return true, if the current input source allows to metadata to be + * ignored by passing true as the ignoreMetadata argument to the + * setInput method. */ public boolean isIgnoringMetadata() { return ignoreMetadata; } /** - * Gets the minimum valid index for reading an image, thumbnail, - * or image metadata. + * Gets the minimum valid index for reading an image, thumbnail, or image + * metadata. * - * @return the minimum valid index for reading an image, thumbnail, - * or image metadata. + * @return the minimum valid index for reading an image, thumbnail, or image + * metadata. */ public int getMinIndex() { return minIndex; @@ -234,7 +259,8 @@ public abstract class ImageReader { /** * Sets the locale to this ImageReader. * - * @param locale the Locale. + * @param locale + * the Locale. */ public void setLocale(Locale locale) { throw new UnsupportedOperationException("Not implemented yet"); @@ -252,89 +278,88 @@ public abstract class ImageReader { /** * Gets the number of images available in the current input source. * - * @param allowSearch the parameter which indicates what - * a search is required; if false, the reader may return -1 - * without searching. - * + * @param allowSearch + * the parameter which indicates what a search is required; if + * false, the reader may return -1 without searching. * @return the number of images. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract int getNumImages(boolean allowSearch) throws IOException; /** * Gets the width of the specified image in input source. * - * @param imageIndex the image index. - * + * @param imageIndex + * the image index. * @return the width in pixels. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract int getWidth(int imageIndex) throws IOException; /** * Gets the height of the specified image in input source. * - * @param imageIndex the image index. - * + * @param imageIndex + * the image index. * @return the height in pixels. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract int getHeight(int imageIndex) throws IOException; /** - * Checks if the storage format of the specified image places - * an impediment on random pixels access or not. - * - * @param imageIndex the image's index. - * - * @return true, if the storage format of the specified image places - * an impediment on random pixels access, false otherwise. + * Checks if the storage format of the specified image places an impediment + * on random pixels access or not. * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the image's index. + * @return true, if the storage format of the specified image places an + * impediment on random pixels access, false otherwise. + * @throws IOException + * if an I/O exception has occurred. */ public boolean isRandomAccessEasy(int imageIndex) throws IOException { - return false; //def + return false; // def } /** * Gets the aspect ratio (width devided by height) of the image. * - * @param imageIndex the image index. - * + * @param imageIndex + * the image index. * @return the aspect ratio of the image. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public float getAspectRatio(int imageIndex) throws IOException { - return (float) getWidth(imageIndex) / getHeight(imageIndex); + return (float)getWidth(imageIndex) / getHeight(imageIndex); } /** - * Gets an ImageTypeSpecifier which indicates the type of the - * specified image. - * - * @param imageIndex the image's index. + * Gets an ImageTypeSpecifier which indicates the type of the specified + * image. * + * @param imageIndex + * the image's index. * @return the ImageTypeSpecifier. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public ImageTypeSpecifier getRawImageType(int imageIndex) throws IOException { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Gets an Iterator of ImageTypeSpecifier objects which are associated - * with image types that may be used when decoding specified image. - * - * @param imageIndex the image index. + * Gets an Iterator of ImageTypeSpecifier objects which are associated with + * image types that may be used when decoding specified image. * + * @param imageIndex + * the image index. * @return an Iterator of ImageTypeSpecifier objects. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract Iterator getImageTypes(int imageIndex) throws IOException; @@ -351,21 +376,22 @@ public abstract class ImageReader { * Gets an IIOMetadata object for this input source. * * @return the IIOMetadata. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract IIOMetadata getStreamMetadata() throws IOException; /** * Gets an IIOMetadata object for this input source. * - * @param formatName the desired metadata format to be used in the - * returned IIOMetadata object. - * @param nodeNames the node names of the document. - * + * @param formatName + * the desired metadata format to be used in the returned + * IIOMetadata object. + * @param nodeNames + * the node names of the document. * @return the IIOMetadata. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public IIOMetadata getStreamMetadata(String formatName, Set nodeNames) throws IOException { @@ -375,83 +401,86 @@ public abstract class ImageReader { /** * Gets the image metadata of the specified image in input source. * - * @param imageIndex the image index. - * + * @param imageIndex + * the image index. * @return the IIOMetadata. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract IIOMetadata getImageMetadata(int imageIndex) throws IOException; /** * Gets the image metadata of the specified image input source. * - * @param imageIndex the image index. - * @param formatName the desired metadata format to be used in the - * returned IIOMetadata object. - * @param nodeNames the node names which can be contained in - * the document. - * + * @param imageIndex + * the image index. + * @param formatName + * the desired metadata format to be used in the returned + * IIOMetadata object. + * @param nodeNames + * the node names which can be contained in the document. * @return the IIOMetadata. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ - public IIOMetadata getImageMetadata(int imageIndex, String formatName, - Set nodeNames) throws IOException { + public IIOMetadata getImageMetadata(int imageIndex, String formatName, Set nodeNames) + throws IOException { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Reads the specified image and returns it as a BufferedImage - * using the default ImageReadParam. - * - * @param imageIndex the image index. + * Reads the specified image and returns it as a BufferedImage using the + * default ImageReadParam. * + * @param imageIndex + * the image index. * @return the BufferedImage. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public BufferedImage read(int imageIndex) throws IOException { return read(imageIndex, null); } /** - * Reads the specified image and returns it as a BufferedImage - * using the specified ImageReadParam. - * - * @param imageIndex the image index. - * @param param the ImageReadParam. + * Reads the specified image and returns it as a BufferedImage using the + * specified ImageReadParam. * + * @param imageIndex + * the image index. + * @param param + * the ImageReadParam. * @return the BufferedImage. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract BufferedImage read(int imageIndex, ImageReadParam param) throws IOException; /** * Reads the specified image and returns an IIOImage with this image, - * thumbnails, and metadata for this image, using - * the specified ImageReadParam. - * - * @param imageIndex the image index. - * @param param the ImageReadParam. + * thumbnails, and metadata for this image, using the specified + * ImageReadParam. * + * @param imageIndex + * the image index. + * @param param + * the ImageReadParam. * @return the IIOImage. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public IIOImage readAll(int imageIndex, ImageReadParam param) throws IOException { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Returns an Iterator of IIOImages from the input source. - * - * @param params the Iterator of ImageReadParam objects. + * Returns an Iterator of IIOImages from the input source. * + * @param params + * the Iterator of ImageReadParam objects. * @return the iterator of IIOImages. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public Iterator readAll(Iterator params) throws IOException { throw new UnsupportedOperationException("Not implemented yet"); @@ -460,23 +489,23 @@ public abstract class ImageReader { /** * Checks whether or not this plug-in supports reading a Raster. * - * @return true, if this plug-in supports reading a Raster, - * false otherwise. + * @return true, if this plug-in supports reading a Raster, false otherwise. */ public boolean canReadRaster() { - return false; //def + return false; // def } /** - * Reads a new Raster object which contains the raw pixel data from - * the image. - * - * @param imageIndex the image index. - * @param param the ImageReadParam. + * Reads a new Raster object which contains the raw pixel data from the + * image. * + * @param imageIndex + * the image index. + * @param param + * the ImageReadParam. * @return the Raster. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public Raster readRaster(int imageIndex, ImageReadParam param) throws IOException { throw new UnsupportedOperationException("Unsupported"); @@ -485,220 +514,226 @@ public abstract class ImageReader { /** * Checks if the specified image has tiles or not. * - * @param imageIndex the image's index. - * - * @return true, if the specified image has tiles, - * false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the image's index. + * @return true, if the specified image has tiles, false otherwise. + * @throws IOException + * if an I/O exception has occurred. */ public boolean isImageTiled(int imageIndex) throws IOException { - return false; //def + return false; // def } /** * Gets the tile width in the specified image. * - * @param imageIndex the image's index. - * + * @param imageIndex + * the image's index. * @return the tile width. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public int getTileWidth(int imageIndex) throws IOException { - return getWidth(imageIndex); //def + return getWidth(imageIndex); // def } /** * Gets the tile height in the specified image. * - * @param imageIndex the image's index. - * + * @param imageIndex + * the image's index. * @return the tile height. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public int getTileHeight(int imageIndex) throws IOException { - return getHeight(imageIndex); //def + return getHeight(imageIndex); // def } /** - * Gets the X coordinate of the upper left corner of the tile grid in the + * Gets the X coordinate of the upper left corner of the tile grid in the * specified image. * - * @param imageIndex the image's index. - * + * @param imageIndex + * the image's index. * @return the X coordinate of the upper left corner of the tile grid. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public int getTileGridXOffset(int imageIndex) throws IOException { - return 0; //def + return 0; // def } /** - * Gets the Y coordinate of the upper left corner of the tile grid in the + * Gets the Y coordinate of the upper left corner of the tile grid in the * specified image. * - * @param imageIndex the image's index. - * + * @param imageIndex + * the image's index. * @return the Y coordinate of the upper left corner of the tile grid. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public int getTileGridYOffset(int imageIndex) throws IOException { - return 0; //def + return 0; // def } /** - * Reads the tile specified by the tileX and tileY parameters - * of the specified image and returns it as a BufferedImage. - * - * @param imageIndex the image index. - * @param tileX the X index of tile. - * @param tileY the Y index of tile. + * Reads the tile specified by the tileX and tileY parameters of the + * specified image and returns it as a BufferedImage. * + * @param imageIndex + * the image index. + * @param tileX + * the X index of tile. + * @param tileY + * the Y index of tile. * @return the BufferedImage. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public BufferedImage readTile(int imageIndex, int tileX, int tileY) throws IOException { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Reads the tile specified by the tileX and tileY parameters - * of the specified image and returns it as a Raster. - * - * @param imageIndex the image index. - * @param tileX the X index of tile. - * @param tileY the Y index of tile. + * Reads the tile specified by the tileX and tileY parameters of the + * specified image and returns it as a Raster. * + * @param imageIndex + * the image index. + * @param tileX + * the X index of tile. + * @param tileY + * the Y index of tile. * @return the Raster. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public Raster readTileRaster(int imageIndex, int tileX, int tileY) throws IOException { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Reads the specified image using the specified - * ImageReadParam and returns it as a RenderedImage. - * - * @param imageIndex the image index. - * @param param the ImageReadParam. + * Reads the specified image using the specified ImageReadParam and returns + * it as a RenderedImage. * + * @param imageIndex + * the image index. + * @param param + * the ImageReadParam. * @return the RenderedImage. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ - public RenderedImage readAsRenderedImage(int imageIndex, ImageReadParam param) throws IOException { + public RenderedImage readAsRenderedImage(int imageIndex, ImageReadParam param) + throws IOException { return read(imageIndex, param); } /** - * Returns true if the image format supported by this reader - * supports thumbnail preview images. + * Returns true if the image format supported by this reader supports + * thumbnail preview images. * - * @return true if the image format supported by this reader - * supports thumbnail preview images, false otherwise. + * @return true, if the image format supported by this reader supports + * thumbnail preview images, false otherwise. */ public boolean readerSupportsThumbnails() { - return false; //def + return false; // def } /** * Checks if the specified image has thumbnails or not. * - * @param imageIndex the image's index. - * - * @return true, if the specified image has thumbnails, - * false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the image's index. + * @return true, if the specified image has thumbnails, false otherwise. + * @throws IOException + * if an I/O exception has occurred. */ public boolean hasThumbnails(int imageIndex) throws IOException { - return getNumThumbnails(imageIndex) > 0; //def + return getNumThumbnails(imageIndex) > 0; // def } /** * Gets the number of thumbnails for the specified image. * - * @param imageIndex the image's index. - * + * @param imageIndex + * the image's index. * @return the number of thumbnails. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public int getNumThumbnails(int imageIndex) throws IOException { - return 0; //def + return 0; // def } /** * Gets the width of the specified thumbnail for the specified image. * - * @param imageIndex the image's index. - * @param thumbnailIndex the thumbnail's index. - * + * @param imageIndex + * the image's index. + * @param thumbnailIndex + * the thumbnail's index. * @return the thumbnail width. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public int getThumbnailWidth(int imageIndex, int thumbnailIndex) throws IOException { - return readThumbnail(imageIndex, thumbnailIndex).getWidth(); //def + return readThumbnail(imageIndex, thumbnailIndex).getWidth(); // def } /** * Gets the height of the specified thumbnail for the specified image. * - * @param imageIndex the image's index. - * @param thumbnailIndex the thumbnail's index. - * + * @param imageIndex + * the image's index. + * @param thumbnailIndex + * the thumbnail's index. * @return the thumbnail height. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public int getThumbnailHeight(int imageIndex, int thumbnailIndex) throws IOException { - return readThumbnail(imageIndex, thumbnailIndex).getHeight(); //def + return readThumbnail(imageIndex, thumbnailIndex).getHeight(); // def } /** - * Reads the thumbnail image for the specified image - * as a BufferedImage. - * - * @param imageIndex the image index. - * @param thumbnailIndex the thumbnail index. + * Reads the thumbnail image for the specified image as a BufferedImage. * + * @param imageIndex + * the image index. + * @param thumbnailIndex + * the thumbnail index. * @return the BufferedImage. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public BufferedImage readThumbnail(int imageIndex, int thumbnailIndex) throws IOException { - throw new UnsupportedOperationException("Unsupported"); //def + throw new UnsupportedOperationException("Unsupported"); // def } /** - * Requests an abort operation for current reading operation. + * Requests an abort operation for current reading operation. */ public void abort() { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Checks whether or not a request to abort the current read operation - * has been made successfully. + * Checks whether or not a request to abort the current read operation has + * been made successfully. * - * @return true, if the request to abort the current read operation - * has been made successfully, false otherwise. + * @return true, if the request to abort the current read operation has been + * made successfully, false otherwise. */ protected boolean abortRequested() { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Clears all previous abort request, and abortRequested returns false - * after calling this method. + * Clears all previous abort request, and abortRequested returns false after + * calling this method. */ protected void clearAbortRequest() { throw new UnsupportedOperationException("Not implemented yet"); @@ -707,7 +742,8 @@ public abstract class ImageReader { /** * Adds the IIOReadWarningListener. * - * @param listener the IIOReadWarningListener. + * @param listener + * the IIOReadWarningListener. */ public void addIIOReadWarningListener(IIOReadWarningListener listener) { throw new UnsupportedOperationException("Not implemented yet"); @@ -716,7 +752,8 @@ public abstract class ImageReader { /** * Removes the specified IIOReadWarningListener. * - * @param listener the IIOReadWarningListener to be removed. + * @param listener + * the IIOReadWarningListener to be removed. */ public void removeIIOReadWarningListener(IIOReadWarningListener listener) { throw new UnsupportedOperationException("Not implemented yet"); @@ -732,7 +769,8 @@ public abstract class ImageReader { /** * Adds the IIOReadProgressListener. * - * @param listener the IIOReadProgressListener. + * @param listener + * the IIOReadProgressListener. */ public void addIIOReadProgressListener(IIOReadProgressListener listener) { throw new UnsupportedOperationException("Not implemented yet"); @@ -741,7 +779,8 @@ public abstract class ImageReader { /** * Removes the specified IIOReadProgressListener. * - * @param listener the IIOReadProgressListener to be removed. + * @param listener + * the IIOReadProgressListener to be removed. */ public void removeIIOReadProgressListener(IIOReadProgressListener listener) { throw new UnsupportedOperationException("Not implemented yet"); @@ -757,7 +796,8 @@ public abstract class ImageReader { /** * Adds the IIOReadUpdateListener. * - * @param listener the IIOReadUpdateListener. + * @param listener + * the IIOReadUpdateListener. */ public void addIIOReadUpdateListener(IIOReadUpdateListener listener) { throw new UnsupportedOperationException("Not implemented yet"); @@ -766,7 +806,8 @@ public abstract class ImageReader { /** * Removes the specified IIOReadUpdateListener. * - * @param listener the IIOReadUpdateListener to be removed. + * @param listener + * the IIOReadUpdateListener to be removed. */ public void removeIIOReadUpdateListener(IIOReadUpdateListener listener) { throw new UnsupportedOperationException("Not implemented yet"); @@ -780,229 +821,243 @@ public abstract class ImageReader { } /** - * Processes the start of an sequence of image reads - * by calling the sequenceStarted method on all registered - * IIOReadProgressListeners. + * Processes the start of an sequence of image reads by calling the + * sequenceStarted method on all registered IIOReadProgressListeners. * - * @param minIndex the minimum index. + * @param minIndex + * the minimum index. */ protected void processSequenceStarted(int minIndex) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the completion of an sequence of image reads - * by calling sequenceComplete method on all registered - * IIOReadProgressListeners. + * Processes the completion of an sequence of image reads by calling + * sequenceComplete method on all registered IIOReadProgressListeners. */ protected void processSequenceComplete() { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the start of an image read by calling the imageStarted - * method on all registered IIOReadProgressListeners. + * Processes the start of an image read by calling the imageStarted method + * on all registered IIOReadProgressListeners. * - * @param imageIndex the image index. + * @param imageIndex + * the image index. */ protected void processImageStarted(int imageIndex) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the current percentage of image completion by calling - * the imageProgress method on all registered IIOReadProgressListeners. + * Processes the current percentage of image completion by calling the + * imageProgress method on all registered IIOReadProgressListeners. * - * @param percentageDone the percentage done. + * @param percentageDone + * the percentage done. */ protected void processImageProgress(float percentageDone) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes image completion by calling the imageComplete method - * on all registered IIOReadProgressListeners. + * Processes image completion by calling the imageComplete method on all + * registered IIOReadProgressListeners. */ protected void processImageComplete() { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the start of a thumbnail read by calling the - * thumbnailStarted method on all registered IIOReadProgressListeners. + * Processes the start of a thumbnail read by calling the thumbnailStarted + * method on all registered IIOReadProgressListeners. * - * @param imageIndex the image index. - * @param thumbnailIndex the thumbnail index. + * @param imageIndex + * the image index. + * @param thumbnailIndex + * the thumbnail index. */ protected void processThumbnailStarted(int imageIndex, int thumbnailIndex) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the current percentage of thumbnail completion - * by calling the thumbnailProgress method on all registered - * IIOReadProgressListeners. + * Processes the current percentage of thumbnail completion by calling the + * thumbnailProgress method on all registered IIOReadProgressListeners. * - * @param percentageDone the percentage done. + * @param percentageDone + * the percentage done. */ protected void processThumbnailProgress(float percentageDone) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the completion of a thumbnail read - * by calling the thumbnailComplete method - * on all registered IIOReadProgressListeners. + * Processes the completion of a thumbnail read by calling the + * thumbnailComplete method on all registered IIOReadProgressListeners. */ protected void processThumbnailComplete() { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes a read aborted event by calling the readAborted - * method on all registered IIOReadProgressListeners. + * Processes a read aborted event by calling the readAborted method on all + * registered IIOReadProgressListeners. */ protected void processReadAborted() { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the beginning of a progressive pass by calling - * the passStarted method on all registered IIOReadUpdateListeners. - * - * @param theImage the image to be updated. - * @param pass the current pass index. - * @param minPass the minimum pass index. - * @param maxPass the maximum pass index. - * @param minX the X coordinate of of the upper left pixel. - * @param minY the Y coordinate of of the upper left pixel. - * @param periodX the horizontal separation between pixels. - * @param periodY the vertical separation between pixels. - * @param bands the number of affected bands. - */ - protected void processPassStarted(BufferedImage theImage, - int pass, - int minPass, - int maxPass, - int minX, - int minY, - int periodX, - int periodY, - int[] bands) { + * Processes the beginning of a progressive pass by calling the passStarted + * method on all registered IIOReadUpdateListeners. + * + * @param theImage + * the image to be updated. + * @param pass + * the current pass index. + * @param minPass + * the minimum pass index. + * @param maxPass + * the maximum pass index. + * @param minX + * the X coordinate of of the upper left pixel. + * @param minY + * the Y coordinate of of the upper left pixel. + * @param periodX + * the horizontal separation between pixels. + * @param periodY + * the vertical separation between pixels. + * @param bands + * the number of affected bands. + */ + protected void processPassStarted(BufferedImage theImage, int pass, int minPass, int maxPass, + int minX, int minY, int periodX, int periodY, int[] bands) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the update of a set of samples by calling - * the imageUpdate method on all registered IIOReadUpdateListeners. - * - * @param theImage the image to be updated. - * @param minX the X coordinate of the upper left pixel. - * @param minY the Y coordinate of the upper left pixel. - * @param width the width of updated area. - * @param height the height of updated area. - * @param periodX the horizontal separation between pixels. - * @param periodY the vertical separation between pixels. - * @param bands the number of affected bands. - */ - protected void processImageUpdate(BufferedImage theImage, - int minX, - int minY, - int width, - int height, - int periodX, - int periodY, - int[] bands) { + * Processes the update of a set of samples by calling the imageUpdate + * method on all registered IIOReadUpdateListeners. + * + * @param theImage + * the image to be updated. + * @param minX + * the X coordinate of the upper left pixel. + * @param minY + * the Y coordinate of the upper left pixel. + * @param width + * the width of updated area. + * @param height + * the height of updated area. + * @param periodX + * the horizontal separation between pixels. + * @param periodY + * the vertical separation between pixels. + * @param bands + * the number of affected bands. + */ + protected void processImageUpdate(BufferedImage theImage, int minX, int minY, int width, + int height, int periodX, int periodY, int[] bands) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the end of a progressive pass by calling passComplete - * method of registered IIOReadUpdateListeners. + * Processes the end of a progressive pass by calling passComplete method of + * registered IIOReadUpdateListeners. * - * @param theImage the image to be updated. + * @param theImage + * the image to be updated. */ protected void processPassComplete(BufferedImage theImage) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the beginning of a thumbnail progressive pass - * by calling the thumbnailPassStarted method on all - * registered IIOReadUpdateListeners. - * - * @param theThumbnail the the thumbnail to be updated. - * @param pass the current pass index. - * @param minPass the minimum pass index. - * @param maxPass the maximum pass index. - * @param minX the X coordinate of the upper left pixel. - * @param minY the Y coordinate of the upper left pixel. - * @param periodX the horizontal separation between pixels. - * @param periodY the vertical separation between pixels. - * @param bands the number of affected bands. - */ - protected void processThumbnailPassStarted(BufferedImage theThumbnail, - int pass, - int minPass, - int maxPass, - int minX, - int minY, - int periodX, - int periodY, - int[] bands) { + * Processes the beginning of a thumbnail progressive pass by calling the + * thumbnailPassStarted method on all registered IIOReadUpdateListeners. + * + * @param theThumbnail + * the thumbnail to be updated. + * @param pass + * the current pass index. + * @param minPass + * the minimum pass index. + * @param maxPass + * the maximum pass index. + * @param minX + * the X coordinate of the upper left pixel. + * @param minY + * the Y coordinate of the upper left pixel. + * @param periodX + * the horizontal separation between pixels. + * @param periodY + * the vertical separation between pixels. + * @param bands + * the number of affected bands. + */ + protected void processThumbnailPassStarted(BufferedImage theThumbnail, int pass, int minPass, + int maxPass, int minX, int minY, int periodX, int periodY, int[] bands) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the update of a set of samples in a thumbnail - * image by calling the thumbnailUpdate method on all - * registered IIOReadUpdateListeners. - * - * @param theThumbnail the the thumbnail to be updated. - * @param minX the X coordinate of the upper left pixel. - * @param minY the Y coordinate of the upper left pixel. - * @param periodX the horizontal separation between pixels. - * @param periodY the vertical separation between pixels. - * @param bands the number of affected bands. - */ - protected void processThumbnailUpdate(BufferedImage theThumbnail, - int minX, - int minY, - int width, - int height, - int periodX, - int periodY, - int[] bands) { + * Processes the update of a set of samples in a thumbnail image by calling + * the thumbnailUpdate method on all registered IIOReadUpdateListeners. + * + * @param theThumbnail + * the thumbnail to be updated. + * @param minX + * the X coordinate of the upper left pixel. + * @param minY + * the Y coordinate of the upper left pixel. + * @param width + * the total width of the updated area. + * @param height + * the total height of the updated area. + * @param periodX + * the horizontal separation between pixels. + * @param periodY + * the vertical separation between pixels. + * @param bands + * the number of affected bands. + */ + protected void processThumbnailUpdate(BufferedImage theThumbnail, int minX, int minY, + int width, int height, int periodX, int periodY, int[] bands) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes the end of a thumbnail progressive pass - * by calling the thumbnailPassComplete method - * on all registered IIOReadUpdateListeners. + * Processes the end of a thumbnail progressive pass by calling the + * thumbnailPassComplete method on all registered IIOReadUpdateListeners. * - * @param theThumbnail the thumbnail to be updated. + * @param theThumbnail + * the thumbnail to be updated. */ protected void processThumbnailPassComplete(BufferedImage theThumbnail) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes a warning message by calling warningOccurred method - * of registered IIOReadWarningListeners. + * Processes a warning message by calling warningOccurred method of + * registered IIOReadWarningListeners. * - * @param warning the warning. + * @param warning + * the warning. */ protected void processWarningOccurred(String warning) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Processes a warning by calling the warningOccurred method - * of on all registered IIOReadWarningListeners. + * Processes a warning by calling the warningOccurred method of on all + * registered IIOReadWarningListeners. * - * @param baseName the base name of ResourceBundles. - * @param keyword the keyword to index the warning among ResourceBundles. + * @param baseName + * the base name of ResourceBundles. + * @param keyword + * the keyword to index the warning among ResourceBundles. */ protected void processWarningOccurred(String baseName, String keyword) { throw new UnsupportedOperationException("Not implemented yet"); @@ -1029,13 +1084,15 @@ public abstract class ImageReader { } /** - * Gets the region of source image that should be read with the - * specified width, height and ImageReadParam. - * - * @param param the ImageReadParam object, or null. - * @param srcWidth the source image's width. - * @param srcHeight the source image's height. + * Gets the region of source image that should be read with the specified + * width, height and ImageReadParam. * + * @param param + * the ImageReadParam object, or null. + * @param srcWidth + * the source image's width. + * @param srcHeight + * the source image's height. * @return the Rectangle of source region. */ protected static Rectangle getSourceRegion(ImageReadParam param, int srcWidth, int srcHeight) { @@ -1043,58 +1100,63 @@ public abstract class ImageReader { } /** - * Computes the specified source region and the specified destination - * region with the specified the width and height of the source image, - * an optional destination image, and an ImageReadParam. + * Computes the specified source region and the specified destination region + * with the specified the width and height of the source image, an optional + * destination image, and an ImageReadParam. * - * @param param the an ImageReadParam object, or null. - * @param srcWidth the source image's width. - * @param srcHeight the source image's height. - * @param image the destination image. - * @param srcRegion the source region. - * @param destRegion the destination region. + * @param param + * the an ImageReadParam object, or null. + * @param srcWidth + * the source image's width. + * @param srcHeight + * the source image's height. + * @param image + * the destination image. + * @param srcRegion + * the source region. + * @param destRegion + * the destination region. */ - protected static void computeRegions(ImageReadParam param, - int srcWidth, - int srcHeight, - BufferedImage image, - Rectangle srcRegion, - Rectangle destRegion) { + protected static void computeRegions(ImageReadParam param, int srcWidth, int srcHeight, + BufferedImage image, Rectangle srcRegion, Rectangle destRegion) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Checks the validity of the source and destination band and is called - * when the reader knows the number of bands of the source image and - * the number of bands of the destination image. + * Checks the validity of the source and destination band and is called when + * the reader knows the number of bands of the source image and the number + * of bands of the destination image. * - * @param param the ImageReadParam for reading the Image. - * @param numSrcBands the number of bands in the source. - * @param numDstBands the number of bands in the destination. + * @param param + * the ImageReadParam for reading the Image. + * @param numSrcBands + * the number of bands in the source. + * @param numDstBands + * the number of bands in the destination. */ - protected static void checkReadParamBandSettings(ImageReadParam param, - int numSrcBands, - int numDstBands) { + protected static void checkReadParamBandSettings(ImageReadParam param, int numSrcBands, + int numDstBands) { throw new UnsupportedOperationException("Not implemented yet"); } /** - * Gets the destination image where the decoded data is written. - * - * @param param the ImageReadParam. - * @param imageTypes the iterator of ImageTypeSpecifier objects. - * @param width the width of the image being decoded. - * @param height the height of the image being decoded. + * Gets the destination image where the decoded data is written. * + * @param param + * the ImageReadParam. + * @param imageTypes + * the iterator of ImageTypeSpecifier objects. + * @param width + * the width of the image being decoded. + * @param height + * the height of the image being decoded. * @return the BufferedImage where decoded pixels should be written. - * - * @throws IIOException the IIOException is thrown if - * there is no suitable ImageTypeSpecifier. + * @throws IIOException + * the IIOException is thrown if there is no suitable + * ImageTypeSpecifier. */ - protected static BufferedImage getDestination(ImageReadParam param, Iterator imageTypes, - int width, - int height) - throws IIOException { + protected static BufferedImage getDestination(ImageReadParam param, + Iterator imageTypes, int width, int height) throws IIOException { throw new UnsupportedOperationException("Not implemented yet"); } } diff --git a/awt/javax/imageio/ImageTranscoder.java b/awt/javax/imageio/ImageTranscoder.java index 1a0de764a5..632d890f87 100644 --- a/awt/javax/imageio/ImageTranscoder.java +++ b/awt/javax/imageio/ImageTranscoder.java @@ -18,43 +18,50 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import javax.imageio.metadata.IIOMetadata; import javax.imageio.ImageTypeSpecifier; /** - * The ImageTranscoder interface is to be implemented by classes that - * perform image transcoding operations, that is, take images written - * in one format and write them in another format using - * read/write operations. Some image data can be lost in such processes. - * The ImageTranscoder interface converts metadata objects (IIOMetadata) - * of ImageReader to apropriate metadata object for ImageWriter. + * The ImageTranscoder interface is to be implemented by classes that perform + * image transcoding operations, that is, take images written in one format and + * write them in another format using read/write operations. Some image data can + * be lost in such processes. The ImageTranscoder interface converts metadata + * objects (IIOMetadata) of ImageReader to appropriate metadata object for + * ImageWriter. + * + * @since Android 1.0 */ public interface ImageTranscoder { - + /** * Converts the specified IIOMetadata object using the specified * ImageWriteParam for obtaining writer's metadata structure. * - * @param inData the IIOMetadata. - * @param param the ImageWriteParam. - * + * @param inData + * the IIOMetadata. + * @param param + * the ImageWriteParam. * @return the IIOMetadata, or null. */ IIOMetadata convertStreamMetadata(IIOMetadata inData, ImageWriteParam param); /** * Converts the specified IIOMetadata object using the specified - * ImageWriteParam for obtaining writer's metadata structure - * and ImageTypeSpecifier object for obtaining the layout and - * color information of the image for this metadata. - * - * @param inData the IIOMetadata. - * @param imageType the ImageTypeSpecifier. - * @param param the ImageWriteParam. + * ImageWriteParam for obtaining writer's metadata structure and + * ImageTypeSpecifier object for obtaining the layout and color information + * of the image for this metadata. * + * @param inData + * the IIOMetadata. + * @param imageType + * the ImageTypeSpecifier. + * @param param + * the ImageWriteParam. * @return the IIOMetadata, or null. */ - IIOMetadata convertImageMetadata(IIOMetadata inData, ImageTypeSpecifier imageType, ImageWriteParam param); + IIOMetadata convertImageMetadata(IIOMetadata inData, ImageTypeSpecifier imageType, + ImageWriteParam param); } diff --git a/awt/javax/imageio/ImageTypeSpecifier.java b/awt/javax/imageio/ImageTypeSpecifier.java index c93f269baa..505b1c484d 100644 --- a/awt/javax/imageio/ImageTypeSpecifier.java +++ b/awt/javax/imageio/ImageTypeSpecifier.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import java.awt.image.ColorModel; @@ -27,27 +28,31 @@ import java.awt.image.RenderedImage; import java.awt.color.ColorSpace; /** - * The ImageTypeSpecifier class performs conversion operations - * on the SampleModel and the ColorModel of an image. + * The ImageTypeSpecifier class performs conversion operations on the + * SampleModel and the ColorModel of an image. + * + * @since Android 1.0 */ public class ImageTypeSpecifier { - - /** + + /** * The ColorModel of this ImageTypeSpecifier. */ protected ColorModel colorModel; - - /** - * The SampleModel of this ImageTypeSpecifier. + + /** + * The SampleModel of this ImageTypeSpecifier. */ protected SampleModel sampleModel; /** - * Instantiates a new ImageTypeSpecifier with the specified - * ColorModel and SampleModel objects. + * Instantiates a new ImageTypeSpecifier with the specified ColorModel and + * SampleModel objects. * - * @param colorModel the ColorModel. - * @param sampleModel the SampleModel. + * @param colorModel + * the ColorModel. + * @param sampleModel + * the SampleModel. */ public ImageTypeSpecifier(ColorModel colorModel, SampleModel sampleModel) { if (colorModel == null) { @@ -65,10 +70,10 @@ public class ImageTypeSpecifier { } /** - * Instantiates a new ImageTypeSpecifier using the specified - * RenderedImage. + * Instantiates a new ImageTypeSpecifier using the specified RenderedImage. * - * @param renderedImage the RenderedImage. + * @param renderedImage + * the RenderedImage. */ public ImageTypeSpecifier(RenderedImage renderedImage) { if (renderedImage == null) { @@ -79,136 +84,139 @@ public class ImageTypeSpecifier { } /** - * Creates an ImageTypeSpecifier with the specified - * DirectColorModel and a packed SampleModel. - * - * @param colorSpace the ColorSpace. - * @param redMask the red mask. - * @param greenMask the green mask. - * @param blueMask the blue mask. - * @param alphaMask the alpha mask. - * @param transferType the transfer type. - * @param isAlphaPremultiplied the parameter indicates - * if the color channel is premultiplied by alpha. + * Creates an ImageTypeSpecifier with the specified DirectColorModel and a + * packed SampleModel. * + * @param colorSpace + * the ColorSpace. + * @param redMask + * the red mask. + * @param greenMask + * the green mask. + * @param blueMask + * the blue mask. + * @param alphaMask + * the alpha mask. + * @param transferType + * the transfer type. + * @param isAlphaPremultiplied + * the parameter indicates if the color channel is pre-multiplied + * by alpha. * @return the ImageTypeSpecifier. */ - public static ImageTypeSpecifier createPacked(ColorSpace colorSpace, - int redMask, - int greenMask, - int blueMask, - int alphaMask, - int transferType, - boolean isAlphaPremultiplied) { + public static ImageTypeSpecifier createPacked(ColorSpace colorSpace, int redMask, + int greenMask, int blueMask, int alphaMask, int transferType, + boolean isAlphaPremultiplied) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Creates an ImageTypeSpecifier with specified - * ComponentColorModel and a PixelInterleavedSampleModel. - * - * @param colorSpace the ColorSpace. - * @param bandOffsets the band offsets. - * @param dataType the data type. - * @param hasAlpha the parameter indicates if alpha channel - * is needed. - * @param isAlphaPremultiplied the parameter indicates - * if the color channel is premultiplied by alpha. + * Creates an ImageTypeSpecifier with specified ComponentColorModel and a + * PixelInterleavedSampleModel. * + * @param colorSpace + * the ColorSpace. + * @param bandOffsets + * the band offsets. + * @param dataType + * the data type. + * @param hasAlpha + * the parameter indicates if alpha channel is needed. + * @param isAlphaPremultiplied + * the parameter indicates if the color channel is pre-multiplied + * by alpha. * @return the ImageTypeSpecifier. */ - public static ImageTypeSpecifier createInterleaved(ColorSpace colorSpace, - int[] bandOffsets, - int dataType, - boolean hasAlpha, - boolean isAlphaPremultiplied) { + public static ImageTypeSpecifier createInterleaved(ColorSpace colorSpace, int[] bandOffsets, + int dataType, boolean hasAlpha, boolean isAlphaPremultiplied) { throw new UnsupportedOperationException("Not supported yet"); } - /** - * Creates a ImageTypeSpecifier for a image with a - * BandedSampleModel and a ComponentColorModel. - * - * @param colorSpace the ColorSpace. - * @param bankIndices the bank indices. - * @param bandOffsets the band offsets. - * @param dataType the data type. - * @param hasAlpha the parameter indicates a presence of alpha channel. - * @param isAlphaPremultiplied the parameter indicates whether - * or not color channel is alpha premultiplied. + * Creates a ImageTypeSpecifier for a image with a BandedSampleModel and a + * ComponentColorModel. * + * @param colorSpace + * the ColorSpace. + * @param bankIndices + * the bank indices. + * @param bandOffsets + * the band offsets. + * @param dataType + * the data type. + * @param hasAlpha + * the parameter indicates a presence of alpha channel. + * @param isAlphaPremultiplied + * the parameter indicates whether or not color channel is alpha + * pre-multiplied. * @return the image type specifier */ - public static ImageTypeSpecifier createBanded(ColorSpace colorSpace, - int[] bankIndices, - int[] bandOffsets, - int dataType, - boolean hasAlpha, - boolean isAlphaPremultiplied) { + public static ImageTypeSpecifier createBanded(ColorSpace colorSpace, int[] bankIndices, + int[] bandOffsets, int dataType, boolean hasAlpha, boolean isAlphaPremultiplied) { throw new UnsupportedOperationException("Not supported yet"); } /** * Creates a ImageTypeSpecifier for a grayscale image. * - * @param bits the number of bits per gray value. - * @param dataType the data type. - * @param isSigned a signed flag. - * + * @param bits + * the number of bits per gray value. + * @param dataType + * the data type. + * @param isSigned + * a signed flag. * @return the ImageTypeSpecifier. */ - public static ImageTypeSpecifier createGrayscale(int bits, - int dataType, - boolean isSigned) { + public static ImageTypeSpecifier createGrayscale(int bits, int dataType, boolean isSigned) { throw new UnsupportedOperationException("Not supported yet"); } /** * Creates a ImageTypeSpecifier for a grayscale image. * - * @param bits the number of bits per gray value. - * @param dataType the data type. - * @param isSigned a signed flag. - * @param isAlphaPremultiplied the parameter indicates - * if color channel is premultiplied by alpha, or not. - * + * @param bits + * the number of bits per gray value. + * @param dataType + * the data type. + * @param isSigned + * a signed flag. + * @param isAlphaPremultiplied + * the parameter indicates if color channel is pre-multiplied by + * alpha, or not. * @return the ImageTypeSpecifier. */ - public static ImageTypeSpecifier createGrayscale(int bits, - int dataType, - boolean isSigned, - boolean isAlphaPremultiplied) { + public static ImageTypeSpecifier createGrayscale(int bits, int dataType, boolean isSigned, + boolean isAlphaPremultiplied) { throw new UnsupportedOperationException("Not supported yet"); } /** * Creates a ImageTypeSpecifier with the indexed image format. * - * @param redLUT the red values of indecies. - * @param greenLUT the green values of indecies. - * @param blueLUT the blue values of indecies. - * @param alphaLUT the alpha values of indecies. - * @param bits the bits number for each index. - * @param dataType the data type. - * + * @param redLUT + * the red values of indices. + * @param greenLUT + * the green values of indices. + * @param blueLUT + * the blue values of indices. + * @param alphaLUT + * the alpha values of indices. + * @param bits + * the bits number for each index. + * @param dataType + * the data type. * @return the ImageTypeSpecifier. */ - public static ImageTypeSpecifier createIndexed(byte[] redLUT, - byte[] greenLUT, - byte[] blueLUT, - byte[] alphaLUT, - int bits, - int dataType) { + public static ImageTypeSpecifier createIndexed(byte[] redLUT, byte[] greenLUT, byte[] blueLUT, + byte[] alphaLUT, int bits, int dataType) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Creates the ImageTypeSpecifier from - * the specified buffered image type. - * - * @param bufferedImageType the buffered image type. + * Creates the ImageTypeSpecifier from the specified buffered image type. * + * @param bufferedImageType + * the buffered image type. * @return the ImageTypeSpecifier. */ public static ImageTypeSpecifier createFromBufferedImageType(int bufferedImageType) { @@ -216,11 +224,10 @@ public class ImageTypeSpecifier { } /** - * Creates the ImageTypeSpecifier from - * the specified RenderedImage. - * - * @param image the RenderedImage. + * Creates the ImageTypeSpecifier from the specified RenderedImage. * + * @param image + * the RenderedImage. * @return the ImageTypeSpecifier. */ public static ImageTypeSpecifier createFromRenderedImage(RenderedImage image) { @@ -242,7 +249,7 @@ public class ImageTypeSpecifier { /** * Gets the number of components. * - * @return the number of components + * @return the number of components. */ public int getNumComponents() { return colorModel.getNumComponents(); @@ -251,7 +258,7 @@ public class ImageTypeSpecifier { /** * Gets the number of bands. * - * @return the number of bands + * @return the number of bands. */ public int getNumBands() { return sampleModel.getNumBands(); @@ -260,8 +267,8 @@ public class ImageTypeSpecifier { /** * Gets the number of bits per the specified band. * - * @param band the index of band. - * + * @param band + * the index of band. * @return the number of bits per the specified band. */ public int getBitsPerBand(int band) { @@ -283,13 +290,14 @@ public class ImageTypeSpecifier { /** * Gets a compatible SampleModel with the specified width and height. * - * @param width the width. - * @param height the height. - * + * @param width + * the width. + * @param height + * the height. * @return the SampleModel. */ public SampleModel getSampleModel(int width, int height) { - if ((long)width*height > Integer.MAX_VALUE) { + if ((long)width * height > Integer.MAX_VALUE) { throw new IllegalArgumentException("width * height > Integer.MAX_VALUE"); } return sampleModel.createCompatibleSampleModel(width, height); @@ -298,20 +306,21 @@ public class ImageTypeSpecifier { /** * Gets the ColorModel associated with this ImageTypeSpecifier. * - * @return the ColorModel associated with this ImageTypeSpecifier. + * @return the ColorModel associated with this ImageTypeSpecifier. */ public ColorModel getColorModel() { return colorModel; } /** - * Creates the BufferedImage with the specified width and height - * and the ColorMadel and SampleModel which are specified by this + * Creates the BufferedImage with the specified width and height and the + * ColorMadel and SampleModel which are specified by this * ImageTypeSpecifier. * - * @param width the width of the BufferedImage. - * @param height the height of the BufferedImage. - * + * @param width + * the width of the BufferedImage. + * @param height + * the height of the BufferedImage. * @return the BufferedImage. */ public BufferedImage createBufferedImage(int width, int height) { @@ -319,19 +328,18 @@ public class ImageTypeSpecifier { } /** - * Compares this ImageTypeSpecifier object with the specified - * object. - * - * @param o the Object to be compared. + * Compares this ImageTypeSpecifier object with the specified object. * - * @return true, if the object is an ImageTypeSpecifier with the same - * data as this ImageTypeSpecifier, false otherwise. + * @param o + * the Object to be compared. + * @return true, if the object is an ImageTypeSpecifier with the same data + * as this ImageTypeSpecifier, false otherwise. */ @Override public boolean equals(Object o) { boolean rt = false; if (o instanceof ImageTypeSpecifier) { - ImageTypeSpecifier ts = (ImageTypeSpecifier) o; + ImageTypeSpecifier ts = (ImageTypeSpecifier)o; rt = colorModel.equals(ts.colorModel) && sampleModel.equals(ts.sampleModel); } return rt; diff --git a/awt/javax/imageio/ImageWriteParam.java b/awt/javax/imageio/ImageWriteParam.java index d32fa591d4..d661889b2f 100644 --- a/awt/javax/imageio/ImageWriteParam.java +++ b/awt/javax/imageio/ImageWriteParam.java @@ -18,103 +18,141 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import java.util.Locale; import java.awt.*; /** - * The ImageWriteParam class provides information to an ImageWriter - * about how an image is to be encoded. + * The ImageWriteParam class provides information to an ImageWriter about how an + * image is to be encoded. + * + * @since Android 1.0 */ public class ImageWriteParam extends IIOParam { - /** - * The Constant MODE_DISABLED indicates that - * stream is not tiled, progressive, or compressed. + /** + * The Constant MODE_DISABLED indicates that stream is not tiled, + * progressive, or compressed. */ public static final int MODE_DISABLED = 0; - - /** - * The Constant MODE_DEFAULT indicates that the stream will be tiled, - * progressive, or compressed according to the plug-in's default. + + /** + * The Constant MODE_DEFAULT indicates that the stream will be tiled, + * progressive, or compressed according to the plug-in's default. */ public static final int MODE_DEFAULT = 1; - - /** + + /** * The Constant MODE_EXPLICIT indicates that the stream will be tiled, - * progressive, or compressed according to current settings - * which are defined by set methods. + * progressive, or compressed according to current settings which are + * defined by set methods. */ public static final int MODE_EXPLICIT = 2; - - /** - * The Constant MODE_COPY_FROM_METADATA indicates that the stream - * will be tiled, progressive, or compressed according to - * stream or image metadata. + + /** + * The Constant MODE_COPY_FROM_METADATA indicates that the stream will be + * tiled, progressive, or compressed according to stream or image metadata. */ public static final int MODE_COPY_FROM_METADATA = 3; - - /** Whether the ImageWriter can write tiles. */ + + /** + * Whether the ImageWriter can write tiles. + */ protected boolean canWriteTiles = false; - - /** The tiling mode. */ + + /** + * The tiling mode. + */ protected int tilingMode = MODE_COPY_FROM_METADATA; - - /** The preferred tile sizes. */ + + /** + * The preferred tile sizes. + */ protected Dimension[] preferredTileSizes = null; - - /** The tiling set. */ + + /** + * The tiling set. + */ protected boolean tilingSet = false; - - /** The tile width. */ + + /** + * The tile width. + */ protected int tileWidth = 0; - - /** The tile height. */ + + /** + * The tile height. + */ protected int tileHeight = 0; - - /** Whether the ImageWriter can offset tiles. */ + + /** + * Whether the ImageWriter can offset tiles. + */ protected boolean canOffsetTiles = false; - - /** The tile grid x offset. */ + + /** + * The tile grid x offset. + */ protected int tileGridXOffset = 0; - - /** The tile grid y offset. */ + + /** + * The tile grid y offset. + */ protected int tileGridYOffset = 0; - - /** Whether the ImageWriter can write in progressive mode. */ + + /** + * Whether the ImageWriter can write in progressive mode. + */ protected boolean canWriteProgressive = false; - - /** The progressive mode. */ + + /** + * The progressive mode. + */ protected int progressiveMode = MODE_COPY_FROM_METADATA; - - /** Whether the ImageWriter can write in compressed mode. */ + + /** + * Whether the ImageWriter can write in compressed mode. + */ protected boolean canWriteCompressed = false; - - /** The compression mode. */ + + /** + * The compression mode. + */ protected int compressionMode = MODE_COPY_FROM_METADATA; - - /** The compression types. */ + + /** + * The compression types. + */ protected String[] compressionTypes = null; - - /** The compression type. */ + + /** + * The compression type. + */ protected String compressionType = null; - - /** The compression quality. */ + + /** + * The compression quality. + */ protected float compressionQuality = 1.0f; - - /** The locale. */ + + /** + * The locale. + */ protected Locale locale = null; /** * Instantiates a new ImageWriteParam. */ - protected ImageWriteParam() {} + protected ImageWriteParam() { + } /** * Instantiates a new ImageWriteParam with the specified Locale. * - * @param locale the Locale. + * @param locale + * the Locale. */ public ImageWriteParam(Locale locale) { this.locale = locale; @@ -122,7 +160,7 @@ public class ImageWriteParam extends IIOParam { } /** - * Gets the mode for writing the stream in a progressive sequence. + * Gets the mode for writing the stream in a progressive sequence. * * @return the current progressive mode. */ @@ -134,24 +172,24 @@ public class ImageWriteParam extends IIOParam { } /** - * Returns true if images can be written using - * increasing quality passes by progressive. + * Returns true if images can be written using increasing quality passes by + * progressive. * - * @return true if images can be written using - * increasing quality passes by progressive, false otherwise. + * @return true if images can be written using increasing quality passes by + * progressive, false otherwise. */ public boolean canWriteProgressive() { return canWriteProgressive; } /** - * Sets the progressive mode which defines whether the stream - * contains a progressive sequence of increasing quality - * during writing. The progressive mode should be one of - * the following values: MODE_DISABLED, MODE_DEFAULT, or - * MODE_COPY_FROM_METADATA. + * Sets the progressive mode which defines whether the stream contains a + * progressive sequence of increasing quality during writing. The + * progressive mode should be one of the following values: MODE_DISABLED, + * MODE_DEFAULT, or MODE_COPY_FROM_METADATA. * - * @param mode the new progressive mode. + * @param mode + * the new progressive mode. */ public void setProgressiveMode(int mode) { if (canWriteProgressive()) { @@ -164,22 +202,21 @@ public class ImageWriteParam extends IIOParam { } /** - * Returns true if the writer can use tiles with non zero - * grid offsets while writing. + * Returns true if the writer can use tiles with non zero grid offsets while + * writing. * - * @return true if the writer can use tiles with non zero - * grid offsets while writing, false otherwise. + * @return true, if the writer can use tiles with non zero grid offsets + * while writing, false otherwise. */ public boolean canOffsetTiles() { return canOffsetTiles; } /** - * Returns true if this writer can write images with - * compression. + * Returns true if this writer can write images with compression. * - * @return true, true if this writer can write images with - * compression, false otherwise. + * @return true, if this writer can write images with compression, false + * otherwise. */ public boolean canWriteCompressed() { return canWriteCompressed; @@ -188,7 +225,7 @@ public class ImageWriteParam extends IIOParam { /** * Returns true if the writer can write tiles. * - * @return true if the writer can write tiles, false otherwise. + * @return true, if the writer can write tiles, false otherwise. */ public boolean canWriteTiles() { return canWriteTiles; @@ -247,8 +284,7 @@ public class ImageWriteParam extends IIOParam { /** * Gets the current compression type, or returns null. * - * @return the current compression type, or returns null - * if it is not set. + * @return the current compression type, or returns null if it is not set. */ public String getCompressionType() { checkWriteCompressed(); @@ -257,14 +293,12 @@ public class ImageWriteParam extends IIOParam { } /** - * Gets a bit rate which represents an estimate of the number of bits - * of output data for each bit of input image data with the specified - * quality. + * Gets a bit rate which represents an estimate of the number of bits of + * output data for each bit of input image data with the specified quality. * - * @param quality the quality. - * - * @return an estimate of the bit rate, or -1.0F if there is no - * estimate. + * @param quality + * the quality. + * @return an estimate of the bit rate, or -1.0F if there is no estimate. */ public float getBitRate(float quality) { checkWriteCompressed(); @@ -301,8 +335,7 @@ public class ImageWriteParam extends IIOParam { } /** - * Gets an array of floats which decribe - * compression quality levels. + * Gets an array of floats which describes compression quality levels. * * @return the array of compression quality values. */ @@ -323,7 +356,7 @@ public class ImageWriteParam extends IIOParam { } /** - * Gets the current compression type using the current Locale. + * Gets the current compression type using the current Locale. * * @return the current compression type using the current Locale. */ @@ -377,8 +410,8 @@ public class ImageWriteParam extends IIOParam { } /** - * Gets an array of Dimensions giving the sizes of the tiles as - * they are encoded in the output file or stream. + * Gets an array of Dimensions giving the sizes of the tiles as they are + * encoded in the output file or stream. * * @return the preferred tile sizes. */ @@ -420,11 +453,10 @@ public class ImageWriteParam extends IIOParam { } /** - * Gets the tile height in an image as it is written to the - * output stream. + * Gets the tile height in an image as it is written to the output stream. * - * @return the tile height in an image as it is written to the - * output stream. + * @return the tile height in an image as it is written to the output + * stream. */ public int getTileHeight() { checkTiling(); @@ -434,11 +466,9 @@ public class ImageWriteParam extends IIOParam { } /** - * Gets the tile width in an image as it is written to the - * output stream. + * Gets the tile width in an image as it is written to the output stream. * - * @return the tile width in an image as it is written to the - * output stream. + * @return the tile width in an image as it is written to the output stream. */ public int getTileWidth() { checkTiling(); @@ -448,11 +478,10 @@ public class ImageWriteParam extends IIOParam { } /** - * Checks if the current compression type has lossless - * compression or not. + * Checks if the current compression type has lossless compression or not. * - * @return true, if the current compression type has lossless - * compression, false otherwise. + * @return true, if the current compression type has lossless compression, + * false otherwise. */ public boolean isCompressionLossless() { checkWriteCompressed(); @@ -472,12 +501,12 @@ public class ImageWriteParam extends IIOParam { } /** - * Sets the compression mode to the specified value. - * The specified mode can be one of the predefined - * constants: MODE_DEFAULT, MODE_DISABLED, MODE_EXPLICIT, - * or MODE_COPY_FROM_METADATA. - * - * @param mode the new compression mode to be set. + * Sets the compression mode to the specified value. The specified mode can + * be one of the predefined constants: MODE_DEFAULT, MODE_DISABLED, + * MODE_EXPLICIT, or MODE_COPY_FROM_METADATA. + * + * @param mode + * the new compression mode to be set. */ public void setCompressionMode(int mode) { checkWriteCompressed(); @@ -502,8 +531,8 @@ public class ImageWriteParam extends IIOParam { /** * Sets the compression quality. The value should be between 0 and 1. * - * @param quality the new compression quality, - * float value between 0 and 1. + * @param quality + * the new compression quality, float value between 0 and 1. */ public void setCompressionQuality(float quality) { checkWriteCompressed(); @@ -516,11 +545,11 @@ public class ImageWriteParam extends IIOParam { } /** - * Sets the compression type. The specified string - * should be one of the values returned - * by getCompressionTypes method. + * Sets the compression type. The specified string should be one of the + * values returned by getCompressionTypes method. * - * @param compressionType the new compression type. + * @param compressionType + * the new compression type. */ public void setCompressionType(String compressionType) { checkWriteCompressed(); @@ -547,13 +576,17 @@ public class ImageWriteParam extends IIOParam { } /** - * Sets the instruction that tiling should be performed for - * the image in the output stream with the specified parameters. + * Sets the instruction that tiling should be performed for the image in the + * output stream with the specified parameters. * - * @param tileWidth the tile's width. - * @param tileHeight the tile's height. - * @param tileGridXOffset the tile grid's x offset. - * @param tileGridYOffset the tile grid's y offset. + * @param tileWidth + * the tile's width. + * @param tileHeight + * the tile's height. + * @param tileGridXOffset + * the tile grid's x offset. + * @param tileGridYOffset + * the tile grid's y offset. */ public void setTiling(int tileWidth, int tileHeight, int tileGridXOffset, int tileGridYOffset) { checkTiling(); @@ -563,19 +596,17 @@ public class ImageWriteParam extends IIOParam { throw new UnsupportedOperationException("Can't offset tiles!"); } - if (tileWidth <=0 || tileHeight <= 0) { + if (tileWidth <= 0 || tileHeight <= 0) { throw new IllegalArgumentException("tile dimensions are non-positive!"); } Dimension preferredTileSizes[] = getPreferredTileSizes(); if (preferredTileSizes != null) { - for (int i = 0; i < preferredTileSizes.length; i+=2) { + for (int i = 0; i < preferredTileSizes.length; i += 2) { Dimension minSize = preferredTileSizes[i]; - Dimension maxSize = preferredTileSizes[i+1]; - if ( - tileWidth < minSize.width || tileWidth > maxSize.width || - tileHeight < minSize.height || tileHeight > maxSize.height - ) { + Dimension maxSize = preferredTileSizes[i + 1]; + if (tileWidth < minSize.width || tileWidth > maxSize.width + || tileHeight < minSize.height || tileHeight > maxSize.height) { throw new IllegalArgumentException("Illegal tile size!"); } } @@ -603,11 +634,12 @@ public class ImageWriteParam extends IIOParam { } /** - * Sets the tiling mode. The specified mode should be one of the - * following values: MODE_DISABLED, MODE_DEFAULT, MODE_EXPLICIT, - * or MODE_COPY_FROM_METADATA. + * Sets the tiling mode. The specified mode should be one of the following + * values: MODE_DISABLED, MODE_DEFAULT, MODE_EXPLICIT, or + * MODE_COPY_FROM_METADATA. * - * @param mode the new tiling mode. + * @param mode + * the new tiling mode. */ public void setTilingMode(int mode) { checkTiling(); @@ -630,4 +662,3 @@ public class ImageWriteParam extends IIOParam { } } } - diff --git a/awt/javax/imageio/ImageWriter.java b/awt/javax/imageio/ImageWriter.java index d6119b0789..86879e0401 100644 --- a/awt/javax/imageio/ImageWriter.java +++ b/awt/javax/imageio/ImageWriter.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio; import java.awt.Dimension; @@ -40,34 +41,49 @@ import javax.imageio.metadata.IIOMetadata; import javax.imageio.spi.ImageWriterSpi; /** - * The ImageWriter class is an abstract class for encoding images. - * ImageWriter objects are instantiated by the service provider - * interface, ImageWriterSpi class, for the specific format. - * ImageWriterSpi class should be registered with the IIORegistry, - * which uses them for format recognition and presentation of available - * format readers and writers. + * The ImageWriter class is an abstract class for encoding images. ImageWriter + * objects are instantiated by the service provider interface, ImageWriterSpi + * class, for the specific format. ImageWriterSpi class should be registered + * with the IIORegistry, which uses them for format recognition and presentation + * of available format readers and writers. + * + * @since Android 1.0 */ public abstract class ImageWriter implements ImageTranscoder { - /** The available locales. */ + /** + * The available locales. + */ protected Locale[] availableLocales; - - /** The locale. */ + + /** + * The locale. + */ protected Locale locale; - - /** The originating provider. */ + + /** + * The originating provider. + */ protected ImageWriterSpi originatingProvider; - - /** The output. */ + + /** + * The output. + */ protected Object output; - - /** The progress listeners. */ + + /** + * The progress listeners. + */ protected List progressListeners; - - /** The warning listeners. */ + + /** + * The warning listeners. + */ protected List warningListeners; - - /** The warning locales. */ + + /** + * The warning locales. + */ protected List warningLocales; // Indicates that abort operation is requested @@ -78,22 +94,21 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Instantiates a new ImageWriter. * - * @param originatingProvider the ImageWriterSpi which - * instanties this ImageWriter. + * @param originatingProvider + * the ImageWriterSpi which instantiates this ImageWriter. */ protected ImageWriter(ImageWriterSpi originatingProvider) { this.originatingProvider = originatingProvider; } public abstract IIOMetadata convertStreamMetadata(IIOMetadata iioMetadata, - ImageWriteParam imageWriteParam); + ImageWriteParam imageWriteParam); public abstract IIOMetadata convertImageMetadata(IIOMetadata iioMetadata, - ImageTypeSpecifier imageTypeSpecifier, - ImageWriteParam imageWriteParam); + ImageTypeSpecifier imageTypeSpecifier, ImageWriteParam imageWriteParam); /** - * Gets the ImageWriterSpi which instantiated this ImageWriter. + * Gets the ImageWriterSpi which instantiated this ImageWriter. * * @return the ImageWriterSpi. */ @@ -102,10 +117,11 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Processes the start of an image read by calling their imageStarted - * method of registered IIOWriteProgressListeners. + * Processes the start of an image read by calling their imageStarted method + * of registered IIOWriteProgressListeners. * - * @param imageIndex the image index. + * @param imageIndex + * the image index. */ protected void processImageStarted(int imageIndex) { if (null != progressListeners) { @@ -116,10 +132,11 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Processes the current percentage of image completion by calling + * Processes the current percentage of image completion by calling * imageProgress method of registered IIOWriteProgressListener. * - * @param percentageDone the percentage done. + * @param percentageDone + * the percentage done. */ protected void processImageProgress(float percentageDone) { if (null != progressListeners) { @@ -130,8 +147,8 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Processes image completion by calling imageComplete method - * of registered IIOWriteProgressListeners. + * Processes image completion by calling imageComplete method of registered + * IIOWriteProgressListeners. */ protected void processImageComplete() { if (null != progressListeners) { @@ -142,11 +159,13 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Processes a warning message by calling warningOccurred method - * of registered IIOWriteWarningListeners. + * Processes a warning message by calling warningOccurred method of + * registered IIOWriteWarningListeners. * - * @param imageIndex the image index. - * @param warning the warning. + * @param imageIndex + * the image index. + * @param warning + * the warning. */ protected void processWarningOccurred(int imageIndex, String warning) { if (null == warning) { @@ -160,13 +179,15 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Processes a warning message by calling warningOccurred method - * of registered IIOWriteWarningListeners with string from - * ResourceBundle. + * Processes a warning message by calling warningOccurred method of + * registered IIOWriteWarningListeners with string from ResourceBundle. * - * @param imageIndex the image index. - * @param bundle the name of ResourceBundle. - * @param key the keyword. + * @param imageIndex + * the image index. + * @param bundle + * the name of ResourceBundle. + * @param key + * the keyword. */ protected void processWarningOccurred(int imageIndex, String bundle, String key) { if (warningListeners != null) { // Don't check the parameters @@ -180,17 +201,18 @@ public abstract class ImageWriter implements ImageTranscoder { throw new IllegalArgumentException("keyword == null!"); } - // Get the context class loader and try to locate the bundle with it first - ClassLoader contextClassloader = AccessController.doPrivileged( - new PrivilegedAction() { + // Get the context class loader and try to locate the bundle with it + // first + ClassLoader contextClassloader = AccessController + .doPrivileged(new PrivilegedAction() { public ClassLoader run() { return Thread.currentThread().getContextClassLoader(); } - }); + }); // Iterate through both listeners and locales int n = warningListeners.size(); - for (int i=0; i < n; i++) { + for (int i = 0; i < n; i++) { IIOWriteWarningListener listener = warningListeners.get(i); Locale locale = warningLocales.get(i); @@ -218,10 +240,11 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Sets the specified Object to the output of this ImageWriter. + * Sets the specified Object to the output of this ImageWriter. * - * @param output the Object which represents destination, it can - * be ImageOutputStream or other objects. + * @param output + * the Object which represents destination, it can be + * ImageOutputStream or other objects. */ public void setOutput(Object output) { if (output != null) { @@ -244,26 +267,26 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Writes a completed image stream that contains the specified image, + * Writes a completed image stream that contains the specified image, * default metadata, and thumbnails to the output. * - * @param image the specified image to be written. - * - * @throws IOException Signals that an I/O exception has occurred - * during writting. + * @param image + * the specified image to be written. + * @throws IOException + * if an I/O exception has occurred during writing. */ public void write(IIOImage image) throws IOException { write(null, image, null); } /** - * Writes a completed image stream that contains the specified - * rendered image, default metadata, and thumbnails to the output. - * - * @param image the specified RenderedImage to be written. + * Writes a completed image stream that contains the specified rendered + * image, default metadata, and thumbnails to the output. * - * @throws IOException Signals that an I/O exception has occurred - * during writting. + * @param image + * the specified RenderedImage to be written. + * @throws IOException + * if an I/O exception has occurred during writing. */ public void write(RenderedImage image) throws IOException { write(null, new IIOImage(image, null, null), null); @@ -273,16 +296,18 @@ public abstract class ImageWriter implements ImageTranscoder { * Writes a completed image stream that contains the specified image, * metadata and thumbnails to the output. * - * @param streamMetadata the stream metadata, or null. - * @param image the specified image to be written, if - * canWriteRaster() method returns false, then Image must contain - * only RenderedImage. - * @param param the ImageWriteParam, or null. - * - * @throws IOException - if an error occurs during writing. + * @param streamMetadata + * the stream metadata, or null. + * @param image + * the specified image to be written, if canWriteRaster() method + * returns false, then Image must contain only RenderedImage. + * @param param + * the ImageWriteParam, or null. + * @throws IOException + * if an error occurs during writing. */ - public abstract void write(IIOMetadata streamMetadata, - IIOImage image, ImageWriteParam param) throws IOException; + public abstract void write(IIOMetadata streamMetadata, IIOImage image, ImageWriteParam param) + throws IOException; /** * Disposes of any resources. @@ -292,26 +317,26 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Requests an abort operation for current writing operation. + * Requests an abort operation for current writing operation. */ public synchronized void abort() { aborted = true; } /** - * Checks whether or not a request to abort the current write operation - * has been made successfully. + * Checks whether or not a request to abort the current write operation has + * been made successfully. * - * @return true, if the request to abort the current write operation - * has been made successfully, false otherwise. + * @return true, if the request to abort the current write operation has + * been made successfully, false otherwise. */ protected synchronized boolean abortRequested() { return aborted; } /** - * Clears all previous abort request, and abortRequested returns false - * after calling this method. + * Clears all previous abort request, and abortRequested returns false after + * calling this method. */ protected synchronized void clearAbortRequest() { aborted = false; @@ -320,7 +345,8 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Adds the IIOWriteProgressListener listener. * - * @param listener the IIOWriteProgressListener listener. + * @param listener + * the IIOWriteProgressListener listener. */ public void addIIOWriteProgressListener(IIOWriteProgressListener listener) { if (listener == null) { @@ -337,7 +363,8 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Adds the IIOWriteWarningListener. * - * @param listener the IIOWriteWarningListener listener. + * @param listener + * the IIOWriteWarningListener listener. */ public void addIIOWriteWarningListener(IIOWriteWarningListener listener) { if (listener == null) { @@ -356,8 +383,8 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Gets the output object that was set by setOutput method. * - * @return the output object such as ImageOutputStream, or null if - * it is not set. + * @return the output object such as ImageOutputStream, or null if it is not + * set. */ public Object getOutput() { return output; @@ -366,7 +393,7 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Check output return false. * - * @return true, if successful + * @return true, if successful. */ private final boolean checkOutputReturnFalse() { if (getOutput() == null) { @@ -385,124 +412,122 @@ public abstract class ImageWriter implements ImageTranscoder { throw new UnsupportedOperationException("Unsupported write variant!"); } - /** - * Returns true if a new empty image can be inserted at - * the specified index. + * Returns true if a new empty image can be inserted at the specified index. * - * @param imageIndex the specified index of image. - * - * @return true if a new empty image can be inserted at - * the specified index, false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the specified index of image. + * @return true if a new empty image can be inserted at the specified index, + * false otherwise. + * @throws IOException + * Signals that an I/O exception has occurred. */ public boolean canInsertEmpty(int imageIndex) throws IOException { return checkOutputReturnFalse(); } /** - * Returns true if a new image can be inserted at the specified index. - * - * @param imageIndex the specified index of image. + * Returns true if a new image can be inserted at the specified index. * - * @return true if a new image can be inserted at the specified index, - * false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the specified index of image. + * @return true if a new image can be inserted at the specified index, false + * otherwise. + * @throws IOException + * Signals that an I/O exception has occurred. */ public boolean canInsertImage(int imageIndex) throws IOException { return checkOutputReturnFalse(); } /** - * Returnes true if the image with the specified index can be removed. - * - * @param imageIndex the specified index of image. + * Returns true if the image with the specified index can be removed. * - * @return true if the image with the specified index can be removed, - * false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the specified index of image. + * @return true if the image with the specified index can be removed, false + * otherwise. + * @throws IOException + * Signals that an I/O exception has occurred. */ public boolean canRemoveImage(int imageIndex) throws IOException { return checkOutputReturnFalse(); } /** - * Returns true if metadata of the image with the specified index - * can be replaced. - * - * @param imageIndex the specified image index. + * Returns true if metadata of the image with the specified index can be + * replaced. * - * @return true if metadata of the image with the specified index - * can be replaced, false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the specified image index. + * @return true if metadata of the image with the specified index can be + * replaced, false otherwise. + * @throws IOException + * if an I/O exception has occurred. */ public boolean canReplaceImageMetadata(int imageIndex) throws IOException { return checkOutputReturnFalse(); } /** - * Returns true if pixels of the image with the specified index - * can be replaced by the replacePixels methods. - * - * @param imageIndex the image's index. + * Returns true if pixels of the image with the specified index can be + * replaced by the replacePixels methods. * - * @return true if pixels of the image with the specified index - * can be replaced by the replacePixels methods, false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the image's index. + * @return true if pixels of the image with the specified index can be + * replaced by the replacePixels methods, false otherwise. + * @throws IOException + * Signals that an I/O exception has occurred. */ public boolean canReplacePixels(int imageIndex) throws IOException { return checkOutputReturnFalse(); } /** - * Returns true if the stream metadata presented in the output - * can be removed. - * - * @return true if the stream metadata presented in the output - * can be removed, false otherwise. + * Returns true if the stream metadata presented in the output can be + * removed. * - * @throws IOException Signals that an I/O exception has occurred. + * @return true if the stream metadata presented in the output can be + * removed, false otherwise. + * @throws IOException + * if an I/O exception has occurred. */ public boolean canReplaceStreamMetadata() throws IOException { return checkOutputReturnFalse(); } /** - * Returns true if the writing of a complete image stream which - * contains a single image is supported with undefined pixel - * values and associated metadata and thumbnails to the output. - * - * @return true if the writing of a complete image stream which - * contains a single image is supported, false otherwise. + * Returns true if the writing of a complete image stream which contains a + * single image is supported with undefined pixel values and associated + * metadata and thumbnails to the output. * - * @throws IOException Signals that an I/O exception has occurred. + * @return true if the writing of a complete image stream which contains a + * single image is supported, false otherwise. + * @throws IOException + * if an I/O exception has occurred. */ public boolean canWriteEmpty() throws IOException { return checkOutputReturnFalse(); } /** - * Returns true if the methods which taken an IIOImageParameter - * can deal with a Raster source image. + * Returns true if the methods which taken an IIOImageParameter can deal + * with a Raster source image. * - * @return true if the methods which taken an IIOImageParameter - * can deal with a Raster source image, false otherwise. + * @return true if the methods which taken an IIOImageParameter can deal + * with a Raster source image, false otherwise. */ public boolean canWriteRasters() { return false; } /** - * Returns true if the writer can add an image to stream that - * already contains header information. + * Returns true if the writer can add an image to stream that already + * contains header information. * - * @return if the writer can add an image to stream that - * already contains header information, false otherwise. + * @return if the writer can add an image to stream that already contains + * header information, false otherwise. */ public boolean canWriteSequence() { return false; @@ -511,16 +536,18 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Ends the insertion of a new image. * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public void endInsertEmpty() throws IOException { unsupportedOperation(); } /** - * Ends the repalce pixels operation. + * Ends the replace pixels operation. * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public void endReplacePixels() throws IOException { unsupportedOperation(); @@ -529,7 +556,8 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Ends an empty write operation. * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public void endWriteEmpty() throws IOException { unsupportedOperation(); @@ -538,7 +566,8 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Ends the sequence of write operations. * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public void endWriteSequence() throws IOException { unsupportedOperation(); @@ -558,25 +587,24 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Gets an IIOMetadata object that contains default values - * for encoding an image with the specified type. - * - * @param imageType the ImageTypeSpecifier. - * @param param the ImageWriteParam. + * Gets an IIOMetadata object that contains default values for encoding an + * image with the specified type. * + * @param imageType + * the ImageTypeSpecifier. + * @param param + * the ImageWriteParam. * @return the IIOMetadata object. */ - public abstract IIOMetadata getDefaultImageMetadata( - ImageTypeSpecifier imageType, - ImageWriteParam param - ); + public abstract IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType, + ImageWriteParam param); /** - * Gets an IIOMetadata object that contains default values - * for encoding a stream of images. - * - * @param param the ImageWriteParam. + * Gets an IIOMetadata object that contains default values for encoding a + * stream of images. * + * @param param + * the ImageWriteParam. * @return the IIOMetadata object. */ public abstract IIOMetadata getDefaultStreamMetadata(ImageWriteParam param); @@ -591,9 +619,8 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Gets the default write param. - * Gets a new ImageWriteParam object for this ImageWriter with the - * current Locale. + * Gets the default write param. Gets a new ImageWriteParam object for this + * ImageWriter with the current Locale. * * @return a new ImageWriteParam object for this ImageWriter. */ @@ -602,124 +629,131 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Gets the number of thumbnails suported by the format - * being written with supported image type, image write - * parameters, stream, and image metadata objects. + * Gets the number of thumbnails supported by the format being written with + * supported image type, image write parameters, stream, and image metadata + * objects. * - * @param imageType the ImageTypeSpecifier. - * @param param the image's parameters. - * @param streamMetadata the stream metadata. - * @param imageMetadata the image metadata. - * - * @return the number of thumbnails supported + * @param imageType + * the ImageTypeSpecifier. + * @param param + * the image's parameters. + * @param streamMetadata + * the stream metadata. + * @param imageMetadata + * the image metadata. + * @return the number of thumbnails supported. */ - public int getNumThumbnailsSupported( - ImageTypeSpecifier imageType, - ImageWriteParam param, - IIOMetadata streamMetadata, - IIOMetadata imageMetadata - ) { + public int getNumThumbnailsSupported(ImageTypeSpecifier imageType, ImageWriteParam param, + IIOMetadata streamMetadata, IIOMetadata imageMetadata) { return 0; } /** - * Gets the preferred thumbnail sizes. - * Gets an array of Dimensions with the sizes for thumbnail images - * as they are encoded in the output file or stream. - * - * @param imageType the ImageTypeSpecifier. - * @param param the ImageWriteParam. - * @param streamMetadata the stream metadata. - * @param imageMetadata the image metadata. + * Gets the preferred thumbnail sizes. Gets an array of Dimensions with the + * sizes for thumbnail images as they are encoded in the output file or + * stream. * - * @return the preferred thumbnail sizes + * @param imageType + * the ImageTypeSpecifier. + * @param param + * the ImageWriteParam. + * @param streamMetadata + * the stream metadata. + * @param imageMetadata + * the image metadata. + * @return the preferred thumbnail sizes. */ - public Dimension[] getPreferredThumbnailSizes( - ImageTypeSpecifier imageType, - ImageWriteParam param, - IIOMetadata streamMetadata, - IIOMetadata imageMetadata - ) { + public Dimension[] getPreferredThumbnailSizes(ImageTypeSpecifier imageType, + ImageWriteParam param, IIOMetadata streamMetadata, IIOMetadata imageMetadata) { return null; } /** - * Prepares insertion of an empty image by requesting the insertion of - * a new image into an existing image stream. - * - * @param imageIndex the image index. - * @param imageType the image type. - * @param width the width of the image. - * @param height the height of the image. - * @param imageMetadata the image metadata, or null. - * @param thumbnails the array thumbnails for this image, or null. - * @param param the ImageWriteParam, or null. - * - * @throws IOException Signals that an I/O exception has occurred. - */ - public void prepareInsertEmpty( - int imageIndex, ImageTypeSpecifier imageType, - int width, int height, - IIOMetadata imageMetadata, List thumbnails, - ImageWriteParam param - ) throws IOException { + * Prepares insertion of an empty image by requesting the insertion of a new + * image into an existing image stream. + * + * @param imageIndex + * the image index. + * @param imageType + * the image type. + * @param width + * the width of the image. + * @param height + * the height of the image. + * @param imageMetadata + * the image metadata, or null. + * @param thumbnails + * the array thumbnails for this image, or null. + * @param param + * the ImageWriteParam, or null. + * @throws IOException + * if an I/O exception has occurred. + */ + public void prepareInsertEmpty(int imageIndex, ImageTypeSpecifier imageType, int width, + int height, IIOMetadata imageMetadata, List thumbnails, + ImageWriteParam param) throws IOException { unsupportedOperation(); } /** - * Prepares the writer to call the replacePixels method for the - * specified region. - * - * @param imageIndex the image's index. - * @param region the specified region. + * Prepares the writer to call the replacePixels method for the specified + * region. * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the image's index. + * @param region + * the specified region. + * @throws IOException + * if an I/O exception has occurred. */ public void prepareReplacePixels(int imageIndex, Rectangle region) throws IOException { unsupportedOperation(); } /** - * Prepares the writer for writing an empty image by beginning the - * process of writing a complete image stream that contains a single image - * with undefined pixel values, metadata and thumbnails, - * to the output. - * - * @param streamMetadata the stream metadata. - * @param imageType the image type. - * @param width the width of the image. - * @param height the height of the image. - * @param imageMetadata the image's metadata, or null. - * @param thumbnails the image's thumbnails, or null. - * @param param the image's parameters, or null. - * - * @throws IOException Signals that an I/O exception has occurred. - */ - public void prepareWriteEmpty( - IIOMetadata streamMetadata, ImageTypeSpecifier imageType, - int width, int height, - IIOMetadata imageMetadata, List thumbnails, - ImageWriteParam param - ) throws IOException { + * Prepares the writer for writing an empty image by beginning the process + * of writing a complete image stream that contains a single image with + * undefined pixel values, metadata and thumbnails, to the output. + * + * @param streamMetadata + * the stream metadata. + * @param imageType + * the image type. + * @param width + * the width of the image. + * @param height + * the height of the image. + * @param imageMetadata + * the image's metadata, or null. + * @param thumbnails + * the image's thumbnails, or null. + * @param param + * the image's parameters, or null. + * @throws IOException + * if an I/O exception has occurred. + */ + public void prepareWriteEmpty(IIOMetadata streamMetadata, ImageTypeSpecifier imageType, + int width, int height, IIOMetadata imageMetadata, + List thumbnails, ImageWriteParam param) throws IOException { unsupportedOperation(); } /** - * Prepares a stream to accept calls of writeToSequence method - * using the metadata object. - * - * @param streamMetadata the stream metadata. + * Prepares a stream to accept calls of writeToSequence method using the + * metadata object. * - * @throws IOException Signals that an I/O exception has occurred. + * @param streamMetadata + * the stream metadata. + * @throws IOException + * if an I/O exception has occurred. */ public void prepareWriteSequence(IIOMetadata streamMetadata) throws IOException { unsupportedOperation(); } /** - * Processes the completion of a thumbnail read - * by calling their thumbnailComplete method - * of registered IIOWriteProgressListeners. + * Processes the completion of a thumbnail read by calling their + * thumbnailComplete method of registered IIOWriteProgressListeners. */ protected void processThumbnailComplete() { if (progressListeners != null) { @@ -730,11 +764,11 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Processes the current percentage of thumbnail completion - * by calling their thumbnailProgress method of registered - * IIOWriteProgressListeners. + * Processes the current percentage of thumbnail completion by calling their + * thumbnailProgress method of registered IIOWriteProgressListeners. * - * @param percentageDone the percentage done. + * @param percentageDone + * the percentage done. */ protected void processThumbnailProgress(float percentageDone) { if (progressListeners != null) { @@ -745,11 +779,13 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Processes the start of a thumbnail read by calling - * thumbnailStarted method of registered IIOWriteProgressListeners. + * Processes the start of a thumbnail read by calling thumbnailStarted + * method of registered IIOWriteProgressListeners. * - * @param imageIndex the image index. - * @param thumbnailIndex the thumbnail index. + * @param imageIndex + * the image index. + * @param thumbnailIndex + * the thumbnail index. */ protected void processThumbnailStarted(int imageIndex, int thumbnailIndex) { if (progressListeners != null) { @@ -760,7 +796,7 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Processes that the writing has been aborted by calling writeAborted + * Processes that the writing has been aborted by calling writeAborted * method of registered IIOWriteProgressListeners. */ protected void processWriteAborted() { @@ -789,8 +825,8 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Removes the specified IIOWriteProgressListener listener. * - * @param listener the registered IIOWriteProgressListener - * to be removed. + * @param listener + * the registered IIOWriteProgressListener to be removed. */ public void removeIIOWriteProgressListener(IIOWriteProgressListener listener) { if (progressListeners != null && listener != null) { @@ -803,8 +839,8 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Removes the specified IIOWriteWarningListener listener. * - * @param listener the registered IIOWriteWarningListener listener - * to be removed. + * @param listener + * the registered IIOWriteWarningListener listener to be removed. */ public void removeIIOWriteWarningListener(IIOWriteWarningListener listener) { if (warningListeners == null || listener == null) { @@ -826,9 +862,10 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Removes the image with the specified index from the stream. * - * @param imageIndex the image's index. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the image's index. + * @throws IOException + * if an I/O exception has occurred. */ public void removeImage(int imageIndex) throws IOException { unsupportedOperation(); @@ -837,36 +874,42 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Replaces image metadata of the image with specified index. * - * @param imageIndex the image's index. - * @param imageMetadata the image metadata. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the image's index. + * @param imageMetadata + * the image metadata. + * @throws IOException + * if an I/O exception has occurred. */ public void replaceImageMetadata(int imageIndex, IIOMetadata imageMetadata) throws IOException { unsupportedOperation(); } /** - * Replaces a part of an image presented in the output - * with the specified RenderedImage. + * Replaces a part of an image presented in the output with the specified + * RenderedImage. * - * @param image the RenderedImage. - * @param param the ImageWriteParam. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param image + * the RenderedImage. + * @param param + * the ImageWriteParam. + * @throws IOException + * if an I/O exception has occurred. */ public void replacePixels(RenderedImage image, ImageWriteParam param) throws IOException { unsupportedOperation(); } /** - * Replaces a part of an image presented in the output - * with the specified Raster. - * - * @param raster the Raster. - * @param param the ImageWriteParam. + * Replaces a part of an image presented in the output with the specified + * Raster. * - * @throws IOException Signals that an I/O exception has occurred. + * @param raster + * the Raster. + * @param param + * the ImageWriteParam. + * @throws IOException + * if an I/O exception has occurred. */ public void replacePixels(Raster raster, ImageWriteParam param) throws IOException { unsupportedOperation(); @@ -875,9 +918,10 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Replaces the stream metadata of the output with new IIOMetadata. * - * @param streamMetadata the new stream metadata. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param streamMetadata + * the new stream metadata. + * @throws IOException + * if an I/O exception has occurred. */ public void replaceStreamMetadata(IIOMetadata streamMetadata) throws IOException { unsupportedOperation(); @@ -886,7 +930,8 @@ public abstract class ImageWriter implements ImageTranscoder { /** * Sets the locale of this ImageWriter. * - * @param locale the new locale. + * @param locale + * the new locale. */ public void setLocale(Locale locale) { if (locale == null) { @@ -924,26 +969,31 @@ public abstract class ImageWriter implements ImageTranscoder { } /** - * Inserts image into existing output stream. - * - * @param imageIndex the image index where an image will be written. - * @param image the specified image to be written. - * @param param the ImageWriteParam, or null. + * Inserts image into existing output stream. * - * @throws IOException Signals that an I/O exception has occurred. + * @param imageIndex + * the image index where an image will be written. + * @param image + * the specified image to be written. + * @param param + * the ImageWriteParam, or null. + * @throws IOException + * if an I/O exception has occurred. */ - public void writeInsert(int imageIndex, IIOImage image, ImageWriteParam param) throws IOException { + public void writeInsert(int imageIndex, IIOImage image, ImageWriteParam param) + throws IOException { unsupportedOperation(); } /** * Writes the specified image to the sequence. * - * @param image the image to be written. - * @param param the ImageWriteParam, or null. - * - * @throws IOException Signals that an I/O exception has occurred - * during writting. + * @param image + * the image to be written. + * @param param + * the ImageWriteParam, or null. + * @throws IOException + * if an I/O exception has occurred during writing. */ public void writeToSequence(IIOImage image, ImageWriteParam param) throws IOException { unsupportedOperation(); diff --git a/awt/javax/imageio/event/IIOReadProgressListener.java b/awt/javax/imageio/event/IIOReadProgressListener.java index 3d658076cf..2944896396 100644 --- a/awt/javax/imageio/event/IIOReadProgressListener.java +++ b/awt/javax/imageio/event/IIOReadProgressListener.java @@ -18,86 +18,104 @@ * @author Sergey I. Salishev * @version $Revision: 1.2 $ */ + package javax.imageio.event; import java.util.EventListener; import javax.imageio.ImageReader; /** - * The IIOReadProgressListener interface notifies callers - * about the progress of the image and thumbnail reading methods. + * The IIOReadProgressListener interface notifies callers about the progress of + * the image and thumbnail reading methods. + * + * @since Android 1.0 */ public interface IIOReadProgressListener extends EventListener { /** - * Notifies this listener that the image reading has been completed. + * Notifies this listener that the image reading has been completed. * - * @param source the ImageReader object which calls this method. + * @param source + * the ImageReader object which calls this method. */ void imageComplete(ImageReader source); - + /** * Notifies this listener about the degree of completion of the read call. * - * @param source the ImageReader object which calls this method. - * @param percentageDone the percentage of decoding done. + * @param source + * the ImageReader object which calls this method. + * @param percentageDone + * the percentage of decoding done. */ void imageProgress(ImageReader source, float percentageDone); - + /** - * Notifies this listener that an image read operation has been started. + * Notifies this listener that an image read operation has been started. * - * @param source the ImageReader object which calls this method. - * @param imageIndex the index of the image in an input file or - * stream to be read. + * @param source + * the ImageReader object which calls this method. + * @param imageIndex + * the index of the image in an input file or stream to be read. */ void imageStarted(ImageReader source, int imageIndex); - + /** * Notifies this listener that a read operation has been aborted. * - * @param source the ImageReader object which calls this method. + * @param source + * the ImageReader object which calls this method. */ void readAborted(ImageReader source); - + /** - * Notifies this listener that a sequence of read operations has been completed. + * Notifies this listener that a sequence of read operations has been + * completed. * - * @param source the ImageReader object which calls this method. + * @param source + * the ImageReader object which calls this method. */ void sequenceComplete(ImageReader source); - + /** - * Notifies this listener that a sequence of read operation has been started. + * Notifies this listener that a sequence of read operation has been + * started. * - * @param source the ImageReader object which calls this method. - * @param minIndex the index of the first image to be read. + * @param source + * the ImageReader object which calls this method. + * @param minIndex + * the index of the first image to be read. */ void sequenceStarted(ImageReader source, int minIndex); - + /** * Notifies that a thumbnail read operation has been completed. * - * @param source the ImageReader object which calls this method. + * @param source + * the ImageReader object which calls this method. */ void thumbnailComplete(ImageReader source); - + /** * Notifies this listener about the degree of completion of the read call. * - * @param source the ImageReader object which calls this method. - * @param percentageDone the percentage of decoding done. + * @param source + * the ImageReader object which calls this method. + * @param percentageDone + * the percentage of decoding done. */ void thumbnailProgress(ImageReader source, float percentageDone); - + /** - * Notifies this listener that a thumbnail reading operation has been started. + * Notifies this listener that a thumbnail reading operation has been + * started. * - * @param source the ImageReader object which calls this method. - * @param imageIndex the index of the image in an input file or - * stream to be read. - * @param thumbnailIndex the index of the thumbnail to be read. + * @param source + * the ImageReader object which calls this method. + * @param imageIndex + * the index of the image in an input file or stream to be read. + * @param thumbnailIndex + * the index of the thumbnail to be read. */ void thumbnailStarted(ImageReader source, int imageIndex, int thumbnailIndex); } - diff --git a/awt/javax/imageio/event/IIOReadUpdateListener.java b/awt/javax/imageio/event/IIOReadUpdateListener.java index ce5e2f1a8b..49bdbcb411 100644 --- a/awt/javax/imageio/event/IIOReadUpdateListener.java +++ b/awt/javax/imageio/event/IIOReadUpdateListener.java @@ -18,6 +18,7 @@ * @author Sergey I. Salishev * @version $Revision: 1.2 $ */ + package javax.imageio.event; import java.awt.image.BufferedImage; @@ -30,109 +31,152 @@ import javax.imageio.ImageReader; */ /** - * The IIOReadUpdateListener interface provides functionality - * to receive notification of pixel updates during image and thumbnail - * reading operations. + * The IIOReadUpdateListener interface provides functionality to receive + * notification of pixel updates during image and thumbnail reading operations. + * + * @since Android 1.0 */ public interface IIOReadUpdateListener extends EventListener { /** - * Notifies this listener that the specified area of the image has been updated. + * Notifies this listener that the specified area of the image has been + * updated. * - * @param source the ImageReader object which calls this method. - * @param theImage the image to be updated. - * @param minX the minimum X coordinate of the pixels in the updated area. - * @param minY the minimum Y coordinate of the pixels in the updated area. - * @param width the width of updated area. - * @param height the height of updated area. - * @param periodX the horizontal spacing period between updated - * pixels, if it equals 1, there is no space between pixels. - * @param periodY the vertical spacing period between updated - * pixels, if it equals 1, there is no space between pixels. - * @param bands the array of int values indicating the bands being updated. + * @param source + * the ImageReader object which calls this method. + * @param theImage + * the image to be updated. + * @param minX + * the minimum X coordinate of the pixels in the updated area. + * @param minY + * the minimum Y coordinate of the pixels in the updated area. + * @param width + * the width of updated area. + * @param height + * the height of updated area. + * @param periodX + * the horizontal spacing period between updated pixels, if it + * equals 1, there is no space between pixels. + * @param periodY + * the vertical spacing period between updated pixels, if it + * equals 1, there is no space between pixels. + * @param bands + * the array of integer values indicating the bands being + * updated. */ - void imageUpdate(ImageReader source, BufferedImage theImage, int minX, - int minY, int width, int height, int periodX, int periodY, - int[] bands); - + void imageUpdate(ImageReader source, BufferedImage theImage, int minX, int minY, int width, + int height, int periodX, int periodY, int[] bands); + /** - * Notifies this listener that the current read operation has completed a + * Notifies this listener that the current read operation has completed a * progressive pass. * - * @param source the ImageReader object which calls this method. - * @param theImage the image to be updated. + * @param source + * the ImageReader object which calls this method. + * @param theImage + * the image to be updated. */ void passComplete(ImageReader source, BufferedImage theImage); - + /** - * Notifies this listener that the current read operation has begun - * a progressive pass. + * Notifies this listener that the current read operation has begun a + * progressive pass. * - * @param source the ImageReader object which calls this method. - * @param theImage the image to be updated. - * @param pass the numer of the pass. - * @param minPass the index of the first pass that will be decoded. - * @param maxPass the index of the last pass that will be decoded. - * @param minX the minimum X coordinate of the pixels in the updated area. - * @param minY the minimum Y coordinate of the pixels in the updated area. - * @param periodX the horizontal spacing period between updated - * pixels, if it equals 1, there is no space between pixels. - * @param periodY the vertical spacing period between updated - * pixels, if it equals 1, there is no space between pixels. - * @param bands the array of int values indicating the bands being updated. + * @param source + * the ImageReader object which calls this method. + * @param theImage + * the image to be updated. + * @param pass + * the number of the pass. + * @param minPass + * the index of the first pass that will be decoded. + * @param maxPass + * the index of the last pass that will be decoded. + * @param minX + * the minimum X coordinate of the pixels in the updated area. + * @param minY + * the minimum Y coordinate of the pixels in the updated area. + * @param periodX + * the horizontal spacing period between updated pixels, if it + * equals 1, there is no space between pixels. + * @param periodY + * the vertical spacing period between updated pixels, if it + * equals 1, there is no space between pixels. + * @param bands + * the array of integer values indicating the bands being + * updated. */ - void passStarted(ImageReader source, BufferedImage theImage, int pass, - int minPass, int maxPass, int minX, int minY, int periodX, - int periodY, int[] bands); + void passStarted(ImageReader source, BufferedImage theImage, int pass, int minPass, + int maxPass, int minX, int minY, int periodX, int periodY, int[] bands); /** - * Notifies this listener that the current thumbnail read operation has + * Notifies this listener that the current thumbnail read operation has * completed a progressive pass. * - * @param source the ImageReader object which calls this method. - * @param theImage the thumbnail to be updated. + * @param source + * the ImageReader object which calls this method. + * @param theImage + * the thumbnail to be updated. */ void thumbnailPassComplete(ImageReader source, BufferedImage theImage); - + /** - * Notifies this listener that the current thumbnail read operation has + * Notifies this listener that the current thumbnail read operation has * begun a progressive pass. * - * @param source the ImageReader object which calls this method. - * @param theThumbnail the thumbnail to be updated. - * @param pass the numer of the pass. - * @param minPass the index of the first pass that will be decoded. - * @param maxPass the index of the last pass that will be decoded. - * @param minX the minimum X coordinate of the pixels in the updated area. - * @param minY the minimum Y coordinate of the pixels in the updated area. - * @param periodX the horizontal spacing period between updated - * pixels, if it equals 1, there is no space between pixels. - * @param periodY the vertical spacing period between updated - * pixels, if it equals 1, there is no space between pixels. - * @param bands the array of int values indicating the bands being updated. + * @param source + * the ImageReader object which calls this method. + * @param theThumbnail + * the thumbnail to be updated. + * @param pass + * the number of the pass. + * @param minPass + * the index of the first pass that will be decoded. + * @param maxPass + * the index of the last pass that will be decoded. + * @param minX + * the minimum X coordinate of the pixels in the updated area. + * @param minY + * the minimum Y coordinate of the pixels in the updated area. + * @param periodX + * the horizontal spacing period between updated pixels, if it + * equals 1, there is no space between pixels. + * @param periodY + * the vertical spacing period between updated pixels, if it + * equals 1, there is no space between pixels. + * @param bands + * the array of integer values indicating the bands being + * updated. */ - void thumbnailPassStarted(ImageReader source, BufferedImage theThumbnail, - int pass, int minPass, int maxPass, int minX, int minY, - int periodX, int periodY, int[] bands); - + void thumbnailPassStarted(ImageReader source, BufferedImage theThumbnail, int pass, + int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands); + /** - * Notifies this listener that a specified area of a thumbnail image has been - * updated. + * Notifies this listener that a specified area of a thumbnail image has + * been updated. * - * @param source the ImageReader object which calls this method. - * @param theThumbnail the thumbnail to be updated. - * @param minX the minimum X coordinate of the pixels in the updated area. - * @param minY the minimum Y coordinate of the pixels in the updated area. - * @param width the width of updated area. - * @param height the height of updated area. - * @param periodX the horizontal spacing period between updated - * pixels, if it equals 1, there is no space between pixels. - * @param periodY the vertical spacing period between updated - * pixels, if it equals 1, there is no space between pixels. - * @param bands the array of int values indicating the bands being updated. + * @param source + * the ImageReader object which calls this method. + * @param theThumbnail + * the thumbnail to be updated. + * @param minX + * the minimum X coordinate of the pixels in the updated area. + * @param minY + * the minimum Y coordinate of the pixels in the updated area. + * @param width + * the width of updated area. + * @param height + * the height of updated area. + * @param periodX + * the horizontal spacing period between updated pixels, if it + * equals 1, there is no space between pixels. + * @param periodY + * the vertical spacing period between updated pixels, if it + * equals 1, there is no space between pixels. + * @param bands + * the array of integer values indicating the bands being + * updated. */ - void thumbnailUpdate(ImageReader source, BufferedImage theThumbnail, - int minX, int minY, int width, int height, int periodX, - int periodY, int[] bands); + void thumbnailUpdate(ImageReader source, BufferedImage theThumbnail, int minX, int minY, + int width, int height, int periodX, int periodY, int[] bands); } - diff --git a/awt/javax/imageio/event/IIOReadWarningListener.java b/awt/javax/imageio/event/IIOReadWarningListener.java index 92fa275adb..318a5df463 100644 --- a/awt/javax/imageio/event/IIOReadWarningListener.java +++ b/awt/javax/imageio/event/IIOReadWarningListener.java @@ -18,6 +18,7 @@ * @author Sergey I. Salishev * @version $Revision: 1.2 $ */ + package javax.imageio.event; import java.util.EventListener; @@ -29,18 +30,20 @@ import javax.imageio.ImageReader; */ /** - * The IIOReadWarningListener provides methods to receive notification - * of warning messages generated by image - * and thumbnail reading methods. + * The IIOReadWarningListener provides methods to receive notification of + * warning messages generated by image and thumbnail reading methods. + * + * @since Android 1.0 */ public interface IIOReadWarningListener extends EventListener { /** - * Notifies this listener about a warning (non-fatal error) during decoding. + * Notifies this listener about a warning (non-fatal error) during decoding. * - * @param source the ImageReader object which calls this method. - * @param warning the string describing the warning. + * @param source + * the ImageReader object which calls this method. + * @param warning + * the string describing the warning. */ public void warningOccurred(ImageReader source, String warning); } - diff --git a/awt/javax/imageio/event/IIOWriteProgressListener.java b/awt/javax/imageio/event/IIOWriteProgressListener.java index 19ae495ab6..4a2c595ab2 100644 --- a/awt/javax/imageio/event/IIOWriteProgressListener.java +++ b/awt/javax/imageio/event/IIOWriteProgressListener.java @@ -18,69 +18,84 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.event; import javax.imageio.ImageWriter; import java.util.EventListener; /** - * The IIOWriteProgressListener interface provides methods to - * receive notification about the progress of the image and - * thumbnail writing methods. + * The IIOWriteProgressListener interface provides methods to receive + * notification about the progress of the image and thumbnail writing methods. + * + * @since Android 1.0 */ public interface IIOWriteProgressListener extends EventListener { - + /** - * Notifies this listener that an image write operation has been started. + * Notifies this listener that an image write operation has been started. * - * @param source the ImageWriter object which calls this method. - * @param imageIndex the index of the image being written. + * @param source + * the ImageWriter object which calls this method. + * @param imageIndex + * the index of the image being written. */ void imageStarted(ImageWriter source, int imageIndex); - + /** * Notifies this listener about the degree of completion of the write call. * - * @param source the ImageWriter object which calls this method. - * @param percentageDone the percentage of encoding done. + * @param source + * the ImageWriter object which calls this method. + * @param percentageDone + * the percentage of encoding done. */ void imageProgress(ImageWriter source, float percentageDone); - + /** - * Notifies this listener that the image writing has been completed. + * Notifies this listener that the image writing has been completed. * - * @param source the ImageWriter object which calls this method. + * @param source + * the ImageWriter object which calls this method. */ void imageComplete(ImageWriter source); - + /** - * Notifies this listener that a thumbnail write operation has been started. + * Notifies this listener that a thumbnail write operation has been started. * - * @param source the ImageWriter object which calls this method. - * @param imageIndex the index of the image being written. - * @param thumbnailIndex the index of the thumbnail being written. + * @param source + * the ImageWriter object which calls this method. + * @param imageIndex + * the index of the image being written. + * @param thumbnailIndex + * the index of the thumbnail being written. */ void thumbnailStarted(ImageWriter source, int imageIndex, int thumbnailIndex); - + /** * Notifies this listener about the degree of completion of the write call. * - * @param source the ImageWriter object which calls this method. - * @param percentageDone the percentage of encoding done. + * @param source + * the ImageWriter object which calls this method. + * @param percentageDone + * the percentage of encoding done. */ void thumbnailProgress(ImageWriter source, float percentageDone); - + /** - * Notifies this listener that a thumbnail write operation has been completed. + * Notifies this listener that a thumbnail write operation has been + * completed. * - * @param source the ImageWriter object which calls this method. + * @param source + * the ImageWriter object which calls this method. */ void thumbnailComplete(ImageWriter source); - + /** * Notifies this listener that writing operation has been aborted. * - * @param source the ImageWriter object which calls this method. + * @param source + * the ImageWriter object which calls this method. */ void writeAborted(ImageWriter source); } diff --git a/awt/javax/imageio/event/IIOWriteWarningListener.java b/awt/javax/imageio/event/IIOWriteWarningListener.java index f530d256e2..8ee41cddd0 100644 --- a/awt/javax/imageio/event/IIOWriteWarningListener.java +++ b/awt/javax/imageio/event/IIOWriteWarningListener.java @@ -18,23 +18,29 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.event; import javax.imageio.ImageWriter; import java.util.EventListener; /** - * The IIOWriteWarningListener provides methods to receive notification - * of warnings generated by image and thumbnail writing methods. + * The IIOWriteWarningListener provides methods to receive notification of + * warnings generated by image and thumbnail writing methods. + * + * @since Android 1.0 */ public interface IIOWriteWarningListener extends EventListener { - + /** - * Notifies this listener about a warning (non-fatal error) during encoding. + * Notifies this listener about a warning (non-fatal error) during encoding. * - * @param source the ImageWriter object which calls this method. - * @param imageIndex the index of the image generating the warning. - * @param warning the string describing the warning. + * @param source + * the ImageWriter object which calls this method. + * @param imageIndex + * the index of the image generating the warning. + * @param warning + * the string describing the warning. */ void warningOccurred(ImageWriter source, int imageIndex, String warning); } diff --git a/awt/javax/imageio/event/package.html b/awt/javax/imageio/event/package.html new file mode 100644 index 0000000000..c2fe39fae4 --- /dev/null +++ b/awt/javax/imageio/event/package.html @@ -0,0 +1,8 @@ + + +

    + This package provides interfaces to handle events which can be fired during the reading or writing of images. +

    + @since Android 1.0 + + diff --git a/awt/javax/imageio/metadata/IIOInvalidTreeException.java b/awt/javax/imageio/metadata/IIOInvalidTreeException.java index 8690b2bb65..ba906577b3 100644 --- a/awt/javax/imageio/metadata/IIOInvalidTreeException.java +++ b/awt/javax/imageio/metadata/IIOInvalidTreeException.java @@ -21,21 +21,26 @@ import org.w3c.dom.Node; import javax.imageio.IIOException; /** - * The IIOInvalidTreeException provides notification about - * fails of IIOMetadataNodes tree parsing by IIOMetadata object. + * The IIOInvalidTreeException provides notification about fails of + * IIOMetadataNodes tree parsing by IIOMetadata object. + * + * @since Android 1.0 */ public class IIOInvalidTreeException extends IIOException { - - /** The offending node. */ + + /** + * The offending node. + */ protected Node offendingNode = null; /** - * Instantiates an IIOInvalidTreeException with the - * specified detailed message and specified offending - * Node. + * Instantiates an IIOInvalidTreeException with the specified detailed + * message and specified offending Node. * - * @param message the detailed message. - * @param offendingNode the offending node. + * @param message + * the detailed message. + * @param offendingNode + * the offending node. */ public IIOInvalidTreeException(String message, Node offendingNode) { super(message); @@ -43,13 +48,15 @@ public class IIOInvalidTreeException extends IIOException { } /** - * Instantiates a new IIOInvalidTreeException with the - * specified detailed message and specified offending - * Node. + * Instantiates a new IIOInvalidTreeException with the specified detailed + * message and specified offending Node. * - * @param message the detailed message. - * @param cause the cause of this exception. - * @param offendingNode the offending node + * @param message + * the detailed message. + * @param cause + * the cause of this exception. + * @param offendingNode + * the offending node. */ public IIOInvalidTreeException(String message, Throwable cause, Node offendingNode) { super(message, cause); diff --git a/awt/javax/imageio/metadata/IIOMetadata.java b/awt/javax/imageio/metadata/IIOMetadata.java index f2387cc6d2..96cebf98d6 100644 --- a/awt/javax/imageio/metadata/IIOMetadata.java +++ b/awt/javax/imageio/metadata/IIOMetadata.java @@ -14,6 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package javax.imageio.metadata; import java.util.ArrayList; @@ -22,73 +23,90 @@ import org.apache.harmony.x.imageio.metadata.IIOMetadataUtils; import org.w3c.dom.Node; /** - * The Class IIOMetadata represents the metadata (bundled with an image) - * as a Dom-type tree. + * The class IIOMetadata represents the metadata (bundled with an image) as a + * Dom-type tree. + * + * @since Android 1.0 */ public abstract class IIOMetadata { - /** Whether the standard metadata format is supported. */ + /** + * Whether the standard metadata format is supported. + */ protected boolean standardFormatSupported; - - /** The native metadata format name. */ + + /** + * The native metadata format name. + */ protected String nativeMetadataFormatName; - - /** The native metadata format class name. */ + + /** + * The native metadata format class name. + */ protected String nativeMetadataFormatClassName; - - /** The extra metadata format names. */ + + /** + * The extra metadata format names. + */ protected String[] extraMetadataFormatNames; - - /** The extra metadata format class names. */ + + /** + * The extra metadata format class names. + */ protected String[] extraMetadataFormatClassNames; - - /** The default controller. */ + + /** + * The default controller. + */ protected IIOMetadataController defaultController; - - /** The controller. */ + + /** + * The controller. + */ protected IIOMetadataController controller; /** * Instantiates a new IIOMetadata with no data set. */ - protected IIOMetadata() {} + protected IIOMetadata() { + } /** * Instantiates a new IIOMetadata with the specified data parameters. * - * @param standardMetadataFormatSupported whether the standard metadata format is supported - * @param nativeMetadataFormatName the native metadata format name - * @param nativeMetadataFormatClassName the native metadata format class name - * @param extraMetadataFormatNames the extra metadata format names - * @param extraMetadataFormatClassNames the extra metadata format class names - */ - protected IIOMetadata(boolean standardMetadataFormatSupported, - String nativeMetadataFormatName, - String nativeMetadataFormatClassName, - String[] extraMetadataFormatNames, - String[] extraMetadataFormatClassNames) { + * @param standardMetadataFormatSupported + * whether the standard metadata format is supported. + * @param nativeMetadataFormatName + * the native metadata format name. + * @param nativeMetadataFormatClassName + * the native metadata format class name. + * @param extraMetadataFormatNames + * the extra metadata format names. + * @param extraMetadataFormatClassNames + * the extra metadata format class names. + */ + protected IIOMetadata(boolean standardMetadataFormatSupported, String nativeMetadataFormatName, + String nativeMetadataFormatClassName, String[] extraMetadataFormatNames, + String[] extraMetadataFormatClassNames) { standardFormatSupported = standardMetadataFormatSupported; this.nativeMetadataFormatName = nativeMetadataFormatName; this.nativeMetadataFormatClassName = nativeMetadataFormatClassName; if (extraMetadataFormatNames == null) { if (extraMetadataFormatClassNames != null) { throw new IllegalArgumentException( - "extraMetadataFormatNames == null && extraMetadataFormatClassNames != null!" - ); + "extraMetadataFormatNames == null && extraMetadataFormatClassNames != null!"); } } else { if (extraMetadataFormatClassNames == null) { throw new IllegalArgumentException( - "extraMetadataFormatNames != null && extraMetadataFormatClassNames == null!" - ); + "extraMetadataFormatNames != null && extraMetadataFormatClassNames == null!"); } if (extraMetadataFormatNames.length == 0) { throw new IllegalArgumentException("extraMetadataFormatNames.length == 0!"); } if (extraMetadataFormatClassNames.length != extraMetadataFormatNames.length) { throw new IllegalArgumentException( - "extraMetadataFormatClassNames.length != extraMetadataFormatNames.length!" - ); + "extraMetadataFormatClassNames.length != extraMetadataFormatNames.length!"); } this.extraMetadataFormatNames = extraMetadataFormatNames.clone(); this.extraMetadataFormatClassNames = extraMetadataFormatClassNames.clone(); @@ -98,30 +116,32 @@ public abstract class IIOMetadata { /** * Gets the metadata as tree-type document. * - * @param formatName the format name - * - * @return the node in tree format + * @param formatName + * the format name. + * @return the node in tree format. */ public abstract Node getAsTree(String formatName); - + /** * Checks if the metadata is read only. * * @return true, if the metadata is read only. */ public abstract boolean isReadOnly(); - + /** * Merges the specified tree with this metadata tree. * - * @param formatName the format of the specified tree - * @param root the root node of the metadata tree - * - * @throws IIOInvalidTreeException if the specified tree - * is incompatible with the this metadata tree. + * @param formatName + * the format of the specified tree. + * @param root + * the root node of the metadata tree. + * @throws IIOInvalidTreeException + * if the specified tree is incompatible with the this metadata + * tree. */ public abstract void mergeTree(String formatName, Node root) throws IIOInvalidTreeException; - + /** * Resets the controller. */ @@ -130,7 +150,7 @@ public abstract class IIOMetadata { /** * Gets the controller associated with this metadata document. * - * @return the controller + * @return the controller. */ public IIOMetadataController getController() { return controller; @@ -139,7 +159,7 @@ public abstract class IIOMetadata { /** * Checks whether this metadata has a controller. * - * @return true, if this metadata has a controller + * @return true, if this metadata has a controller. */ public boolean hasController() { return getController() != null; @@ -148,7 +168,7 @@ public abstract class IIOMetadata { /** * Activate the controller. * - * @return true, if successful + * @return true, if successful. */ public boolean activateController() { if (!hasController()) { @@ -160,7 +180,7 @@ public abstract class IIOMetadata { /** * Gets the default controller. * - * @return the default controller + * @return the default controller. */ public IIOMetadataController getDefaultController() { return defaultController; @@ -169,7 +189,7 @@ public abstract class IIOMetadata { /** * Gets the extra metadata format names. * - * @return the extra metadata format names + * @return the extra metadata format names. */ public String[] getExtraMetadataFormatNames() { return extraMetadataFormatNames == null ? null : extraMetadataFormatNames.clone(); @@ -178,23 +198,20 @@ public abstract class IIOMetadata { /** * Gets the metadata format. * - * @param formatName the format name - * - * @return the metadata format + * @param formatName + * the format name. + * @return the metadata format. */ public IIOMetadataFormat getMetadataFormat(String formatName) { - return IIOMetadataUtils.instantiateMetadataFormat( - formatName, - standardFormatSupported, - nativeMetadataFormatName, nativeMetadataFormatClassName, - extraMetadataFormatNames, extraMetadataFormatClassNames - ); + return IIOMetadataUtils.instantiateMetadataFormat(formatName, standardFormatSupported, + nativeMetadataFormatName, nativeMetadataFormatClassName, extraMetadataFormatNames, + extraMetadataFormatClassNames); } /** * Gets the native metadata format name. * - * @return the native metadata format name + * @return the native metadata format name. */ public String getNativeMetadataFormatName() { return nativeMetadataFormatName; @@ -203,7 +220,7 @@ public abstract class IIOMetadata { /** * Checks if the standard metadata format is supported. * - * @return true, if the standard metadata format is supported + * @return true, if the standard metadata format is supported. */ public boolean isStandardMetadataFormatSupported() { return standardFormatSupported; @@ -212,7 +229,7 @@ public abstract class IIOMetadata { /** * Gets the metadata format names. * - * @return the metadata format names + * @return the metadata format names. */ public String[] getMetadataFormatNames() { ArrayList res = new ArrayList(); @@ -239,7 +256,7 @@ public abstract class IIOMetadata { /** * Gets the standard chroma node. * - * @return the standard chroma node + * @return the standard chroma node. */ protected IIOMetadataNode getStandardChromaNode() { return null; @@ -248,7 +265,7 @@ public abstract class IIOMetadata { /** * Gets the standard compression node. * - * @return the standard compression node + * @return the standard compression node. */ protected IIOMetadataNode getStandardCompressionNode() { return null; @@ -257,7 +274,7 @@ public abstract class IIOMetadata { /** * Gets the standard data node. * - * @return the standard data node + * @return the standard data node. */ protected IIOMetadataNode getStandardDataNode() { return null; @@ -266,7 +283,7 @@ public abstract class IIOMetadata { /** * Gets the standard dimension node. * - * @return the standard dimension node + * @return the standard dimension node. */ protected IIOMetadataNode getStandardDimensionNode() { return null; @@ -275,7 +292,7 @@ public abstract class IIOMetadata { /** * Gets the standard document node. * - * @return the standard document node + * @return the standard document node. */ protected IIOMetadataNode getStandardDocumentNode() { return null; @@ -284,7 +301,7 @@ public abstract class IIOMetadata { /** * Gets the standard text node. * - * @return the standard text node + * @return the standard text node. */ protected IIOMetadataNode getStandardTextNode() { return null; @@ -293,7 +310,7 @@ public abstract class IIOMetadata { /** * Gets the standard tile node. * - * @return the standard tile node + * @return the standard tile node. */ protected IIOMetadataNode getStandardTileNode() { return null; @@ -302,7 +319,7 @@ public abstract class IIOMetadata { /** * Gets the standard transparency node. * - * @return the standard transparency node + * @return the standard transparency node. */ protected IIOMetadataNode getStandardTransparencyNode() { return null; @@ -311,7 +328,7 @@ public abstract class IIOMetadata { /** * Gets the metadata as a tree in standard format. * - * @return the metadata as a tree in standard format + * @return the metadata as a tree in standard format. */ protected final IIOMetadataNode getStandardTree() { // Create root node @@ -342,14 +359,15 @@ public abstract class IIOMetadata { if ((node = getStandardTransparencyNode()) != null) { root.appendChild(node); } - + return root; } /** * Sets the controller. * - * @param controller the new controller + * @param controller + * the new controller. */ public void setController(IIOMetadataController controller) { this.controller = controller; @@ -358,11 +376,13 @@ public abstract class IIOMetadata { /** * Sets the from tree. * - * @param formatName the name of the metatdata format of the from tree - * @param root the root node of the from tree - * - * @throws IIOInvalidTreeException if the tree or its format is not compatible with - * this metadata. + * @param formatName + * the name of the metatdata format of the from tree. + * @param root + * the root node of the from tree. + * @throws IIOInvalidTreeException + * if the tree or its format is not compatible with this + * metadata. */ public void setFromTree(String formatName, Node root) throws IIOInvalidTreeException { reset(); diff --git a/awt/javax/imageio/metadata/IIOMetadataController.java b/awt/javax/imageio/metadata/IIOMetadataController.java index dfd4e5c169..1405948301 100644 --- a/awt/javax/imageio/metadata/IIOMetadataController.java +++ b/awt/javax/imageio/metadata/IIOMetadataController.java @@ -18,6 +18,7 @@ * @author Sergey I. Salishev * @version $Revision: 1.2 $ */ + package javax.imageio.metadata; /* @@ -26,20 +27,20 @@ package javax.imageio.metadata; */ /** - * The IIOMetadataController interface provides a method for - * implementing objects to activate the controller without - * defining how the controller obtains values. + * The IIOMetadataController interface provides a method for implementing + * objects to activate the controller without defining how the controller + * obtains values. + * + * @since Android 1.0 */ public interface IIOMetadataController { /** * Activates a controller. * - * @param metadata the metadata to be modified. - * - * @return true if the IIOMetadata has been modified, - * false otherwise. + * @param metadata + * the metadata to be modified. + * @return true, if the IIOMetadata has been modified, false otherwise. */ public boolean activate(IIOMetadata metadata); } - diff --git a/awt/javax/imageio/metadata/IIOMetadataFormat.java b/awt/javax/imageio/metadata/IIOMetadataFormat.java index 9e246b48c2..0e7e6979c2 100644 --- a/awt/javax/imageio/metadata/IIOMetadataFormat.java +++ b/awt/javax/imageio/metadata/IIOMetadataFormat.java @@ -21,327 +21,384 @@ import javax.imageio.ImageTypeSpecifier; import java.util.Locale; /** - * The Interface IIOMetadataFormat is implemented by classes that - * describe the rules and allowed elements for a metadata document - * tree. + * The Interface IIOMetadataFormat is implemented by classes that describe the + * rules and allowed elements for a metadata document tree. + * + * @since Android 1.0 */ public interface IIOMetadataFormat { - /** The CHILD_POLICY_EMPTY. */ + /** + * The CHILD_POLICY_EMPTY. + */ int CHILD_POLICY_EMPTY = 0; - - /** The CHILD_POLICY_ALL. */ + + /** + * The CHILD_POLICY_ALL. + */ int CHILD_POLICY_ALL = 1; - - /** The CHILD_POLICY_SOME. */ + + /** + * The CHILD_POLICY_SOME. + */ int CHILD_POLICY_SOME = 2; - - /** The CHILD_POLICY_CHOICE. */ + + /** + * The CHILD_POLICY_CHOICE. + */ int CHILD_POLICY_CHOICE = 3; - - /** The CHILD_POLICY_SEQUENCE. */ + + /** + * The CHILD_POLICY_SEQUENCE. + */ int CHILD_POLICY_SEQUENCE = 4; - - /** The CHILD_POLICY_REPEAT. */ + + /** + * The CHILD_POLICY_REPEAT. + */ int CHILD_POLICY_REPEAT = 5; - - /** The maximum value for the child policy. */ + + /** + * The maximum value for the child policy. + */ int CHILD_POLICY_MAX = CHILD_POLICY_REPEAT; - /** The DATATYPE_STRING. */ + /** + * The DATATYPE_STRING. + */ int DATATYPE_STRING = 0; - - /** The DATATYPE_BOOLEAN. */ + + /** + * The DATATYPE_BOOLEAN. + */ int DATATYPE_BOOLEAN = 1; - - /** The DATATYPE_INTEGER. */ + + /** + * The DATATYPE_INTEGER. + */ int DATATYPE_INTEGER = 2; - - /** The DATATYPE_FLOAT. */ + + /** + * The DATATYPE_FLOAT. + */ int DATATYPE_FLOAT = 3; - - /** The DATATYPE_DOUBLE. */ + + /** + * The DATATYPE_DOUBLE. + */ int DATATYPE_DOUBLE = 4; - /** The VALUE_NONE. */ + /** + * The VALUE_NONE. + */ int VALUE_NONE = 0; - - /** The VALUE_ARBITRARY. */ + + /** + * The VALUE_ARBITRARY. + */ int VALUE_ARBITRARY = 1; - - /** The VALUE_RANGE. */ + + /** + * The VALUE_RANGE. + */ int VALUE_RANGE = 2; - - /** The VALUE_RANGE_MIN_INCLUSIVE_MASK. */ + + /** + * The VALUE_RANGE_MIN_INCLUSIVE_MASK. + */ int VALUE_RANGE_MIN_INCLUSIVE_MASK = 4; - - /** The VALUE_RANGE_MAX_INCLUSIVE_MASK. */ + + /** + * The VALUE_RANGE_MAX_INCLUSIVE_MASK. + */ int VALUE_RANGE_MAX_INCLUSIVE_MASK = 8; - - /** The VALUE_ENUMERATION. */ + + /** + * The VALUE_ENUMERATION. + */ int VALUE_ENUMERATION = 16; - - /** The VALUE_LIST. */ + + /** + * The VALUE_LIST. + */ int VALUE_LIST = 32; - - /** The VALUE_RANGE_MIN_INCLUSIVE. */ + + /** + * The VALUE_RANGE_MIN_INCLUSIVE. + */ int VALUE_RANGE_MIN_INCLUSIVE = VALUE_RANGE | VALUE_RANGE_MIN_INCLUSIVE_MASK; - - /** The VALUE_RANGE_MAX_INCLUSIVE. */ + + /** + * The VALUE_RANGE_MAX_INCLUSIVE. + */ int VALUE_RANGE_MAX_INCLUSIVE = VALUE_RANGE | VALUE_RANGE_MAX_INCLUSIVE_MASK; - - /** The VALUE_RANGE_MIN_MAX_INCLUSIVE. */ - int VALUE_RANGE_MIN_MAX_INCLUSIVE = - VALUE_RANGE | VALUE_RANGE_MIN_INCLUSIVE_MASK | VALUE_RANGE_MAX_INCLUSIVE_MASK; /** - * Tells whether the specified element is allowed for the specified - * image type. - * - * @param elementName the element name - * @param imageType the image type - * - * @return true, if the specified element is allowed for the specified - * image type + * The VALUE_RANGE_MIN_MAX_INCLUSIVE. + */ + int VALUE_RANGE_MIN_MAX_INCLUSIVE = VALUE_RANGE | VALUE_RANGE_MIN_INCLUSIVE_MASK + | VALUE_RANGE_MAX_INCLUSIVE_MASK; + + /** + * Tells whether the specified element is allowed for the specified image + * type. + * + * @param elementName + * the element name. + * @param imageType + * the image type. + * @return true, if the specified element is allowed for the specified image + * type. */ boolean canNodeAppear(String elementName, ImageTypeSpecifier imageType); /** * Gets data type of the specified attribute of the specified element. * - * @param elementName the element name - * @param attrName the attribute name - * - * @return the attribute's data type + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return the attribute's data type. */ int getAttributeDataType(String elementName, String attrName); - + /** - * Gets the default value of the specified attribute of the specified element. - * - * @param elementName the element name - * @param attrName the attribute name - * - * @return the attribute's default value + * Gets the default value of the specified attribute of the specified + * element. + * + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return the attribute's default value. */ String getAttributeDefaultValue(String elementName, String attrName); - + /** * Gets the user-friendly description of the attribute. * - * @param elementName the element name - * @param attrName the attribute name - * @param locale the locale giving the desired language for the - * description - * - * @return the attribute description + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @param locale + * the locale giving the desired language for the description. + * @return the attribute description. */ String getAttributeDescription(String elementName, String attrName, Locale locale); - + /** * Gets the attribute enumerations. * - * @param elementName the element name - * @param attrName the attribute name - * - * @return the attribute enumerations + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return the attribute enumerations. */ String[] getAttributeEnumerations(String elementName, String attrName); - + /** * Gets the maximum length of the attribute list. * - * @param elementName the element name - * @param attrName the attribute name - * - * @return the maximum length of the attribute list + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return the maximum length of the attribute list. */ int getAttributeListMaxLength(String elementName, String attrName); - + /** * Gets the minimum length of the attribute list. * - * @param elementName the element name - * @param attrName the attribute name - * - * @return the minimum length of the attribute list + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return the minimum length of the attribute list. */ int getAttributeListMinLength(String elementName, String attrName); - + /** * Gets the maximum value allowed for the attribute. * - * @param elementName the element name - * @param attrName the attribute name - * - * @return the maximum value allowed for the attribute + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return the maximum value allowed for the attribute. */ String getAttributeMaxValue(String elementName, String attrName); - + /** * Gets the minimum value allowed for the attribute. * - * @param elementName the element name - * @param attrName the attribute name - * - * @return the minimum value allowed for the attribute + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return the minimum value allowed for the attribute. */ String getAttributeMinValue(String elementName, String attrName); - + /** * Gets the attribute names allowed for the specified element. * - * @param elementName the element name - * - * @return the attribute names + * @param elementName + * the element name. + * @return the attribute names. */ String[] getAttributeNames(String elementName); - + /** * Gets the attribute value type. * - * @param elementName the element name - * @param attrName the attribute name - * - * @return the attribute value type + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return the attribute value type. */ int getAttributeValueType(String elementName, String attrName); - + /** - * Checks whether the specified attribute is required - * for the specified element. - * - * @param elementName the element name - * @param attrName the attribute name - * - * @return true, if the specified attribute is required for the - * specified element + * Checks whether the specified attribute is required for the specified + * element. + * + * @param elementName + * the element name. + * @param attrName + * the attribute name. + * @return true, if the specified attribute is required for the specified + * element. */ boolean isAttributeRequired(String elementName, String attrName); /** * Gets the names of the possible child elements for the given element. * - * @param elementName the element name - * - * @return the child names + * @param elementName + * the element name. + * @return the child names. */ String[] getChildNames(String elementName); - + /** * Gets the constant describing the element's child policy. * - * @param elementName the element name - * - * @return the child policy + * @param elementName + * the element name. + * @return the child policy. */ int getChildPolicy(String elementName); /** * Gets the user-friendly description of the element. * - * @param elementName the element name - * @param locale the locale giving the desired language for the - * description - * - * @return the element description + * @param elementName + * the element name. + * @param locale + * the locale giving the desired language for the description. + * @return the element description. */ String getElementDescription(String elementName, Locale locale); - + /** * Gets the maximum number of children allowed for the element. * - * @param elementName the element name - * - * @return the maximum number of children allowed for the element + * @param elementName + * the element name. + * @return the maximum number of children allowed for the element. */ int getElementMaxChildren(String elementName); - + /** * Gets the minimum number of children allowed for the element. * - * @param elementName the element name - * - * @return the minimum number of children allowed for the element + * @param elementName + * the element name. + * @return the minimum number of children allowed for the element. */ int getElementMinChildren(String elementName); /** * Gets the maximum object array length allowed for the element. * - * @param elementName the element name - * - * @return the maximum object array length allowed for the element + * @param elementName + * the element name. + * @return the maximum object array length allowed for the element. */ int getObjectArrayMaxLength(String elementName); - + /** * Gets the minimum object array length allowed for the element. * - * @param elementName the element name - * - * @return the minimum object array length allowed for the element + * @param elementName + * the element name. + * @return the minimum object array length allowed for the element. */ int getObjectArrayMinLength(String elementName); - + /** * Gets the object class corresponding to the specified element. * - * @param elementName the element name - * - * @return the object class corresponding to the specified element + * @param elementName + * the element name. + * @return the object class corresponding to the specified element. */ Class getObjectClass(String elementName); - + /** * Gets the object default value for the element. * - * @param elementName the element name - * - * @return the object default value for the element + * @param elementName + * the element name. + * @return the object default value for the element. */ Object getObjectDefaultValue(String elementName); - + /** * Gets the object enumerations. * - * @param elementName the element name - * - * @return the object enumerations + * @param elementName + * the element name. + * @return the object enumerations. */ Object[] getObjectEnumerations(String elementName); - + /** * Gets the maximum value allowed for the element's object. * - * @param elementName the element name - * - * @return the maximum value allowed for the element's object + * @param elementName + * the element name. + * @return the maximum value allowed for the element's object. */ Comparable getObjectMaxValue(String elementName); - + /** * Gets the minimum value allowed for the element's object. * - * @param elementName the element name - * - * @return the minimum value allowed for the element's object + * @param elementName + * the element name. + * @return the minimum value allowed for the element's object. */ Comparable getObjectMinValue(String elementName); - + /** * Gets the constant that indicates the type of the element's value. * - * @param elementName the element name - * - * @return the constant that indicates the type of the element's value + * @param elementName + * the element name. + * @return the constant that indicates the type of the element's value. */ int getObjectValueType(String elementName); /** * Gets the name of the root element. * - * @return the name of the root element + * @return the name of the root element. */ String getRootName(); } diff --git a/awt/javax/imageio/metadata/IIOMetadataFormatImpl.java b/awt/javax/imageio/metadata/IIOMetadataFormatImpl.java index 438ae90956..1a6e568538 100644 --- a/awt/javax/imageio/metadata/IIOMetadataFormatImpl.java +++ b/awt/javax/imageio/metadata/IIOMetadataFormatImpl.java @@ -23,45 +23,60 @@ import java.security.AccessController; import java.security.PrivilegedAction; /** - * The IIOMetadataFormatImpl class provides an implementation of the + * The IIOMetadataFormatImpl class provides an implementation of the * IIOMetadataFormat interface. + * + * @since Android 1.0 */ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { - - /** The Constant standardMetadataFormatName. */ - @SuppressWarnings({"ConstantDeclaredInAbstractClass"}) + + /** + * The Constant standardMetadataFormatName. + */ + @SuppressWarnings( { + "ConstantDeclaredInAbstractClass" + }) public static final String standardMetadataFormatName = "javax_imageio_1.0"; - /** The standard format. */ - @SuppressWarnings({"StaticNonFinalField"}) + /** + * The standard format. + */ + @SuppressWarnings( { + "StaticNonFinalField" + }) private static IIOMetadataFormatImpl standardFormat; - /** The root name. */ + /** + * The root name. + */ private String rootName; - - /** The element hash. */ + + /** + * The element hash. + */ private HashMap elementHash = new HashMap(); - /** The resource base name. */ + /** + * The resource base name. + */ private String resourceBaseName = getClass().getName() + "Resources"; /** - * Instantiates an IIOMetadataFormatImpl with the specified root - * name and child policy (not CHILD_POLICY_REPEAT). + * Instantiates an IIOMetadataFormatImpl with the specified root name and + * child policy (not CHILD_POLICY_REPEAT). * - * @param rootName the name of root element. - * @param childPolicy the child policy defined by one of the - * CHILD_POLICY_* constants (except CHILD_POLICY_REPEAT). + * @param rootName + * the name of root element. + * @param childPolicy + * the child policy defined by one of the CHILD_POLICY_* + * constants (except CHILD_POLICY_REPEAT). */ public IIOMetadataFormatImpl(String rootName, int childPolicy) { if (rootName == null) { throw new IllegalArgumentException("rootName is null"); } - if ( - childPolicy < CHILD_POLICY_EMPTY || - childPolicy > CHILD_POLICY_MAX || - childPolicy == CHILD_POLICY_REPEAT - ) { + if (childPolicy < CHILD_POLICY_EMPTY || childPolicy > CHILD_POLICY_MAX + || childPolicy == CHILD_POLICY_REPEAT) { throw new IllegalArgumentException("childPolicy is not one of the predefined constants"); } @@ -73,12 +88,15 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Instantiates an IIOMetadataFormatImpl with the specified root - * name and CHILD_POLICY_REPEAT child policy. + * Instantiates an IIOMetadataFormatImpl with the specified root name and + * CHILD_POLICY_REPEAT child policy. * - * @param rootName the name of root element. - * @param minChildren the minimum number of children. - * @param maxChildren the maximum number of children + * @param rootName + * the name of root element. + * @param minChildren + * the minimum number of children. + * @param maxChildren + * the maximum number of children */ public IIOMetadataFormatImpl(String rootName, int minChildren, int maxChildren) { if (rootName == null) { @@ -100,25 +118,31 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { elementHash.put(rootName, root); } - @SuppressWarnings({"AbstractMethodOverridesAbstractMethod"}) + @SuppressWarnings( { + "AbstractMethodOverridesAbstractMethod" + }) public abstract boolean canNodeAppear(String elementName, ImageTypeSpecifier imageType); /** * Adds a new attribute to an existing element. * - * @param elementName the name of the element to which the new attribute - * will be added. - * @param attrName the attribute name. - * @param dataType the data type of the new attribute. - * @param required the flag which indicates whether this attribute - * must be present. - * @param listMinLength the minimum legal number of list items. - * @param listMaxLength the the maximum legal number of list items. - */ - protected void addAttribute( - String elementName, String attrName, int dataType, - boolean required, int listMinLength, int listMaxLength - ) { + * @param elementName + * the name of the element to which the new attribute will be + * added. + * @param attrName + * the attribute name. + * @param dataType + * the data type of the new attribute. + * @param required + * the flag which indicates whether this attribute must be + * present. + * @param listMinLength + * the minimum legal number of list items. + * @param listMaxLength + * the the maximum legal number of list items. + */ + protected void addAttribute(String elementName, String attrName, int dataType, + boolean required, int listMinLength, int listMaxLength) { if (attrName == null) { throw new IllegalArgumentException("attrName == null!"); } @@ -144,18 +168,21 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * Adds a new attribute to an existing element. * - * @param elementName the name of the element to which the new attribute - * will be added. - * @param attrName the attribute name. - * @param dataType the data type of the new attribute. - * @param required the flag which indicates whether this attribute - * must be present. - * @param defaultValue the default value of the attribute. - */ - protected void addAttribute( - String elementName, String attrName, int dataType, - boolean required, String defaultValue - ) { + * @param elementName + * the name of the element to which the new attribute will be + * added. + * @param attrName + * the attribute name. + * @param dataType + * the data type of the new attribute. + * @param required + * the flag which indicates whether this attribute must be + * present. + * @param defaultValue + * the default value of the attribute. + */ + protected void addAttribute(String elementName, String attrName, int dataType, + boolean required, String defaultValue) { if (attrName == null) { throw new IllegalArgumentException("attrName == null!"); } @@ -177,20 +204,23 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * Adds a new attribute to an existing element. * - * @param elementName the name of the element to which the new attribute - * will be added. - * @param attrName the attribute name. - * @param dataType the data type of the new attribute. - * @param required the flag which indicates whether this attribute - * must be present. - * @param defaultValue the default value of the attribute. - * @param enumeratedValues the legal values for the attribute as - * a list of strings. - */ - protected void addAttribute( - String elementName, String attrName, int dataType, - boolean required, String defaultValue, List enumeratedValues - ) { + * @param elementName + * the name of the element to which the new attribute will be + * added. + * @param attrName + * the attribute name. + * @param dataType + * the data type of the new attribute. + * @param required + * the flag which indicates whether this attribute must be + * present. + * @param defaultValue + * the default value of the attribute. + * @param enumeratedValues + * the legal values for the attribute as a list of strings. + */ + protected void addAttribute(String elementName, String attrName, int dataType, + boolean required, String defaultValue, List enumeratedValues) { if (attrName == null) { throw new IllegalArgumentException("attrName == null!"); } @@ -226,26 +256,30 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * Adds a new attribute to an existing element. * - * @param elementName the name of the element to which the new attribute - * will be added. - * @param attrName the attribute name. - * @param dataType the data type of the new attribute. - * @param required the flag which indicates whether this attribute - * must be present. - * @param defaultValue the default value of attribute. - * @param minValue the minimum legal value of an attribute. - * @param maxValue the maximum legal value of an attribute. - * @param minInclusive the flag which indicates - * whether the minValue is inclusive. - * @param maxInclusive the flag which indicates - * whether the maxValue is inclusive. - */ - protected void addAttribute( - String elementName, String attrName, int dataType, - boolean required, String defaultValue, - String minValue, String maxValue, - boolean minInclusive, boolean maxInclusive - ) { + * @param elementName + * the name of the element to which the new attribute will be + * added. + * @param attrName + * the attribute name. + * @param dataType + * the data type of the new attribute. + * @param required + * the flag which indicates whether this attribute must be + * present. + * @param defaultValue + * the default value of attribute. + * @param minValue + * the minimum legal value of an attribute. + * @param maxValue + * the maximum legal value of an attribute. + * @param minInclusive + * the flag which indicates whether the minValue is inclusive. + * @param maxInclusive + * the flag which indicates whether the maxValue is inclusive. + */ + protected void addAttribute(String elementName, String attrName, int dataType, + boolean required, String defaultValue, String minValue, String maxValue, + boolean minInclusive, boolean maxInclusive) { if (attrName == null) { throw new IllegalArgumentException("attrName == null!"); } @@ -272,20 +306,21 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Adds a new attribute with boolean data type to an existing - * element. + * Adds a new attribute with boolean data type to an existing element. * - * @param elementName the name of the element to which the new attribute - * will be added. - * @param attrName the attribute name. - * @param hasDefaultValue the flag which indicates whether this attribute - * must have a default value. - * @param defaultValue the default value. - */ - protected void addBooleanAttribute( - String elementName, String attrName, - boolean hasDefaultValue, boolean defaultValue - ) { + * @param elementName + * the name of the element to which the new attribute will be + * added. + * @param attrName + * the attribute name. + * @param hasDefaultValue + * the flag which indicates whether this attribute must have a + * default value. + * @param defaultValue + * the default value. + */ + protected void addBooleanAttribute(String elementName, String attrName, + boolean hasDefaultValue, boolean defaultValue) { String defaultVal = hasDefaultValue ? (defaultValue ? "TRUE" : "FALSE") : null; ArrayList values = new ArrayList(2); values.add("TRUE"); @@ -295,11 +330,13 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Adds an existing element to the list of child elements - * of the specified parent element. + * Adds an existing element to the list of child elements of the specified + * parent element. * - * @param elementName the name of the element to be added. - * @param parentName the parent element name. + * @param elementName + * the name of the element to be added. + * @param parentName + * the parent element name. */ protected void addChildElement(String elementName, String parentName) { Element parent = findElement(parentName); @@ -308,23 +345,23 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Adds a new element type to this IIOMetadataFormat with - * a child policy (if policy is not CHILD_POLICY_REPEAT). + * Adds a new element type to this IIOMetadataFormat with a child policy (if + * policy is not CHILD_POLICY_REPEAT). * - * @param elementName the name of the element to be added. - * @param parentName the parent element name. - * @param childPolicy one of the CHILD_POLICY_* constants defined - * by IIOMetadataFormat. + * @param elementName + * the name of the element to be added. + * @param parentName + * the parent element name. + * @param childPolicy + * one of the CHILD_POLICY_* constants defined by + * IIOMetadataFormat. */ protected void addElement(String elementName, String parentName, int childPolicy) { - if ( - childPolicy < CHILD_POLICY_EMPTY || - childPolicy > CHILD_POLICY_MAX || - childPolicy == CHILD_POLICY_REPEAT - ) { + if (childPolicy < CHILD_POLICY_EMPTY || childPolicy > CHILD_POLICY_MAX + || childPolicy == CHILD_POLICY_REPEAT) { throw new IllegalArgumentException("childPolicy is not one of the predefined constants"); } - + Element parent = findElement(parentName); Element element = new Element(); element.name = elementName; @@ -334,19 +371,21 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Adds a new element type to this IIOMetadataFormat with - * CHILD_POLICY_REPEAT and the specified minimum and maximum - * number of child elements. + * Adds a new element type to this IIOMetadataFormat with + * CHILD_POLICY_REPEAT and the specified minimum and maximum number of child + * elements. * - * @param elementName the element name to be added. - * @param parentName the parent element name. - * @param minChildren the minimum number of child elements. - * @param maxChildren the maximum number of child elements. - */ - protected void addElement( - String elementName, String parentName, - int minChildren, int maxChildren - ) { + * @param elementName + * the element name to be added. + * @param parentName + * the parent element name. + * @param minChildren + * the minimum number of child elements. + * @param maxChildren + * the maximum number of child elements. + */ + protected void addElement(String elementName, String parentName, int minChildren, + int maxChildren) { if (minChildren < 0) { throw new IllegalArgumentException("minChildren < 0!"); } @@ -365,19 +404,20 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Adds an Object reference with the specified class type to be - * stored as element's value. + * Adds an Object reference with the specified class type to be stored as + * element's value. * - * @param elementName the element name. - * @param classType the class indicates the legal types for - * the object's value. - * @param arrayMinLength the minimum legal length for the array. - * @param arrayMaxLength the maximum legal length for the array. - */ - protected void addObjectValue( - String elementName, Class classType, - int arrayMinLength, int arrayMaxLength - ) { + * @param elementName + * the element name. + * @param classType + * the class indicates the legal types for the object's value. + * @param arrayMinLength + * the minimum legal length for the array. + * @param arrayMaxLength + * the maximum legal length for the array. + */ + protected void addObjectValue(String elementName, Class classType, int arrayMinLength, + int arrayMaxLength) { Element element = findElement(elementName); ObjectValue objVal = new ObjectValue(); @@ -390,20 +430,20 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Adds an Object reference with the specified class type to be - * stored as an element's value. + * Adds an Object reference with the specified class type to be stored as an + * element's value. * - * @param elementName the element name. - * @param classType the class indicates the legal types for - * the object's value. - * @param required a flag indicated that this object value - * must be present. - * @param defaultValue the default value, or null. - */ - protected void addObjectValue( - String elementName, Class classType, - boolean required, T defaultValue - ) { + * @param elementName + * the element name. + * @param classType + * the class indicates the legal types for the object's value. + * @param required + * a flag indicated that this object value must be present. + * @param defaultValue + * the default value, or null. + */ + protected void addObjectValue(String elementName, Class classType, boolean required, + T defaultValue) { // note: reqired is an unused parameter Element element = findElement(elementName); @@ -416,22 +456,22 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Adds an Object reference with the specified class type to be - * stored as the element's value. + * Adds an Object reference with the specified class type to be stored as + * the element's value. * - * @param elementName the element name. - * @param classType the class indicates the legal types for - * the object value. - * @param required a flag indicated that this object value - * must be present. - * @param defaultValue the default value, or null. - * @param enumeratedValues the list of legal values for the object. - */ - protected void addObjectValue( - String elementName, Class classType, - boolean required, T defaultValue, - List enumeratedValues - ) { + * @param elementName + * the element name. + * @param classType + * the class indicates the legal types for the object value. + * @param required + * a flag indicated that this object value must be present. + * @param defaultValue + * the default value, or null. + * @param enumeratedValues + * the list of legal values for the object. + */ + protected void addObjectValue(String elementName, Class classType, boolean required, + T defaultValue, List enumeratedValues) { // note: reqired is an unused parameter if (enumeratedValues == null || enumeratedValues.isEmpty()) { throw new IllegalArgumentException("enumeratedValues is empty or null"); @@ -444,7 +484,8 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } } } catch (ClassCastException e) { - throw new IllegalArgumentException("enumeratedValues contains a value not of class classType!"); + throw new IllegalArgumentException( + "enumeratedValues contains a value not of class classType!"); } Element element = findElement(elementName); @@ -459,25 +500,27 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Adds an Object reference with the specified class type to be - * stored as the element's value. + * Adds an Object reference with the specified class type to be stored as + * the element's value. * - * @param elementName the element name. - * @param classType the class indicates the legal types for - * the object value. - * @param defaultValue the default value, or null. - * @param minValue the minimum legal value for the object value. - * @param maxValue the maximum legal value for the object value. - * @param minInclusive the flag which indicates - * whether the minValue is inclusive. - * @param maxInclusive the flag which indicates - * whether the maxValue is inclusive. - */ - protected > void addObjectValue( - String elementName, Class classType, - T defaultValue, Comparable minValue, Comparable maxValue, - boolean minInclusive, boolean maxInclusive - ) { + * @param elementName + * the element name. + * @param classType + * the class indicates the legal types for the object value. + * @param defaultValue + * the default value, or null. + * @param minValue + * the minimum legal value for the object value. + * @param maxValue + * the maximum legal value for the object value. + * @param minInclusive + * the flag which indicates whether the minValue is inclusive. + * @param maxInclusive + * the flag which indicates whether the maxValue is inclusive. + */ + protected > void addObjectValue(String elementName, + Class classType, T defaultValue, Comparable minValue, + Comparable maxValue, boolean minInclusive, boolean maxInclusive) { Element element = findElement(elementName); ObjectValue objVal = new ObjectValue(); @@ -540,7 +583,7 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { if ((attr.valueType & VALUE_RANGE) == 0) { throw new IllegalArgumentException("Attribute is not a range!"); } - return attr.maxValue; + return attr.maxValue; } public String getAttributeMinValue(String elementName, String attrName) { @@ -558,12 +601,13 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { public int getAttributeValueType(String elementName, String attrName) { Attlist attr = findAttribute(elementName, attrName); - return attr.valueType; + return attr.valueType; } public String[] getChildNames(String elementName) { Element element = findElement(elementName); - if (element.childPolicy == CHILD_POLICY_EMPTY) { // Element cannot have children + if (element.childPolicy == CHILD_POLICY_EMPTY) { // Element cannot have + // children return null; } return element.children.toArray(new String[element.children.size()]); @@ -689,10 +733,12 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { } /** - * Removes the specified attribute from the specified element. - * - * @param elementName the specified element name. - * @param attrName the specified attribute name. + * Removes the specified attribute from the specified element. + * + * @param elementName + * the specified element name. + * @param attrName + * the specified attribute name. */ protected void removeAttribute(String elementName, String attrName) { Element element = findElement(elementName); @@ -702,7 +748,8 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * Removes the specified element from this format. * - * @param elementName the specified element name. + * @param elementName + * the specified element name. */ protected void removeElement(String elementName) { Element element; @@ -717,18 +764,20 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * Removes the object value from the specified element. * - * @param elementName the element name. + * @param elementName + * the element name. */ protected void removeObjectValue(String elementName) { Element element = findElement(elementName); element.objectValue = null; } - + /** - * Sets a new base name for ResourceBundles containing - * descriptions of elements and attributes for this format. + * Sets a new base name for ResourceBundles containing descriptions of + * elements and attributes for this format. * - * @param resourceBaseName the new resource base name. + * @param resourceBaseName + * the new resource base name. */ protected void setResourceBaseName(String resourceBaseName) { if (resourceBaseName == null) { @@ -740,117 +789,181 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * The Class Element. */ - @SuppressWarnings({"ClassWithoutConstructor"}) + @SuppressWarnings( { + "ClassWithoutConstructor" + }) private class Element { - - /** The name. */ + + /** + * The name. + */ String name; - /** The children. */ + /** + * The children. + */ ArrayList children = new ArrayList(); - - /** The attributes. */ + + /** + * The attributes. + */ HashMap attributes = new HashMap(); - /** The min children. */ + /** + * The min children. + */ int minChildren; - - /** The max children. */ + + /** + * The max children. + */ int maxChildren; - - /** The child policy. */ + + /** + * The child policy. + */ int childPolicy; - /** The object value. */ + /** + * The object value. + */ ObjectValue objectValue; } /** * The Class Attlist. */ - @SuppressWarnings({"ClassWithoutConstructor"}) + @SuppressWarnings( { + "ClassWithoutConstructor" + }) private class Attlist { - - /** The name. */ + + /** + * The name. + */ String name; - /** The data type. */ + /** + * The data type. + */ int dataType; - - /** The required. */ + + /** + * The required. + */ boolean required; - - /** The list min length. */ + + /** + * The list min length. + */ int listMinLength; - - /** The list max length. */ + + /** + * The list max length. + */ int listMaxLength; - - /** The default value. */ + + /** + * The default value. + */ String defaultValue; - - /** The enumerated values. */ + + /** + * The enumerated values. + */ List enumeratedValues; - - /** The min value. */ + + /** + * The min value. + */ String minValue; - - /** The max value. */ + + /** + * The max value. + */ String maxValue; - - /** The min inclusive. */ + + /** + * The min inclusive. + */ boolean minInclusive; - - /** The max inclusive. */ + + /** + * The max inclusive. + */ boolean maxInclusive; - /** The value type. */ + /** + * The value type. + */ int valueType; } /** * The Class ObjectValue. */ - @SuppressWarnings({"ClassWithoutConstructor"}) + @SuppressWarnings( { + "ClassWithoutConstructor" + }) private class ObjectValue { - - /** The class type. */ + + /** + * The class type. + */ Class classType; - - /** The array min length. */ + + /** + * The array min length. + */ int arrayMinLength; - - /** The array max length. */ + + /** + * The array max length. + */ int arrayMaxLength; - - /** The default value. */ + + /** + * The default value. + */ T defaultValue; - - /** The enumerated values. */ + + /** + * The enumerated values. + */ List enumeratedValues; - - /** The min value. */ + + /** + * The min value. + */ Comparable minValue; - - /** The max value. */ + + /** + * The max value. + */ Comparable maxValue; - - /** The min inclusive. */ + + /** + * The min inclusive. + */ boolean minInclusive; - - /** The max inclusive. */ + + /** + * The max inclusive. + */ boolean maxInclusive; - /** The value type. */ + /** + * The value type. + */ int valueType; } /** * Find element. * - * @param name the name - * - * @return the element + * @param name + * the name. + * @return the element. */ private Element findElement(String name) { Element element; @@ -864,16 +977,18 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * Find attribute. * - * @param elementName the element name - * @param attributeName the attribute name - * - * @return the attlist + * @param elementName + * the element name. + * @param attributeName + * the attribute name. + * @return the attlist. */ private Attlist findAttribute(String elementName, String attributeName) { Element element = findElement(elementName); Attlist attribute; if ((attribute = element.attributes.get(attributeName)) == null) { - throw new IllegalArgumentException("attribute name is null or no such attribute: " + attributeName); + throw new IllegalArgumentException("attribute name is null or no such attribute: " + + attributeName); } return attribute; @@ -882,9 +997,9 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * Find object value. * - * @param elementName the element name - * - * @return the object value + * @param elementName + * the element name. + * @return the object value. */ private ObjectValue findObjectValue(String elementName) { Element element = findElement(elementName); @@ -898,23 +1013,25 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { /** * Gets the resource string. * - * @param key the key - * @param locale the locale - * - * @return the resource string + * @param key + * the key. + * @param locale + * the locale. + * @return the resource string. */ private String getResourceString(String key, Locale locale) { if (locale == null) { locale = Locale.getDefault(); } - // Get the context class loader and try to locate the bundle with it first - ClassLoader contextClassloader = AccessController.doPrivileged( - new PrivilegedAction() { + // Get the context class loader and try to locate the bundle with it + // first + ClassLoader contextClassloader = AccessController + .doPrivileged(new PrivilegedAction() { public ClassLoader run() { return Thread.currentThread().getContextClassLoader(); } - }); + }); // Now try to get the resource bundle ResourceBundle rb; diff --git a/awt/javax/imageio/metadata/IIOMetadataNode.java b/awt/javax/imageio/metadata/IIOMetadataNode.java index d5ab7a52b4..adc6d67b62 100644 --- a/awt/javax/imageio/metadata/IIOMetadataNode.java +++ b/awt/javax/imageio/metadata/IIOMetadataNode.java @@ -27,47 +27,71 @@ import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; + //???AWT //import org.w3c.dom.TypeInfo; //import org.w3c.dom.UserDataHandler; /** - * The Class IIOMetadataNode represents a node of the - * (DOM-style) metadata tree. + * The Class IIOMetadataNode represents a node of the (DOM-style) metadata tree. + * + * @since Android 1.0 */ public class IIOMetadataNode implements Element, NodeList { - /** The node name. */ + /** + * The node name. + */ private String nodeName; - - /** The node value. */ + + /** + * The node value. + */ private String nodeValue; - - /** The attributes. */ + + /** + * The attributes. + */ private IIOMetadataNodeList attrs = new IIOMetadataNodeList(new ArrayList()); - /** The parent node. */ + /** + * The parent node. + */ private IIOMetadataNode parent; - - /** The first child node. */ + + /** + * The first child node. + */ private IIOMetadataNode firstChild; - - /** The last child node. */ + + /** + * The last child node. + */ private IIOMetadataNode lastChild; - - /** The previous sibling. */ + + /** + * The previous sibling. + */ private IIOMetadataNode previousSibling; - - /** The next sibling. */ + + /** + * The next sibling. + */ private IIOMetadataNode nextSibling; - /** The number of children. */ + /** + * The number of children. + */ private int nChildren; - /** The user object associated with this node. */ + /** + * The user object associated with this node. + */ private Object userObject; - /** The text content of this node. */ + /** + * The text content of this node. + */ private String textContent; /** @@ -79,18 +103,20 @@ public class IIOMetadataNode implements Element, NodeList { /** * Instantiates a new empty node with the specified name. * - * @param nodeName the node name + * @param nodeName + * the node name. */ public IIOMetadataNode(String nodeName) { this.nodeName = nodeName; } /** - * Instantiates a new IIOMetadataNode with the specified - * name and value. + * Instantiates a new IIOMetadataNode with the specified name and value. * - * @param nodeName the node name - * @param nodeValue the node value + * @param nodeName + * the node name. + * @param nodeValue + * the node value. */ private IIOMetadataNode(String nodeName, String nodeValue) { this.nodeName = nodeName; @@ -102,12 +128,12 @@ public class IIOMetadataNode implements Element, NodeList { } public String getAttribute(String name) { - Attr attrNode = (Attr) attrs.getNamedItem(name); + Attr attrNode = (Attr)attrs.getNamedItem(name); return (attrNode == null) ? "" : attrNode.getValue(); } public void setAttribute(String name, String value) throws DOMException { - Attr attr = (Attr) attrs.getNamedItem(name); + Attr attr = (Attr)attrs.getNamedItem(name); if (attr != null) { attr.setValue(value); } else { @@ -116,7 +142,7 @@ public class IIOMetadataNode implements Element, NodeList { } public void removeAttribute(String name) throws DOMException { - IIOMetadataAttr attr = (IIOMetadataAttr) attrs.getNamedItem(name); + IIOMetadataAttr attr = (IIOMetadataAttr)attrs.getNamedItem(name); if (attr != null) { attr.setOwnerElement(null); attrs.list.remove(attr); @@ -124,17 +150,19 @@ public class IIOMetadataNode implements Element, NodeList { } public Attr getAttributeNode(String name) { - return (Attr) attrs.getNamedItem(name); + return (Attr)attrs.getNamedItem(name); } public Attr setAttributeNode(Attr newAttr) throws DOMException { // Check if this attribute is already in use. Element owner = newAttr.getOwnerElement(); if (owner != null) { - if (owner == this) { // Replacing an attribute node by itself has no effect + if (owner == this) { // Replacing an attribute node by itself has no + // effect return null; } else { - throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR, "Attribute is already in use"); + throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR, + "Attribute is already in use"); } } @@ -146,7 +174,7 @@ public class IIOMetadataNode implements Element, NodeList { IIOMetadataAttr iioAttr; if (newAttr instanceof IIOMetadataAttr) { - iioAttr = (IIOMetadataAttr) newAttr; + iioAttr = (IIOMetadataAttr)newAttr; iioAttr.setOwnerElement(this); } else { iioAttr = new IIOMetadataAttr(name, newAttr.getValue(), this); @@ -206,7 +234,8 @@ public class IIOMetadataNode implements Element, NodeList { return getAttribute(localName); } - public void setAttributeNS(String namespaceURI, String qualifiedName, String value) throws DOMException { + public void setAttributeNS(String namespaceURI, String qualifiedName, String value) + throws DOMException { setAttribute(qualifiedName, value); } @@ -222,7 +251,8 @@ public class IIOMetadataNode implements Element, NodeList { return setAttributeNode(newAttr); } - public NodeList getElementsByTagNameNS(String namespaceURI, String localName) throws DOMException { + public NodeList getElementsByTagNameNS(String namespaceURI, String localName) + throws DOMException { return getElementsByTagName(localName); } @@ -234,20 +264,105 @@ public class IIOMetadataNode implements Element, NodeList { return hasAttribute(localName); } - //???AWT + // ???AWT /* - public TypeInfo getSchemaTypeInfo() { - throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); - }*/ + * public TypeInfo getSchemaTypeInfo() { throw new + * DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + */ + /** + * Description copied from interface: org.w3c.dom.Element (DOM Level + * 3) + *

    + * If the parameter isId is true, this method declares the specified + * attribute to be a user-determined ID attribute . This affects the value + * of Attr.isId and the behavior of Document.getElementById, but does not + * change any schema that may be in use, in particular this does not affect + * the Attr.schemaTypeInfo of the specified Attr node. Use the value false + * for the parameter isId to undeclare an attribute for being a + * user-determined ID attribute. To specify an attribute by local name and + * namespace URI, use the setIdAttributeNS method. + *

    + * + * @param name + * the name of the attribute. + * @param isId + * the flag which determines whether this attribute is of type + * ID. + * @throws DOMException + * if a DOM error occurred while setting the attribute type. + *

    + * NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. + *
    + * NOT_FOUND_ERR: Raised if the specified node is not an + * attribute of this element. + *

    + */ public void setIdAttribute(String name, boolean isId) throws DOMException { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } - public void setIdAttributeNS(String namespaceURI, String localName, boolean isId) throws DOMException { + /** + * Description copied from interface: org.w3c.dom.Element (DOM Level + * 3) + *

    + * If the parameter isId is true, this method declares the specified + * attribute to be a user-determined ID attribute . This affects the value + * of Attr.isId and the behavior of Document.getElementById, but does not + * change any schema that may be in use, in particular this does not affect + * the Attr.schemaTypeInfo of the specified Attr node. Use the value false + * for the parameter isId to undeclare an attribute for being a + * user-determined ID attribute. + *

    + * + * @param namespaceURI + * the namespace URI of the attribute. + * @param localName + * the local name of the attribute. + * @param isId + * the flag which determines whether this attribute is of type + * ID. + * @throws DOMException + * if a DOM error occurred while setting the attribute type. + *

    + * NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. + *
    + * NOT_FOUND_ERR: Raised if the specified node is not an + * attribute of this element. + *

    + */ + public void setIdAttributeNS(String namespaceURI, String localName, boolean isId) + throws DOMException { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + /** + * Description copied from interface: org.w3c.dom.Element (DOM Level + * 3) + *

    + * If the parameter isId is true, this method declares the specified + * attribute to be a user-determined ID attribute . This affects the value + * of Attr.isId and the behavior of Document.getElementById, but does not + * change any schema that may be in use, in particular this does not affect + * the Attr.schemaTypeInfo of the specified Attr node. Use the value false + * for the parameter isId to undeclare an attribute for being a + * user-determined ID attribute. + *

    + * + * @param idAttr + * the attribute node. + * @param isId + * the flag which determines whether this attribute is of type + * ID. + * @throws DOMException + * if a DOM error occurred while setting the attribute type. + *

    + * NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. + *
    + * NOT_FOUND_ERR: Raised if the specified node is not an + * attribute of this element. + *

    + */ public void setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } @@ -305,8 +420,8 @@ public class IIOMetadataNode implements Element, NodeList { throw new IllegalArgumentException("newChild == null!"); } - IIOMetadataNode newIIOChild = (IIOMetadataNode) newChild; - IIOMetadataNode refIIOChild = (IIOMetadataNode) refChild; + IIOMetadataNode newIIOChild = (IIOMetadataNode)newChild; + IIOMetadataNode refIIOChild = (IIOMetadataNode)refChild; newIIOChild.parent = this; @@ -349,8 +464,8 @@ public class IIOMetadataNode implements Element, NodeList { throw new IllegalArgumentException("newChild == null!"); } - IIOMetadataNode newIIOChild = (IIOMetadataNode) newChild; - IIOMetadataNode oldIIOChild = (IIOMetadataNode) oldChild; + IIOMetadataNode newIIOChild = (IIOMetadataNode)newChild; + IIOMetadataNode oldIIOChild = (IIOMetadataNode)oldChild; IIOMetadataNode next = oldIIOChild.nextSibling; IIOMetadataNode previous = oldIIOChild.previousSibling; @@ -389,7 +504,7 @@ public class IIOMetadataNode implements Element, NodeList { throw new IllegalArgumentException("oldChild == null!"); } - IIOMetadataNode oldIIOChild = (IIOMetadataNode) oldChild; + IIOMetadataNode oldIIOChild = (IIOMetadataNode)oldChild; // Fix next and previous IIOMetadataNode previous = oldIIOChild.previousSibling; @@ -439,7 +554,8 @@ public class IIOMetadataNode implements Element, NodeList { } } - return cloned; //To change body of implemented methods use File | Settings | File Templates. + return cloned; // To change body of implemented methods use File | + // Settings | File Templates. } public void normalize() { @@ -470,52 +586,314 @@ public class IIOMetadataNode implements Element, NodeList { return attrs.list.size() > 0; } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * The absolute base URI of this node or null if the implementation wasn't + * able to obtain an absolute URI. This value is computed as described in. + * However, when the Document supports the feature "HTML" [DOM Level 2 + * HTML], the base URI is computed using first the value of the href + * attribute of the HTML BASE element if any, and the value of the + * documentURI attribute from the Document interface otherwise. + *

    + * + * @return the string representation of the absolute base URI. + */ public String getBaseURI() { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * Compares the reference node, i.e. the node on which this method is being + * called, with a node, i.e. the one passed as a parameter, with regard to + * their position in the document and according to the document order. + *

    + * + * @param other + * the node to compare against the reference node. + * @return Returns how the node is positioned relatively to the reference + * node. + * @throws DOMException + * NOT_SUPPORTED_ERR: when the compared nodes are from different + * DOM implementations that do not coordinate to return + * consistent implementation-specific results. + */ public short compareDocumentPosition(Node other) throws DOMException { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * This attribute returns the text content of this node and its descendants. + * When it is defined to be null, setting it has no effect. On setting, any + * possible children this node may have are removed and, if it the new + * string is not empty or null, replaced by a single Text node containing + * the string this attribute is set to. On getting, no serialization is + * performed, the returned string does not contain any markup. No whitespace + * normalization is performed and the returned string does not contain the + * white spaces in element content (see the attribute + * Text.isElementContentWhitespace). Similarly, on setting, no parsing is + * performed either, the input string is taken as pure textual content. The + * string returned is made of the text content of this node depending on its + * type, as defined below: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    Node typeContent
    ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, + * DOCUMENT_FRAGMENT_NODEconcatenation of the textContent attribute value of every child node, + * excluding COMMENT_NODE and PROCESSING_INSTRUCTION_NODE nodes. This is the + * empty string if the node has no children.
    TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE, + * PROCESSING_INSTRUCTION_NODEnodeValue
    DOCUMENT_NODE, DOCUMENT_TYPE_NODE, NOTATION_NODEnull
    + *

    + * + * @return the text content depending on the type of this node. + * @throws DOMException + * DOMSTRING_SIZE_ERR: Raised when it would return more + * characters than fit in a DOMString variable on the + * implementation platform. + */ public String getTextContent() throws DOMException { return textContent; } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * This attribute returns the text content of this node and its descendants. + * When it is defined to be null, setting it has no effect. On setting, any + * possible children this node may have are removed and, if it the new + * string is not empty or null, replaced by a single Text node containing + * the string this attribute is set to. On getting, no serialization is + * performed, the returned string does not contain any markup. No whitespace + * normalization is performed and the returned string does not contain the + * white spaces in element content (see the attribute + * Text.isElementContentWhitespace). Similarly, on setting, no parsing is + * performed either, the input string is taken as pure textual content. The + * string returned is made of the text content of this node depending on its + * type, as defined below: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    Node typeContent
    ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, + * DOCUMENT_FRAGMENT_NODEconcatenation of the textContent attribute value of every child node, + * excluding COMMENT_NODE and PROCESSING_INSTRUCTION_NODE nodes. This is the + * empty string if the node has no children.
    TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE, + * PROCESSING_INSTRUCTION_NODEnodeValue
    DOCUMENT_NODE, DOCUMENT_TYPE_NODE, NOTATION_NODEnull
    + *

    + * + * @param textContent + * the text content for this node. + * @throws DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is + * readonly. + */ public void setTextContent(String textContent) throws DOMException { this.textContent = textContent; } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * Returns whether this node is the same node as the given one. This method + * provides a way to determine whether two Node references returned by the + * implementation reference the same object. When two Node references are + * references to the same object, even if through a proxy, the references + * may be used completely interchangeably, such that all attributes have the + * same values and calling the same DOM method on either reference always + * has exactly the same effect. + *

    + * + * @param other + * the node to test against. + * @return true, if the nodes are the same, false otherwise. + */ public boolean isSameNode(Node other) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * Look up the prefix associated to the given namespace URI, starting from + * this node. The default namespace declarations are ignored by this method. + * See for details on the algorithm used by this method. + *

    + * + * @param namespaceURI + * the namespace URI to look for. + * @return the associated namespace prefix if found or null if none is + * found. If more than one prefix are associated to the namespace + * prefix, the returned namespace prefix is implementation + * dependent. + */ public String lookupPrefix(String namespaceURI) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * This method checks if the specified namespaceURI is the default namespace + * or not. + *

    + * + * @param namespaceURI + * the namespace URI to look for. + * @return true, if the specified namespaceURI is the default namespace, + * false otherwise. + */ public boolean isDefaultNamespace(String namespaceURI) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * Look up the namespace URI associated to the given prefix, starting from + * this node. See for details on the algorithm used by this method. + *

    + * + * @param prefix + * the prefix to look for. If this parameter is null, the method + * will return the default namespace URI if any. + * @return the associated namespace URI or null if none is found. + */ public String lookupNamespaceURI(String prefix) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * Tests whether two nodes are equal. This method tests for equality of + * nodes, not sameness (i.e., whether the two nodes are references to the + * same object) which can be tested with Node.isSameNode(). All nodes that + * are the same will also be equal, though the reverse may not be true. Two + * nodes are equal if and only if the following conditions are satisfied: + *

    + *

  • The two nodes are of the same type.
  • + *
  • The following string attributes are equal: nodeName, localName, + * namespaceURI, prefix, nodeValue . This is: they are both null, or they + * have the same length and are character for character identical.
  • + *
  • The attributes NamedNodeMaps are equal. This is: they are both null, + * or they have the same length and for each node that exists in one map + * there is a node that exists in the other map and is equal, although not + * necessarily at the same index.
  • + *
  • The childNodes NodeLists are equal. This is: they are both null, or + * they have the same length and contain equal nodes at the same index. Note + * that normalization can affect equality; to avoid this, nodes should be + * normalized before being compared.
  • + *

    + * For two DocumentType nodes to be equal, the following conditions must + * also be satisfied: + *

    + *

  • The following string attributes are equal: publicId, systemId, + * internalSubset.
  • + *
  • The entities NamedNodeMaps are equal.
  • + *
  • The notations NamedNodeMaps are equal.
  • + *

    + * On the other hand, the following do not affect equality: the + * ownerDocument, baseURI, and parentNode attributes, the specified + * attribute for Attr nodes, the schemaTypeInfo attribute for Attr and + * Element nodes, the Text.isElementContentWhitespace attribute for Text + * nodes, as well as any user data or event listeners registered on the + * nodes.

    + *

    + * Note: As a general rule, anything not mentioned in the description above + * is not significant in consideration of equality checking. Note that + * future versions of this specification may take into account more + * attributes and implementations conform to this specification are expected + * to be updated accordingly. + *

    + * + * @param arg + * the node to compare equality with. + * @return true, if the nodes are equal, false otherwise. + */ public boolean isEqualNode(Node arg) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * This method returns a specialized object which implements the specialized + * APIs of the specified feature and version, as specified in. The + * specialized object may also be obtained by using binding-specific casting + * methods but is not necessarily expected to, as discussed in. This method + * also allow the implementation to provide specialized objects which do not + * support the Node interface. + *

    + * + * @param feature + * the name of the feature requested. Note that any plus sign "+" + * prepended to the name of the feature will be ignored since it + * is not significant in the context of this method. + * @param version + * this is the version number of the feature to test. + * @return the object which implements the specialized APIs of the specified + * feature and version, if any, or null if there is no object which + * implements interfaces associated with that feature. If the + * DOMObject returned by this method implements the Node interface, + * it must delegate to the primary core Node and not return results + * inconsistent with the primary core Node such as attributes, + * childNodes, etc. + */ public Object getFeature(String feature, String version) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } - //???AWT + // ???AWT /* - public Object setUserData(String key, Object data, UserDataHandler handler) { - throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); - }*/ + * public Object setUserData(String key, Object data, UserDataHandler + * handler) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, + * "Method not supported"); } + */ + /** + * Description copied from interface: org.w3c.dom.Node (DOM Level 3) + *

    + * Retrieves the object associated to a key on a this node. The object must + * first have been set to this node by calling setUserData with the same + * key. + *

    + * + * @param key + * the key the object is associated to. + * @return the DOMUserData associated to the given key on this node, or null + * if there was none. + */ public Object getUserData(String key) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } @@ -540,7 +918,7 @@ public class IIOMetadataNode implements Element, NodeList { /** * Gets the user object associated with this node. * - * @return the user object associated with this node + * @return the user object associated with this node. */ public Object getUserObject() { return userObject; @@ -549,7 +927,8 @@ public class IIOMetadataNode implements Element, NodeList { /** * Sets the user object associated with this node. * - * @param userObject the new user object associated with this node + * @param userObject + * the new user object associated with this node. */ public void setUserObject(Object userObject) { this.userObject = userObject; @@ -559,16 +938,21 @@ public class IIOMetadataNode implements Element, NodeList { * The Class IIOMetadataAttr. */ private class IIOMetadataAttr extends IIOMetadataNode implements Attr { - - /** The owner element. */ + + /** + * The owner element. + */ private Element ownerElement; /** * Instantiates a new iIO metadata attr. * - * @param name the name - * @param value the value - * @param owner the owner + * @param name + * the name. + * @param value + * the value. + * @param owner + * the owner. */ public IIOMetadataAttr(String name, String value, Element owner) { super(name, value); @@ -598,12 +982,16 @@ public class IIOMetadataNode implements Element, NodeList { /** * Sets the owner element. * - * @param ownerElement the new owner element + * @param ownerElement + * the new owner element. */ public void setOwnerElement(Element ownerElement) { this.ownerElement = ownerElement; } + /** + * @return + */ public boolean isId() { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); } @@ -618,14 +1006,17 @@ public class IIOMetadataNode implements Element, NodeList { * The Class IIOMetadataNodeList. */ private class IIOMetadataNodeList implements NodeList, NamedNodeMap { - - /** The list. */ + + /** + * The list. + */ private List list; /** * Instantiates a new iIO metadata node list. * - * @param list the list + * @param list + * the list. */ IIOMetadataNodeList(List list) { this.list = list; @@ -644,7 +1035,7 @@ public class IIOMetadataNode implements Element, NodeList { } public Node getNamedItem(String name) { - for(IIOMetadataNode node:list) { + for (IIOMetadataNode node : list) { if (name.equals(node.getNodeName())) { return node; } @@ -653,11 +1044,13 @@ public class IIOMetadataNode implements Element, NodeList { } public Node setNamedItem(Node arg) throws DOMException { - throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, "This NamedNodeMap is read-only!"); + throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, + "This NamedNodeMap is read-only!"); } public Node removeNamedItem(String name) throws DOMException { - throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, "This NamedNodeMap is read-only!"); + throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, + "This NamedNodeMap is read-only!"); } public Node getNamedItemNS(String namespaceURI, String localName) throws DOMException { @@ -665,11 +1058,13 @@ public class IIOMetadataNode implements Element, NodeList { } public Node setNamedItemNS(Node arg) throws DOMException { - throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, "This NamedNodeMap is read-only!"); + throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, + "This NamedNodeMap is read-only!"); } public Node removeNamedItemNS(String namespaceURI, String localName) throws DOMException { - throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, "This NamedNodeMap is read-only!"); + throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, + "This NamedNodeMap is read-only!"); } } } diff --git a/awt/javax/imageio/metadata/IIOStandardMetadataFormat.java b/awt/javax/imageio/metadata/IIOStandardMetadataFormat.java index 94d2125638..706cb2f7ab 100644 --- a/awt/javax/imageio/metadata/IIOStandardMetadataFormat.java +++ b/awt/javax/imageio/metadata/IIOStandardMetadataFormat.java @@ -15,18 +15,19 @@ * limitations under the License. */ - package javax.imageio.metadata; import javax.imageio.ImageTypeSpecifier; import java.util.ArrayList; /** - * The Class IIOStandardMetadataFormat describes the rules of the - * standard metadata format. + * The class IIOStandardMetadataFormat describes the rules of the standard + * metadata format. + * + * @since Android 1.0 */ -class IIOStandardMetadataFormat extends IIOMetadataFormatImpl { - +class IIOStandardMetadataFormat extends IIOMetadataFormatImpl { + /** * Instantiates a new IIOStandardMetadataFormat. */ @@ -41,7 +42,7 @@ class IIOStandardMetadataFormat extends IIOMetadataFormatImpl { } /** - * Builds the dtd that describes the standard metadata format. + * Builds the DTD that describes the standard metadata format. */ private void buildDTD() { // CHROMA @@ -80,7 +81,10 @@ class IIOStandardMetadataFormat extends IIOMetadataFormatImpl { addAttribute("ColorSpaceType", "name", DATATYPE_STRING, true, null, values); addElement("NumChannels", "Chroma", CHILD_POLICY_EMPTY); - addAttribute("NumChannels", "value", DATATYPE_INTEGER, true, 0, Integer.MAX_VALUE); // list - why? + addAttribute("NumChannels", "value", DATATYPE_INTEGER, true, 0, Integer.MAX_VALUE); // list + // - + // why + // ? addElement("Gamma", "Chroma", CHILD_POLICY_EMPTY); addAttribute("Gamma", "value", DATATYPE_FLOAT, true, null); @@ -142,10 +146,8 @@ class IIOStandardMetadataFormat extends IIOMetadataFormatImpl { addAttribute("BitsPerSample", "value", DATATYPE_INTEGER, true, 1, Integer.MAX_VALUE); // list addElement("SignificantBitsPerSample", "Data", CHILD_POLICY_EMPTY); - addAttribute( - "SignificantBitsPerSample", "value", - DATATYPE_INTEGER, true, 1, Integer.MAX_VALUE - ); // list + addAttribute("SignificantBitsPerSample", "value", DATATYPE_INTEGER, true, 1, + Integer.MAX_VALUE); // list addElement("SampleMSB", "Data", CHILD_POLICY_EMPTY); addAttribute("SampleMSB", "value", DATATYPE_INTEGER, true, 1, Integer.MAX_VALUE); // list @@ -224,49 +226,29 @@ class IIOStandardMetadataFormat extends IIOMetadataFormatImpl { addElement("ImageCreationTime", "Document", CHILD_POLICY_EMPTY); addAttribute("ImageCreationTime", "year", DATATYPE_INTEGER, true, null); - addAttribute( - "ImageCreationTime", "month", - DATATYPE_INTEGER, true, null, "1", "12", true, true - ); - addAttribute( - "ImageCreationTime", "day", - DATATYPE_INTEGER, true, null, "1", "31", true, true - ); - addAttribute( - "ImageCreationTime", "hour", - DATATYPE_INTEGER, false, "0", "0", "23", true, true - ); - addAttribute( - "ImageCreationTime", "minute", - DATATYPE_INTEGER, false, "0", "0", "59", true, true - ); - addAttribute( - "ImageCreationTime", "second", - DATATYPE_INTEGER, false, "0", "0", "60", true, true - ); + addAttribute("ImageCreationTime", "month", DATATYPE_INTEGER, true, null, "1", "12", true, + true); + addAttribute("ImageCreationTime", "day", DATATYPE_INTEGER, true, null, "1", "31", true, + true); + addAttribute("ImageCreationTime", "hour", DATATYPE_INTEGER, false, "0", "0", "23", true, + true); + addAttribute("ImageCreationTime", "minute", DATATYPE_INTEGER, false, "0", "0", "59", true, + true); + addAttribute("ImageCreationTime", "second", DATATYPE_INTEGER, false, "0", "0", "60", true, + true); addElement("ImageModificationTime", "Document", CHILD_POLICY_EMPTY); addAttribute("ImageModificationTime", "year", DATATYPE_INTEGER, true, null); - addAttribute( - "ImageModificationTime", "month", - DATATYPE_INTEGER, true, null, "1", "12", true, true - ); - addAttribute( - "ImageModificationTime", "day", - DATATYPE_INTEGER, true, null, "1", "31", true, true - ); - addAttribute( - "ImageModificationTime", "hour", - DATATYPE_INTEGER, false, "0", "0", "23", true, true - ); - addAttribute( - "ImageModificationTime", "minute", - DATATYPE_INTEGER, false, "0", "0", "59", true, true - ); - addAttribute( - "ImageModificationTime", "second", - DATATYPE_INTEGER, false, "0", "0", "60", true, true - ); + addAttribute("ImageModificationTime", "month", DATATYPE_INTEGER, true, null, "1", "12", + true, true); + addAttribute("ImageModificationTime", "day", DATATYPE_INTEGER, true, null, "1", "31", true, + true); + addAttribute("ImageModificationTime", "hour", DATATYPE_INTEGER, false, "0", "0", "23", + true, true); + addAttribute("ImageModificationTime", "minute", DATATYPE_INTEGER, false, "0", "0", "59", + true, true); + addAttribute("ImageModificationTime", "second", DATATYPE_INTEGER, false, "0", "0", "60", + true, true); // TEXT addElement("Text", standardMetadataFormatName, 0, Integer.MAX_VALUE); // CHILD_POLICY_REPEAT @@ -313,4 +295,3 @@ class IIOStandardMetadataFormat extends IIOMetadataFormatImpl { addAttribute("OpaqueTile", "y", DATATYPE_INTEGER, true, null); } } - diff --git a/awt/javax/imageio/metadata/package.html b/awt/javax/imageio/metadata/package.html new file mode 100644 index 0000000000..29bd51b2c4 --- /dev/null +++ b/awt/javax/imageio/metadata/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes which allows to read and write describing metadata of image files. +

    + @since Android 1.0 + + diff --git a/awt/javax/imageio/package.html b/awt/javax/imageio/package.html new file mode 100644 index 0000000000..2fd6148748 --- /dev/null +++ b/awt/javax/imageio/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes and interfaces which provides an Image I/O API. The contained classes and interfaces allow reading and writing image files of different formats. +

    + @since Android 1.0 + + diff --git a/awt/javax/imageio/plugins/bmp/BMPImageWriteParam.java b/awt/javax/imageio/plugins/bmp/BMPImageWriteParam.java index 0cd44db4aa..ecfb20ad38 100644 --- a/awt/javax/imageio/plugins/bmp/BMPImageWriteParam.java +++ b/awt/javax/imageio/plugins/bmp/BMPImageWriteParam.java @@ -15,19 +15,21 @@ * limitations under the License. */ - package javax.imageio.plugins.bmp; import javax.imageio.ImageWriteParam; import java.util.Locale; /** - * The BMPImageWriteParam class allows encoding an image in - * BMP format. + * The BMPImageWriteParam class allows encoding an image in BMP format. + * + * @since Android 1.0 */ public class BMPImageWriteParam extends ImageWriteParam { - - /** The top down. */ + + /** + * The top down. + */ private boolean topDown; // Default is bottom-up /** @@ -41,33 +43,35 @@ public class BMPImageWriteParam extends ImageWriteParam { /** * Instantiates a new BMPImageWriteParam with the specified Locale. * - * @param locale the specified Locale. + * @param locale + * the specified Locale. */ public BMPImageWriteParam(Locale locale) { super(locale); // Set the compression canWriteCompressed = true; - compressionTypes = new String[] {"BI_RGB", "BI_RLE8", "BI_RLE4", "BI_BITFIELDS"}; - compressionType = compressionTypes[0]; + compressionTypes = new String[] { + "BI_RGB", "BI_RLE8", "BI_RLE4", "BI_BITFIELDS" + }; + compressionType = compressionTypes[0]; } /** - * Sets true if the data will be written in a top-down order, - * false otherwise. + * Sets true if the data will be written in a top-down order, false + * otherwise. * - * @param topDown the new top-down value. + * @param topDown + * the new top-down value. */ public void setTopDown(boolean topDown) { this.topDown = topDown; } /** - * Returns true if the data is written in top-down order, false - * otherwise. + * Returns true if the data is written in top-down order, false otherwise. * - * @return true if the data is written in top-down order, false - * otherwise. + * @return true if the data is written in top-down order, false otherwise. */ public boolean isTopDown() { return topDown; diff --git a/awt/javax/imageio/plugins/bmp/package.html b/awt/javax/imageio/plugins/bmp/package.html new file mode 100644 index 0000000000..9494a102db --- /dev/null +++ b/awt/javax/imageio/plugins/bmp/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains auxiliary classes for the built-in BMP image plug-in. +

    + @since Android 1.0 + + diff --git a/awt/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java b/awt/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java index 398c960ad4..67b504be25 100644 --- a/awt/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java +++ b/awt/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java @@ -18,82 +18,90 @@ package javax.imageio.plugins.jpeg; /** - * The JPEGHuffmanTable class represents a single JPEG Huffman table. - * It contains the standard tables from the JPEG specification. + * The JPEGHuffmanTable class represents a single JPEG Huffman table. It + * contains the standard tables from the JPEG specification. + * + * @since Android 1.0 */ public class JPEGHuffmanTable { - - /** The standard DC luminance Huffman table . */ - public static final JPEGHuffmanTable StdDCLuminance = new JPEGHuffmanTable( - new short[] {0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, - new short[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0A, 0x0B}, - false - ); - - /** The standard DC chrominance Huffman table. */ - public static final JPEGHuffmanTable StdDCChrominance = new JPEGHuffmanTable( - new short[] {0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, - new short[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0A, 0x0B}, - false - ); - - /** The standard AC luminance Huffman table. */ - public static final JPEGHuffmanTable StdACLuminance = new JPEGHuffmanTable( - new short[] {0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7D}, - new short[] { - 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, - 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08, - 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0, 0x24, 0x33, 0x62, 0x72, - 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, - 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, - 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, - 0x76, 0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, - 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, - 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, - 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, - 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2, - 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3, 0xF4, - 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA - }, - false - ); - - /** - * The standard AC chrominance Huffman table. */ - public static final JPEGHuffmanTable StdACChrominance = new JPEGHuffmanTable( - new short[] {0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77}, - new short[] { - 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, - 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, - 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0, 0x15, 0x62, 0x72, 0xD1, - 0x0A, 0x16, 0x24, 0x34, 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, - 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, - 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, - 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, - 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, - 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, - 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2, 0xF3, 0xF4, - 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA - }, - false - ); - - /** The lengths. */ + + /** + * The standard DC luminance Huffman table . + */ + public static final JPEGHuffmanTable StdDCLuminance = new JPEGHuffmanTable(new short[] { + 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 + }, new short[] { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0A, 0x0B + }, false); + + /** + * The standard DC chrominance Huffman table. + */ + public static final JPEGHuffmanTable StdDCChrominance = new JPEGHuffmanTable(new short[] { + 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 + }, new short[] { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0A, 0x0B + }, false); + + /** + * The standard AC luminance Huffman table. + */ + public static final JPEGHuffmanTable StdACLuminance = new JPEGHuffmanTable(new short[] { + 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7D + }, new short[] { + 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, + 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08, 0x23, 0x42, 0xB1, 0xC1, + 0x15, 0x52, 0xD1, 0xF0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, + 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x92, + 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, + 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, + 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, + 0xD9, 0xDA, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, + 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA + }, false); + + /** + * The standard AC chrominance Huffman table. + */ + public static final JPEGHuffmanTable StdACChrominance = new JPEGHuffmanTable(new short[] { + 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 + }, new short[] { + 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, + 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xA1, 0xB1, 0xC1, 0x09, + 0x23, 0x33, 0x52, 0xF0, 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34, 0xE1, 0x25, + 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, + 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, + 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, + 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, + 0xD7, 0xD8, 0xD9, 0xDA, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2, + 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA + }, false); + + /** + * The lengths. + */ private short lengths[]; - - /** The values. */ + + /** + * The values. + */ private short values[]; /** * Instantiates a new jPEG huffman table. * - * @param lengths the lengths - * @param values the values - * @param copy the copy + * @param lengths + * the lengths + * @param values + * the values + * @param copy + * the copy */ JPEGHuffmanTable(short[] lengths, short[] values, boolean copy) { // Construction of standard tables without checks @@ -106,9 +114,11 @@ public class JPEGHuffmanTable { /** * Instantiates a new JPEGHuffmanTable. * - * @param lengths the array of shorts lengths. - * @param values the array of shorts containing - * the values in order of increasing code length. + * @param lengths + * the array of shorts lengths. + * @param values + * the array of shorts containing the values in order of + * increasing code length. */ public JPEGHuffmanTable(short[] lengths, short[] values) { if (lengths == null) { @@ -145,8 +155,8 @@ public class JPEGHuffmanTable { /** * Gets an array of lengths in the Huffman table. * - * @return the array of short values representing the - * length values in the Huffman table. + * @return the array of short values representing the length values in the + * Huffman table. */ public short[] getLengths() { short newLengths[] = new short[lengths.length]; @@ -155,8 +165,7 @@ public class JPEGHuffmanTable { } /** - * Gets an array of values represented by increasing length of - * their codes. + * Gets an array of values represented by increasing length of their codes. * * @return the array of values. */ @@ -169,8 +178,10 @@ public class JPEGHuffmanTable { /** * Check huffman table. * - * @param lengths the lengths - * @param values the values + * @param lengths + * the lengths. + * @param values + * the values. */ private static void checkHuffmanTable(short[] lengths, short[] values) { int numLeaves = 0; @@ -179,13 +190,15 @@ public class JPEGHuffmanTable { numLeaves += length; possibleLeaves -= length; if (possibleLeaves < 0) { - throw new IllegalArgumentException("Invalid Huffman table provided, lengths are incorrect."); + throw new IllegalArgumentException( + "Invalid Huffman table provided, lengths are incorrect."); } possibleLeaves <<= 1; } if (values.length != numLeaves) { - throw new IllegalArgumentException("Invalid Huffman table provided, sum of lengths != values."); + throw new IllegalArgumentException( + "Invalid Huffman table provided, sum of lengths != values."); } } diff --git a/awt/javax/imageio/plugins/jpeg/JPEGImageReadParam.java b/awt/javax/imageio/plugins/jpeg/JPEGImageReadParam.java index dd08d51b60..2f3a9a8fbd 100644 --- a/awt/javax/imageio/plugins/jpeg/JPEGImageReadParam.java +++ b/awt/javax/imageio/plugins/jpeg/JPEGImageReadParam.java @@ -20,18 +20,26 @@ package javax.imageio.plugins.jpeg; import javax.imageio.ImageReadParam; /** - * The JPEGImageReadParam class provides functionality to set Huffman tables - * and quantization tables when using the JPEG reader plug-in. + * The JPEGImageReadParam class provides functionality to set Huffman tables and + * quantization tables when using the JPEG reader plug-in. + * + * @since Android 1.0 */ public class JPEGImageReadParam extends ImageReadParam { - - /** The q tables. */ + + /** + * The q tables. + */ private JPEGQTable qTables[]; - - /** The dc huffman tables. */ + + /** + * The dc huffman tables. + */ private JPEGHuffmanTable dcHuffmanTables[]; - - /** The ac huffman tables. */ + + /** + * The ac huffman tables. + */ private JPEGHuffmanTable acHuffmanTables[]; /** @@ -43,29 +51,28 @@ public class JPEGImageReadParam extends ImageReadParam { /** * Returns true if tables are set, false otherwise. * - * @return true if tables are set, false otherwise. + * @return true, if tables are set, false otherwise. */ public boolean areTablesSet() { return qTables != null; } /** - * Sets the quantization and Huffman tables for using in - * decoding streams. + * Sets the quantization and Huffman tables for using in decoding streams. * - * @param qTables the quantization tables. - * @param DCHuffmanTables the standart DC Huffman tables. - * @param ACHuffmanTables the standart AC huffman tables. + * @param qTables + * the quantization tables. + * @param DCHuffmanTables + * the standart DC Huffman tables. + * @param ACHuffmanTables + * the standart AC huffman tables. */ - public void setDecodeTables( - JPEGQTable[] qTables, - JPEGHuffmanTable[] DCHuffmanTables, - JPEGHuffmanTable[] ACHuffmanTables - ) { + public void setDecodeTables(JPEGQTable[] qTables, JPEGHuffmanTable[] DCHuffmanTables, + JPEGHuffmanTable[] ACHuffmanTables) { if (qTables == null || DCHuffmanTables == null || ACHuffmanTables == null) { throw new IllegalArgumentException("Invalid JPEG table arrays"); } - if(DCHuffmanTables.length != ACHuffmanTables.length) { + if (DCHuffmanTables.length != ACHuffmanTables.length) { throw new IllegalArgumentException("Invalid JPEG table arrays"); } if (qTables.length > 4 || DCHuffmanTables.length > 4) { @@ -112,5 +119,5 @@ public class JPEGImageReadParam extends ImageReadParam { */ public JPEGHuffmanTable[] getACHuffmanTables() { return acHuffmanTables == null ? null : acHuffmanTables.clone(); - } + } } diff --git a/awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java b/awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java index 34a3cd923f..b9799112e0 100644 --- a/awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java +++ b/awt/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java @@ -23,38 +23,52 @@ import javax.imageio.ImageWriteParam; import java.util.Locale; /** - * The JPEGImageWriteParam class allows to set JPEG Huffman tables - * and quantization when using the JPEG writer plug-in. + * The JPEGImageWriteParam class allows to set JPEG Huffman tables and + * quantization when using the JPEG writer plug-in. + * + * @since Android 1.0 */ public class JPEGImageWriteParam extends ImageWriteParam { - - /** The Constant COMP_QUALITY_VALUES. */ - private static final float[] COMP_QUALITY_VALUES = {0.05f, 0.75f, 0.95f}; - - /** The Constant COMP_QUALITY_DESCRIPTIONS. */ + + /** + * The Constant COMP_QUALITY_VALUES. + */ + private static final float[] COMP_QUALITY_VALUES = { + 0.05f, 0.75f, 0.95f + }; + + /** + * The Constant COMP_QUALITY_DESCRIPTIONS. + */ private static final String[] COMP_QUALITY_DESCRIPTIONS = { - "Minimum useful", - "Visually lossless", - "Maximum useful" + "Minimum useful", "Visually lossless", "Maximum useful" }; - /** The q tables. */ + /** + * The q tables. + */ private JPEGQTable[] qTables; - - /** The dc huffman tables. */ + + /** + * The dc huffman tables. + */ private JPEGHuffmanTable[] dcHuffmanTables; - - /** The ac huffman tables. */ + + /** + * The ac huffman tables. + */ private JPEGHuffmanTable[] acHuffmanTables; - /** The optimize huffman tables. */ + /** + * The optimize huffman tables. + */ private boolean optimizeHuffmanTables; /** - * Instantiates a new JPEGImageWriteParam object with - * the specified Locale. + * Instantiates a new JPEGImageWriteParam object with the specified Locale. * - * @param locale the Locale. + * @param locale + * the Locale. */ public JPEGImageWriteParam(Locale locale) { super(locale); @@ -63,37 +77,38 @@ public class JPEGImageWriteParam extends ImageWriteParam { progressiveMode = ImageWriteParam.MODE_DISABLED; canWriteCompressed = true; - compressionTypes = new String[]{"JPEG"}; - compressionType = compressionTypes[0]; + compressionTypes = new String[] { + "JPEG" + }; + compressionType = compressionTypes[0]; compressionQuality = JPEGConsts.DEFAULT_JPEG_COMPRESSION_QUALITY; } /** * Returns true if tables are set, false otherwise. * - * @return true if tables are set, false otherwise. + * @return true, if tables are set, false otherwise. */ public boolean areTablesSet() { return qTables != null; } /** - * Sets the quantization and Huffman tables for using in - * encoding streams. + * Sets the quantization and Huffman tables for using in encoding streams. * - * @param qTables the quantization tables. - * @param DCHuffmanTables the standart DC Huffman tables. - * @param ACHuffmanTables the standart AC huffman tables. + * @param qTables + * the quantization tables. + * @param DCHuffmanTables + * the standart DC Huffman tables. + * @param ACHuffmanTables + * the standart AC huffman tables. */ - public void setEncodeTables( - JPEGQTable[] qTables, - JPEGHuffmanTable[] DCHuffmanTables, - JPEGHuffmanTable[] ACHuffmanTables - ) { + public void setEncodeTables(JPEGQTable[] qTables, JPEGHuffmanTable[] DCHuffmanTables, + JPEGHuffmanTable[] ACHuffmanTables) { if (qTables == null || DCHuffmanTables == null || ACHuffmanTables == null) { throw new IllegalArgumentException("Invalid JPEG table arrays"); } - if(DCHuffmanTables.length != ACHuffmanTables.length) { + if (DCHuffmanTables.length != ACHuffmanTables.length) { throw new IllegalArgumentException("Invalid JPEG table arrays"); } if (qTables.length > 4 || DCHuffmanTables.length > 4) { @@ -155,21 +170,22 @@ public class JPEGImageWriteParam extends ImageWriteParam { } /** - * Sets the flag indicated that the writer will generate optimized - * Huffman tables for the image as part of the writing process. + * Sets the flag indicated that the writer will generate optimized Huffman + * tables for the image as part of the writing process. * - * @param optimize the flag of optimizing huffman tables. + * @param optimize + * the flag of optimizing huffman tables. */ public void setOptimizeHuffmanTables(boolean optimize) { optimizeHuffmanTables = optimize; } /** - * Returns true if the writer generates optimized Huffman tables, - * false otherwise. + * Returns true if the writer generates optimized Huffman tables, false + * otherwise. * - * @return the true if the writer generates optimized Huffman tables, - * false otherwise. + * @return true, if the writer generates optimized Huffman tables, false + * otherwise. */ public boolean getOptimizeHuffmanTables() { return optimizeHuffmanTables; diff --git a/awt/javax/imageio/plugins/jpeg/JPEGQTable.java b/awt/javax/imageio/plugins/jpeg/JPEGQTable.java index 0c5b37edce..3461d46698 100644 --- a/awt/javax/imageio/plugins/jpeg/JPEGQTable.java +++ b/awt/javax/imageio/plugins/jpeg/JPEGQTable.java @@ -18,88 +18,92 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.plugins.jpeg; /** - * The JPEGQTable class represents a single JPEG quantization table - * and provides for the standard tables taken from the JPEG specification. + * The JPEGQTable class represents a single JPEG quantization table and provides + * for the standard tables taken from the JPEG specification. + * + * @since Android 1.0 */ public class JPEGQTable { - /** The Constant SIZE. */ + /** + * The Constant SIZE. + */ private final static int SIZE = 64; - - /** The Constant BASELINE_MAX. */ + + /** + * The Constant BASELINE_MAX. + */ private final static int BASELINE_MAX = 255; - - /** The Constant MAX. */ - private final static int MAX = 32767; + /** + * The Constant MAX. + */ + private final static int MAX = 32767; - /** The table. */ + /** + * The table. + */ private int[] theTable; /* - * K1 & K2 tables can be found in the JPEG format specification - * at http://www.w3.org/Graphics/JPEG/itu-t81.pdf + * K1 & K2 tables can be found in the JPEG format specification at + * http://www.w3.org/Graphics/JPEG/itu-t81.pdf */ - /** The Constant K1LumTable. */ + /** + * The Constant K1LumTable. + */ private static final int[] K1LumTable = new int[] { - 16, 11, 10, 16, 24, 40, 51, 61, - 12, 12, 14, 19, 26, 58, 60, 55, - 14, 13, 16, 24, 40, 57, 69, 56, - 14, 17, 22, 29, 51, 87, 80, 62, - 18, 22, 37, 56, 68, 109, 103, 77, - 24, 35, 55, 64, 81, 104, 113, 92, - 49, 64, 78, 87, 103, 121, 120, 101, - 72, 92, 95, 98, 112, 100, 103, 99 + 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, + 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, + 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, + 103, 99 }; - /** The Constant K2ChrTable. */ + /** + * The Constant K2ChrTable. + */ private static final int[] K2ChrTable = new int[] { - 17, 18, 24, 47, 99, 99, 99, 99, - 18, 21, 26, 66, 99, 99, 99, 99, - 24, 26, 56, 99, 99, 99, 99, 99, - 47, 66, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99 + 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, + 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 }; - /** - * The K1Luminance indicates standart table K.1 from JPEG - * specification and produces "good" quality output. + /** + * The K1Luminance indicates standard table K.1 from JPEG specification and + * produces "good" quality output. */ public static final JPEGQTable K1Luminance = new JPEGQTable(K1LumTable); - - /** - * The K1Div2Luminance indicates K.1 table from JPEG - * specification with all elements divided by 2 and produces - * "very good" quality output. + + /** + * The K1Div2Luminance indicates K.1 table from JPEG specification with all + * elements divided by 2 and produces "very good" quality output. */ public static final JPEGQTable K1Div2Luminance = K1Luminance.getScaledInstance(0.5f, true); - - /** - * The K2Chrominance indicates K.2 table from JPEG - * specification and produces "good" quality output. + + /** + * The K2Chrominance indicates K.2 table from JPEG specification and + * produces "good" quality output. */ public static final JPEGQTable K2Chrominance = new JPEGQTable(K2ChrTable); - - /** + + /** * The Constant K2Div2Chrominance indicates K.2 table from JPEG - * specification with all elements divided by 2 and produces - * "very good" quality output. + * specification with all elements divided by 2 and produces "very good" + * quality output. */ public static final JPEGQTable K2Div2Chrominance = K2Chrominance.getScaledInstance(0.5f, true);; - /** - * Instantiates a new JPEGQTable from the array, which - * should contain 64 elements in natural order. + * Instantiates a new JPEGQTable from the array, which should contain 64 + * elements in natural order. * - * @param table the quantization table. + * @param table + * the quantization table. */ public JPEGQTable(int[] table) { if (table == null) { @@ -112,23 +116,22 @@ public class JPEGQTable { } /** - * Gets the current quantization table as an array of int values. + * Gets the current quantization table as an array of integer values. * - * @return the current quantization table as an array of int values. + * @return the current quantization table as an array of integer values. */ public int[] getTable() { return theTable.clone(); } /** - * Gets the scaled instance as quantization table where - * the values are multiplied by the scaleFactor and then clamped - * if forceBaseline is true. - * - * @param scaleFactor the scale factor of table. - * @param forceBaseline the force baseline flag, the values - * should be clamped if true. + * Gets the scaled instance as quantization table where the values are + * multiplied by the scaleFactor and then clamped if forceBaseline is true. * + * @param scaleFactor + * the scale factor of table. + * @param forceBaseline + * the force baseline flag, the values should be clamped if true. * @return the new quantization table. */ public JPEGQTable getScaledInstance(float scaleFactor, boolean forceBaseline) { @@ -156,7 +159,7 @@ public class JPEGQTable { */ @Override public String toString() { - //-- TODO more informative info + // -- TODO more informative info return "JPEGQTable"; } } diff --git a/awt/javax/imageio/plugins/jpeg/package.html b/awt/javax/imageio/plugins/jpeg/package.html new file mode 100644 index 0000000000..14575c417c --- /dev/null +++ b/awt/javax/imageio/plugins/jpeg/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains auxiliary classes for the built-in JPEG image plug-in. +

    + @since Android 1.0 + + diff --git a/awt/javax/imageio/spi/IIORegistry.java b/awt/javax/imageio/spi/IIORegistry.java index 3c1c989db3..01ddeaafee 100644 --- a/awt/javax/imageio/spi/IIORegistry.java +++ b/awt/javax/imageio/spi/IIORegistry.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import java.util.Arrays; @@ -39,37 +40,41 @@ import org.apache.harmony.x.imageio.spi.RAFIOSSpi; */ /** - * The IIORegistry class registers service provider instances - * (SPI). Service provider instances are recognized by specific - * meta-information in the JAR files containing them. The JAR - * files with SPI classes are loaded from the application class - * path. + * The IIORegistry class registers service provider instances (SPI). Service + * provider instances are recognized by specific meta-information in the JAR + * files containing them. The JAR files with SPI classes are loaded from the + * application class path. + * + * @since Android 1.0 */ public final class IIORegistry extends ServiceRegistry { - /** The instance. */ + /** + * The instance. + */ private static IIORegistry instance; - /** The Constant CATEGORIES. */ + /** + * The Constant CATEGORIES. + */ private static final Class[] CATEGORIES = new Class[] { - javax.imageio.spi.ImageWriterSpi.class, - javax.imageio.spi.ImageReaderSpi.class, - javax.imageio.spi.ImageInputStreamSpi.class, - //javax.imageio.spi.ImageTranscoderSpi.class, - javax.imageio.spi.ImageOutputStreamSpi.class + javax.imageio.spi.ImageWriterSpi.class, javax.imageio.spi.ImageReaderSpi.class, + javax.imageio.spi.ImageInputStreamSpi.class, + // javax.imageio.spi.ImageTranscoderSpi.class, + javax.imageio.spi.ImageOutputStreamSpi.class }; /** - * Instantiates a new iIO registry. + * Instantiates a new IIO registry. */ private IIORegistry() { - super(Arrays.>asList(CATEGORIES).iterator()); + super(Arrays.> asList(CATEGORIES).iterator()); registerBuiltinSpis(); registerApplicationClasspathSpis(); } /** - * Register builtin spis. + * Register built-in SPIs. */ private void registerBuiltinSpis() { registerServiceProvider(new JPEGImageWriterSpi()); @@ -80,9 +85,9 @@ public final class IIORegistry extends ServiceRegistry { registerServiceProvider(new FileIISSpi()); registerServiceProvider(new RAFIOSSpi()); registerServiceProvider(new RAFIISSpi()); - registerServiceProvider(new OutputStreamIOSSpi()); + registerServiceProvider(new OutputStreamIOSSpi()); registerServiceProvider(new InputStreamIISSpi()); - //-- TODO implement + // -- TODO implement } /** @@ -91,7 +96,8 @@ public final class IIORegistry extends ServiceRegistry { * @return the default IIORegistry instance. */ public static IIORegistry getDefaultInstance() { - // TODO implement own instance for each ThreadGroup (see also ThreadLocal) + // TODO implement own instance for each ThreadGroup (see also + // ThreadLocal) synchronized (IIORegistry.class) { if (instance == null) { instance = new IIORegistry(); @@ -101,10 +107,9 @@ public final class IIORegistry extends ServiceRegistry { } /** - * Registers all service providers from the application class - * path. + * Registers all service providers from the application class path. */ public void registerApplicationClasspathSpis() { - //-- TODO implement for non-builtin plugins + // -- TODO implement for non-builtin plugins } } diff --git a/awt/javax/imageio/spi/IIOServiceProvider.java b/awt/javax/imageio/spi/IIOServiceProvider.java index f5873bfb4f..e9476773ae 100644 --- a/awt/javax/imageio/spi/IIOServiceProvider.java +++ b/awt/javax/imageio/spi/IIOServiceProvider.java @@ -18,27 +18,36 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import java.util.Locale; /** - * The IIOServiceProvider abstract class provides base functionality - * for imageio service provider interfaces (SPIs). + * The IIOServiceProvider abstract class provides base functionality for ImageIO + * service provider interfaces (SPIs). + * + * @since Android 1.0 */ public abstract class IIOServiceProvider implements RegisterableService { - /** The vendor name of this service provider. */ + /** + * The vendor name of this service provider. + */ protected String vendorName; - - /** The version of this service provider. */ + + /** + * The version of this service provider. + */ protected String version; /** * Instantiates a new IIOServiceProvider. * - * @param vendorName the vendor name of service provider. - * @param version the version of service provider. + * @param vendorName + * the vendor name of service provider. + * @param version + * the version of service provider. */ public IIOServiceProvider(String vendorName, String version) { if (vendorName == null) { @@ -85,12 +94,11 @@ public abstract class IIOServiceProvider implements RegisterableService { } /** - * Gets a description of this service provider. - * The result string should be localized for the specified - * Locale. - * - * @param locale the specified Locale. + * Gets a description of this service provider. The result string should be + * localized for the specified Locale. * + * @param locale + * the specified Locale. * @return the description of this service provider. */ public abstract String getDescription(Locale locale); diff --git a/awt/javax/imageio/spi/ImageInputStreamSpi.java b/awt/javax/imageio/spi/ImageInputStreamSpi.java index 47d210a842..fc859a8719 100644 --- a/awt/javax/imageio/spi/ImageInputStreamSpi.java +++ b/awt/javax/imageio/spi/ImageInputStreamSpi.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import java.io.File; @@ -25,13 +26,16 @@ import java.io.IOException; import javax.imageio.stream.ImageInputStream; /** - * The ImageInputStreamSpi abstract class is a service provider - * interface (SPI) for ImageInputStreams. + * The ImageInputStreamSpi abstract class is a service provider interface (SPI) + * for ImageInputStreams. + * + * @since Android 1.0 */ -public abstract class ImageInputStreamSpi extends IIOServiceProvider implements - RegisterableService { - - /** The input class. */ +public abstract class ImageInputStreamSpi extends IIOServiceProvider implements RegisterableService { + + /** + * The input class. + */ protected Class inputClass; /** @@ -44,9 +48,12 @@ public abstract class ImageInputStreamSpi extends IIOServiceProvider implements /** * Instantiates a new ImageInputStreamSpi. * - * @param vendorName the vendor name. - * @param version the version. - * @param inputClass the input class. + * @param vendorName + * the vendor name. + * @param version + * the version. + * @param inputClass + * the input class. */ public ImageInputStreamSpi(String vendorName, String version, Class inputClass) { super(vendorName, version); @@ -54,8 +61,8 @@ public abstract class ImageInputStreamSpi extends IIOServiceProvider implements } /** - * Gets an input Class object that represents class or - * interface that must be implemented by an input source. + * Gets an input Class object that represents class or interface that must + * be implemented by an input source. * * @return the input class. */ @@ -64,61 +71,59 @@ public abstract class ImageInputStreamSpi extends IIOServiceProvider implements } /** - * Returns true if the ImageInputStream can use a cache - * file. If this method returns false, the value of the - * useCache parameter of createInputStreamInstance will - * be ignored. The default implementation returns false. + * Returns true if the ImageInputStream can use a cache file. If this method + * returns false, the value of the useCache parameter of + * createInputStreamInstance will be ignored. The default implementation + * returns false. * - * @return true if the ImageInputStream can use a cache - * file, false otherwise. + * @return true, if the ImageInputStream can use a cache file, false + * otherwise. */ public boolean canUseCacheFile() { - return false; //-- def + return false; // -- def } /** - * Returns true if the ImageInputStream implementation - * requires the use of a cache file. The default implementation - * returns false. + * Returns true if the ImageInputStream implementation requires the use of a + * cache file. The default implementation returns false. * - * @return true if the ImageInputStream implementation - * requires the use of a cache file, false otherwise. + * @return true, if the ImageInputStream implementation requires the use of + * a cache file, false otherwise. */ public boolean needsCacheFile() { return false; // def } /** - * Creates the ImageInputStream associated with this - * service provider. The input object should - * be an instance of the class returned by th getInputClass - * method. This method uses the specified directory - * for the cache file if the useCache parameter is true. - * - * @param input the input Object. - * @param useCache the flag indicating if a cache file - * is needed or not. - * @param cacheDir the cache directory. + * Creates the ImageInputStream associated with this service provider. The + * input object should be an instance of the class returned by the + * getInputClass method. This method uses the specified directory for the + * cache file if the useCache parameter is true. * + * @param input + * the input Object. + * @param useCache + * the flag indicating if a cache file is needed or not. + * @param cacheDir + * the cache directory. * @return the ImageInputStream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract ImageInputStream createInputStreamInstance(Object input, boolean useCache, File cacheDir) throws IOException; /** - * Creates the ImageInputStream associated with this - * service provider. The input object should - * be an instance of the class returned by getInputClass - * method. This method uses the default system directory - * for the cache file, if it is needed. - * - * @param input the input Object. + * Creates the ImageInputStream associated with this service provider. The + * input object should be an instance of the class returned by getInputClass + * method. This method uses the default system directory for the cache file, + * if it is needed. * + * @param input + * the input Object. * @return the ImageInputStream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public ImageInputStream createInputStreamInstance(Object input) throws IOException { return createInputStreamInstance(input, true, null); diff --git a/awt/javax/imageio/spi/ImageOutputStreamSpi.java b/awt/javax/imageio/spi/ImageOutputStreamSpi.java index d45e24cce6..b7a9a5c333 100644 --- a/awt/javax/imageio/spi/ImageOutputStreamSpi.java +++ b/awt/javax/imageio/spi/ImageOutputStreamSpi.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import javax.imageio.stream.ImageOutputStream; @@ -25,13 +26,17 @@ import java.io.IOException; import java.io.File; /** - * The ImageOutputStreamSpi abstract class is a service provider - * interface (SPI) for ImageOutputStreams. + * The ImageOutputStreamSpi abstract class is a service provider interface (SPI) + * for ImageOutputStreams. + * + * @since Android 1.0 */ public abstract class ImageOutputStreamSpi extends IIOServiceProvider implements RegisterableService { - - /** The output class. */ + + /** + * The output class. + */ protected Class outputClass; /** @@ -44,9 +49,12 @@ public abstract class ImageOutputStreamSpi extends IIOServiceProvider implements /** * Instantiates a new ImageOutputStreamSpi. * - * @param vendorName the vendor name. - * @param version the version. - * @param outputClass the output class. + * @param vendorName + * the vendor name. + * @param version + * the version. + * @param outputClass + * the output class. */ public ImageOutputStreamSpi(String vendorName, String version, Class outputClass) { super(vendorName, version); @@ -54,8 +62,8 @@ public abstract class ImageOutputStreamSpi extends IIOServiceProvider implements } /** - * Gets an output Class object that represents the class or - * interface that must be implemented by an output source. + * Gets an output Class object that represents the class or interface that + * must be implemented by an output source. * * @return the output class. */ @@ -64,63 +72,61 @@ public abstract class ImageOutputStreamSpi extends IIOServiceProvider implements } /** - * Returns true if the ImageOutputStream can use a cache - * file. If this method returns false, the value of the - * useCache parameter of createOutputStreamInstance will - * be ignored. The default implementation returns false. + * Returns true if the ImageOutputStream can use a cache file. If this + * method returns false, the value of the useCache parameter of + * createOutputStreamInstance will be ignored. The default implementation + * returns false. * - * @return true if the ImageOutputStream can use a cache - * file, false otherwise. + * @return true, if the ImageOutputStream can use a cache file, false + * otherwise. */ public boolean canUseCacheFile() { return false; // def } /** - * Returns true if the ImageOutputStream implementation - * requires the use of a cache file. The default implementation - * returns false. + * Returns true if the ImageOutputStream implementation requires the use of + * a cache file. The default implementation returns false. * - * @return true if the ImageOutputStream implementation - * requires the use of a cache file, false otherwise. + * @return true, if the ImageOutputStream implementation requires the use of + * a cache file, false otherwise. */ public boolean needsCacheFile() { return false; // def } /** - * Creates the ImageOutputStream associated with this - * service provider. The output object should - * be an instance of the class returned by getOutputClass - * method. This method uses the default system directory - * for the cache file, if it is needed. - * - * @param output the output Object. + * Creates the ImageOutputStream associated with this service provider. The + * output object should be an instance of the class returned by + * getOutputClass method. This method uses the default system directory for + * the cache file, if it is needed. * + * @param output + * the output Object. * @return the ImageOutputStream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public ImageOutputStream createOutputStreamInstance(Object output) throws IOException { return createOutputStreamInstance(output, true, null); } /** - * Creates the ImageOutputStream associated with this - * service provider. The output object should - * be an instance of the class returned by getInputClass - * method. This method uses the specified directory - * for the cache file, if the useCache parameter is true. - * - * @param output the output Object. - * @param useCache the flag indicating if cache file - * is needed or not. - * @param cacheDir the cache directory. + * Creates the ImageOutputStream associated with this service provider. The + * output object should be an instance of the class returned by + * getInputClass method. This method uses the specified directory for the + * cache file, if the useCache parameter is true. * + * @param output + * the output Object. + * @param useCache + * the flag indicating if cache file is needed or not. + * @param cacheDir + * the cache directory. * @return the ImageOutputStream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ - public abstract ImageOutputStream createOutputStreamInstance(Object output, - boolean useCache, File cacheDir) throws IOException; + public abstract ImageOutputStream createOutputStreamInstance(Object output, boolean useCache, + File cacheDir) throws IOException; } diff --git a/awt/javax/imageio/spi/ImageReaderSpi.java b/awt/javax/imageio/spi/ImageReaderSpi.java index 2e2484c462..0528d250b1 100644 --- a/awt/javax/imageio/spi/ImageReaderSpi.java +++ b/awt/javax/imageio/spi/ImageReaderSpi.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import javax.imageio.stream.ImageInputStream; @@ -25,20 +26,28 @@ import javax.imageio.ImageReader; import java.io.IOException; /** - * The ImageReaderSpi abstract class is a service provider - * interface (SPI) for ImageReaders. + * The ImageReaderSpi abstract class is a service provider interface (SPI) for + * ImageReaders. + * + * @since Android 1.0 */ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { - /** - * The STANDARD_INPUT_TYPE contains ImageInputStream.class. + /** + * The STANDARD_INPUT_TYPE contains ImageInputStream.class. */ - public static final Class[] STANDARD_INPUT_TYPE = new Class[] {ImageInputStream.class}; + public static final Class[] STANDARD_INPUT_TYPE = new Class[] { + ImageInputStream.class + }; - /** The input types. */ + /** + * The input types. + */ protected Class[] inputTypes; - - /** The writer SPI names. */ + + /** + * The writer SPI names. + */ protected String[] writerSpiNames; /** @@ -51,49 +60,62 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { /** * Instantiates a new ImageReaderSpi. * - * @param vendorName the vendor name. - * @param version the version. - * @param names the format names. - * @param suffixes the array of strings representing the file suffixes. - * @param MIMETypes the an array of strings representing MIME types. - * @param pluginClassName the plugin class name. - * @param inputTypes the input types. - * @param writerSpiNames the array of strings with class names of all - * associated ImageWriters. - * @param supportsStandardStreamMetadataFormat the value indicating - * if stream metadata can be described by standart metadata format. - * @param nativeStreamMetadataFormatName the native stream metadata - * format name, returned by getNativeStreamMetadataFormatName. - * @param nativeStreamMetadataFormatClassName the native stream - * metadata format class name, returned by getNativeStreamMetadataFormat. - * @param extraStreamMetadataFormatNames the extra stream metadata - * format names, returned by getExtraStreamMetadataFormatNames. - * @param extraStreamMetadataFormatClassNames the extra stream metadata - * format class names, returned by getStreamMetadataFormat. - * @param supportsStandardImageMetadataFormat the value indicating - * if image metadata can be described by standart metadata format. - * @param nativeImageMetadataFormatName the native image metadata - * format name, returned by getNativeImageMetadataFormatName. - * @param nativeImageMetadataFormatClassName the native image - * metadata format class name, returned by getNativeImageMetadataFormat. - * @param extraImageMetadataFormatNames the extra image metadata - * format names, returned by getExtraImageMetadataFormatNames. - * @param extraImageMetadataFormatClassNames the extra image metadata - * format class names, returned by getImageMetadataFormat. + * @param vendorName + * the vendor name. + * @param version + * the version. + * @param names + * the format names. + * @param suffixes + * the array of strings representing the file suffixes. + * @param MIMETypes + * the an array of strings representing MIME types. + * @param pluginClassName + * the plug-in class name. + * @param inputTypes + * the input types. + * @param writerSpiNames + * the array of strings with class names of all associated + * ImageWriters. + * @param supportsStandardStreamMetadataFormat + * the value indicating if stream metadata can be described by + * standard metadata format. + * @param nativeStreamMetadataFormatName + * the native stream metadata format name, returned by + * getNativeStreamMetadataFormatName. + * @param nativeStreamMetadataFormatClassName + * the native stream metadata format class name, returned by + * getNativeStreamMetadataFormat. + * @param extraStreamMetadataFormatNames + * the extra stream metadata format names, returned by + * getExtraStreamMetadataFormatNames. + * @param extraStreamMetadataFormatClassNames + * the extra stream metadata format class names, returned by + * getStreamMetadataFormat. + * @param supportsStandardImageMetadataFormat + * the value indicating if image metadata can be described by + * standard metadata format. + * @param nativeImageMetadataFormatName + * the native image metadata format name, returned by + * getNativeImageMetadataFormatName. + * @param nativeImageMetadataFormatClassName + * the native image metadata format class name, returned by + * getNativeImageMetadataFormat. + * @param extraImageMetadataFormatNames + * the extra image metadata format names, returned by + * getExtraImageMetadataFormatNames. + * @param extraImageMetadataFormatClassNames + * the extra image metadata format class names, returned by + * getImageMetadataFormat. */ public ImageReaderSpi(String vendorName, String version, String[] names, String[] suffixes, - String[] MIMETypes, String pluginClassName, - Class[] inputTypes, String[] writerSpiNames, - boolean supportsStandardStreamMetadataFormat, - String nativeStreamMetadataFormatName, - String nativeStreamMetadataFormatClassName, - String[] extraStreamMetadataFormatNames, - String[] extraStreamMetadataFormatClassNames, - boolean supportsStandardImageMetadataFormat, - String nativeImageMetadataFormatName, - String nativeImageMetadataFormatClassName, - String[] extraImageMetadataFormatNames, - String[] extraImageMetadataFormatClassNames) { + String[] MIMETypes, String pluginClassName, Class[] inputTypes, + String[] writerSpiNames, boolean supportsStandardStreamMetadataFormat, + String nativeStreamMetadataFormatName, String nativeStreamMetadataFormatClassName, + String[] extraStreamMetadataFormatNames, String[] extraStreamMetadataFormatClassNames, + boolean supportsStandardImageMetadataFormat, String nativeImageMetadataFormatName, + String nativeImageMetadataFormatClassName, String[] extraImageMetadataFormatNames, + String[] extraImageMetadataFormatClassNames) { super(vendorName, version, names, suffixes, MIMETypes, pluginClassName, supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName, nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames, @@ -109,8 +131,8 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { } /** - * Gets an array of Class objects whose types can be used - * as input for this reader. + * Gets an array of Class objects whose types can be used as input for this + * reader. * * @return the input types. */ @@ -119,66 +141,62 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { } /** - * Returns true if the format of source object is - * supported by this reader. + * Returns true if the format of source object is supported by this reader. * - * @param source the source object to be decoded - * (for example an ImageInputStream). - * - * @return true if the format of source object is - * supported by this reader, false otherwise. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param source + * the source object to be decoded (for example an + * ImageInputStream). + * @return true, if the format of source object is supported by this reader, + * false otherwise. + * @throws IOException + * if an I/O exception has occurred. */ public abstract boolean canDecodeInput(Object source) throws IOException; /** - * Returns an instance of the ImageReader implementation for - * this service provider. + * Returns an instance of the ImageReader implementation for this service + * provider. * * @return the ImageReader. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public ImageReader createReaderInstance() throws IOException { return createReaderInstance(null); } /** - * Returns an instance of the ImageReader implementation for - * this service provider. - * - * @param extension the a plugin specific extension object, or null. + * Returns an instance of the ImageReader implementation for this service + * provider. * + * @param extension + * the a plug-in specific extension object, or null. * @return the ImageReader. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract ImageReader createReaderInstance(Object extension) throws IOException; /** - * Checks whether or not the specified ImageReader object - * is an instance of the ImageReader associated with this - * service provider or not. - * - * @param reader the ImageReader. + * Checks whether or not the specified ImageReader object is an instance of + * the ImageReader associated with this service provider or not. * - * @return true, if the specified ImageReader object - * is an instance of the ImageReader associated with this - * service provider, false otherwise. + * @param reader + * the ImageReader. + * @return true, if the specified ImageReader object is an instance of the + * ImageReader associated with this service provider, false + * otherwise. */ public boolean isOwnReader(ImageReader reader) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Gets an array of strings with names of the ImageWriterSpi - * classes that support the internal metadata representation - * used by the ImageReader of this service provider, or null if - * there are no such ImageWriters. + * Gets an array of strings with names of the ImageWriterSpi classes that + * support the internal metadata representation used by the ImageReader of + * this service provider, or null if there are no such ImageWriters. * - * @return an array of strings with names of the ImageWriterSpi - * classes. + * @return the array of strings with names of the ImageWriterSpi classes. */ public String[] getImageWriterSpiNames() { throw new UnsupportedOperationException("Not supported yet"); diff --git a/awt/javax/imageio/spi/ImageReaderWriterSpi.java b/awt/javax/imageio/spi/ImageReaderWriterSpi.java index b3c0f92fa0..9ca08b5ea0 100644 --- a/awt/javax/imageio/spi/ImageReaderWriterSpi.java +++ b/awt/javax/imageio/spi/ImageReaderWriterSpi.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import org.apache.harmony.x.imageio.metadata.IIOMetadataUtils; @@ -25,97 +26,138 @@ import org.apache.harmony.x.imageio.metadata.IIOMetadataUtils; import javax.imageio.metadata.IIOMetadataFormat; /** - * The ImageReaderWriterSpi class is a superclass for the - * ImageReaderSpi and ImageWriterSpi SPIs. + * The ImageReaderWriterSpi class is a superclass for the ImageReaderSpi and + * ImageWriterSpi SPIs. + * + * @since Android 1.0 */ -public abstract class ImageReaderWriterSpi extends IIOServiceProvider - implements RegisterableService { +public abstract class ImageReaderWriterSpi extends IIOServiceProvider implements + RegisterableService { - /** The names. */ + /** + * The names. + */ protected String[] names; - - /** The suffixes. */ + + /** + * The suffixes. + */ protected String[] suffixes; - - /** The MIME types. */ + + /** + * The MIME types. + */ protected String[] MIMETypes; - - /** The plugin class name. */ + + /** + * The plug-in class name. + */ protected String pluginClassName; - - /** Whether the reader/writer supports standard stream metadata format. */ + + /** + * Whether the reader/writer supports standard stream metadata format. + */ protected boolean supportsStandardStreamMetadataFormat; - - /** The native stream metadata format name. */ + + /** + * The native stream metadata format name. + */ protected String nativeStreamMetadataFormatName; - - /** The native stream metadata format class name. */ + + /** + * The native stream metadata format class name. + */ protected String nativeStreamMetadataFormatClassName; - - /** The extra stream metadata format names. */ + + /** + * The extra stream metadata format names. + */ protected String[] extraStreamMetadataFormatNames; - - /** The extra stream metadata format class names. */ + + /** + * The extra stream metadata format class names. + */ protected String[] extraStreamMetadataFormatClassNames; - - /** Whether the reader/writer supports standard image metadata format. */ + + /** + * Whether the reader/writer supports standard image metadata format. + */ protected boolean supportsStandardImageMetadataFormat; - - /** The native image metadata format name. */ + + /** + * The native image metadata format name. + */ protected String nativeImageMetadataFormatName; - - /** The native image metadata format class name. */ + + /** + * The native image metadata format class name. + */ protected String nativeImageMetadataFormatClassName; - - /** The extra image metadata format names. */ + + /** + * The extra image metadata format names. + */ protected String[] extraImageMetadataFormatNames; - - /** The extra image metadata format class names. */ + + /** + * The extra image metadata format class names. + */ protected String[] extraImageMetadataFormatClassNames; /** * Instantiates a new ImageReaderWriterSpi. * - * @param vendorName the vendor name. - * @param version the version. - * @param names the format names. - * @param suffixes the array of strings representing the file suffixes. - * @param MIMETypes the an array of strings representing MIME types. - * @param pluginClassName the plugin class name. - * @param supportsStandardStreamMetadataFormat the value indicating - * if stream metadata can be described by standart metadata format. - * @param nativeStreamMetadataFormatName the native stream metadata - * format name, returned by getNativeStreamMetadataFormatName. - * @param nativeStreamMetadataFormatClassName the native stream - * metadata format class name, returned by getNativeStreamMetadataFormat. - * @param extraStreamMetadataFormatNames the extra stream metadata - * format names, returned by getExtraStreamMetadataFormatNames. - * @param extraStreamMetadataFormatClassNames the extra stream metadata - * format class names, returned by getStreamMetadataFormat. - * @param supportsStandardImageMetadataFormat the value indicating - * if image metadata can be described by standard metadata format. - * @param nativeImageMetadataFormatName the native image metadata - * format name, returned by getNativeImageMetadataFormatName. - * @param nativeImageMetadataFormatClassName the native image - * metadata format class name, returned by getNativeImageMetadataFormat. - * @param extraImageMetadataFormatNames the extra image metadata - * format names, returned by getExtraImageMetadataFormatNames. - * @param extraImageMetadataFormatClassNames the extra image metadata - * format class names, returned by getImageMetadataFormat. + * @param vendorName + * the vendor name. + * @param version + * the version. + * @param names + * the format names. + * @param suffixes + * the array of strings representing the file suffixes. + * @param MIMETypes + * the an array of strings representing MIME types. + * @param pluginClassName + * the plug-in class name. + * @param supportsStandardStreamMetadataFormat + * the value indicating if stream metadata can be described by + * standard metadata format. + * @param nativeStreamMetadataFormatName + * the native stream metadata format name, returned by + * getNativeStreamMetadataFormatName. + * @param nativeStreamMetadataFormatClassName + * the native stream metadata format class name, returned by + * getNativeStreamMetadataFormat. + * @param extraStreamMetadataFormatNames + * the extra stream metadata format names, returned by + * getExtraStreamMetadataFormatNames. + * @param extraStreamMetadataFormatClassNames + * the extra stream metadata format class names, returned by + * getStreamMetadataFormat. + * @param supportsStandardImageMetadataFormat + * the value indicating if image metadata can be described by + * standard metadata format. + * @param nativeImageMetadataFormatName + * the native image metadata format name, returned by + * getNativeImageMetadataFormatName. + * @param nativeImageMetadataFormatClassName + * the native image metadata format class name, returned by + * getNativeImageMetadataFormat. + * @param extraImageMetadataFormatNames + * the extra image metadata format names, returned by + * getExtraImageMetadataFormatNames. + * @param extraImageMetadataFormatClassNames + * the extra image metadata format class names, returned by + * getImageMetadataFormat. */ public ImageReaderWriterSpi(String vendorName, String version, String[] names, - String[] suffixes, String[] MIMETypes, - String pluginClassName, - boolean supportsStandardStreamMetadataFormat, - String nativeStreamMetadataFormatName, - String nativeStreamMetadataFormatClassName, - String[] extraStreamMetadataFormatNames, - String[] extraStreamMetadataFormatClassNames, - boolean supportsStandardImageMetadataFormat, - String nativeImageMetadataFormatName, - String nativeImageMetadataFormatClassName, - String[] extraImageMetadataFormatNames, - String[] extraImageMetadataFormatClassNames) { + String[] suffixes, String[] MIMETypes, String pluginClassName, + boolean supportsStandardStreamMetadataFormat, String nativeStreamMetadataFormatName, + String nativeStreamMetadataFormatClassName, String[] extraStreamMetadataFormatNames, + String[] extraStreamMetadataFormatClassNames, + boolean supportsStandardImageMetadataFormat, String nativeImageMetadataFormatName, + String nativeImageMetadataFormatClassName, String[] extraImageMetadataFormatNames, + String[] extraImageMetadataFormatClassNames) { super(vendorName, version); if (names == null || names.length == 0) { @@ -137,60 +179,54 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider this.nativeStreamMetadataFormatName = nativeStreamMetadataFormatName; this.nativeStreamMetadataFormatClassName = nativeStreamMetadataFormatClassName; - this.extraStreamMetadataFormatNames = - extraStreamMetadataFormatNames == null ? - null : extraStreamMetadataFormatNames.clone(); + this.extraStreamMetadataFormatNames = extraStreamMetadataFormatNames == null ? null + : extraStreamMetadataFormatNames.clone(); - this.extraStreamMetadataFormatClassNames = - extraStreamMetadataFormatClassNames == null ? - null : extraStreamMetadataFormatClassNames.clone(); + this.extraStreamMetadataFormatClassNames = extraStreamMetadataFormatClassNames == null ? null + : extraStreamMetadataFormatClassNames.clone(); this.supportsStandardImageMetadataFormat = supportsStandardImageMetadataFormat; this.nativeImageMetadataFormatName = nativeImageMetadataFormatName; this.nativeImageMetadataFormatClassName = nativeImageMetadataFormatClassName; - this.extraImageMetadataFormatNames = - extraImageMetadataFormatNames == null ? - null : extraImageMetadataFormatNames.clone(); + this.extraImageMetadataFormatNames = extraImageMetadataFormatNames == null ? null + : extraImageMetadataFormatNames.clone(); - this.extraImageMetadataFormatClassNames = - extraImageMetadataFormatClassNames == null ? - null : extraImageMetadataFormatClassNames.clone(); + this.extraImageMetadataFormatClassNames = extraImageMetadataFormatClassNames == null ? null + : extraImageMetadataFormatClassNames.clone(); } /** * Instantiates a new ImageReaderWriterSpi. */ - public ImageReaderWriterSpi() {} + public ImageReaderWriterSpi() { + } /** - * Gets an array of strings representing names of the formats - * that can be used by the ImageReader - * or ImageWriter implementation associated with this service - * provider. + * Gets an array of strings representing names of the formats that can be + * used by the ImageReader or ImageWriter implementation associated with + * this service provider. * - * @return an array of supported format names. + * @return the array of supported format names. */ public String[] getFormatNames() { return names.clone(); } /** - * Gets an array of strings representing file suffixes - * associated with the formats that can be used by the - * ImageReader or ImageWriter implementation of this - * service provider. + * Gets an array of strings representing file suffixes associated with the + * formats that can be used by the ImageReader or ImageWriter implementation + * of this service provider. * - * @return an array of file suffixes. + * @return the array of file suffixes. */ public String[] getFileSuffixes() { return suffixes == null ? null : suffixes.clone(); } /** - * Gets an array of strings with the names of - * additional formats of the image metadata objects - * produced or consumed by this plug-in. + * Gets an array of strings with the names of additional formats of the + * image metadata objects produced or consumed by this plug-in. * * @return the array of extra image metadata format names. */ @@ -199,52 +235,49 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider } /** - * Gets an array of strings with the names of - * additional formats of the stream metadata objects - * produced or consumed by this plug-in. + * Gets an array of strings with the names of additional formats of the + * stream metadata objects produced or consumed by this plug-in. * * @return the array of extra stream metadata format names. */ public String[] getExtraStreamMetadataFormatNames() { - return extraStreamMetadataFormatNames == null ? null : extraStreamMetadataFormatNames.clone(); + return extraStreamMetadataFormatNames == null ? null : extraStreamMetadataFormatNames + .clone(); } /** - * Gets an IIOMetadataFormat object for the specified image - * metadata format name. - * - * @param formatName the format name. + * Gets an IIOMetadataFormat object for the specified image metadata format + * name. * + * @param formatName + * the format name. * @return the IIOMetadataFormat, or null. */ public IIOMetadataFormat getImageMetadataFormat(String formatName) { - return IIOMetadataUtils.instantiateMetadataFormat( - formatName, supportsStandardImageMetadataFormat, - nativeImageMetadataFormatName, nativeImageMetadataFormatClassName, - extraImageMetadataFormatNames, extraImageMetadataFormatClassNames - ); + return IIOMetadataUtils.instantiateMetadataFormat(formatName, + supportsStandardImageMetadataFormat, nativeImageMetadataFormatName, + nativeImageMetadataFormatClassName, extraImageMetadataFormatNames, + extraImageMetadataFormatClassNames); } /** - * Gets an IIOMetadataFormat object for the specified stream - * metadata format name. - * - * @param formatName the format name. + * Gets an IIOMetadataFormat object for the specified stream metadata format + * name. * + * @param formatName + * the format name. * @return the IIOMetadataFormat, or null. */ public IIOMetadataFormat getStreamMetadataFormat(String formatName) { - return IIOMetadataUtils.instantiateMetadataFormat( - formatName, supportsStandardStreamMetadataFormat, - nativeStreamMetadataFormatName, nativeStreamMetadataFormatClassName, - extraStreamMetadataFormatNames, extraStreamMetadataFormatClassNames - ); + return IIOMetadataUtils.instantiateMetadataFormat(formatName, + supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName, + nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames, + extraStreamMetadataFormatClassNames); } /** - * Gets an array of strings representing the MIME types - * of the formats that are supported by the - * ImageReader or ImageWriter implementation of this + * Gets an array of strings representing the MIME types of the formats that + * are supported by the ImageReader or ImageWriter implementation of this * service provider. * * @return the array MIME types. @@ -254,32 +287,30 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider } /** - * Gets the name of the native image metadata format for - * this reader/writer, which allows for lossless encoding - * or decoding of the image metadata with the format. + * Gets the name of the native image metadata format for this reader/writer, + * which allows for lossless encoding or decoding of the image metadata with + * the format. * - * @return the string with native image metadata format name, - * or null. + * @return the string with native image metadata format name, or null. */ public String getNativeImageMetadataFormatName() { return nativeImageMetadataFormatName; } /** - * Gets the name of the native stream metadata format for - * this reader/writer, which allows for lossless encoding - * or decoding of the stream metadata with the format. + * Gets the name of the native stream metadata format for this + * reader/writer, which allows for lossless encoding or decoding of the + * stream metadata with the format. * - * @return the string with native stream metadata format name, - * or null. + * @return the string with native stream metadata format name, or null. */ public String getNativeStreamMetadataFormatName() { return nativeStreamMetadataFormatName; } /** - * Gets the class name of the ImageReader - * or ImageWriter associated with this service provider. + * Gets the class name of the ImageReader or ImageWriter associated with + * this service provider. * * @return the class name. */ @@ -288,26 +319,24 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider } /** - * Checks if the standard metadata format is supported - * by the getAsTree and setFromTree methods for the - * image metadata objects produced or consumed by this - * reader or writer. + * Checks if the standard metadata format is supported by the getAsTree and + * setFromTree methods for the image metadata objects produced or consumed + * by this reader or writer. * - * @return true, if standard image metadata format is - * supported, false otherwise. + * @return true, if standard image metadata format is supported, false + * otherwise. */ public boolean isStandardImageMetadataFormatSupported() { return supportsStandardImageMetadataFormat; } /** - * Checks if the standard metadata format is supported - * by the getAsTree and setFromTree methods for the - * stream metadata objects produced or consumed by this - * reader or writer. + * Checks if the standard metadata format is supported by the getAsTree and + * setFromTree methods for the stream metadata objects produced or consumed + * by this reader or writer. * - * @return true, if standard stream metadata format is - * supported, false otherwise. + * @return true, if standard stream metadata format is supported, false + * otherwise. */ public boolean isStandardStreamMetadataFormatSupported() { return supportsStandardStreamMetadataFormat; diff --git a/awt/javax/imageio/spi/ImageTranscoderSpi.java b/awt/javax/imageio/spi/ImageTranscoderSpi.java index 68c4024f5c..742af19082 100644 --- a/awt/javax/imageio/spi/ImageTranscoderSpi.java +++ b/awt/javax/imageio/spi/ImageTranscoderSpi.java @@ -18,16 +18,18 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import javax.imageio.ImageTranscoder; /** - * The ImageTranscoderSpi class is a service provider interface (SPI) - * for ImageTranscoders. + * The ImageTranscoderSpi class is a service provider interface (SPI) for + * ImageTranscoders. + * + * @since Android 1.0 */ -public abstract class ImageTranscoderSpi extends IIOServiceProvider - implements RegisterableService { +public abstract class ImageTranscoderSpi extends IIOServiceProvider implements RegisterableService { /** * Instantiates a new ImageTranscoderSpi. @@ -36,37 +38,37 @@ public abstract class ImageTranscoderSpi extends IIOServiceProvider } /** - * Instantiates a new ImageTranscoderSpi with the specified - * vendor name and version. + * Instantiates a new ImageTranscoderSpi with the specified vendor name and + * version. * - * @param vendorName the vendor name. - * @param version the version. + * @param vendorName + * the vendor name. + * @param version + * the version. */ public ImageTranscoderSpi(String vendorName, String version) { super(vendorName, version); } /** - * Gets the class name of an ImageReaderSpi that - * produces IIOMetadata objects that can be used as - * input to this transcoder. + * Gets the class name of an ImageReaderSpi that produces IIOMetadata + * objects that can be used as input to this transcoder. * * @return the class name of an ImageReaderSpi. */ public abstract String getReaderServiceProviderName(); /** - * Gets the class name of an ImageWriterSpi that - * produces IIOMetadata objects that can be used as - * input to this transcoder. + * Gets the class name of an ImageWriterSpi that produces IIOMetadata + * objects that can be used as input to this transcoder. * * @return the class name of an ImageWriterSpi. */ public abstract String getWriterServiceProviderName(); /** - * Creates an instance of the ImageTranscoder associated - * with this service provider. + * Creates an instance of the ImageTranscoder associated with this service + * provider. * * @return the ImageTranscoder instance. */ diff --git a/awt/javax/imageio/spi/ImageWriterSpi.java b/awt/javax/imageio/spi/ImageWriterSpi.java index 979ef77ce7..bf25455920 100644 --- a/awt/javax/imageio/spi/ImageWriterSpi.java +++ b/awt/javax/imageio/spi/ImageWriterSpi.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import javax.imageio.stream.ImageInputStream; @@ -27,18 +28,28 @@ import java.awt.image.RenderedImage; import java.io.IOException; /** - * The ImageWriterSpi abstract class is a service provider - * interface (SPI) for ImageWriters. + * The ImageWriterSpi abstract class is a service provider interface (SPI) for + * ImageWriters. + * + * @since Android 1.0 */ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { - /** The STANDARD_OUTPUT_TYPE contains ImageInputStream.class. */ - public static final Class[] STANDARD_OUTPUT_TYPE = new Class[] {ImageInputStream.class}; + /** + * The STANDARD_OUTPUT_TYPE contains ImageInputStream.class. + */ + public static final Class[] STANDARD_OUTPUT_TYPE = new Class[] { + ImageInputStream.class + }; - /** The output types. */ + /** + * The output types. + */ protected Class[] outputTypes; - - /** The reader spi names. */ + + /** + * The reader SPI names. + */ protected String[] readerSpiNames; /** @@ -51,50 +62,62 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { /** * Instantiates a new ImageWriterSpi with the specified parameters. * - * @param vendorName the vendor name. - * @param version the version. - * @param names the format names. - * @param suffixes the array of strings representing the file suffixes. - * @param MIMETypes the an array of strings representing MIME types. - * @param pluginClassName the plugin class name. - * @param outputTypes the output types. - * @param readerSpiNames the array of strings with class names of all - * associated ImageReaders. - * @param supportsStandardStreamMetadataFormat the value indicating - * if stream metadata can be described by standard metadata format. - * @param nativeStreamMetadataFormatName the native stream metadata - * format name, returned by getNativeStreamMetadataFormatName. - * @param nativeStreamMetadataFormatClassName the native stream - * metadata format class name, returned by getNativeStreamMetadataFormat. - * @param extraStreamMetadataFormatNames the extra stream metadata - * format names, returned by getExtraStreamMetadataFormatNames. - * @param extraStreamMetadataFormatClassNames the extra stream metadata - * format class names, returned by getStreamMetadataFormat. - * @param supportsStandardImageMetadataFormat the value indicating - * if image metadata can be described by standard metadata format. - * @param nativeImageMetadataFormatName the native image metadata - * format name, returned by getNativeImageMetadataFormatName. - * @param nativeImageMetadataFormatClassName the native image - * metadata format class name, returned by getNativeImageMetadataFormat. - * @param extraImageMetadataFormatNames the extra image metadata - * format names, returned by getExtraImageMetadataFormatNames. - * @param extraImageMetadataFormatClassNames the extra image metadata - * format class names, returned by getImageMetadataFormat. + * @param vendorName + * the vendor name. + * @param version + * the version. + * @param names + * the format names. + * @param suffixes + * the array of strings representing the file suffixes. + * @param MIMETypes + * the an array of strings representing MIME types. + * @param pluginClassName + * the plug-in class name. + * @param outputTypes + * the output types. + * @param readerSpiNames + * the array of strings with class names of all associated + * ImageReaders. + * @param supportsStandardStreamMetadataFormat + * the value indicating if stream metadata can be described by + * standard metadata format. + * @param nativeStreamMetadataFormatName + * the native stream metadata format name, returned by + * getNativeStreamMetadataFormatName. + * @param nativeStreamMetadataFormatClassName + * the native stream metadata format class name, returned by + * getNativeStreamMetadataFormat. + * @param extraStreamMetadataFormatNames + * the extra stream metadata format names, returned by + * getExtraStreamMetadataFormatNames. + * @param extraStreamMetadataFormatClassNames + * the extra stream metadata format class names, returned by + * getStreamMetadataFormat. + * @param supportsStandardImageMetadataFormat + * the value indicating if image metadata can be described by + * standard metadata format. + * @param nativeImageMetadataFormatName + * the native image metadata format name, returned by + * getNativeImageMetadataFormatName. + * @param nativeImageMetadataFormatClassName + * the native image metadata format class name, returned by + * getNativeImageMetadataFormat. + * @param extraImageMetadataFormatNames + * the extra image metadata format names, returned by + * getExtraImageMetadataFormatNames. + * @param extraImageMetadataFormatClassNames + * the extra image metadata format class names, returned by + * getImageMetadataFormat. */ - public ImageWriterSpi(String vendorName, String version, String[] names, - String[] suffixes, String[] MIMETypes, - String pluginClassName, - Class[] outputTypes, String[] readerSpiNames, - boolean supportsStandardStreamMetadataFormat, - String nativeStreamMetadataFormatName, - String nativeStreamMetadataFormatClassName, - String[] extraStreamMetadataFormatNames, - String[] extraStreamMetadataFormatClassNames, - boolean supportsStandardImageMetadataFormat, - String nativeImageMetadataFormatName, - String nativeImageMetadataFormatClassName, - String[] extraImageMetadataFormatNames, - String[] extraImageMetadataFormatClassNames) { + public ImageWriterSpi(String vendorName, String version, String[] names, String[] suffixes, + String[] MIMETypes, String pluginClassName, Class[] outputTypes, + String[] readerSpiNames, boolean supportsStandardStreamMetadataFormat, + String nativeStreamMetadataFormatName, String nativeStreamMetadataFormatClassName, + String[] extraStreamMetadataFormatNames, String[] extraStreamMetadataFormatClassNames, + boolean supportsStandardImageMetadataFormat, String nativeImageMetadataFormatName, + String nativeImageMetadataFormatClassName, String[] extraImageMetadataFormatNames, + String[] extraImageMetadataFormatClassNames) { super(vendorName, version, names, suffixes, MIMETypes, pluginClassName, supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName, nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames, @@ -111,8 +134,8 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { } /** - * Returns true if the format of the writer's output is lossless. - * The default implementation returns true. + * Returns true if the format of the writer's output is lossless. The + * default implementation returns true. * * @return true, if a format is lossless, false otherwise. */ @@ -121,8 +144,8 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { } /** - * Gets an array of Class objects whose types - * can be used as output for this writer. + * Gets an array of Class objects whose types can be used as output for this + * writer. * * @return the output types. */ @@ -131,77 +154,72 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { } /** - * Checks whether or not the ImageWriter implementation associated - * with this service provider can encode an image with - * the specified type. - * - * @param type the ImageTypeSpecifier. + * Checks whether or not the ImageWriter implementation associated with this + * service provider can encode an image with the specified type. * - * @return true, if an image with the specified type can be - * encoded, false otherwise. + * @param type + * the ImageTypeSpecifier. + * @return true, if an image with the specified type can be encoded, false + * otherwise. */ public abstract boolean canEncodeImage(ImageTypeSpecifier type); /** - * Checks whether or not the ImageWriter implementation associated - * with this service provider can encode the specified RenderedImage. + * Checks whether or not the ImageWriter implementation associated with this + * service provider can encode the specified RenderedImage. * - * @param im the RenderedImage. - * - * @return true, if RenderedImage can be encoded, - * false otherwise. + * @param im + * the RenderedImage. + * @return true, if RenderedImage can be encoded, false otherwise. */ public boolean canEncodeImage(RenderedImage im) { return canEncodeImage(ImageTypeSpecifier.createFromRenderedImage(im)); } /** - * Returns an instance of the ImageWriter implementation for - * this service provider. + * Returns an instance of the ImageWriter implementation for this service + * provider. * * @return the ImageWriter. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public ImageWriter createWriterInstance() throws IOException { return createWriterInstance(null); } /** - * Returns an instance of the ImageWriter implementation for - * this service provider. - * - * @param extension the a plugin specific extension object, or null. + * Returns an instance of the ImageWriter implementation for this service + * provider. * + * @param extension + * the a plug-in specific extension object, or null. * @return the ImageWriter. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ public abstract ImageWriter createWriterInstance(Object extension) throws IOException; /** - * Checks whether or not the specified ImageWriter object - * is an instance of the ImageWriter associated with this - * service provider or not. - * - * @param writer the ImageWriter. + * Checks whether or not the specified ImageWriter object is an instance of + * the ImageWriter associated with this service provider or not. * - * @return true, if the specified ImageWriter object - * is an instance of the ImageWriter associated with this - * service provider, false otherwise. + * @param writer + * the ImageWriter. + * @return true, if the specified ImageWriter object is an instance of the + * ImageWriter associated with this service provider, false + * otherwise. */ public boolean isOwnWriter(ImageWriter writer) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Gets an array of strings with names of the ImageReaderSpi - * classes that support the internal metadata representation - * used by the ImageWriter of this service provider, or null if - * there are no such ImageReaders. + * Gets an array of strings with names of the ImageReaderSpi classes that + * support the internal metadata representation used by the ImageWriter of + * this service provider, or null if there are no such ImageReaders. * - * @return an array of strings with names of the ImageWriterSpi - * classes. + * @return the array of strings with names of the ImageWriterSpi classes. */ public String[] getImageReaderSpiNames() { return readerSpiNames; diff --git a/awt/javax/imageio/spi/RegisterableService.java b/awt/javax/imageio/spi/RegisterableService.java index b50754ef6c..ae2f4d39f4 100644 --- a/awt/javax/imageio/spi/RegisterableService.java +++ b/awt/javax/imageio/spi/RegisterableService.java @@ -18,33 +18,37 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; /** - * The RegisterableService interface provides service provider - * objects that can be registered by a ServiceRegistry, and - * notifications that registration and deregistration have been - * performed. + * The RegisterableService interface provides service provider objects that can + * be registered by a ServiceRegistry, and notifications that registration and + * deregistration have been performed. + * + * @since Android 1.0 */ public interface RegisterableService { - + /** - * This method is called when the object which implements this - * interface is registered to the specified category of the - * specified registry. + * This method is called when the object which implements this interface is + * registered to the specified category of the specified registry. * - * @param registry the ServiceRegistry to be registered. - * @param category the class representing a category. + * @param registry + * the ServiceRegistry to be registered. + * @param category + * the class representing a category. */ void onRegistration(ServiceRegistry registry, Class category); - + /** - * This method is called when the object which implements this - * interface is deregistered to the specified category of the - * specified registry. + * This method is called when the object which implements this interface is + * deregistered to the specified category of the specified registry. * - * @param registry the ServiceRegistry to be registered. - * @param category the class representing a category. + * @param registry + * the ServiceRegistry to be registered. + * @param category + * the class representing a category. */ void onDeregistration(ServiceRegistry registry, Class category); } diff --git a/awt/javax/imageio/spi/ServiceRegistry.java b/awt/javax/imageio/spi/ServiceRegistry.java index 1a18b021e4..79b02a3664 100644 --- a/awt/javax/imageio/spi/ServiceRegistry.java +++ b/awt/javax/imageio/spi/ServiceRegistry.java @@ -18,48 +18,53 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.spi; import java.util.*; import java.util.Map.Entry; /** - * The ServiceRegistry class provides ability to register, - * deregister, look up and obtain service provider instances (SPIs). - * A service means a set of interfaces and classes, and a service - * provider is an implementation of a service. Service providers can - * be associated with one or more categories. Each category is defined - * by a class or interface. Only a single instance of a each class is - * allowed to be registered as a category. + * The ServiceRegistry class provides ability to register, deregister, look up + * and obtain service provider instances (SPIs). A service means a set of + * interfaces and classes, and a service provider is an implementation of a + * service. Service providers can be associated with one or more categories. + * Each category is defined by a class or interface. Only a single instance of a + * each class is allowed to be registered as a category. + * + * @since Android 1.0 */ public class ServiceRegistry { - /** The categories. */ + /** + * The categories. + */ CategoriesMap categories = new CategoriesMap(this); /** * Instantiates a new ServiceRegistry with the specified categories. * - * @param categoriesIterator an Iterator of Class objects - * for defining of categories. + * @param categoriesIterator + * an Iterator of Class objects for defining of categories. */ public ServiceRegistry(Iterator> categoriesIterator) { if (null == categoriesIterator) { throw new IllegalArgumentException("categories iterator should not be NULL"); } - while(categoriesIterator.hasNext()) { - Class c = categoriesIterator.next(); + while (categoriesIterator.hasNext()) { + Class c = categoriesIterator.next(); categories.addCategory(c); } } /** - * Looks up and instantiates the available providers of this service using + * Looks up and instantiates the available providers of this service using * the specified class loader. * - * @param providerClass the Class object of the provider to be looked up. - * @param loader the class loader to be used. - * + * @param providerClass + * the Class object of the provider to be looked up. + * @param loader + * the class loader to be used. * @return the iterator of providers objects for this service. */ public static Iterator lookupProviders(Class providerClass, ClassLoader loader) { @@ -67,11 +72,11 @@ public class ServiceRegistry { } /** - * Looks up and instantiates the available providers of this service using + * Looks up and instantiates the available providers of this service using * the context class loader. * - * @param providerClass the Class object of the provider to be looked up. - * + * @param providerClass + * the Class object of the provider to be looked up. * @return the iterator of providers objects for this service. */ public static Iterator lookupProviders(Class providerClass) { @@ -79,14 +84,15 @@ public class ServiceRegistry { } /** - * Registers the specified service provider object in the - * specified categories. - * - * @param provider the specified provider to be registered. - * @param category the category. + * Registers the specified service provider object in the specified + * categories. * - * @return true if no provider of the same class is registered - * in this category, false otherwise. + * @param provider + * the specified provider to be registered. + * @param category + * the category. + * @return true, if no provider of the same class is registered in this + * category, false otherwise. */ public boolean registerServiceProvider(T provider, Class category) { return categories.addProvider(provider, category); @@ -95,7 +101,8 @@ public class ServiceRegistry { /** * Registers a list of service providers. * - * @param providers the list of service providers. + * @param providers + * the list of service providers. */ public void registerServiceProviders(Iterator providers) { for (Iterator iterator = providers; iterator.hasNext();) { @@ -104,67 +111,70 @@ public class ServiceRegistry { } /** - * Registers the specified service provider object in all - * categories. + * Registers the specified service provider object in all categories. * - * @param provider the service provider. + * @param provider + * the service provider. */ public void registerServiceProvider(Object provider) { categories.addProvider(provider, null); } /** - * Deregisters the specifies service provider from the - * specified category. + * Deregisters the specifies service provider from the specified category. * - * @param provider the service provider to be deregistered. - * @param category the specified category. - * - * @return true if the provider was already registered - * in the specified category, false otherwise. + * @param provider + * the service provider to be deregistered. + * @param category + * the specified category. + * @return true, if the provider was already registered in the specified + * category, false otherwise. */ public boolean deregisterServiceProvider(T provider, Class category) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Deregisters the specified service provider from all - * categories. + * Deregisters the specified service provider from all categories. * - * @param provider the specified service provider. + * @param provider + * the specified service provider. */ public void deregisterServiceProvider(Object provider) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Gets an Iterator of registered service providers - * in the specified category which satisfy the specified Filter. - * The useOrdering parameter indicates whether the iterator will - * return all of the server provider objects in a set order. - * - * @param category the specified category. - * @param filter the specified filter. - * @param useOrdering the flag indicating that providers are ordered - * in the returned Iterator. + * Gets an Iterator of registered service providers in the specified + * category which satisfy the specified Filter. The useOrdering parameter + * indicates whether the iterator will return all of the server provider + * objects in a set order. * + * @param category + * the specified category. + * @param filter + * the specified filter. + * @param useOrdering + * the flag indicating that providers are ordered in the returned + * Iterator. * @return the iterator of registered service providers. */ @SuppressWarnings("unchecked") public Iterator getServiceProviders(Class category, Filter filter, boolean useOrdering) { - return new FilteredIterator(filter, (Iterator)categories.getProviders(category, useOrdering)); + return new FilteredIterator(filter, (Iterator)categories.getProviders(category, + useOrdering)); } /** - * Gets an Iterator of all registered service providers - * in the specified category. The useOrdering parameter - * indicates whether the iterator will return all of the server - * provider objects in a set order. - * - * @param category the specified category. - * @param useOrdering the flag indicating that providers are ordered - * in the returned Iterator. + * Gets an Iterator of all registered service providers in the specified + * category. The useOrdering parameter indicates whether the iterator will + * return all of the server provider objects in a set order. * + * @param category + * the specified category. + * @param useOrdering + * the flag indicating that providers are ordered in the returned + * Iterator. * @return the Iterator of service providers. */ @SuppressWarnings("unchecked") @@ -173,11 +183,11 @@ public class ServiceRegistry { } /** - * Gets the registered service provider object that has the - * specified class type. - * - * @param providerClass the specified provider class. + * Gets the registered service provider object that has the specified class + * type. * + * @param providerClass + * the specified provider class. * @return the service provider object. */ public T getServiceProviderByClass(Class providerClass) { @@ -185,28 +195,32 @@ public class ServiceRegistry { } /** - * Sets an ordering between two service provider objects - * within the specified category. - * - * @param category the specified category. - * @param firstProvider the first provider. - * @param secondProvider the second provider. + * Sets an ordering between two service provider objects within the + * specified category. * - * @return true if a previously unset order was set. + * @param category + * the specified category. + * @param firstProvider + * the first provider. + * @param secondProvider + * the second provider. + * @return true, if a previously unset order was set. */ public boolean setOrdering(Class category, T firstProvider, T secondProvider) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Unsets an ordering between two service provider objects - * within the specified category. - * - * @param category the specified category. - * @param firstProvider the first provider. - * @param secondProvider the second provider. + * Unsets an ordering between two service provider objects within the + * specified category. * - * @return true if a previously unset order was removed. + * @param category + * the specified category. + * @param firstProvider + * the first provider. + * @param secondProvider + * the second provider. + * @return true, if a previously unset order was removed. */ public boolean unsetOrdering(Class category, T firstProvider, T secondProvider) { throw new UnsupportedOperationException("Not supported yet"); @@ -215,7 +229,8 @@ public class ServiceRegistry { /** * Deregisters all providers from the specified category. * - * @param category the specified category. + * @param category + * the specified category. */ public void deregisterAll(Class category) { throw new UnsupportedOperationException("Not supported yet"); @@ -229,32 +244,31 @@ public class ServiceRegistry { } /** - * Finalizes this object. + * Finalizes this object. * - * @throws Throwable throws if an error occurs during - * finalization. + * @throws Throwable + * if an error occurs during finalization. */ @Override public void finalize() throws Throwable { - //TODO uncomment when deregisterAll is implemented - //deregisterAll(); + // TODO uncomment when deregisterAll is implemented + // deregisterAll(); } /** * Checks whether the specified provider has been already registered. * - * @param provider the provider to be checked. - * + * @param provider + * the provider to be checked. * @return true, if the specified provider has been already registered, - * false otherwise. + * false otherwise. */ public boolean contains(Object provider) { throw new UnsupportedOperationException("Not supported yet"); } /** - * Gets an iterator of Class objects representing the current - * categories. + * Gets an iterator of Class objects representing the current categories. * * @return the Iterator of Class objects. */ @@ -263,20 +277,22 @@ public class ServiceRegistry { } /** - * The ServiceRegistry.Filter interface is used by - * ServiceRegistry.getServiceProviders to filter providers according - * to the specified criterion. + * The ServiceRegistry.Filter interface is used by + * ServiceRegistry.getServiceProviders to filter providers according to the + * specified criterion. + * + * @since Android 1.0 */ public static interface Filter { - + /** - * Returns true if the specified provider satisfies the - * criterion of this Filter. + * Returns true if the specified provider satisfies the criterion of + * this Filter. * - * @param provider the provider. - * - * @return true if the specified provider satisfies the - * criterion of this Filter, false otherwise. + * @param provider + * the provider. + * @return true, if the specified provider satisfies the criterion of + * this Filter, false otherwise. */ boolean filter(Object provider); } @@ -285,30 +301,36 @@ public class ServiceRegistry { * The Class CategoriesMap. */ private static class CategoriesMap { - - /** The categories. */ + + /** + * The categories. + */ Map, ProvidersMap> categories = new HashMap, ProvidersMap>(); - /** The registry. */ + /** + * The registry. + */ ServiceRegistry registry; /** * Instantiates a new categories map. * - * @param registry the registry + * @param registry + * the registry. */ public CategoriesMap(ServiceRegistry registry) { this.registry = registry; } - //-- TODO: useOrdering + // -- TODO: useOrdering /** * Gets the providers. * - * @param category the category - * @param useOrdering the use ordering - * - * @return the providers + * @param category + * the category. + * @param useOrdering + * the use ordering. + * @return the providers. */ Iterator getProviders(Class category, boolean useOrdering) { ProvidersMap providers = categories.get(category); @@ -321,7 +343,7 @@ public class ServiceRegistry { /** * List. * - * @return the iterator< class> + * @return the iterator< class>. */ Iterator> list() { return categories.keySet().iterator(); @@ -330,7 +352,8 @@ public class ServiceRegistry { /** * Adds the category. * - * @param category the category + * @param category + * the category. */ void addCategory(Class category) { categories.put(category, new ProvidersMap()); @@ -341,10 +364,11 @@ public class ServiceRegistry { * null then the provider will be added to all categories * which the provider is assignable from. * - * @param provider provider to add - * @param category category to add provider to - * - * @return if there were such provider in some category + * @param provider + * provider to add. + * @param category + * category to add provider to. + * @return true, if there were such provider in some category. */ boolean addProvider(Object provider, Class category) { if (provider == null) { @@ -355,11 +379,11 @@ public class ServiceRegistry { if (category == null) { rt = findAndAdd(provider); } else { - rt = addToNamed(provider, category); + rt = addToNamed(provider, category); } if (provider instanceof RegisterableService) { - ((RegisterableService) provider).onRegistration(registry, category); + ((RegisterableService)provider).onRegistration(registry, category); } return rt; @@ -368,10 +392,11 @@ public class ServiceRegistry { /** * Adds the to named. * - * @param provider the provider - * @param category the category - * - * @return true, if successful + * @param provider + * the provider. + * @param category + * the category. + * @return true, if successful. */ private boolean addToNamed(Object provider, Class category) { Object obj = categories.get(category); @@ -380,15 +405,15 @@ public class ServiceRegistry { throw new IllegalArgumentException("Unknown category: " + category); } - return ((ProvidersMap) obj).addProvider(provider); + return ((ProvidersMap)obj).addProvider(provider); } /** * Find and add. * - * @param provider the provider - * - * @return true, if successful + * @param provider + * the provider. + * @return true, if successful. */ private boolean findAndAdd(Object provider) { boolean rt = false; @@ -405,17 +430,19 @@ public class ServiceRegistry { * The Class ProvidersMap. */ private static class ProvidersMap { - //-- TODO: providers ordering support + // -- TODO: providers ordering support - /** The providers. */ + /** + * The providers. + */ Map, Object> providers = new HashMap, Object>(); /** * Adds the provider. * - * @param provider the provider - * - * @return true, if successful + * @param provider + * the provider. + * @return true, if successful. */ boolean addProvider(Object provider) { return providers.put(provider.getClass(), provider) != null; @@ -424,19 +451,19 @@ public class ServiceRegistry { /** * Gets the provider classes. * - * @return the provider classes + * @return the provider classes. */ Iterator> getProviderClasses() { return providers.keySet().iterator(); } - //-- TODO ordering + // -- TODO ordering /** * Gets the providers. * - * @param userOrdering the user ordering - * - * @return the providers + * @param userOrdering + * the user ordering. + * @return the providers. */ Iterator getProviders(boolean userOrdering) { return providers.values().iterator(); @@ -448,20 +475,28 @@ public class ServiceRegistry { */ private static class FilteredIterator implements Iterator { - /** The filter. */ + /** + * The filter. + */ private Filter filter; - - /** The backend. */ + + /** + * The backend. + */ private Iterator backend; - - /** The next obj. */ + + /** + * The next obj. + */ private E nextObj; /** * Instantiates a new filtered iterator. * - * @param filter the filter - * @param backend the backend + * @param filter + * the filter. + * @param backend + * the backend. */ public FilteredIterator(Filter filter, Iterator backend) { this.filter = filter; @@ -472,7 +507,7 @@ public class ServiceRegistry { /** * Next. * - * @return the e + * @return the e. */ public E next() { if (nextObj == null) { @@ -486,7 +521,7 @@ public class ServiceRegistry { /** * Checks for next. * - * @return true, if successful + * @return true, if successful. */ public boolean hasNext() { return nextObj != null; @@ -500,7 +535,8 @@ public class ServiceRegistry { } /** - * Sets nextObj to a next provider matching the criterion given by the filter. + * Sets nextObj to a next provider matching the criterion given by the + * filter. */ private void findNext() { nextObj = null; diff --git a/awt/javax/imageio/spi/package.html b/awt/javax/imageio/spi/package.html new file mode 100644 index 0000000000..18ceff4860 --- /dev/null +++ b/awt/javax/imageio/spi/package.html @@ -0,0 +1,8 @@ + + +

    + This package provides several Service Provider Interface (SPI) classes for readers, writers, transcoders and streams to handle images. +

    + @since Android 1.0 + + diff --git a/awt/javax/imageio/stream/FileCacheImageInputStream.java b/awt/javax/imageio/stream/FileCacheImageInputStream.java index 47bc1894cd..710ac6660e 100644 --- a/awt/javax/imageio/stream/FileCacheImageInputStream.java +++ b/awt/javax/imageio/stream/FileCacheImageInputStream.java @@ -15,38 +15,43 @@ * limitations under the License. */ - package javax.imageio.stream; import java.io.*; /** - * The FileCacheImageInputStream class is an implementation of - * ImageInputStream which reads from its InputStream - * and uses a temporary file as a cache. + * The FileCacheImageInputStream class is an implementation of ImageInputStream + * which reads from its InputStream and uses a temporary file as a cache. + * + * @since Android 1.0 */ public class FileCacheImageInputStream extends ImageInputStreamImpl { - - /** The is. */ + + /** + * The is. + */ private InputStream is; - - /** The file. */ + + /** + * The file. + */ private File file; - - /** The raf. */ - private RandomAccessFile raf; + /** + * The raf. + */ + private RandomAccessFile raf; /** - * Instantiates a new FileCacheImageInputStream from - * the specified InputStream and using the specified - * File as its cache directory. - * - * @param stream the InputStream for reading. - * @param cacheDir the cache directory where the chache file - * will be created. + * Instantiates a new FileCacheImageInputStream from the specified + * InputStream and using the specified File as its cache directory. * - * @throws IOException Signals that an I/O exception has occurred. + * @param stream + * the InputStream for reading. + * @param cacheDir + * the cache directory where the cache file will be created. + * @throws IOException + * if an I/O exception has occurred. */ public FileCacheImageInputStream(InputStream stream, File cacheDir) throws IOException { if (stream == null) { @@ -55,7 +60,8 @@ public class FileCacheImageInputStream extends ImageInputStreamImpl { is = stream; if (cacheDir == null || cacheDir.isDirectory()) { - file = File.createTempFile(FileCacheImageOutputStream.IIO_TEMP_FILE_PREFIX, null, cacheDir); + file = File.createTempFile(FileCacheImageOutputStream.IIO_TEMP_FILE_PREFIX, null, + cacheDir); file.deleteOnExit(); } else { throw new IllegalArgumentException("Not a directory!"); diff --git a/awt/javax/imageio/stream/FileCacheImageOutputStream.java b/awt/javax/imageio/stream/FileCacheImageOutputStream.java index ae485854b3..135afab373 100644 --- a/awt/javax/imageio/stream/FileCacheImageOutputStream.java +++ b/awt/javax/imageio/stream/FileCacheImageOutputStream.java @@ -15,7 +15,6 @@ * limitations under the License. */ - package javax.imageio.stream; import java.io.IOException; @@ -24,35 +23,48 @@ import java.io.OutputStream; import java.io.RandomAccessFile; /** - * The FileCacheImageOutputStream class is an implementation of - * ImageOutputStream that writes to its OutputStream - * using a temporary file as a cache. + * The FileCacheImageOutputStream class is an implementation of + * ImageOutputStream that writes to its OutputStream using a temporary file as a + * cache. + * + * @since Android 1.0 */ public class FileCacheImageOutputStream extends ImageOutputStreamImpl { - - /** The Constant IIO_TEMP_FILE_PREFIX. */ + + /** + * The Constant IIO_TEMP_FILE_PREFIX. + */ static final String IIO_TEMP_FILE_PREFIX = "iioCache"; - - /** The Constant MAX_BUFFER_LEN. */ + + /** + * The Constant MAX_BUFFER_LEN. + */ static final int MAX_BUFFER_LEN = 1048575; // 1 MB - is it not too much? - /** The os. */ + /** + * The os. + */ private OutputStream os; - - /** The file. */ + + /** + * The file. + */ private File file; - - /** The raf. */ + + /** + * The raf. + */ private RandomAccessFile raf; /** * Instantiates a FileCacheImageOutputStream. * - * @param stream the OutputStream for writing. - * @param cacheDir the cache directory where the chache file - * will be created. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param stream + * the OutputStream for writing. + * @param cacheDir + * the cache directory where the cache file will be created. + * @throws IOException + * if an I/O exception has occurred. */ public FileCacheImageOutputStream(OutputStream stream, File cacheDir) throws IOException { if (stream == null) { @@ -96,7 +108,7 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl { @Override public void write(int b) throws IOException { flushBits(); // See the flushBits method description - + raf.write(b); streamPos++; } @@ -148,7 +160,7 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl { } else { byte buffer[] = new byte[MAX_BUFFER_LEN]; while (bytesToRead > 0) { - int count = (int) Math.min(MAX_BUFFER_LEN, bytesToRead); + int count = (int)Math.min(MAX_BUFFER_LEN, bytesToRead); raf.readFully(buffer, 0, count); os.write(buffer, 0, count); bytesToRead -= count; @@ -169,7 +181,7 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl { } raf.seek(pos); - streamPos = raf.getFilePointer(); + streamPos = raf.getFilePointer(); bitOffset = 0; } @@ -177,7 +189,7 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl { public long length() { try { return raf.length(); - } catch(IOException e) { + } catch (IOException e) { return -1L; } } diff --git a/awt/javax/imageio/stream/FileImageInputStream.java b/awt/javax/imageio/stream/FileImageInputStream.java index 6680ae0a97..b9b6002b32 100644 --- a/awt/javax/imageio/stream/FileImageInputStream.java +++ b/awt/javax/imageio/stream/FileImageInputStream.java @@ -15,7 +15,6 @@ * limitations under the License. */ - package javax.imageio.stream; import java.io.IOException; @@ -24,24 +23,31 @@ import java.io.File; import java.io.FileNotFoundException; /** - * The FileImageInputStream class implements ImageInputStream - * and obtains its input data from a File or RandomAccessFile. + * The FileImageInputStream class implements ImageInputStream and obtains its + * input data from a File or RandomAccessFile. + * + * @since Android 1.0 */ public class FileImageInputStream extends ImageInputStreamImpl { - - /** The raf. */ + + /** + * The raf. + */ RandomAccessFile raf; /** * Instantiates a new FileImageInputStream from the specified File. * - * @param f the File of input data. - * - * @throws FileNotFoundException if the specified file - * doesn't exist. - * @throws IOException Signals that an I/O exception has occurred. + * @param f + * the File of input data. + * @throws FileNotFoundException + * if the specified file doesn't exist. + * @throws IOException + * if an I/O exception has occurred. */ - @SuppressWarnings({"DuplicateThrows"}) + @SuppressWarnings( { + "DuplicateThrows" + }) public FileImageInputStream(File f) throws FileNotFoundException, IOException { if (f == null) { throw new IllegalArgumentException("f == null!"); @@ -51,10 +57,11 @@ public class FileImageInputStream extends ImageInputStreamImpl { } /** - * Instantiates a new FileImageInputStream from the specified + * Instantiates a new FileImageInputStream from the specified * RandomAccessFile. * - * @param raf the RandomAccessFile of input data. + * @param raf + * the RandomAccessFile of input data. */ public FileImageInputStream(RandomAccessFile raf) { if (raf == null) { @@ -91,7 +98,7 @@ public class FileImageInputStream extends ImageInputStreamImpl { public long length() { try { return raf.length(); - } catch(IOException e) { + } catch (IOException e) { return -1L; } } diff --git a/awt/javax/imageio/stream/FileImageOutputStream.java b/awt/javax/imageio/stream/FileImageOutputStream.java index eaafe14e3d..2730ba6a97 100644 --- a/awt/javax/imageio/stream/FileImageOutputStream.java +++ b/awt/javax/imageio/stream/FileImageOutputStream.java @@ -18,39 +18,44 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.stream; import java.io.*; /** - * The FileImageOutputStream class implements ImageOutputStream - * and writes the output data to a File or RandomAccessFile. + * The FileImageOutputStream class implements ImageOutputStream and writes the + * output data to a File or RandomAccessFile. + * + * @since Android 1.0 */ public class FileImageOutputStream extends ImageOutputStreamImpl { - /** The file. */ + /** + * The file. + */ RandomAccessFile file; /** - * Instantiates a new FileImageOutputStream with the specified - * File. - * - * @param f the output File. + * Instantiates a new FileImageOutputStream with the specified File. * - * @throws FileNotFoundException if the file not found. - * @throws IOException Signals that an I/O exception has occurred. + * @param f + * the output File. + * @throws FileNotFoundException + * if the file not found. + * @throws IOException + * if an I/O exception has occurred. */ public FileImageOutputStream(File f) throws FileNotFoundException, IOException { - this(f != null - ? new RandomAccessFile(f, "rw") - : null); + this(f != null ? new RandomAccessFile(f, "rw") : null); } /** * Instantiates a new FileImageOutputStream with the specified * RandomAccessFile. * - * @param raf the output RandomAccessFile. + * @param raf + * the output RandomAccessFile. */ public FileImageOutputStream(RandomAccessFile raf) { if (raf == null) { @@ -102,14 +107,14 @@ public class FileImageOutputStream extends ImageOutputStreamImpl { try { checkClosed(); return file.length(); - } catch(IOException e) { + } catch (IOException e) { return super.length(); // -1L } } @Override public void seek(long pos) throws IOException { - //-- checkClosed() is performed in super.seek() + // -- checkClosed() is performed in super.seek() super.seek(pos); file.seek(pos); streamPos = file.getFilePointer(); diff --git a/awt/javax/imageio/stream/IIOByteBuffer.java b/awt/javax/imageio/stream/IIOByteBuffer.java index 961a7b3ec7..867d80843d 100644 --- a/awt/javax/imageio/stream/IIOByteBuffer.java +++ b/awt/javax/imageio/stream/IIOByteBuffer.java @@ -18,35 +18,46 @@ * @author Sergey I. Salishev * @version $Revision: 1.2 $ */ + package javax.imageio.stream; -/** -* @author Sergey I. Salishev -* @version $Revision: 1.2 $ -*/ +// +// @author Sergey I. Salishev +// @version $Revision: 1.2 $ +// /** - * The IIOByteBuffer class represents a byte array with offset and - * length that is used by ImageInputStream for obtaining a sequence - * of bytes. + * The IIOByteBuffer class represents a byte array with offset and length that + * is used by ImageInputStream for obtaining a sequence of bytes. + * + * @since Android 1.0 */ public class IIOByteBuffer { - - /** The data. */ + + /** + * The data. + */ private byte[] data; - - /** The offset. */ + + /** + * The offset. + */ private int offset; - - /** The length. */ + + /** + * The length. + */ private int length; /** * Instantiates a new IIOByteBuffer. * - * @param data the byte array. - * @param offset the offset in the array. - * @param length the length of array. + * @param data + * the byte array. + * @param offset + * the offset in the array. + * @param length + * the length of array. */ public IIOByteBuffer(byte[] data, int offset, int length) { this.data = data; @@ -84,7 +95,8 @@ public class IIOByteBuffer { /** * Sets the new data array to this IIOByteBuffer object. * - * @param data the new data array. + * @param data + * the new data array. */ public void setData(byte[] data) { this.data = data; @@ -93,7 +105,8 @@ public class IIOByteBuffer { /** * Sets the length of data which will be used. * - * @param length the new length. + * @param length + * the new length. */ public void setLength(int length) { this.length = length; @@ -102,10 +115,10 @@ public class IIOByteBuffer { /** * Sets the offset in the data array of this IIOByteBuffer. * - * @param offset the new offset. + * @param offset + * the new offset. */ public void setOffset(int offset) { this.offset = offset; } } - diff --git a/awt/javax/imageio/stream/ImageInputStream.java b/awt/javax/imageio/stream/ImageInputStream.java index 771e9ff96c..3dec5d2966 100644 --- a/awt/javax/imageio/stream/ImageInputStream.java +++ b/awt/javax/imageio/stream/ImageInputStream.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.2 $ */ + package javax.imageio.stream; import java.io.DataInput; @@ -25,21 +26,24 @@ import java.io.IOException; import java.nio.ByteOrder; /** - * The ImageInputStream represents input stream interface that is - * used by ImageReaders. + * The ImageInputStream represents input stream interface that is used by + * ImageReaders. + * + * @since Android 1.0 */ public interface ImageInputStream extends DataInput { /** - * Sets the specified byte order for reading of data values - * from this stream. + * Sets the specified byte order for reading of data values from this + * stream. * - * @param byteOrder the byte order. + * @param byteOrder + * the byte order. */ void setByteOrder(ByteOrder byteOrder); /** - * Gets the byte order. + * Gets the byte order. * * @return the byte order. */ @@ -48,158 +52,151 @@ public interface ImageInputStream extends DataInput { /** * Reads a byte from the stream. * - * @return the byte of the stream, or -1 for EOF indicating. - * - * @throws IOException Signals that an I/O exception has occurred. + * @return the byte of the stream, or -1 for EOF indicating. + * @throws IOException + * if an I/O exception has occurred. */ int read() throws IOException; /** - * Reads number of bytes which is equal to the specified array's length - * and stores a result to this array. - * - * @param b the byte array. + * Reads number of bytes which is equal to the specified array's length and + * stores a result to this array. * + * @param b + * the byte array. * @return the number of read bytes, or -1 indicated EOF. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ int read(byte[] b) throws IOException; /** - * Reads the number of bytes specified by len parameter from - * the stream and stores a result to the specified array - * with the specified offset. - * - * @param b the byte array. - * @param off the offset. - * @param len the number of bytes to be read. + * Reads the number of bytes specified by len parameter from the stream and + * stores a result to the specified array with the specified offset. * + * @param b + * the byte array. + * @param off + * the offset. + * @param len + * the number of bytes to be read. * @return the number of read bytes, or -1 indicated EOF. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ int read(byte[] b, int off, int len) throws IOException; /** - * Reads the number of bytes specified by len parameter - * from the stream, and modifies the specified IIOByteBuffer - * with the byte array, offset, and length. - * - * @param buf the IIOByteBuffer. - * @param len the number of bytes to be read. + * Reads the number of bytes specified by len parameter from the stream, and + * modifies the specified IIOByteBuffer with the byte array, offset, and + * length. * - * @throws IOException Signals that an I/O exception has occurred. + * @param buf + * the IIOByteBuffer. + * @param len + * the number of bytes to be read. + * @throws IOException + * if an I/O exception has occurred. */ void readBytes(IIOByteBuffer buf, int len) throws IOException; /** - * Reads a byte from the stream and returns a boolean true value - * if it is non zero, false if it is zero. - * - * @return a boolean value for read byte. + * Reads a byte from the stream and returns a boolean true value if it is + * non zero, false if it is zero. * - * @throws IOException Signals that an I/O exception has occurred. + * @return the boolean value for read byte. + * @throws IOException + * if an I/O exception has occurred. */ boolean readBoolean() throws IOException; /** - * Reads a byte from the stream and returns its value - * as signed byte. + * Reads a byte from the stream and returns its value as signed byte. * - * @return a signed byte value for read byte. - * - * @throws IOException Signals that an I/O exception has occurred. + * @return the signed byte value for read byte. + * @throws IOException + * if an I/O exception has occurred. */ byte readByte() throws IOException; /** - * Reads a byte from the stream and returns its value - * as int. - * - * @return a unsigned byte value for read byte as int. + * Reads a byte from the stream and returns its value as an integer. * - * @throws IOException Signals that an I/O exception has occurred. + * @return the unsigned byte value for read byte as an integer. + * @throws IOException + * if an I/O exception has occurred. */ int readUnsignedByte() throws IOException; /** - * Reads 2 bytes from the stream, and returns the result - * as a short. + * Reads 2 bytes from the stream, and returns the result as a short. * * @return the signed short value from the stream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ short readShort() throws IOException; /** - * Reads 2 bytes from the stream and returns its value - * as an unsigned short. - * - * @return a unsigned short value coded in an int. + * Reads 2 bytes from the stream and returns its value as an unsigned short. * - * @throws IOException Signals that an I/O exception has occurred. + * @return a unsigned short value coded in an integer. + * @throws IOException + * if an I/O exception has occurred. */ int readUnsignedShort() throws IOException; /** - * Reads 2 bytes from the stream and returns their - * unsigned char value. + * Reads 2 bytes from the stream and returns their unsigned char value. * * @return the unsigned char value. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ char readChar() throws IOException; /** - * Reads 4 bytes from the stream, and returns the result - * as an int. + * Reads 4 bytes from the stream, and returns the result as an integer. * - * @return the signed int value from the stream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @return the signed integer value from the stream. + * @throws IOException + * if an I/O exception has occurred. */ int readInt() throws IOException; /** - * Reads 4 bytes from the stream and returns its value - * as long. - * - * @return a unsigned int value as long. + * Reads 4 bytes from the stream and returns its value as long. * - * @throws IOException Signals that an I/O exception has occurred. + * @return the unsigned integer value as long. + * @throws IOException + * if an I/O exception has occurred. */ long readUnsignedInt() throws IOException; /** - * Reads 8 bytes from the stream, and returns the result - * as a long. + * Reads 8 bytes from the stream, and returns the result as a long. * * @return the long value from the stream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ long readLong() throws IOException; /** - * Reads 4 bytes from the stream, and returns the result - * as a float. + * Reads 4 bytes from the stream, and returns the result as a float. * * @return the float value from the stream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ float readFloat() throws IOException; /** - * Reads 8 bytes from the stream, and returns the result - * as a double. + * Reads 8 bytes from the stream, and returns the result as a double. * * @return the double value from the stream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ double readDouble() throws IOException; @@ -207,120 +204,134 @@ public interface ImageInputStream extends DataInput { * Reads a line from the stream. * * @return the string contained the line from the stream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ String readLine() throws IOException; /** - * Reads bytes from the stream in a string that has been encoded - * in a modified UTF-8 format. + * Reads bytes from the stream in a string that has been encoded in a + * modified UTF-8 format. * * @return the string read from stream and modified UTF-8 format. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ String readUTF() throws IOException; /** - * Reads the specified number of bytes from the stream, - * and stores the result into the specified array starting at - * the specified index offset. + * Reads the specified number of bytes from the stream, and stores the + * result into the specified array starting at the specified index offset. * - * @param b the byte array. - * @param off the offset. - * @param len the number of bytes to be read. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param b + * the byte array. + * @param off + * the offset. + * @param len + * the number of bytes to be read. + * @throws IOException + * if an I/O exception has occurred. */ void readFully(byte[] b, int off, int len) throws IOException; /** - * Reads number of bytes from the stream which is equal to - * the specified array's length, and stores them into - * this array. - * - * @param b the byte array. + * Reads number of bytes from the stream which is equal to the specified + * array's length, and stores them into this array. * - * @throws IOException Signals that an I/O exception has occurred. + * @param b + * the byte array. + * @throws IOException + * if an I/O exception has occurred. */ void readFully(byte[] b) throws IOException; /** - * Reads the specified number of shorts from the stream, - * and stores the result into the specified array starting at - * the specified index offset. - * - * @param s the short array. - * @param off the offset. - * @param len the number of shorts to be read. + * Reads the specified number of shorts from the stream, and stores the + * result into the specified array starting at the specified index offset. * - * @throws IOException Signals that an I/O exception has occurred. + * @param s + * the short array. + * @param off + * the offset. + * @param len + * the number of shorts to be read. + * @throws IOException + * if an I/O exception has occurred. */ void readFully(short[] s, int off, int len) throws IOException; /** - * Reads the specified number of chars from the stream, - * and stores the result into the specified array starting at - * the specified index offset. + * Reads the specified number of chars from the stream, and stores the + * result into the specified array starting at the specified index offset. * - * @param c the char array. - * @param off the offset. - * @param len the number of chars to be read. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param c + * the char array. + * @param off + * the offset. + * @param len + * the number of chars to be read. + * @throws IOException + * if an I/O exception has occurred. */ void readFully(char[] c, int off, int len) throws IOException; /** - * Reads the specified number of ints from the stream, - * and stores the result into the specified array starting at - * the specified index offset. - * - * @param i the int array. - * @param off the offset. - * @param len the number of ints to be read. + * Reads the specified number of integer from the stream, and stores the + * result into the specified array starting at the specified index offset. * - * @throws IOException Signals that an I/O exception has occurred. + * @param i + * the integer array. + * @param off + * the offset. + * @param len + * the number of integer to be read. + * @throws IOException + * if an I/O exception has occurred. */ void readFully(int[] i, int off, int len) throws IOException; /** - * Reads the specified number of longs from the stream, - * and stores the result into the specified array starting at - * the specified index offset. + * Reads the specified number of longs from the stream, and stores the + * result into the specified array starting at the specified index offset. * - * @param l the long array. - * @param off the offset. - * @param len the number of longs to be read. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param l + * the long array. + * @param off + * the offset. + * @param len + * the number of longs to be read. + * @throws IOException + * if an I/O exception has occurred. */ void readFully(long[] l, int off, int len) throws IOException; /** - * Reads the specified number of floats from the stream, - * and stores the result into the specified array starting at - * the specified index offset. - * - * @param f the float array. - * @param off the offset. - * @param len the number of floats to be read. + * Reads the specified number of floats from the stream, and stores the + * result into the specified array starting at the specified index offset. * - * @throws IOException Signals that an I/O exception has occurred. + * @param f + * the float array. + * @param off + * the offset. + * @param len + * the number of floats to be read. + * @throws IOException + * if an I/O exception has occurred. */ void readFully(float[] f, int off, int len) throws IOException; /** - * Reads the specified number of doubles from the stream, - * and stores the result into the specified array starting at - * the specified index offset. - * - * @param d the double array. - * @param off the offset. - * @param len the number of doubles to be read. + * Reads the specified number of doubles from the stream, and stores the + * result into the specified array starting at the specified index offset. * - * @throws IOException Signals that an I/O exception has occurred. + * @param d + * the double array. + * @param off + * the offset. + * @param len + * the number of doubles to be read. + * @throws IOException + * if an I/O exception has occurred. */ void readFully(double[] d, int off, int len) throws IOException; @@ -328,8 +339,8 @@ public interface ImageInputStream extends DataInput { * Gets the stream position. * * @return the stream position. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ long getStreamPosition() throws IOException; @@ -337,17 +348,18 @@ public interface ImageInputStream extends DataInput { * Gets the bit offset. * * @return the bit offset. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ int getBitOffset() throws IOException; /** - * Sets the bit offset to an integer between 0 and 7. + * Sets the bit offset to an integer between 0 and 7. * - * @param bitOffset the bit offset. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param bitOffset + * the bit offset. + * @throws IOException + * if an I/O exception has occurred. */ void setBitOffset(int bitOffset) throws IOException; @@ -355,90 +367,94 @@ public interface ImageInputStream extends DataInput { * Reads a bit from the stream and returns the value 0 or 1. * * @return the value of single bit: 0 or 1. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ int readBit() throws IOException; /** * Read the specified number of bits and returns their values as long. * - * @param numBits the number of bits to be read. - * + * @param numBits + * the number of bits to be read. * @return the bit string as a long. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ long readBits(int numBits) throws IOException; /** - * Returns the length of the stream. - * - * @return the length of the stream, or -1 if unknown. + * Returns the length of the stream. * - * @throws IOException Signals that an I/O exception has occurred. + * @return the length of the stream, or -1 if unknown. + * @throws IOException + * if an I/O exception has occurred. */ long length() throws IOException; /** - * Skipes the specified number of bytes by moving stream position. - * - * @param n the number of bytes. + * Skips the specified number of bytes by moving stream position. * + * @param n + * the number of bytes. * @return the actual skipped number of bytes. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ int skipBytes(int n) throws IOException; /** - * Skipes the specified number of bytes by moving stream position. - * - * @param n the number of bytes. + * Skips the specified number of bytes by moving stream position. * + * @param n + * the number of bytes. * @return the actual skipped number of bytes. - * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ long skipBytes(long n) throws IOException; /** - * Sets the current stream position to the specified location. + * Sets the current stream position to the specified location. * - * @param pos a file pointer position. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param pos + * a file pointer position. + * @throws IOException + * if an I/O exception has occurred. */ void seek(long pos) throws IOException; /** - * Marks a position in the stream to be returned to by a subsequent - * call to reset. + * Marks a position in the stream to be returned to by a subsequent call to + * reset. */ void mark(); /** * Returns the file pointer to its previous position. * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ void reset() throws IOException; /** - * Flushes the initial position in this stream prior to the - * specified stream position. - * - * @param pos the position. + * Flushes the initial position in this stream prior to the specified stream + * position. * - * @throws IOException Signals that an I/O exception has occurred. + * @param pos + * the position. + * @throws IOException + * if an I/O exception has occurred. */ void flushBefore(long pos) throws IOException; /** - * Flushes the initial position in this stream prior to the - * current stream position. + * Flushes the initial position in this stream prior to the current stream + * position. * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ void flush() throws IOException; @@ -450,36 +466,37 @@ public interface ImageInputStream extends DataInput { long getFlushedPosition(); /** - * Returns true if this ImageInputStream caches data in order - * to allow seeking backwards. + * Returns true if this ImageInputStream caches data in order to allow + * seeking backwards. * - * @return true if this ImageInputStream caches data in order - * to allow seeking backwards, false otherwise. + * @return true, if this ImageInputStream caches data in order to allow + * seeking backwards, false otherwise. */ boolean isCached(); /** - * Returns true if this ImageInputStream caches data in order - * to allow seeking backwards, and keeps it in memory. + * Returns true if this ImageInputStream caches data in order to allow + * seeking backwards, and keeps it in memory. * - * @return true if this ImageInputStream caches data in order - * to allow seeking backwards, and keeps it in memory. + * @return true, if this ImageInputStream caches data in order to allow + * seeking backwards, and keeps it in memory. */ boolean isCachedMemory(); /** - * Returns true if this ImageInputStream caches data in order - * to allow seeking backwards, and keeps it in a temporary file. + * Returns true if this ImageInputStream caches data in order to allow + * seeking backwards, and keeps it in a temporary file. * - * @return true if this ImageInputStream caches data in order - * to allow seeking backwards, and keeps it in a temporary file. + * @return true, if this ImageInputStream caches data in order to allow + * seeking backwards, and keeps it in a temporary file. */ boolean isCachedFile(); /** * Closes this stream. * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ void close() throws IOException; } diff --git a/awt/javax/imageio/stream/ImageInputStreamImpl.java b/awt/javax/imageio/stream/ImageInputStreamImpl.java index 83ac13a9c9..d79da41859 100644 --- a/awt/javax/imageio/stream/ImageInputStreamImpl.java +++ b/awt/javax/imageio/stream/ImageInputStreamImpl.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.stream; import java.io.EOFException; @@ -25,38 +26,54 @@ import java.io.IOException; import java.nio.ByteOrder; /** - * The ImageInputStreamImpl abstract class implements - * the ImageInputStream interface. + * The ImageInputStreamImpl abstract class implements the ImageInputStream + * interface. + * + * @since Android 1.0 */ public abstract class ImageInputStreamImpl implements ImageInputStream { - /** The byte order. */ + /** + * The byte order. + */ protected ByteOrder byteOrder = ByteOrder.BIG_ENDIAN; - /** The stream position. */ + /** + * The stream position. + */ protected long streamPos = 0; - - /** The flushed position. */ + + /** + * The flushed position. + */ protected long flushedPos = 0; - - /** The bit offset. */ + + /** + * The bit offset. + */ protected int bitOffset = 0; - /** The closed. */ + /** + * The closed. + */ private boolean closed = false; - /** The position stack. */ + /** + * The position stack. + */ private final PositionStack posStack = new PositionStack(); /** * Instantiates a new ImageInputStreamImpl. */ - public ImageInputStreamImpl() {} + public ImageInputStreamImpl() { + } /** * Check if the stream is closed and if true, throws an IOException. * - * @throws IOException Signals that the stream is closed. + * @throws IOException + * if the stream is closed. */ protected final void checkClosed() throws IOException { if (closed) { @@ -106,7 +123,7 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { if (b < 0) { throw new EOFException("EOF reached"); } - return (byte) b; + return (byte)b; } public int readUnsignedByte() throws IOException { @@ -125,58 +142,57 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { throw new EOFException("EOF reached"); } - return byteOrder == ByteOrder.BIG_ENDIAN ? - (short) ((b1 << 8) | (b2 & 0xff)) : - (short) ((b2 << 8) | (b1 & 0xff)); + return byteOrder == ByteOrder.BIG_ENDIAN ? (short)((b1 << 8) | (b2 & 0xff)) + : (short)((b2 << 8) | (b1 & 0xff)); } public int readUnsignedShort() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public char readChar() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public int readInt() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public long readUnsignedInt() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public long readLong() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public float readFloat() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public double readDouble() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public String readLine() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public String readUTF() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void readFully(byte[] b, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } @@ -185,32 +201,32 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { } public void readFully(short[] s, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void readFully(char[] c, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void readFully(int[] i, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void readFully(long[] l, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void readFully(float[] f, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void readFully(double[] d, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } @@ -230,12 +246,12 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { } public int readBit() throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public long readBits(int numBits) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } @@ -244,12 +260,12 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { } public int skipBytes(int n) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public long skipBytes(long n) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } @@ -272,7 +288,7 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { } public void reset() throws IOException { - //-- TODO bit pos + // -- TODO bit pos if (!posStack.isEmpty()) { long p = posStack.pop(); if (p < flushedPos) { @@ -290,7 +306,7 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { throw new IndexOutOfBoundsException("Trying to flush within already flushed portion"); } flushedPos = pos; - //-- TODO implement + // -- TODO implement } public void flush() throws IOException { @@ -302,15 +318,15 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { } public boolean isCached() { - return false; //def + return false; // def } public boolean isCachedMemory() { - return false; //def + return false; // def } public boolean isCachedFile() { - return false; //def + return false; // def } public void close() throws IOException { @@ -322,7 +338,8 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { /** * Finalizes this object. * - * @throws Throwable if an error occurs. + * @throws Throwable + * if an error occurs. */ @Override protected void finalize() throws Throwable { @@ -339,25 +356,31 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { * The Class PositionStack. */ private static class PositionStack { - - /** The Constant SIZE. */ + + /** + * The Constant SIZE. + */ private static final int SIZE = 10; - /** The values. */ + /** + * The values. + */ private long[] values = new long[SIZE]; - - /** The pos. */ - private int pos = 0; + /** + * The pos. + */ + private int pos = 0; /** * Push. * - * @param v the v + * @param v + * the v. */ void push(long v) { if (pos >= values.length) { - ensure(pos+1); + ensure(pos + 1); } values[pos++] = v; } @@ -365,7 +388,7 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { /** * Pop. * - * @return the long + * @return the long. */ long pop() { return values[--pos]; @@ -374,7 +397,7 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { /** * Checks if is empty. * - * @return true, if is empty + * @return true, if is empty. */ boolean isEmpty() { return pos == 0; @@ -383,7 +406,8 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { /** * Ensure. * - * @param size the size + * @param size + * the size. */ private void ensure(int size) { long[] arr = new long[Math.max(2 * values.length, size)]; diff --git a/awt/javax/imageio/stream/ImageOutputStream.java b/awt/javax/imageio/stream/ImageOutputStream.java index e59b69da52..28ec93277a 100644 --- a/awt/javax/imageio/stream/ImageOutputStream.java +++ b/awt/javax/imageio/stream/ImageOutputStream.java @@ -18,252 +18,289 @@ * @author Rustem V. Rafikov * @version $Revision: 1.2 $ */ + package javax.imageio.stream; import java.io.DataOutput; import java.io.IOException; /** - * The ImageOutputStream represents output stream interface that is - * used by ImageWriters. + * The ImageOutputStream represents output stream interface that is used by + * ImageWriters. + * + * @since Android 1.0 */ public interface ImageOutputStream extends DataOutput, ImageInputStream { /** - * Writes a single byte to the stream at the current position. - * - * @param b the int value, of which the 8 lowest bits - * will be written. + * Writes a single byte to the stream at the current position. * - * @throws IOException Signals that an I/O exception has occurred. + * @param b + * the integer value, of which the 8 lowest bits will be written. + * @throws IOException + * if an I/O exception has occurred. */ void write(int b) throws IOException; /** * Writes the bytes array to the stream. * - * @param b the byte array to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param b + * the byte array to be written. + * @throws IOException + * if an I/O exception has occurred. */ void write(byte[] b) throws IOException; /** - * Writes a number of bytes from the specified byte array - * beggining from the specified offset. - * - * @param b the byte array. - * @param off the offset. - * @param len the number of bytes to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * Writes a number of bytes from the specified byte array beginning from the + * specified offset. + * + * @param b + * the byte array. + * @param off + * the offset. + * @param len + * the number of bytes to be written. + * @throws IOException + * if an I/O exception has occurred. */ void write(byte[] b, int off, int len) throws IOException; /** - * Writes the specified boolean value to the stream, 1 if it is true, - * 0 if it is false. - * - * @param b the boolean value to be written. + * Writes the specified boolean value to the stream, 1 if it is true, 0 if + * it is false. * - * @throws IOException Signals that an I/O exception has occurred. + * @param b + * the boolean value to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeBoolean(boolean b) throws IOException; /** - * Writes the 8 lowest bits of the specified int value to the stream. + * Writes the 8 lowest bits of the specified integer value to the stream. * - * @param b the specified int value. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param b + * the specified integer value. + * @throws IOException + * if an I/O exception has occurred. */ void writeByte(int b) throws IOException; /** - * Writes a short value to the output stream. - * - * @param v the short value to be written. + * Writes a short value to the output stream. * - * @throws IOException Signals that an I/O exception has occurred. + * @param v + * the short value to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeShort(int v) throws IOException; /** - * Writes the 16 lowest bits of the specified int value to the stream. + * Writes the 16 lowest bits of the specified integer value to the stream. * - * @param v the specified int value. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param v + * the specified integer value. + * @throws IOException + * if an I/O exception has occurred. */ void writeChar(int v) throws IOException; /** - * Writes an integer value to the output stream. - * - * @param v the integer value to be written. + * Writes an integer value to the output stream. * - * @throws IOException Signals that an I/O exception has occurred. + * @param v + * the integer value to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeInt(int v) throws IOException; /** * Write long. * - * @param v the long value - * - * @throws IOException Signals that an I/O exception has occurred. + * @param v + * the long value. + * @throws IOException + * if an I/O exception has occurred. */ void writeLong(long v) throws IOException; /** - * Writes a float value to the output stream. - * - * @param v the float which contains value to be written. + * Writes a float value to the output stream. * - * @throws IOException Signals that an I/O exception has occurred. + * @param v + * the float which contains value to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeFloat(float v) throws IOException; /** - * Writes a double value to the output stream. + * Writes a double value to the output stream. * - * @param v the double which contains value to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param v + * the double which contains value to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeDouble(double v) throws IOException; /** * Writes the specified string to the stream. * - * @param s the string to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param s + * the string to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeBytes(String s) throws IOException; /** * Writes the specified String to the output stream. * - * @param s the String to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param s + * the String to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeChars(String s) throws IOException; /** - * Writes 2 bytes to the output stream in - * the modified UTF-8 representation of every character of - * the specified string. - * - * @param s the specified string to be written. + * Writes 2 bytes to the output stream in the modified UTF-8 representation + * of every character of the specified string. * - * @throws IOException Signals that an I/O exception has occurred. + * @param s + * the specified string to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeUTF(String s) throws IOException; /** - * Flushes the initial position in this stream prior to the - * specified stream position. + * Flushes the initial position in this stream prior to the specified stream + * position. * - * @param pos the position. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param pos + * the position. + * @throws IOException + * if an I/O exception has occurred. */ void flushBefore(long pos) throws IOException; - /** - * Writes a len number of short values from the specified array - * to the stream. - * - * @param s the shorts array to be written. - * @param off the offset in the char array. - * @param len the length of chars to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * Writes a len number of short values from the specified array to the + * stream. + * + * @param s + * the shorts array to be written. + * @param off + * the offset in the char array. + * @param len + * the length of chars to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeShorts(short[] s, int off, int len) throws IOException; /** * Writes a len number of chars to the stream. * - * @param c the char array to be written. - * @param off the offset in the char array. - * @param len the length of chars to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param c + * the char array to be written. + * @param off + * the offset in the char array. + * @param len + * the length of chars to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeChars(char[] c, int off, int len) throws IOException; /** - * Writes a len number of int values from the specified array - * to the stream. - * - * @param i the int array to be written. - * @param off the offset in the char array. - * @param len the length of chars to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * Writes a len number of integer values from the specified array to the + * stream. + * + * @param i + * the integer array to be written. + * @param off + * the offset in the char array. + * @param len + * the length of chars to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeInts(int[] i, int off, int len) throws IOException; /** - * Writes a len number of long values from the specified array - * to the stream. - * - * @param l the long array to be written. - * @param off the offset in the char array. - * @param len the length of chars to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * Writes a len number of long values from the specified array to the + * stream. + * + * @param l + * the long array to be written. + * @param off + * the offset in the char array. + * @param len + * the length of chars to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeLongs(long[] l, int off, int len) throws IOException; /** - * Writes a len number of float values from the specified array - * to the stream. - * - * @param f the float array to be written. - * @param off the offset in the char array. - * @param len the length of chars to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * Writes a len number of float values from the specified array to the + * stream. + * + * @param f + * the float array to be written. + * @param off + * the offset in the char array. + * @param len + * the length of chars to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeFloats(float[] f, int off, int len) throws IOException; /** - * Writes a len number of double values from the specified array - * to the stream. - * - * @param d the double array to be written. - * @param off the offset in the char array. - * @param len the length of chars to be written. - * - * @throws IOException Signals that an I/O exception has occurred. + * Writes a len number of double values from the specified array to the + * stream. + * + * @param d + * the double array to be written. + * @param off + * the offset in the char array. + * @param len + * the length of chars to be written. + * @throws IOException + * if an I/O exception has occurred. */ void writeDoubles(double[] d, int off, int len) throws IOException; /** * Writes a single bit at the current position. * - * @param bit the an int whose least significant bit is to be - * written to the stream. - * - * @throws IOException Signals that an I/O exception has occurred. + * @param bit + * the integer whose least significant bit is to be written to + * the stream. + * @throws IOException + * if an I/O exception has occurred. */ void writeBit(int bit) throws IOException; /** - * Writes a sequence of bits beggining from the current position. - * - * @param bits a long value containing the bits to be written, - * starting with the bit in position numBits - 1 down to the - * least significant bit. - * @param numBits the number of significant bit , - * it can be between 0 and 64. - * - * @throws IOException Signals that an I/O exception has occurred. + * Writes a sequence of bits beginning from the current position. + * + * @param bits + * the long value containing the bits to be written, starting + * with the bit in position numBits - 1 down to the least + * significant bit. + * @param numBits + * the number of significant bit, it can be between 0 and 64. + * @throws IOException + * if an I/O exception has occurred. */ void writeBits(long bits, int numBits) throws IOException; diff --git a/awt/javax/imageio/stream/ImageOutputStreamImpl.java b/awt/javax/imageio/stream/ImageOutputStreamImpl.java index c3d80fa7be..0fef78f1d1 100644 --- a/awt/javax/imageio/stream/ImageOutputStreamImpl.java +++ b/awt/javax/imageio/stream/ImageOutputStreamImpl.java @@ -18,6 +18,7 @@ * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ + package javax.imageio.stream; import java.io.IOException; @@ -29,16 +30,19 @@ import java.nio.ByteOrder; */ /** - * The ImageOutputStreamImpl abstract class implements - * the ImageOutputStream interface. + * The ImageOutputStreamImpl abstract class implements the ImageOutputStream + * interface. + * + * @since Android 1.0 */ -public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl - implements ImageOutputStream { +public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl implements + ImageOutputStream { /** * Instantiates a new ImageOutputStreamImpl. */ - public ImageOutputStreamImpl() {} + public ImageOutputStreamImpl() { + } public abstract void write(int b) throws IOException; @@ -62,7 +66,7 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl } else { } - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } @@ -76,7 +80,7 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl } else { } - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } @@ -86,7 +90,7 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl } else { } - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } @@ -108,62 +112,63 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl } public void writeUTF(String s) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void writeShorts(short[] s, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void writeChars(char[] c, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void writeInts(int[] i, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void writeLongs(long[] l, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void writeFloats(float[] f, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void writeDoubles(double[] d, int off, int len) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void writeBit(int bit) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } public void writeBits(long bits, int numBits) throws IOException { - //-- TODO implement + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } /** - * Flushes the bits. This method should be called in the write - * methods by subclasses. + * Flushes the bits. This method should be called in the write methods by + * subclasses. * - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * if an I/O exception has occurred. */ protected final void flushBits() throws IOException { if (bitOffset == 0) { return; } - - //-- TODO implement + + // -- TODO implement throw new UnsupportedOperationException("Not implemented yet"); } } diff --git a/awt/javax/imageio/stream/MemoryCacheImageInputStream.java b/awt/javax/imageio/stream/MemoryCacheImageInputStream.java index a3d470b01c..d7fc79139c 100644 --- a/awt/javax/imageio/stream/MemoryCacheImageInputStream.java +++ b/awt/javax/imageio/stream/MemoryCacheImageInputStream.java @@ -15,7 +15,6 @@ * limitations under the License. */ - package javax.imageio.stream; import org.apache.harmony.x.imageio.stream.RandomAccessMemoryCache; @@ -24,22 +23,29 @@ import java.io.IOException; import java.io.InputStream; /** - * The MemoryCacheImageInputStream class implements ImageInputStream - * using a memory buffer for caching the data. + * The MemoryCacheImageInputStream class implements ImageInputStream using a + * memory buffer for caching the data. + * + * @since Android 1.0 */ -public class MemoryCacheImageInputStream extends ImageInputStreamImpl { - - /** The is. */ +public class MemoryCacheImageInputStream extends ImageInputStreamImpl { + + /** + * The is. + */ private InputStream is; - - /** The ramc. */ + + /** + * The ramc. + */ private RandomAccessMemoryCache ramc = new RandomAccessMemoryCache(); /** - * Instantiates a new MemoryCacheImageInputStream - * which reads from the specified InputStream. + * Instantiates a new MemoryCacheImageInputStream which reads from the + * specified InputStream. * - * @param stream the InputStream to be read. + * @param stream + * the InputStream to be read. */ public MemoryCacheImageInputStream(InputStream stream) { if (stream == null) { diff --git a/awt/javax/imageio/stream/MemoryCacheImageOutputStream.java b/awt/javax/imageio/stream/MemoryCacheImageOutputStream.java index 96ded433ae..1df40a3422 100644 --- a/awt/javax/imageio/stream/MemoryCacheImageOutputStream.java +++ b/awt/javax/imageio/stream/MemoryCacheImageOutputStream.java @@ -15,7 +15,6 @@ * limitations under the License. */ - package javax.imageio.stream; import org.apache.harmony.x.imageio.stream.RandomAccessMemoryCache; @@ -23,24 +22,30 @@ import org.apache.harmony.x.imageio.stream.RandomAccessMemoryCache; import java.io.OutputStream; import java.io.IOException; - /** - * The MemoryCacheImageOutputStream class implements ImageOutputStream - * using a memory buffer for caching the data. + * The MemoryCacheImageOutputStream class implements ImageOutputStream using a + * memory buffer for caching the data. + * + * @since Android 1.0 */ public class MemoryCacheImageOutputStream extends ImageOutputStreamImpl { - - /** The os. */ + + /** + * The os. + */ OutputStream os; - - /** The ramc. */ + + /** + * The ramc. + */ RandomAccessMemoryCache ramc = new RandomAccessMemoryCache(); /** - * Instantiates a new MemoryCacheImageOutputStream - * which writes to the specified OutputStream. + * Instantiates a new MemoryCacheImageOutputStream which writes to the + * specified OutputStream. * - * @param stream the OutputStream. + * @param stream + * the OutputStream. */ public MemoryCacheImageOutputStream(OutputStream stream) { if (stream == null) { @@ -125,6 +130,6 @@ public class MemoryCacheImageOutputStream extends ImageOutputStreamImpl { ramc.getData(os, nBytes, flushedPosition); ramc.freeBefore(newFlushedPosition); - os.flush(); + os.flush(); } } diff --git a/awt/javax/imageio/stream/package.html b/awt/javax/imageio/stream/package.html new file mode 100644 index 0000000000..6cf53c3c06 --- /dev/null +++ b/awt/javax/imageio/stream/package.html @@ -0,0 +1,8 @@ + + +

    + This package contains classes and interfaces for handling images with low-level I/O operations. +

    + @since Android 1.0 + + diff --git a/awt/org/apache/harmony/awt/internal/nls/Messages.java b/awt/org/apache/harmony/awt/internal/nls/Messages.java index 96762c98e9..c340358db6 100644 --- a/awt/org/apache/harmony/awt/internal/nls/Messages.java +++ b/awt/org/apache/harmony/awt/internal/nls/Messages.java @@ -71,7 +71,9 @@ public class Messages { * @return String the message for that key in the system message bundle. */ static public String getString(String msg) { + // BEGIN android-changed return MsgHelp.getString(msg); + // END android-changed } /** @@ -138,6 +140,12 @@ public class Messages { * @return String the message for that key in the system message bundle. */ static public String getString(String msg, Object[] args) { + // BEGIN android-changed return MsgHelp.getString(msg, args); + // END android-changed } + + // BEGIN android-note + // Duplicate code was dropped in favor of using MsgHelp. + // END android-note } diff --git a/awt/org/apache/harmony/beans/internal/nls/Messages.java b/awt/org/apache/harmony/beans/internal/nls/Messages.java index 727c75751b..51e8168fa1 100644 --- a/awt/org/apache/harmony/beans/internal/nls/Messages.java +++ b/awt/org/apache/harmony/beans/internal/nls/Messages.java @@ -30,8 +30,17 @@ import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; -import org.apache.harmony.kernel.vm.VM; -import org.apache.harmony.luni.util.MsgHelp; +// BEGIN android-deleted +/* + * For Android, this module is a separate library and not part of the + * boot classpath, so its resources won't be found on the boot classpath + * as is assumed by MsgHelp.getString(). We instead use a local MsgHelp + * which bottoms out in a call to the useful part of its lower-level + * namesake. + */ +//import org.apache.harmony.kernel.vm.VM; +//import org.apache.harmony.luni.util.MsgHelp; +// END android-deleted /** * This class retrieves strings from a resource bundle and returns them, @@ -49,8 +58,10 @@ import org.apache.harmony.luni.util.MsgHelp; */ public class Messages { - private static final String sResource = - "org.apache.harmony.beans.internal.nls.messages"; //$NON-NLS-1$ + // BEGIN android-deleted + // private static final String sResource = + // "org.apache.harmony.beans.internal.nls.messages"; //$NON-NLS-1$ + // END android-deleted /** * Retrieves a message which has no arguments. @@ -60,7 +71,9 @@ public class Messages { * @return String the message for that key in the system message bundle. */ static public String getString(String msg) { - return MsgHelp.getString(sResource, msg); + // BEGIN android-changed + return MsgHelp.getString(msg); + // END android-changed } /** @@ -127,6 +140,12 @@ public class Messages { * @return String the message for that key in the system message bundle. */ static public String getString(String msg, Object[] args) { - return MsgHelp.getString(sResource, msg, args); + // BEGIN android-changed + return MsgHelp.getString(msg, args); + // END android-changed } + + // BEGIN android-note + // Duplicate code was dropped in favor of using MsgHelp. + // END android-note } diff --git a/awt/org/apache/harmony/beans/internal/nls/MsgHelp.java b/awt/org/apache/harmony/beans/internal/nls/MsgHelp.java new file mode 100644 index 0000000000..68faabfa34 --- /dev/null +++ b/awt/org/apache/harmony/beans/internal/nls/MsgHelp.java @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This implementation is based on the class of the same name in + * org.apache.harmony.luni.util. + */ + +package org.apache.harmony.beans.internal.nls; + +import java.io.IOException; +import java.io.InputStream; +import java.util.logging.Logger; +import java.util.Locale; +import java.util.PropertyResourceBundle; +import java.util.ResourceBundle; +import java.util.MissingResourceException; + +/** + * This class contains helper methods for loading resource bundles and + * formatting external message strings. + */ +public final class MsgHelp { + /** name of the resource for this class */ + private static final String RESOURCE_NAME = + "/org/apache/harmony/beans/internal/nls/messages.properties"; + + /** the resource bundle for this class */ + private static final ResourceBundle THE_BUNDLE; + + static { + ResourceBundle rb = null; + + try { + InputStream in = MsgHelp.class.getResourceAsStream( + RESOURCE_NAME); + rb = new PropertyResourceBundle(in); + } catch (IOException ex) { + Logger.global.warning("Couldn't read resource bundle: " + + ex); + } catch (RuntimeException ex) { + // Shouldn't happen, but deal at least somewhat gracefully. + Logger.global.warning("Couldn't find resource bundle: " + + ex); + } + + THE_BUNDLE = rb; + } + + public static String getString(String msg) { + if (THE_BUNDLE == null) { + return msg; + } + try { + return THE_BUNDLE.getString(msg); + } catch (MissingResourceException e) { + return "Missing message: " + msg; + } + } + + static public String getString(String msg, Object[] args) { + String format = msg; + if (THE_BUNDLE != null) { + try { + format = THE_BUNDLE.getString(msg); + } catch (MissingResourceException e) { + } + } + + return org.apache.harmony.luni.util.MsgHelp.format(format, args); + } +} diff --git a/awt/org/apache/harmony/beans/internal/nls/messages.properties b/awt/resources/org/apache/harmony/beans/internals/nls/messages.properties similarity index 100% rename from awt/org/apache/harmony/beans/internal/nls/messages.properties rename to awt/resources/org/apache/harmony/beans/internals/nls/messages.properties diff --git a/camera/libcameraservice/Android.mk b/camera/libcameraservice/Android.mk index 4e7d6d23e9..2dfe659a2e 100644 --- a/camera/libcameraservice/Android.mk +++ b/camera/libcameraservice/Android.mk @@ -4,12 +4,13 @@ LOCAL_PATH:= $(call my-dir) # Set USE_CAMERA_STUB for non-emulator and non-simulator builds, if you want # the camera service to use the fake camera. For emulator or simulator builds, # we always use the fake camera. -# -ifeq ($(BOARD_CAMERA_LIBRARIES),) -USE_CAMERA_STUB:=true -else + +ifeq ($(USE_CAMERA_STUB),) USE_CAMERA_STUB:=false +ifneq ($(filter sooner generic sim,$(TARGET_DEVICE)),) +USE_CAMERA_STUB:=true endif #libcamerastub +endif ifeq ($(USE_CAMERA_STUB),true) # @@ -51,7 +52,7 @@ ifeq ($(USE_CAMERA_STUB), true) LOCAL_STATIC_LIBRARIES += libcamerastub LOCAL_CFLAGS += -include CameraHardwareStub.h else -LOCAL_SHARED_LIBRARIES += $(BOARD_CAMERA_LIBRARIES) +LOCAL_SHARED_LIBRARIES += libcamera endif include $(BUILD_SHARED_LIBRARY) diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index 5784c4b12b..800ffa48a1 100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -1,6 +1,7 @@ /* ** -** Copyright 2008, The Android Open Source Project +** Copyright (C) 2008, The Android Open Source Project +** Copyright (C) 2008 HTC Inc. ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. @@ -15,7 +16,7 @@ ** limitations under the License. */ - +//#define LOG_NDEBUG 0 #define LOG_TAG "CameraService" #include @@ -155,10 +156,22 @@ CameraService::Client::Client(const sp& cameraService, { LOGD("Client E constructor"); mHardware = openCameraHardware(); - mHasFrameCallback = false; + + // Callback is disabled by default + mFrameCallbackFlag = FRAME_CALLBACK_FLAG_NOOP; LOGD("Client X constructor"); } +status_t CameraService::Client::connect(const sp& client) +{ + // remvoe old client + LOGD("connect (new client)"); + Mutex::Autolock _l(mLock); + mCameraClient = client; + mFrameCallbackFlag = FRAME_CALLBACK_FLAG_NOOP; + return NO_ERROR; +} + #if HAVE_ANDROID_OS static void *unregister_surface(void *arg) { @@ -170,7 +183,7 @@ static void *unregister_surface(void *arg) #endif CameraService::Client::~Client() -{ +{ // spin down hardware LOGD("Client E destructor"); if (mSurface != 0) { @@ -179,7 +192,7 @@ CameraService::Client::~Client() // We unregister the buffers in a different thread because binder does // not let us make sychronous transactions in a binder destructor (that // is, upon our reaching a refcount of zero.) - pthread_create(&thr, NULL, + pthread_create(&thr, NULL, unregister_surface, mSurface.get()); pthread_join(thr, NULL); @@ -227,12 +240,12 @@ status_t CameraService::Client::setPreviewDisplay(const sp& surface) return NO_ERROR; } -// tell the service whether to callback with each preview frame -void CameraService::Client::setHasFrameCallback(bool installed) +// set the frame callback flag to affect how the received frames from +// preview are handled. +void CameraService::Client::setFrameCallbackFlag(int frame_callback_flag) { Mutex::Autolock lock(mLock); - mHasFrameCallback = installed; - // If installed is false, mPreviewBuffer will be released in stopPreview(). + mFrameCallbackFlag = frame_callback_flag; } // start preview mode, must call setPreviewDisplay first @@ -250,24 +263,24 @@ status_t CameraService::Client::startPreview() LOGE("mHardware is NULL, returning."); return INVALID_OPERATION; } - + if (mSurface == 0) { LOGE("setPreviewDisplay must be called before startPreview!"); return INVALID_OPERATION; } - + // XXX: This needs to be improved. remove all hardcoded stuff - + int w, h; CameraParameters params(mHardware->getParameters()); params.getPreviewSize(&w, &h); - + mSurface->unregisterBuffers(); #if DEBUG_DUMP_PREVIEW_FRAME_TO_FILE debug_frame_cnt = 0; #endif - + status_t ret = mHardware->startPreview(previewCallback, mCameraService.get()); if (ret == NO_ERROR) { @@ -277,7 +290,7 @@ status_t CameraService::Client::startPreview() } else LOGE("mHardware->startPreview() failed with status %d\n", ret); - + return ret; } @@ -295,7 +308,7 @@ void CameraService::Client::stopPreview() mHardware->stopPreview(); LOGD("stopPreview(), hardware stopped OK"); - + if (mSurface != 0) { mSurface->unregisterBuffers(); } @@ -361,6 +374,7 @@ static void dump_to_file(const char *fname, // preview callback - frame buffer update void CameraService::Client::previewCallback(const sp& mem, void* user) { + LOGV("previewCallback()"); sp client = getClientFromCookie(user); if (client == 0) { return; @@ -395,7 +409,7 @@ void CameraService::Client::previewCallback(const sp& mem, void* user) client->postFrame(mem); #if DEBUG_CLIENT_REFERENCES - //**** if the client's refcount is 1, then we are about to destroy it here, + //**** if the client's refcount is 1, then we are about to destroy it here, // which is bad--print all refcounts. if (client->getStrongCount() == 1) { LOGE("++++++++++++++++ (PREVIEW) THIS WILL CAUSE A LOCKUP!"); @@ -431,7 +445,7 @@ status_t CameraService::Client::takePicture() LOGE("mHardware is NULL, returning."); return INVALID_OPERATION; } - + if (mSurface != NULL) mSurface->unregisterBuffers(); @@ -495,7 +509,7 @@ void CameraService::Client::yuvPictureCallback(const sp& mem, client->postRaw(mem); #if DEBUG_CLIENT_REFERENCES - //**** if the client's refcount is 1, then we are about to destroy it here, + //**** if the client's refcount is 1, then we are about to destroy it here, // which is bad--print all refcounts. if (client->getStrongCount() == 1) { LOGE("++++++++++++++++ (RAW) THIS WILL CAUSE A LOCKUP!"); @@ -532,7 +546,7 @@ void CameraService::Client::jpegPictureCallback(const sp& mem, void *us client->postJpeg(mem); #if DEBUG_CLIENT_REFERENCES - //**** if the client's refcount is 1, then we are about to destroy it here, + //**** if the client's refcount is 1, then we are about to destroy it here, // which is bad--print all refcounts. if (client->getStrongCount() == 1) { LOGE("++++++++++++++++ (JPEG) THIS WILL CAUSE A LOCKUP!"); @@ -615,37 +629,74 @@ void CameraService::Client::postJpeg(const sp& mem) mCameraClient->jpegCallback(mem); } +void CameraService::Client::copyFrameAndPostCopiedFrame(sp heap, size_t offset, size_t size) +{ + LOGV("copyFrameAndPostCopiedFrame"); + // It is necessary to copy out of pmem before sending this to + // the callback. For efficiency, reuse the same MemoryHeapBase + // provided it's big enough. Don't allocate the memory or + // perform the copy if there's no callback. + if (mPreviewBuffer == 0) { + mPreviewBuffer = new MemoryHeapBase(size, 0, NULL); + } else if (size > mPreviewBuffer->virtualSize()) { + mPreviewBuffer.clear(); + mPreviewBuffer = new MemoryHeapBase(size, 0, NULL); + if (mPreviewBuffer == 0) { + LOGE("failed to allocate space for preview buffer"); + return; + } + } + memcpy(mPreviewBuffer->base(), + (uint8_t *)heap->base() + offset, size); + + sp frame = new MemoryBase(mPreviewBuffer, 0, size); + if (frame == 0) { + LOGE("failed to allocate space for frame callback"); + return; + } + mCameraClient->frameCallback(frame); +} + void CameraService::Client::postFrame(const sp& mem) { + LOGV("postFrame"); + if (mem == 0) { + LOGW("mem is a null pointer"); + return; + } + ssize_t offset; size_t size; sp heap = mem->getMemory(&offset, &size); - - sp frame; - { Mutex::Autolock surfaceLock(mSurfaceLock); - if (mSurface != NULL) + if (mSurface != NULL) { mSurface->postBuffer(offset); - } - - // It is necessary to copy out of pmem before sending this to the callback. - // For efficiency, reuse the same MemoryHeapBase provided it's big enough. - // Don't allocate the memory or perform the copy if there's no callback. - if (mHasFrameCallback) { - if (mPreviewBuffer == 0) { - mPreviewBuffer = new MemoryHeapBase(size, 0, NULL); - } else if (size > mPreviewBuffer->virtualSize()) { - mPreviewBuffer.clear(); - mPreviewBuffer = new MemoryHeapBase(size, 0, NULL); } - memcpy(mPreviewBuffer->base(), (uint8_t *)heap->base() + offset, size); - frame = new MemoryBase(mPreviewBuffer, 0, size); } - - // Do not hold the client lock while calling back. - if (frame != 0) { - mCameraClient->frameCallback(frame); + + // Is the callback enabled or not? + if (!(mFrameCallbackFlag & FRAME_CALLBACK_FLAG_ENABLE_MASK)) { + // If the enable bit is off, the copy-out and one-shot bits are ignored + LOGV("frame callback is diabled"); + return; + } + + // Is the received frame copied out or not? + if (mFrameCallbackFlag & FRAME_CALLBACK_FLAG_COPY_OUT_MASK) { + LOGV("frame is copied out"); + copyFrameAndPostCopiedFrame(heap, offset, size); + } else { + LOGV("frame is directly sent out without copying"); + mCameraClient->frameCallback(mem); + } + + // Is this is one-shot only? + if (mFrameCallbackFlag & FRAME_CALLBACK_FLAG_ONE_SHOT_MASK) { + LOGV("One-shot only, thus clear the bits and disable frame callback"); + mFrameCallbackFlag &= ~(FRAME_CALLBACK_FLAG_ONE_SHOT_MASK | + FRAME_CALLBACK_FLAG_COPY_OUT_MASK | + FRAME_CALLBACK_FLAG_ENABLE_MASK); } } @@ -711,7 +762,7 @@ status_t CameraService::onTransact( } status_t err = BnCameraService::onTransact(code, data, reply, flags); - + LOGD("+++ onTransact err %d code %d", err, code); if (err == UNKNOWN_TRANSACTION || err == PERMISSION_DENIED) { diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h index 683c51b9f6..b225aa9f34 100644 --- a/camera/libcameraservice/CameraService.h +++ b/camera/libcameraservice/CameraService.h @@ -1,6 +1,7 @@ /* ** -** Copyright 2008, The Android Open Source Project +** Copyright (C) 2008, The Android Open Source Project +** Copyright (C) 2008 HTC Inc. ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. @@ -20,6 +21,8 @@ #include #include +#include + class android::MemoryHeapBase; namespace android { @@ -32,7 +35,7 @@ namespace android { // When enabled, this feature allows you to send an event to the CameraService // so that you can cause all references to the heap object gWeakHeap, defined // below, to be printed. You will also need to set DEBUG_REFS=1 and -// DEBUG_REFS_ENABLED_BY_DEFAULT=0 in libutils/RefBase.cpp. You just have to +// DEBUG_REFS_ENABLED_BY_DEFAULT=0 in libutils/RefBase.cpp. You just have to // set gWeakHeap to the appropriate heap you want to track. #define DEBUG_HEAP_LEAKS 0 @@ -67,11 +70,15 @@ private: public: virtual void disconnect(); + // connect new client with existing camera remote + virtual status_t connect(const sp& client); + // pass the buffered ISurface to the camera service virtual status_t setPreviewDisplay(const sp& surface); - - // tell the service whether to callback with each preview frame - virtual void setHasFrameCallback(bool installed); + + // set the frame callback flag to affect how the received frames from + // preview are handled. + virtual void setFrameCallbackFlag(int frame_callback_flag); // start preview mode, must call setPreviewDisplay first virtual status_t startPreview(); @@ -112,6 +119,7 @@ private: void postRaw(const sp& mem); void postJpeg(const sp& mem); void postFrame(const sp& mem); + void copyFrameAndPostCopiedFrame(sp heap, size_t offset, size_t size); void postError(status_t error); void postAutoFocus(bool focused); @@ -119,20 +127,20 @@ private: mutable Mutex mLock; // mSurfaceLock synchronizes access to mSurface between // setPreviewSurface() and postFrame(). Note that among - // the public methods, all accesses to mSurface are + // the public methods, all accesses to mSurface are // syncrhonized by mLock. However, postFrame() is called - // by the CameraHardwareInterface callback, and needs to + // by the CameraHardwareInterface callback, and needs to // access mSurface. It cannot hold mLock, however, because // stopPreview() may be holding that lock while attempting // top stop preview, and stopPreview itself will block waiting - // for a callback from CameraHardwareInterface. If this + // for a callback from CameraHardwareInterface. If this // happens, it will cause a deadlock. mutable Mutex mSurfaceLock; mutable Condition mReady; sp mCameraService; sp mSurface; sp mPreviewBuffer; - bool mHasFrameCallback; + int mFrameCallbackFlag; // these are immutable once the object is created, // they don't need to be protected by a lock diff --git a/im/java/android/im/BrandingResourceIDs.java b/im/java/android/im/BrandingResourceIDs.java new file mode 100644 index 0000000000..996072222b --- /dev/null +++ b/im/java/android/im/BrandingResourceIDs.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.im; + +/** + * @hide + * Defines the IDs of branding resources. + */ +public interface BrandingResourceIDs { + /** + * The logo icon of the provider which is displayed in the landing page. + */ + public static final int DRAWABLE_LOGO = 100; + /** + * The icon of online presence status. + */ + public static final int DRAWABLE_PRESENCE_ONLINE = 102; + /** + * The icon of busy presence status. + */ + public static final int DRAWABLE_PRESENCE_BUSY = 103; + /** + * The icon of away presence status. + */ + public static final int DRAWABLE_PRESENCE_AWAY = 104; + /** + * The icon of invisible presence status. + */ + public static final int DRAWABLE_PRESENCE_INVISIBLE = 105; + /** + * The icon of offline presence status. + */ + public static final int DRAWABLE_PRESENCE_OFFLINE = 106; + /** + * The label of the menu to go to the contact list screen. + */ + public static final int STRING_MENU_CONTACT_LIST = 107; + +} diff --git a/im/java/android/im/IImPlugin.aidl b/im/java/android/im/IImPlugin.aidl new file mode 100644 index 0000000000..229cd0eaab --- /dev/null +++ b/im/java/android/im/IImPlugin.aidl @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.im; + +/** + * @hide + */ +interface IImPlugin { + /** + * Notify the plugin the front door activity is created. This gives the plugin a chance to + * start its own servics, etc. + */ + void onStart(); + + /** + * Notify the plugin the front door activity is stopping. + */ + void onStop(); + + /** + * Sign in to the service for the account passed in. + * + * @param account the account id for the accont to be signed into. + */ + void signIn(long account); + + /** + * Sign out of the service for the account passed in. + * + * @param account the account id for the accont to be signed out of. + */ + void signOut(long account); + + /** + * Returns the package name used to load the resources for the given provider name. + * + * @return The package name to load the resourcs for the given provider. + */ + String getResourcePackageNameForProvider(String providerName); + + /** + * Returns a map of branding resources for the given provider. The keys are defined + * in {@link android.im.BrandingResourceIDs}. The values are the resource identifiers generated + * by the aapt tool. + * + * @return The map of branding resources for the given provider. + */ + Map getResourceMapForProvider(String providerName); + + /* + * Returns a list of supported IM providers. + * + * @return a List of supported providers. + */ + List getSupportedProviders(); +} diff --git a/im/java/android/im/ImPluginConsts.java b/im/java/android/im/ImPluginConsts.java new file mode 100644 index 0000000000..416493ff72 --- /dev/null +++ b/im/java/android/im/ImPluginConsts.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.im; + +/** + * @hide + */ +public class ImPluginConsts { + /** + * The intent action name for the plugin service. + */ + public static final String PLUGIN_ACTION_NAME = "android.im.plugin"; +} \ No newline at end of file diff --git a/include/GLES/eglnatives.h b/include/GLES/eglnatives.h index f9e544cadc..1cd57d0684 100644 --- a/include/GLES/eglnatives.h +++ b/include/GLES/eglnatives.h @@ -33,7 +33,7 @@ typedef struct egl_native_pixmap_t* NativePixmapType; typedef void* NativeDisplayType; /* - * This a conveniance function to create a NativeWindowType surface + * This a convenience function to create a NativeWindowType surface * that maps to the whole screen * This function is actually implemented in libui.so */ @@ -50,6 +50,7 @@ enum native_pixel_format_t { NATIVE_PIXEL_FORMAT_RGBA_8888 = 1, NATIVE_PIXEL_FORMAT_RGB_565 = 4, + NATIVE_PIXEL_FORMAT_BGRA_8888 = 5, NATIVE_PIXEL_FORMAT_RGBA_5551 = 6, NATIVE_PIXEL_FORMAT_RGBA_4444 = 7, NATIVE_PIXEL_FORMAT_YCbCr_422_SP= 0x10, diff --git a/include/private/opengles/gl_context.h b/include/private/opengles/gl_context.h index 67d50fd22c..2aa78d85cb 100644 --- a/include/private/opengles/gl_context.h +++ b/include/private/opengles/gl_context.h @@ -532,6 +532,10 @@ struct compute_iterators_t vertex_t const* v1, vertex_t const* v2); + void initLine( + vertex_t const* v0, + vertex_t const* v1); + inline void initLerp(vertex_t const* v0, uint32_t enables); int iteratorsScale(int32_t it[3], @@ -543,6 +547,9 @@ struct compute_iterators_t void iterators0032(int32_t it[3], int32_t c0, int32_t c1, int32_t c2) const; + void iterators0032(int64_t it[3], + int32_t c0, int32_t c1, int32_t c2) const; + GGLcoord area() const { return m_area; } private: diff --git a/include/ui/BlitHardware.h b/include/ui/BlitHardware.h deleted file mode 100644 index 4de1c12d73..0000000000 --- a/include/ui/BlitHardware.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_BLIT_HARDWARE_H -#define ANDROID_BLIT_HARDWARE_H - -#include -#include - -#if __cplusplus -extern "C" { -#endif - -/******************************************************************************/ - -/* supported pixel-formats. these must be compatible with - * graphics/PixelFormat.java, ui/PixelFormat.h, pixelflinger/format.h - */ - -enum -{ - COPYBIT_RGBA_8888 = 1, - COPYBIT_RGB_565 = 4, - COPYBIT_RGBA_5551 = 6, - COPYBIT_RGBA_4444 = 7, - COPYBIT_YCbCr_422_SP = 0x10, - COPYBIT_YCbCr_420_SP = 0x11 -}; - -/* name for copybit_set_parameter */ -enum -{ - /* rotation of the source image in degrees (0 to 359) */ - COPYBIT_ROTATION_DEG = 1, - /* plane alpha value */ - COPYBIT_PLANE_ALPHA = 2, - /* enable or disable dithering */ - COPYBIT_DITHER = 3, - /* transformation applied (this is a superset of COPYBIT_ROTATION_DEG) */ - COPYBIT_TRANSFORM = 4, -}; - -/* values for copybit_set_parameter(COPYBIT_TRANSFORM) */ -enum { - /* flip source image horizontally */ - COPYBIT_TRANSFORM_FLIP_H = 0x01, - /* flip source image vertically */ - COPYBIT_TRANSFORM_FLIP_V = 0x02, - /* rotate source image 90 degres */ - COPYBIT_TRANSFORM_ROT_90 = 0x04, - /* rotate source image 180 degres */ - COPYBIT_TRANSFORM_ROT_180 = 0x03, - /* rotate source image 270 degres */ - COPYBIT_TRANSFORM_ROT_270 = 0x07, -}; - -/* enable/disable value copybit_set_parameter */ -enum { - COPYBIT_DISABLE = 0, - COPYBIT_ENABLE = 1 -}; - -/* use get() to query static informations about the hardware */ -enum { - /* Maximum amount of minification supported by the hardware*/ - COPYBIT_MINIFICATION_LIMIT = 1, - /* Maximum amount of magnification supported by the hardware */ - COPYBIT_MAGNIFICATION_LIMIT = 2, - /* Number of fractional bits support by the scaling engine */ - COPYBIT_SCALING_FRAC_BITS = 3, - /* Supported rotation step in degres. */ - COPYBIT_ROTATION_STEP_DEG = 4, -}; - -struct copybit_image_t { - uint32_t w; - uint32_t h; - int32_t format; - uint32_t offset; - void* base; - int fd; -}; - - -struct copybit_rect_t { - int l; - int t; - int r; - int b; -}; - -struct copybit_region_t { - int (*next)(copybit_region_t const*, copybit_rect_t* rect); -}; - -struct copybit_t -{ - int (*set_parameter)(struct copybit_t* handle, int name, int value); - - int (*get)(struct copybit_t* handle, int name); - - int (*blit)( - struct copybit_t* handle, - struct copybit_image_t const* dst, - struct copybit_image_t const* src, - struct copybit_region_t const* region); - - int (*stretch)( - struct copybit_t* handle, - struct copybit_image_t const* dst, - struct copybit_image_t const* src, - struct copybit_rect_t const* dst_rect, - struct copybit_rect_t const* src_rect, - struct copybit_region_t const* region); -}; - -/******************************************************************************/ - -struct copybit_t* copybit_init(); - -int copybit_term(struct copybit_t* handle); - - -/******************************************************************************/ - -#if __cplusplus -} // extern "C" -#endif - -#endif // ANDROID_BLIT_HARDWARE_H diff --git a/include/ui/Camera.h b/include/ui/Camera.h index 562a0a226e..124f07f9c4 100644 --- a/include/ui/Camera.h +++ b/include/ui/Camera.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2008 The Android Open Source Project + * Copyright (C) 2008 HTC Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +22,39 @@ namespace android { +/* + * A set of bit masks for specifying how the received frames from preview are + * handled before the frame callback call. + * + * The least significant 3 bits of an "int" value are used for this purpose: + * + * ..... 0 0 0 + * ^ ^ ^ + * | | |---------> determine whether the callback is enabled or not + * | |-----------> determine whether the callback is one-shot or not + * |-------------> determine whether the frame is copied out or not + * + * For instance, + * 1. 0x00 disables the callback. In this case, copy out and one shot bits + * are ignored. + * 2. 0x01 enables a callback without copying out the recievied frames. A + * typical use case is the Camcorder application to avoid making costly + * frame copies. + * 3. 0x05 is enabling a callback with frame copied out repeatedly. A typical + * use case is the Camera application. + * 4. 0x07 is enabling a callback with frame copied out only once. A typical use + * case is the Barcode scanner application. + */ +#define FRAME_CALLBACK_FLAG_ENABLE_MASK 0x01 +#define FRAME_CALLBACK_FLAG_ONE_SHOT_MASK 0x02 +#define FRAME_CALLBACK_FLAG_COPY_OUT_MASK 0x04 + +// Typical use cases +#define FRAME_CALLBACK_FLAG_NOOP 0x00 +#define FRAME_CALLBACK_FLAG_CAMCORDER 0x01 +#define FRAME_CALLBACK_FLAG_CAMERA 0x05 +#define FRAME_CALLBACK_FLAG_BARCODE_SCANNER 0x07 + class ICameraService; class ICamera; class Surface; @@ -35,15 +69,21 @@ typedef void (*error_callback)(status_t err, void *cookie); class Camera : public BnCameraClient, public IBinder::DeathRecipient { public: + // construct a camera client from an existing remote + Camera(const sp& camera); + static sp connect(); ~Camera(); + void init(); + status_t reconnect(); void disconnect(); status_t getStatus() { return mStatus; } // pass the buffered ISurface to the camera service status_t setPreviewDisplay(const sp& surface); + status_t setPreviewDisplay(const sp& surface); // start preview mode, must call setPreviewDisplay first status_t startPreview(); @@ -66,7 +106,11 @@ public: void setShutterCallback(shutter_callback cb, void *cookie); void setRawCallback(frame_callback cb, void *cookie); void setJpegCallback(frame_callback cb, void *cookie); - void setFrameCallback(frame_callback cb, void *cookie); + + void setFrameCallback(frame_callback cb, + void *cookie, + int frame_callback_flag = FRAME_CALLBACK_FLAG_NOOP); + void setErrorCallback(error_callback cb, void *cookie); void setAutoFocusCallback(autofocus_callback cb, void *cookie); // ICameraClient interface @@ -77,7 +121,8 @@ public: virtual void errorCallback(status_t error); virtual void autoFocusCallback(bool focused); - + sp remote(); + private: Camera(); virtual void binderDied(const wp& who); @@ -85,14 +130,14 @@ private: class DeathNotifier: public IBinder::DeathRecipient { public: - DeathNotifier() { + DeathNotifier() { } - + virtual void binderDied(const wp& who); }; - + static sp mDeathNotifier; - + // helper function to obtain camera service handle static const sp& getCameraService(); @@ -111,12 +156,12 @@ private: void *mErrorCallbackCookie; autofocus_callback mAutoFocusCallback; void *mAutoFocusCallbackCookie; - + friend class DeathNotifier; static Mutex mLock; static sp mCameraService; - + }; }; // namespace android diff --git a/include/ui/CameraHardwareInterface.h b/include/ui/CameraHardwareInterface.h index 5fa933f6a9..14ac96e3ba 100644 --- a/include/ui/CameraHardwareInterface.h +++ b/include/ui/CameraHardwareInterface.h @@ -39,48 +39,42 @@ typedef void (*jpeg_callback)(const sp& mem, void* user); typedef void (*autofocus_callback)(bool focused, void* user); /** - * This defines the interface to the camera hardware abstraction - * layer. It supports setting and getting parameters, live - * previewing and taking pictures. It is a referenced counted - * interface with RefBase as its base class. + * CameraHardwareInterface.h defines the interface to the + * camera hardware abstraction layer, used for setting and getting + * parameters, live previewing, and taking pictures. * - * The openCameraHardware function is used to - * retrieve a strong pointer to the instance of this interface - * and may be called multiple times. + * It is a referenced counted interface with RefBase as its base class. + * CameraService calls openCameraHardware() to retrieve a strong pointer to the + * instance of this interface and may be called multiple times. The + * following steps describe a typical sequence: * - * After calling openCameraHardware the getParameters and - * setParameters are used to initialize the camera instance. + * -# After CameraService calls openCameraHardware(), getParameters() and + * setParameters() are used to initialize the camera instance. + * CameraService calls getPreviewHeap() to establish access to the + * preview heap so it can be registered with SurfaceFlinger for + * efficient display updating while in preview mode. + * -# startPreview() is called, which is passed a preview_callback() + * function and a user parameter. The camera instance then periodically + * calls preview_callback() each time a new preview frame is available. + * The callback routine has two parameters: the first is a pointer to + * the IMemory containing the frame and the second a user parameter. If + * the preview_callback code needs to use this memory after returning, + * it must copy the data. * - * Then getPreviewHeap is called to get access to the preview - * heap so it can be registered with the SurfaceFlinger for efficient - * display updating while in the preview mode. + * Prior to taking a picture, CameraService calls autofocus() with + * autofocus_callback() and a user parameter. When auto focusing has + * completed, the camera instance calls autofocus_callback(), which informs + * the application whether focusing was successful. The camera instance + * only calls autofocus_callback() once and it is up to the application to + * call autoFocus() again if refocusing is desired. * - * Next startPreview is called which is passed a preview_callback - * function and a user parameter. The camera instance then - * periodically calls preview_callback each time a new - * preview frame is available. The call back routine has - * two parameters, the first is a pointer to the the IMemory containing - * the frame and the other is the user parameter. If the preview_callback - * code needs to use this memory after returning it must copy - * the data. - * - * Prior to taking a picture the autoFocus method is usually called with a - * autofocus_callback and a user parameter. When auto focusing - * has completed the camera instance calls autofocus_callback which - * informs the application if focusing was successful or not. - * The camera instance only calls the autofocus_callback once and it - * is up to the application to call autoFocus again if refocusing is desired. - * - * The method takePicture is called to request that the camera instance take a - * picture. This method has three callbacks: shutter_callback, raw_callback, - * and jpeg_callback. As soon as the shutter snaps and it is safe to move the - * camera, shutter_callback is called. Typically, you would want to play the - * shutter sound at this moment. Later, when the raw image is available the - * raw_callback is called with a pointer to the IMemory containing the raw - * image. Finally, when the encoded jpeg image is available the jpeg_callback - * will be called with a pointer to the IMemory containing the jpeg image. As - * with the preview_callback the memory must be copied if it's needed after - * returning. + * CameraService calls takePicture() to request the camera instance take a + * picture. This method has two callbacks: raw_callback() and jpeg_callback(). + * When the raw image is available, raw_callback() is called with a pointer + * to the IMemory containing the raw image. When the jpeg image is available, + * jpeg_callback() is called with a pointer to the IMemory containing the + * jpeg image. As with preview_callback(), the memory must be copied if it's + * needed after returning. */ class CameraHardwareInterface : public virtual RefBase { public: @@ -104,7 +98,7 @@ public: /** * Start auto focus, the callback routine is called * once when focusing is complete. autoFocus() will - * be called agained if another auto focus is needed. + * be called again if another auto focus is needed. */ virtual status_t autoFocus(autofocus_callback, void* user) = 0; diff --git a/include/ui/EGLDisplaySurface.h b/include/ui/EGLDisplaySurface.h index a9cfd5a040..0190e09979 100644 --- a/include/ui/EGLDisplaySurface.h +++ b/include/ui/EGLDisplaySurface.h @@ -23,11 +23,12 @@ #include #include -#include #include #include +struct copybit_device_t; + // --------------------------------------------------------------------------- namespace android { // --------------------------------------------------------------------------- @@ -71,7 +72,7 @@ private: int32_t mSwapCount; nsecs_t mSleep; uint32_t mFeatureFlags; - copybit_t* mBlitEngine; + copybit_device_t* mBlitEngine; }; // --------------------------------------------------------------------------- diff --git a/include/ui/ICamera.h b/include/ui/ICamera.h index 6aa3940157..99c0d862b0 100644 --- a/include/ui/ICamera.h +++ b/include/ui/ICamera.h @@ -20,13 +20,15 @@ #include #include #include - #include #include #include +#include namespace android { +class ICameraClient; + class ICamera: public IInterface { public: @@ -34,11 +36,15 @@ public: virtual void disconnect() = 0; + // connect new client with existing camera remote + virtual status_t connect(const sp& client) = 0; + // pass the buffered ISurface to the camera service virtual status_t setPreviewDisplay(const sp& surface) = 0; - - // tell the service whether to callback with each preview frame - virtual void setHasFrameCallback(bool installed) = 0; + + // set the frame callback flag to affect how the received frames from + // preview are handled. + virtual void setFrameCallbackFlag(int frame_callback_flag) = 0; // start preview mode, must call setPreviewDisplay first virtual status_t startPreview() = 0; diff --git a/include/ui/IOverlay.h b/include/ui/IOverlay.h new file mode 100644 index 0000000000..323ff079f2 --- /dev/null +++ b/include/ui/IOverlay.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_IOVERLAY_H +#define ANDROID_IOVERLAY_H + +#include +#include + +#include +#include +#include +#include + +namespace android { + +class IOverlay : public IInterface +{ +public: + DECLARE_META_INTERFACE(Overlay); + + virtual void destroy() = 0; // one-way + + virtual ssize_t swapBuffers() = 0; +}; + +// ---------------------------------------------------------------------------- + +class BnOverlay : public BnInterface +{ +public: + virtual status_t onTransact( uint32_t code, + const Parcel& data, + Parcel* reply, + uint32_t flags = 0); +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android + +#endif // ANDROID_IOVERLAY_H diff --git a/include/ui/ISurface.h b/include/ui/ISurface.h index ca691f518c..ff031d5c87 100644 --- a/include/ui/ISurface.h +++ b/include/ui/ISurface.h @@ -30,6 +30,7 @@ namespace android { typedef int32_t SurfaceID; class IMemoryHeap; +class Overlay; class ISurface : public IInterface { @@ -42,6 +43,9 @@ public: virtual void postBuffer(ssize_t offset) = 0; // one-way virtual void unregisterBuffers() = 0; + + virtual sp createOverlay( + uint32_t w, uint32_t h, int32_t format) = 0; }; // ---------------------------------------------------------------------------- diff --git a/include/ui/ISurfaceFlingerClient.h b/include/ui/ISurfaceFlingerClient.h index bb2d39f54c..5b9361d5d6 100644 --- a/include/ui/ISurfaceFlingerClient.h +++ b/include/ui/ISurfaceFlingerClient.h @@ -52,7 +52,6 @@ public: struct surface_data_t { int32_t token; int32_t identity; - int32_t type; sp heap[2]; status_t readFromParcel(const Parcel& parcel); status_t writeToParcel(Parcel* parcel) const; diff --git a/include/ui/KeycodeLabels.h b/include/ui/KeycodeLabels.h index 747925de70..53c1188728 100644 --- a/include/ui/KeycodeLabels.h +++ b/include/ui/KeycodeLabels.h @@ -107,12 +107,18 @@ static const KeycodeLabel KEYCODES[] = { { "MENU", 82 }, { "NOTIFICATION", 83 }, { "SEARCH", 84 }, + { "PLAYPAUSE", 85 }, + { "STOP", 86 }, + { "NEXTSONG", 87 }, + { "PREVIOUSSONG", 88 }, + { "REWIND", 89 }, + { "FORWARD", 90 }, // NOTE: If you add a new keycode here you must also add it to: // (enum KeyCode, in this file) - // java/android/android/view/KeyEvent.java + // frameworks/base/core/java/android/view/KeyEvent.java // tools/puppet_master/PuppetMaster.nav_keys.py - // apps/common/res/values/attrs.xml + // frameworks/base/core/res/res/values/attrs.xml { NULL, 0 } }; @@ -204,7 +210,13 @@ typedef enum KeyCode { kKeyCodePlus = 81, kKeyCodeMenu = 82, kKeyCodeNotification = 83, - kKeyCodeSearch = 84 + kKeyCodeSearch = 84, + kKeyCodePlayPause = 85, + kKeyCodeStop = 86, + kKeyCodeNextSong = 87, + kKeyCodePreviousSong = 88, + kKeyCodeRewind = 89, + kKeyCodeForward = 90 } KeyCode; static const KeycodeLabel FLAGS[] = { diff --git a/include/ui/Overlay.h b/include/ui/Overlay.h new file mode 100644 index 0000000000..f24780f3aa --- /dev/null +++ b/include/ui/Overlay.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_OVERLAY_H +#define ANDROID_OVERLAY_H + +#include +#include + +#include +#include +#include +#include + +#include + +namespace android { + +class IOverlay; +class IMemory; +class IMemoryHeap; + +class Overlay : public virtual RefBase +{ +public: + Overlay(overlay_t* overlay, + const sp& o, const sp& heap); + + /* destroys this overlay */ + void destroy(); + + /* post/swaps buffers */ + status_t swapBuffers(); + + /* get the HAL handle for this overlay */ + overlay_handle_t const* getHandleRef() const; + + /* returns the offset of the current buffer */ + size_t getBufferOffset() const; + + /* returns a heap to this overlay. this may not be supported. */ + sp getHeap() const; + + /* get physical informations about the overlay */ + uint32_t getWidth() const; + uint32_t getHeight() const; + int32_t getFormat() const; + int32_t getWidthStride() const; + int32_t getHeightStride() const; + + static sp readFromParcel(const Parcel& data); + static status_t writeToParcel(Parcel* reply, const sp& o); + +private: + Overlay(overlay_handle_t*, const sp&, const sp&, + uint32_t w, uint32_t h, int32_t f, uint32_t ws, uint32_t hs); + + virtual ~Overlay(); + + sp mOverlay; + sp mHeap; + size_t mCurrentBufferOffset; + overlay_handle_t const *mOverlayHandle; + uint32_t mWidth; + uint32_t mHeight; + int32_t mFormat; + int32_t mWidthStride; + int32_t mHeightStride; +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android + +#endif // ANDROID_OVERLAY_H diff --git a/include/ui/PixelFormat.h b/include/ui/PixelFormat.h index d56a4a75c9..c61df32fd1 100644 --- a/include/ui/PixelFormat.h +++ b/include/ui/PixelFormat.h @@ -61,6 +61,7 @@ enum { PIXEL_FORMAT_RGBX_8888 = GGL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0 PIXEL_FORMAT_RGB_888 = GGL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB PIXEL_FORMAT_RGB_565 = GGL_PIXEL_FORMAT_RGB_565, // 16-bit RGB + PIXEL_FORMAT_BGRA_8888 = GGL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA PIXEL_FORMAT_RGBA_5551 = GGL_PIXEL_FORMAT_RGBA_5551, // 16-bit ARGB PIXEL_FORMAT_RGBA_4444 = GGL_PIXEL_FORMAT_RGBA_4444, // 16-bit ARGB PIXEL_FORMAT_A_8 = GGL_PIXEL_FORMAT_A_8, // 8-bit A diff --git a/include/ui/Region.h b/include/ui/Region.h index a86e6300ff..a0c4608611 100644 --- a/include/ui/Region.h +++ b/include/ui/Region.h @@ -24,7 +24,8 @@ #include #include -#include + +#include #include @@ -166,7 +167,6 @@ private: } mutable Region::iterator i; }; - // --------------------------------------------------------------------------- }; // namespace android diff --git a/include/ui/Surface.h b/include/ui/Surface.h index 0a75bf3138..2e24f8685f 100644 --- a/include/ui/Surface.h +++ b/include/ui/Surface.h @@ -48,7 +48,7 @@ public: void* base; uint32_t reserved[2]; }; - + bool isValid() const { return this && mToken>=0 && mClient!=0; } SurfaceID ID() const { return mToken; } @@ -59,18 +59,17 @@ public: void* heapBase(int i) const; uint32_t getFlags() const { return mFlags; } - int getMemoryType() const { return mMemoryType; } - + // setSwapRectangle() is mainly used by EGL void setSwapRectangle(const Rect& r); const Rect& swapRectangle() const; status_t nextBuffer(SurfaceInfo* info); - + sp dup() const; static sp readFromParcel(Parcel* parcel); static status_t writeToParcel(const sp& surface, Parcel* parcel); static bool isSameSurface(const sp& lhs, const sp& rhs); - + status_t setLayer(int32_t layer); status_t setPosition(int32_t x, int32_t y); status_t setSize(uint32_t w, uint32_t h); @@ -83,13 +82,14 @@ public: status_t setAlpha(float alpha=1.0f); status_t setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); status_t setFreezeTint(uint32_t tint); - + uint32_t getIdentity() const { return mIdentity; } private: friend class SurfaceComposerClient; - // camera needs access to the ISurface binder interface for preview + // camera and camcorder need access to the ISurface binder interface for preview friend class Camera; + friend class MediaRecorder; // mediaplayer needs access to ISurface for display friend class MediaPlayer; const sp& getISurface() const { return mSurface; } @@ -98,19 +98,19 @@ private: Surface& operator = (Surface& rhs); Surface(const Surface& rhs); - Surface(const sp& client, + Surface(const sp& client, const sp& surface, const ISurfaceFlingerClient::surface_data_t& data, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, bool owner = true); - + Surface(Surface const* rhs); ~Surface(); Region dirtyRegion() const; void setDirtyRegion(const Region& region) const; - + // this locks protects calls to lockSurface() / unlockSurface() // and is called by SurfaceComposerClient. Mutex& getLock() const { return mSurfaceLock; } @@ -118,7 +118,6 @@ private: sp mClient; sp mSurface; sp mHeap[2]; - int mMemoryType; SurfaceID mToken; uint32_t mIdentity; PixelFormat mFormat; diff --git a/include/utils/IPCThreadState.h b/include/utils/IPCThreadState.h index 47043b8170..0490fd3ec2 100644 --- a/include/utils/IPCThreadState.h +++ b/include/utils/IPCThreadState.h @@ -20,6 +20,7 @@ #include #include #include +#include #ifdef HAVE_WIN32_PROC typedef int uid_t; @@ -92,6 +93,8 @@ private: void* cookie); const sp mProcess; + Vector mPendingStrongDerefs; + Vector mPendingWeakDerefs; Parcel mIn; Parcel mOut; diff --git a/include/utils/MemoryHeapPmem.h b/include/utils/MemoryHeapPmem.h index b694b202ad..60335adaef 100644 --- a/include/utils/MemoryHeapPmem.h +++ b/include/utils/MemoryHeapPmem.h @@ -23,7 +23,7 @@ #include #include #include -#include +#include namespace android { @@ -31,11 +31,21 @@ class MemoryHeapBase; // --------------------------------------------------------------------------- -class SubRegionMemory; - class MemoryHeapPmem : public HeapInterface, public MemoryHeapBase { public: + class MemoryPmem : public BnMemory { + public: + MemoryPmem(const sp& heap); + ~MemoryPmem(); + protected: + const sp& getHeap() const { return mClientHeap; } + private: + friend class MemoryHeapPmem; + virtual void revoke() = 0; + sp mClientHeap; + }; + MemoryHeapPmem(const sp& pmemHeap, uint32_t flags = IMemoryHeap::MAP_ONCE); ~MemoryHeapPmem(); @@ -51,11 +61,16 @@ public: /* revoke all allocations made by this heap */ virtual void revoke(); - + +private: + /* use this to create your own IMemory for mapMemory */ + virtual sp createMemory(size_t offset, size_t size); + void remove(const wp& memory); + private: sp mParentHeap; mutable Mutex mLock; - Vector< wp > mAllocations; + SortedVector< wp > mAllocations; }; diff --git a/include/utils/ResourceTypes.h b/include/utils/ResourceTypes.h index 31b9aa84ba..2d56e3e263 100644 --- a/include/utils/ResourceTypes.h +++ b/include/utils/ResourceTypes.h @@ -140,8 +140,6 @@ struct Res_png_9patch void serialize(void* outData); // Deserialize/Unmarshall the patch data static Res_png_9patch* deserialize(const void* data); - // Deserialize/Unmarshall the patch data into a newly malloc-ed block - static void deserialize(const void* data, Res_png_9patch* outData); // Compute the size of the serialized data structure size_t serializedSize(); }; @@ -860,6 +858,7 @@ struct ResTable_config KEYSHIDDEN_ANY = 0x0000, KEYSHIDDEN_NO = 0x0001, KEYSHIDDEN_YES = 0x0002, + KEYSHIDDEN_SOFT = 0x0003, }; union { @@ -989,11 +988,20 @@ struct ResTable_config return diffs; } - // Return true if 'this' is more specific than 'o'. + // Return true if 'this' is more specific than 'o'. Optionally, if + // 'requested' is null, then they will also be compared against the + // requested configuration and true will only be returned if 'this' + // is a better candidate than 'o' for the configuration. This assumes that + // match() has already been used to remove any configurations that don't + // match the requested configuration at all; if they are not first filtered, + // non-matching results can be considered better than matching ones. inline bool isBetterThan(const ResTable_config& o, const ResTable_config* requested = NULL) const { + // The order of the following tests defines the importance of one + // configuration parameter over another. Those tests first are more + // important, trumping any values in those following them. if (imsi != 0 && (!requested || requested->imsi != 0)) { - if (mcc != 0 && (!requested || requested->mcc!= 0)) { + if (mcc != 0 && (!requested || requested->mcc != 0)) { if (o.mcc == 0) { return true; } @@ -1034,9 +1042,24 @@ struct ResTable_config } } if (input != 0 && (!requested || requested->input != 0)) { - if ((inputFlags&MASK_KEYSHIDDEN) != 0 && (!requested - || (requested->inputFlags&MASK_KEYSHIDDEN) != 0)) { - if ((o.inputFlags&MASK_KEYSHIDDEN) == 0) { + const int keysHidden = inputFlags&MASK_KEYSHIDDEN; + const int reqKeysHidden = requested + ? requested->inputFlags&MASK_KEYSHIDDEN : 0; + if (keysHidden != 0 && reqKeysHidden != 0) { + const int oKeysHidden = o.inputFlags&MASK_KEYSHIDDEN; + //LOGI("isBetterThan keysHidden: cur=%d, given=%d, config=%d\n", + // keysHidden, oKeysHidden, reqKeysHidden); + if (oKeysHidden == 0) { + //LOGI("Better because 0!"); + return true; + } + // For compatibility, we count KEYSHIDDEN_NO as being + // the same as KEYSHIDDEN_SOFT. Here we disambiguate these + // may making an exact match more specific. + if (keysHidden == reqKeysHidden && oKeysHidden != reqKeysHidden) { + // The current configuration is an exact match, and + // the given one is not, so the current one is better. + //LOGI("Better because other not same!"); return true; } } @@ -1078,7 +1101,8 @@ struct ResTable_config return false; } - // Return true if 'this' matches the parameters in 'settings'. + // Return true if 'this' can be considered a match for the parameters in + // 'settings'. inline bool match(const ResTable_config& settings) const { if (imsi != 0) { if (settings.mcc != 0 && mcc != 0 @@ -1121,7 +1145,14 @@ struct ResTable_config const int setKeysHidden = settings.inputFlags&MASK_KEYSHIDDEN; if (setKeysHidden != 0 && keysHidden != 0 && keysHidden != setKeysHidden) { - return false; + // For compatibility, we count a request for KEYSHIDDEN_NO as also + // matching the more recent KEYSHIDDEN_SOFT. Basically + // KEYSHIDDEN_NO means there is some kind of keyboard available. + //LOGI("Matching keysHidden: have=%d, config=%d\n", keysHidden, setKeysHidden); + if (keysHidden != KEYSHIDDEN_NO || setKeysHidden != KEYSHIDDEN_SOFT) { + //LOGI("No match!"); + return false; + } } if (settings.keyboard != 0 && keyboard != 0 && keyboard != settings.keyboard) { diff --git a/include/utils/TimeUtils.h b/include/utils/TimeUtils.h index 30e533036c..b19e02126b 100644 --- a/include/utils/TimeUtils.h +++ b/include/utils/TimeUtils.h @@ -17,10 +17,11 @@ #ifndef ANDROID_TIME_H #define ANDROID_TIME_H +#include +#include #include #include #include -#include #include #include @@ -58,7 +59,7 @@ public: Time(); void switchTimezone(const char *timezone); - String8 format(const char *format) const; + String8 format(const char *format, const struct strftime_locale *locale) const; void format2445(short* buf, bool hasTime) const; String8 toString() const; void setToNow(); diff --git a/include/utils/string_array.h b/include/utils/string_array.h index ede0644cbc..064dda2248 100644 --- a/include/utils/string_array.h +++ b/include/utils/string_array.h @@ -111,6 +111,19 @@ public: return mArray[idx]; } + // + // Set entry N to specified string. + // [should use operator[] here] + // + void setEntry(int idx, const char* str) { + if (idx < 0 || idx >= mCurrent) + return; + delete[] mArray[idx]; + int len = strlen(str); + mArray[idx] = new char[len+1]; + memcpy(mArray[idx], str, len+1); + } + private: int mMax; int mCurrent; diff --git a/libs/audioflinger/A2dpAudioInterface.cpp b/libs/audioflinger/A2dpAudioInterface.cpp new file mode 100644 index 0000000000..d54795cc16 --- /dev/null +++ b/libs/audioflinger/A2dpAudioInterface.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#define LOG_NDEBUG 0 +#define LOG_TAG "A2dpAudioInterface" +#include +#include + +#include "A2dpAudioInterface.h" +#include "audio/liba2dp.h" + + +namespace android { + +// ---------------------------------------------------------------------------- + +A2dpAudioInterface::A2dpAudioInterface() : + mOutput(0) +{ +} + +A2dpAudioInterface::~A2dpAudioInterface() +{ + delete mOutput; +} + +status_t A2dpAudioInterface::initCheck() +{ + return 0; +} + +AudioStreamOut* A2dpAudioInterface::openOutputStream( + int format, int channelCount, uint32_t sampleRate, status_t *status) +{ + LOGD("A2dpAudioInterface::openOutputStream %d, %d, %d\n", format, channelCount, sampleRate); + Mutex::Autolock lock(mLock); + status_t err = 0; + + // only one output stream allowed + if (mOutput) { + if (status) + *status = -1; + return NULL; + } + + // create new output stream + A2dpAudioStreamOut* out = new A2dpAudioStreamOut(); + if ((err = out->set(format, channelCount, sampleRate)) == NO_ERROR) { + mOutput = out; + } else { + delete out; + } + + if (status) + *status = err; + return mOutput; +} + +AudioStreamIn* A2dpAudioInterface::openInputStream( + int format, int channelCount, uint32_t sampleRate, status_t *status) +{ + if (status) + *status = -1; + return NULL; +} + +status_t A2dpAudioInterface::standby() +{ + return 0; +} + +status_t A2dpAudioInterface::setMicMute(bool state) +{ + return 0; +} + +status_t A2dpAudioInterface::getMicMute(bool* state) +{ + return 0; +} + +status_t A2dpAudioInterface::setParameter(const char *key, const char *value) +{ + LOGD("setParameter %s,%s\n", key, value); + return 0; +} + +status_t A2dpAudioInterface::setVoiceVolume(float v) +{ + return 0; +} + +status_t A2dpAudioInterface::setMasterVolume(float v) +{ + return 0; +} + +status_t A2dpAudioInterface::doRouting() +{ + return 0; +} + +status_t A2dpAudioInterface::dump(int fd, const Vector& args) +{ + return 0; +} + +// ---------------------------------------------------------------------------- + +A2dpAudioInterface::A2dpAudioStreamOut::A2dpAudioStreamOut() : + mFd(-1), mStartCount(0), mRetryCount(0), mData(NULL), + mInitialized(false), mBufferRemaining(0) +{ +} + +status_t A2dpAudioInterface::A2dpAudioStreamOut::set( + int format, int channels, uint32_t rate) +{ + LOGD("A2dpAudioStreamOut::set %d, %d, %d\n", format, channels, rate); + + // fix up defaults + if (format == 0) format = AudioSystem::PCM_16_BIT; + if (channels == 0) channels = channelCount(); + if (rate == 0) rate = sampleRate(); + + // check values + if ((format != AudioSystem::PCM_16_BIT) || + (channels != channelCount()) || + (rate != sampleRate())) + return BAD_VALUE; + + return NO_ERROR; +} + +A2dpAudioInterface::A2dpAudioStreamOut::~A2dpAudioStreamOut() +{ + if (mData) + a2dp_cleanup(mData); +} + +ssize_t A2dpAudioInterface::A2dpAudioStreamOut::write(const void* buffer, size_t bytes) +{ + if (!mInitialized) { + int ret = a2dp_init("00:00:00:00:00:00", 44100, 2, &mData); + if (ret) + return ret; + mInitialized = true; + } + + size_t remaining = bytes; + while (remaining > 0) { + int written = a2dp_write(mData, buffer, remaining); + remaining -= written; + buffer = ((char *)buffer) + written; + } + + return bytes; +} + +status_t A2dpAudioInterface::A2dpAudioStreamOut::standby() +{ + return 0; +} + +status_t A2dpAudioInterface::A2dpAudioStreamOut::dump(int fd, const Vector& args) +{ + return NO_ERROR; +} + + +}; // namespace android diff --git a/libs/audioflinger/A2dpAudioInterface.h b/libs/audioflinger/A2dpAudioInterface.h new file mode 100644 index 0000000000..03bf933371 --- /dev/null +++ b/libs/audioflinger/A2dpAudioInterface.h @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef A2DP_AUDIO_HARDWARE_H +#define A2DP_AUDIO_HARDWARE_H + +#include +#include + +#include + +#include + + +namespace android { + +class A2dpAudioInterface : public AudioHardwareBase +{ + class A2dpAudioStreamOut; + +public: + A2dpAudioInterface(); + virtual ~A2dpAudioInterface(); + virtual status_t initCheck(); + virtual status_t standby(); + + virtual status_t setVoiceVolume(float volume); + virtual status_t setMasterVolume(float volume); + + // mic mute + virtual status_t setMicMute(bool state); + virtual status_t getMicMute(bool* state); + + // Temporary interface, do not use + // TODO: Replace with a more generic key:value get/set mechanism + virtual status_t setParameter(const char *key, const char *value); + + // create I/O streams + virtual AudioStreamOut* openOutputStream( + int format=0, + int channelCount=0, + uint32_t sampleRate=0, + status_t *status=0); + + virtual AudioStreamIn* openInputStream( + int format, + int channelCount, + uint32_t sampleRate, + status_t *status); + +protected: + virtual status_t doRouting(); + virtual status_t dump(int fd, const Vector& args); + +private: + class A2dpAudioStreamOut : public AudioStreamOut { + public: + A2dpAudioStreamOut(); + virtual ~A2dpAudioStreamOut(); + status_t set(int format, + int channelCount, + uint32_t sampleRate); + virtual uint32_t sampleRate() const { return 44100; } + // must be 32-bit aligned - driver only seems to like 4800 + virtual size_t bufferSize() const { return 5120; } + virtual int channelCount() const { return 2; } + virtual int format() const { return AudioSystem::PCM_16_BIT; } + virtual uint32_t latency() const { return 0; } + virtual status_t setVolume(float volume) { return INVALID_OPERATION; } + virtual ssize_t write(const void* buffer, size_t bytes); + status_t standby(); + virtual status_t dump(int fd, const Vector& args); + + private: + int mFd; + int mStartCount; + int mRetryCount; + void* mData; + bool mInitialized; + +#define kBufferSize 50000 + char mBuffer[kBufferSize]; + int mBufferRemaining; + }; + + Mutex mLock; + A2dpAudioStreamOut* mOutput; +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android + +#endif // A2DP_AUDIO_HARDWARE_H diff --git a/libs/audioflinger/Android.mk b/libs/audioflinger/Android.mk index a9cb303764..d16e3e14b0 100644 --- a/libs/audioflinger/Android.mk +++ b/libs/audioflinger/Android.mk @@ -45,9 +45,12 @@ endif LOCAL_MODULE:= libaudioflinger -ifeq ($(TARGET_ARCH),arm) # not simulator - LOCAL_CFLAGS += -DWITH_BLUETOOTH +ifeq ($(BOARD_HAVE_BLUETOOTH),true) + LOCAL_SRC_FILES += A2dpAudioInterface.cpp + LOCAL_SHARED_LIBRARIES += liba2dp + LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP LOCAL_C_INCLUDES += $(call include-path-for, bluez-libs) + LOCAL_C_INCLUDES += $(call include-path-for, bluez-utils) endif include $(BUILD_SHARED_LIBRARY) diff --git a/libs/audioflinger/AudioDumpInterface.cpp b/libs/audioflinger/AudioDumpInterface.cpp index 5ff2f18b27..8eee9cc525 100644 --- a/libs/audioflinger/AudioDumpInterface.cpp +++ b/libs/audioflinger/AudioDumpInterface.cpp @@ -2,16 +2,16 @@ ** ** Copyright 2008, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ @@ -28,6 +28,8 @@ namespace android { +bool gFirst = true; // true if first write after a standby + // ---------------------------------------------------------------------------- AudioDumpInterface::AudioDumpInterface(AudioHardwareInterface* hw) @@ -40,17 +42,25 @@ AudioDumpInterface::AudioDumpInterface(AudioHardwareInterface* hw) } +AudioDumpInterface::~AudioDumpInterface() +{ + if(mFinalInterface) delete mFinalInterface; + if(mStreamOut) delete mStreamOut; +} + + status_t AudioDumpInterface::standby() { if(mStreamOut) mStreamOut->Close(); + gFirst = true; return mFinalInterface->standby(); } AudioStreamOut* AudioDumpInterface::openOutputStream( - int format, int channelCount, uint32_t sampleRate) + int format, int channelCount, uint32_t sampleRate, status_t *status) { - AudioStreamOut* outFinal = mFinalInterface->openOutputStream(format, channelCount, sampleRate); + AudioStreamOut* outFinal = mFinalInterface->openOutputStream(format, channelCount, sampleRate, status); if(outFinal) { mStreamOut = new AudioStreamOutDump(outFinal); @@ -69,13 +79,26 @@ AudioStreamOutDump::AudioStreamOutDump( AudioStreamOut* finalStream) mOutFile = 0; } + +AudioStreamOutDump::~AudioStreamOutDump() +{ + Close(); + delete mFinalStream; +} + ssize_t AudioStreamOutDump::write(const void* buffer, size_t bytes) { ssize_t ret; - + ret = mFinalStream->write(buffer, bytes); - if(!mOutFile) { - mOutFile = fopen(FLINGER_DUMP_NAME, "ab"); + if(!mOutFile && gFirst) { + gFirst = false; + // check if dump file exist + mOutFile = fopen(FLINGER_DUMP_NAME, "r"); + if(mOutFile) { + fclose(mOutFile); + mOutFile = fopen(FLINGER_DUMP_NAME, "ab"); + } } if (mOutFile) { fwrite(buffer, bytes, 1, mOutFile); diff --git a/libs/audioflinger/AudioDumpInterface.h b/libs/audioflinger/AudioDumpInterface.h index 732b97d7bc..a65e56abbb 100644 --- a/libs/audioflinger/AudioDumpInterface.h +++ b/libs/audioflinger/AudioDumpInterface.h @@ -2,16 +2,16 @@ ** ** Copyright 2008, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ @@ -21,33 +21,35 @@ #include #include -#include +#include namespace android { -#define FLINGER_DUMP_NAME "/tmp/FlingerOut.pcm" // name of file used for dump +#define FLINGER_DUMP_NAME "/data/FlingerOut.pcm" // name of file used for dump class AudioStreamOutDump : public AudioStreamOut { public: AudioStreamOutDump( AudioStreamOut* FinalStream); + ~AudioStreamOutDump(); virtual ssize_t write(const void* buffer, size_t bytes); - + virtual uint32_t sampleRate() const { return mFinalStream->sampleRate(); } virtual size_t bufferSize() const { return mFinalStream->bufferSize(); } virtual int channelCount() const { return mFinalStream->channelCount(); } virtual int format() const { return mFinalStream->format(); } + virtual uint32_t latency() const { return mFinalStream->latency(); } virtual status_t setVolume(float volume) { return mFinalStream->setVolume(volume); } virtual status_t dump(int fd, const Vector& args) { return mFinalStream->dump(fd, args); } void Close(void); private: - AudioStreamOut *mFinalStream; - FILE *mOutFile; // output file + AudioStreamOut *mFinalStream; + FILE *mOutFile; // output file }; -class AudioDumpInterface : public AudioHardwareInterface +class AudioDumpInterface : public AudioHardwareBase { public: @@ -56,10 +58,10 @@ public: virtual AudioStreamOut* openOutputStream( int format=0, int channelCount=0, - uint32_t sampleRate=0); + uint32_t sampleRate=0, + status_t *status=0); + virtual ~AudioDumpInterface(); - virtual ~AudioDumpInterface() - {delete mFinalInterface;} virtual status_t initCheck() {return mFinalInterface->initCheck();} virtual status_t setVoiceVolume(float volume) @@ -67,13 +69,6 @@ public: virtual status_t setMasterVolume(float volume) {return mFinalInterface->setMasterVolume(volume);} - virtual status_t setRouting(int mode, uint32_t routes) - {return mFinalInterface->setRouting(mode, routes);} - virtual status_t getRouting(int mode, uint32_t* routes) - {return mFinalInterface->getRouting(mode, routes);} - virtual status_t getMode(int* mode) - {return mFinalInterface->getMode(mode);} - // mic mute virtual status_t setMicMute(bool state) {return mFinalInterface->setMicMute(state);} @@ -83,17 +78,17 @@ public: virtual status_t setParameter(const char* key, const char* value) {return mFinalInterface->setParameter(key, value);} - virtual AudioStreamIn* openInputStream( int format, int channelCount, uint32_t sampleRate) - {return mFinalInterface->openInputStream( format, channelCount, sampleRate);} + virtual AudioStreamIn* openInputStream( int format, int channelCount, uint32_t sampleRate, status_t *status) + {return mFinalInterface->openInputStream( format, channelCount, sampleRate, status);} virtual status_t dump(int fd, const Vector& args) { return mFinalInterface->dumpState(fd, args); } protected: - virtual status_t doRouting() {return 0;} - + virtual status_t doRouting() {return mFinalInterface->setRouting(mMode, mRoutes[mMode]);} + AudioHardwareInterface *mFinalInterface; AudioStreamOutDump *mStreamOut; - + }; }; // namespace android diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp index fb2162960b..53b18ad1a0 100644 --- a/libs/audioflinger/AudioFlinger.cpp +++ b/libs/audioflinger/AudioFlinger.cpp @@ -31,6 +31,8 @@ #include #include +#include + #include #include @@ -41,9 +43,13 @@ #include "AudioMixer.h" #include "AudioFlinger.h" +#ifdef WITH_A2DP +#include "A2dpAudioInterface.h" +#endif + namespace android { -static const nsecs_t kStandbyTimeInNsecs = seconds(3); +//static const nsecs_t kStandbyTimeInNsecs = seconds(3); static const unsigned long kBufferRecoveryInUsecs = 2000; static const unsigned long kMaxBufferRecoveryInUsecs = 20000; static const float MAX_GAIN = 4096.0f; @@ -93,8 +99,9 @@ static bool settingsAllowed() { AudioFlinger::AudioFlinger() : BnAudioFlinger(), Thread(false), - mMasterVolume(0), mMasterMute(true), - mAudioMixer(0), mAudioHardware(0), mOutput(0), mAudioRecordThread(0), + mMasterVolume(0), mMasterMute(true), mHardwareAudioMixer(0), mA2dpAudioMixer(0), + mAudioMixer(0), mAudioHardware(0), mA2dpAudioInterface(0), + mHardwareOutput(0), mA2dpOutput(0), mOutput(0), mAudioRecordThread(0), mSampleRate(0), mFrameCount(0), mChannelCount(0), mFormat(0), mMixBuffer(0), mLastWriteTime(0), mNumWrites(0), mNumDelayedWrites(0), mStandby(false), mInWrite(false) @@ -105,17 +112,14 @@ AudioFlinger::AudioFlinger() if (mAudioHardware->initCheck() == NO_ERROR) { // open 16-bit output stream for s/w mixer mHardwareStatus = AUDIO_HW_OUTPUT_OPEN; - mOutput = mAudioHardware->openOutputStream(AudioSystem::PCM_16_BIT); + status_t status; + mHardwareOutput = mAudioHardware->openOutputStream(AudioSystem::PCM_16_BIT, 0, 0, &status); mHardwareStatus = AUDIO_HW_IDLE; - if (mOutput) { - mSampleRate = mOutput->sampleRate(); - mChannelCount = mOutput->channelCount(); - mFormat = mOutput->format(); - mMixBufferSize = mOutput->bufferSize(); - mFrameCount = mMixBufferSize / mChannelCount / sizeof(int16_t); - mMixBuffer = new int16_t[mFrameCount * mChannelCount]; - memset(mMixBuffer, 0, mMixBufferSize); - mAudioMixer = new AudioMixer(mFrameCount, mSampleRate); + if (mHardwareOutput) { + mSampleRate = mHardwareOutput->sampleRate(); + mHardwareAudioMixer = new AudioMixer(getOutputFrameCount(mHardwareOutput), mSampleRate); + setOutput(mHardwareOutput); + // FIXME - this should come from settings setMasterVolume(1.0f); setRouting(AudioSystem::MODE_NORMAL, AudioSystem::ROUTE_SPEAKER, AudioSystem::ROUTE_ALL); @@ -124,20 +128,87 @@ AudioFlinger::AudioFlinger() setMode(AudioSystem::MODE_NORMAL); mMasterMute = false; } else { - LOGE("Failed to initialize output stream"); + LOGE("Failed to initialize output stream, status: %d", status); } - } else { + +#ifdef WITH_A2DP + // Create A2DP interface + mA2dpAudioInterface = new A2dpAudioInterface(); + mA2dpOutput = mA2dpAudioInterface->openOutputStream(AudioSystem::PCM_16_BIT, 0, 0, &status); + mA2dpAudioMixer = new AudioMixer(getOutputFrameCount(mA2dpOutput), mA2dpOutput->sampleRate()); + + // create a buffer big enough for both hardware and A2DP audio output. + size_t hwFrameCount = getOutputFrameCount(mHardwareOutput); + size_t a2dpFrameCount = getOutputFrameCount(mA2dpOutput); + size_t frameCount = (hwFrameCount > a2dpFrameCount ? hwFrameCount : a2dpFrameCount); +#else + size_t frameCount = getOutputFrameCount(mHardwareOutput); +#endif + // FIXME - Current mixer implementation only supports stereo output: Always + // Allocate a stereo buffer even if HW output is mono. + mMixBuffer = new int16_t[frameCount * 2]; + memset(mMixBuffer, 0, frameCount * 2 * sizeof(int16_t)); + + // Start record thread + mAudioRecordThread = new AudioRecordThread(mAudioHardware); + if (mAudioRecordThread != 0) { + mAudioRecordThread->run("AudioRecordThread", PRIORITY_URGENT_AUDIO); + } + } else { LOGE("Couldn't even initialize the stubbed audio hardware!"); } + + char value[PROPERTY_VALUE_MAX]; + // FIXME: What property should this be??? + property_get("ro.audio.silent", value, "0"); + if (atoi(value)) { + LOGD("Silence is golden"); + mMasterMute = true; + } } AudioFlinger::~AudioFlinger() { + if (mAudioRecordThread != 0) { + mAudioRecordThread->exit(); + mAudioRecordThread.clear(); + } delete mOutput; + delete mA2dpOutput; delete mAudioHardware; + delete mA2dpAudioInterface; delete [] mMixBuffer; - delete mAudioMixer; - mAudioRecordThread.clear(); + delete mHardwareAudioMixer; + delete mA2dpAudioMixer; +} + +void AudioFlinger::setOutput(AudioStreamOut* output) +{ + // lock on mOutputLock to prevent threadLoop() from starving us + Mutex::Autolock _l2(mOutputLock); + + // to synchronize with threadLoop() + Mutex::Autolock _l(mLock); + + if (mOutput != output) { + mSampleRate = output->sampleRate(); + mChannelCount = output->channelCount(); + + // FIXME - Current mixer implementation only supports stereo output + if (mChannelCount == 1) { + LOGE("Invalid audio hardware channel count"); + } + mFormat = output->format(); + mFrameCount = getOutputFrameCount(output); + + mAudioMixer = (output == mA2dpOutput ? mA2dpAudioMixer : mHardwareAudioMixer); + mOutput = output; + } +} + +size_t AudioFlinger::getOutputFrameCount(AudioStreamOut* output) +{ + return output->bufferSize() / output->channelCount() / sizeof(int16_t); } status_t AudioFlinger::dumpClients(int fd, const Vector& args) @@ -201,8 +272,8 @@ status_t AudioFlinger::dumpInternals(int fd, const Vector& args) const size_t SIZE = 256; char buffer[SIZE]; String8 result; - - snprintf(buffer, SIZE, "AudioMixer tracks: %08x\n", audioMixer().trackNames()); + + snprintf(buffer, SIZE, "AudioMixer tracks: %08x\n", audioMixer()->trackNames()); result.append(buffer); snprintf(buffer, SIZE, "last write occurred (msecs): %llu\n", ns2ms(systemTime() - mLastWriteTime)); result.append(buffer); @@ -254,17 +325,26 @@ status_t AudioFlinger::dump(int fd, const Vector& args) // Thread virtuals bool AudioFlinger::threadLoop() { - nsecs_t maxPeriod = seconds(mFrameCount) / mSampleRate * 2; unsigned long sleepTime = kBufferRecoveryInUsecs; - const size_t mixBufferSize = mFrameCount*mChannelCount*sizeof(int16_t); int16_t* curBuf = mMixBuffer; Vector< sp > tracksToRemove; - size_t enabledTracks; + size_t enabledTracks = 0; nsecs_t standbyTime = systemTime(); + AudioMixer* mixer = 0; + size_t frameCount = 0; + int channelCount = 0; + uint32_t sampleRate = 0; + AudioStreamOut* output = 0; do { enabledTracks = 0; - { // scope for the lock + { // scope for the mLock + + // locking briefly on the secondary mOutputLock is necessary to avoid + // having this thread starve the thread that called setOutput() + mOutputLock.lock(); + mOutputLock.unlock(); + Mutex::Autolock _l(mLock); const SortedVector< wp >& activeTracks = mActiveTracks; @@ -286,6 +366,15 @@ bool AudioFlinger::threadLoop() continue; } + // get active mixer and output parameter while the lock is held and keep them + // consistent till the next loop. + + mixer = audioMixer(); + frameCount = mFrameCount; + channelCount = mChannelCount; + sampleRate = mSampleRate; + output = mOutput; + // find out which tracks need to be processed size_t count = activeTracks.size(); for (size_t i=0 ; icblk(); - uint32_t u = cblk->user; - uint32_t s = cblk->server; // The first time a track is added we wait // for all its buffers to be filled before processing it - audioMixer().setActiveTrack(track->name()); - if ((u > s) && (track->isReady(u, s) || track->isStopped()) && + mixer->setActiveTrack(track->name()); + if (cblk->framesReady() && (track->isReady() || track->isStopped()) && !track->isPaused()) { //LOGD("u=%08x, s=%08x [OK]", u, s); @@ -325,9 +412,8 @@ bool AudioFlinger::threadLoop() } // XXX: these things DON'T need to be done each time - AudioMixer& mixer(audioMixer()); - mixer.setBufferProvider(track); - mixer.enable(AudioMixer::MIXING); + mixer->setBufferProvider(track); + mixer->enable(AudioMixer::MIXING); int param; if ( track->mFillingUpStatus == Track::FS_FILLED) { @@ -342,15 +428,15 @@ bool AudioFlinger::threadLoop() } else { param = AudioMixer::RAMP_VOLUME; } - mixer.setParameter(param, AudioMixer::VOLUME0, left); - mixer.setParameter(param, AudioMixer::VOLUME1, right); - mixer.setParameter( + mixer->setParameter(param, AudioMixer::VOLUME0, left); + mixer->setParameter(param, AudioMixer::VOLUME1, right); + mixer->setParameter( AudioMixer::TRACK, AudioMixer::FORMAT, track->format()); - mixer.setParameter( + mixer->setParameter( AudioMixer::TRACK, AudioMixer::CHANNEL_COUNT, track->channelCount()); - mixer.setParameter( + mixer->setParameter( AudioMixer::RESAMPLE, AudioMixer::SAMPLE_RATE, int(cblk->sampleRate)); @@ -361,8 +447,7 @@ bool AudioFlinger::threadLoop() } else { //LOGD("u=%08x, s=%08x [NOT READY]", u, s); if (track->isStopped()) { - track->mFillingUpStatus = Track::FS_FILLING; - track->mFlags = 0; + track->reset(); } if (track->isTerminated() || track->isStopped() || track->isPaused()) { // We have consumed all the buffers of this track. @@ -378,7 +463,7 @@ bool AudioFlinger::threadLoop() } } // LOGV("disable(%d)", track->name()); - audioMixer().disable(AudioMixer::MIXING); + mixer->disable(AudioMixer::MIXING); } } @@ -390,26 +475,27 @@ bool AudioFlinger::threadLoop() mActiveTracks.remove(track); if (track->isTerminated()) { mTracks.remove(track); - audioMixer().deleteTrackName(track->mName); + mixer->deleteTrackName(track->mName); } } - } - } - + } + } if (LIKELY(enabledTracks)) { // mix buffers... - audioMixer().process(curBuf); + mixer->process(curBuf); // output audio to hardware mLastWriteTime = systemTime(); mInWrite = true; - mOutput->write(curBuf, mixBufferSize); + size_t mixBufferSize = frameCount*channelCount*sizeof(int16_t); + output->write(curBuf, mixBufferSize); mNumWrites++; mInWrite = false; mStandby = false; nsecs_t temp = systemTime(); standbyTime = temp + kStandbyTimeInNsecs; nsecs_t delta = temp - mLastWriteTime; + nsecs_t maxPeriod = seconds(frameCount) / sampleRate * 2; if (delta > maxPeriod) { LOGW("write blocked for %llu msecs", ns2ms(delta)); mNumDelayedWrites++; @@ -458,43 +544,60 @@ sp AudioFlinger::createTrack( uint32_t sampleRate, int format, int channelCount, - int bufferCount, - uint32_t flags) + int frameCount, + uint32_t flags, + const sp& sharedBuffer, + status_t *status) { + sp track; + sp trackHandle; + sp client; + wp wclient; + status_t lStatus; + if (streamType >= AudioTrack::NUM_STREAM_TYPES) { LOGE("invalid stream type"); - return NULL; + lStatus = BAD_VALUE; + goto Exit; } - if (sampleRate > MAX_SAMPLE_RATE) { + // Resampler implementation limits input sampling rate to 2 x output sampling rate. + if (sampleRate > MAX_SAMPLE_RATE || sampleRate > mSampleRate*2) { LOGE("Sample rate out of range: %d", sampleRate); - return NULL; + lStatus = BAD_VALUE; + goto Exit; } - sp track; - sp trackHandle; - Mutex::Autolock _l(mLock); + { + Mutex::Autolock _l(mLock); - if (mSampleRate == 0) { - LOGE("Audio driver not initialized."); - return trackHandle; - } + if (mSampleRate == 0) { + LOGE("Audio driver not initialized."); + lStatus = NO_INIT; + goto Exit; + } - sp client; - wp wclient = mClients.valueFor(pid); + wclient = mClients.valueFor(pid); - if (wclient != NULL) { - client = wclient.promote(); - } else { - client = new Client(this, pid); - mClients.add(pid, client); + if (wclient != NULL) { + client = wclient.promote(); + } else { + client = new Client(this, pid); + mClients.add(pid, client); + } + + track = new Track(this, client, streamType, sampleRate, format, + channelCount, frameCount, sharedBuffer); + mTracks.add(track); + trackHandle = new TrackHandle(track); + + lStatus = NO_ERROR; } - // FIXME: Buffer size should be based on sample rate for consistent latency - track = new Track(this, client, streamType, sampleRate, format, - channelCount, bufferCount, channelCount == 1 ? mMixBufferSize>>1 : mMixBufferSize); - mTracks.add(track); - trackHandle = new TrackHandle(track); +Exit: + if(status) { + *status = lStatus; + } return trackHandle; } @@ -518,6 +621,16 @@ size_t AudioFlinger::frameCount() const return mFrameCount; } +uint32_t AudioFlinger::latency() const +{ + if (mOutput) { + return mOutput->latency(); + } + else { + return 0; + } +} + status_t AudioFlinger::setMasterVolume(float value) { // check calling permissions @@ -549,6 +662,21 @@ status_t AudioFlinger::setRouting(int mode, uint32_t routes, uint32_t mask) return BAD_VALUE; } +#ifdef WITH_A2DP + LOGD("setRouting %d %d %d\n", mode, routes, mask); + if (mode == AudioSystem::MODE_NORMAL && + (mask & AudioSystem::ROUTE_BLUETOOTH_A2DP)) { + if (routes & AudioSystem::ROUTE_BLUETOOTH_A2DP) { + LOGD("set output to A2DP\n"); + setOutput(mA2dpOutput); + } else { + LOGD("set output to hardware audio\n"); + setOutput(mHardwareOutput); + } + LOGD("setOutput done\n"); + } +#endif + AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_HW_GET_ROUTING; uint32_t r; @@ -656,7 +784,7 @@ status_t AudioFlinger::setStreamVolume(int stream, float value) if (uint32_t(stream) >= AudioTrack::NUM_STREAM_TYPES) { return BAD_VALUE; } - + mStreamTypes[stream].volume = value; status_t ret = NO_ERROR; if (stream == AudioTrack::VOICE_CALL) { @@ -750,6 +878,7 @@ status_t AudioFlinger::addTrack(const sp& track) // buffers before playing. This is to ensure the client will // effectively get the latency it requested. track->mFillingUpStatus = Track::FS_FILLING; + track->mResetDone = false; mActiveTracks.add(track); return NO_ERROR; } @@ -771,7 +900,7 @@ void AudioFlinger::remove_track_l(wp track, int name) if (t!=NULL) { t->reset(); } - audioMixer().deleteTrackName(name); + audioMixer()->deleteTrackName(name); mActiveTracks.remove(track); mWaitWorkCV.broadcast(); } @@ -789,7 +918,7 @@ void AudioFlinger::destroyTrack(const sp& track) if (mActiveTracks.indexOf(track) < 0) { LOGV("remove track (%d) and delete from mixer", track->name()); mTracks.remove(track); - audioMixer().deleteTrackName(keep->name()); + audioMixer()->deleteTrackName(keep->name()); } } @@ -823,38 +952,53 @@ AudioFlinger::TrackBase::TrackBase( uint32_t sampleRate, int format, int channelCount, - int bufferCount, - int bufferSize) + int frameCount, + const sp& sharedBuffer) : RefBase(), mAudioFlinger(audioFlinger), mClient(client), mStreamType(streamType), - mFormat(format), - mChannelCount(channelCount), - mBufferCount(bufferCount), - mFlags(0), - mBufferSize(bufferSize), + mFrameCount(0), mState(IDLE), - mClientTid(-1) + mClientTid(-1), + mFormat(format), + mFlags(0) { - mName = audioFlinger->audioMixer().getTrackName(); + mName = audioFlinger->audioMixer()->getTrackName(); if (mName < 0) { LOGE("no more track names availlable"); return; } + LOGV_IF(sharedBuffer != 0, "sharedBuffer: %p, size: %d", sharedBuffer->pointer(), sharedBuffer->size()); + + // LOGD("Creating track with %d buffers @ %d bytes", bufferCount, bufferSize); - size_t size = sizeof(audio_track_cblk_t) + bufferCount * bufferSize; + size_t size = sizeof(audio_track_cblk_t); + size_t bufferSize = frameCount*channelCount*sizeof(int16_t); + if (sharedBuffer == 0) { + size += bufferSize; + } + mCblkMemory = client->heap()->allocate(size); if (mCblkMemory != 0) { mCblk = static_cast(mCblkMemory->pointer()); if (mCblk) { // construct the shared structure in-place. new(mCblk) audio_track_cblk_t(); // clear all buffers - mCblk->size = bufferSize; + mCblk->frameCount = frameCount; mCblk->sampleRate = sampleRate; - mBuffers = (char*)mCblk + sizeof(audio_track_cblk_t); - memset(mBuffers, 0, bufferCount * bufferSize); + mCblk->channels = channelCount; + if (sharedBuffer == 0) { + mBuffer = (char*)mCblk + sizeof(audio_track_cblk_t); + memset(mBuffer, 0, frameCount*channelCount*sizeof(int16_t)); + // Force underrun condition to avoid false underrun callback until first data is + // written to buffer + mCblk->flowControlFlag = 1; + } else { + mBuffer = sharedBuffer->pointer(); + } + mBufferEnd = (uint8_t *)mBuffer + bufferSize; } } else { LOGE("not enough memory for AudioTrack size=%u", size); @@ -873,15 +1017,16 @@ AudioFlinger::TrackBase::~TrackBase() void AudioFlinger::TrackBase::releaseBuffer(AudioBufferProvider::Buffer* buffer) { buffer->raw = 0; - buffer->frameCount = 0; + mFrameCount = buffer->frameCount; step(); + buffer->frameCount = 0; } bool AudioFlinger::TrackBase::step() { bool result; audio_track_cblk_t* cblk = this->cblk(); - - result = cblk->stepServer(bufferCount()); + + result = cblk->stepServer(mFrameCount); if (!result) { LOGV("stepServer failed acquiring cblk mutex"); mFlags |= STEPSERVER_FAILED; @@ -894,7 +1039,10 @@ void AudioFlinger::TrackBase::reset() { cblk->user = 0; cblk->server = 0; - mFlags = 0; + cblk->userBase = 0; + cblk->serverBase = 0; + mFlags = 0; + LOGV("TrackBase::reset"); } sp AudioFlinger::TrackBase::getCblk() const @@ -906,6 +1054,27 @@ int AudioFlinger::TrackBase::sampleRate() const { return mCblk->sampleRate; } +int AudioFlinger::TrackBase::channelCount() const { + return mCblk->channels; +} + +void* AudioFlinger::TrackBase::getBuffer(uint32_t offset, uint32_t frames) const { + audio_track_cblk_t* cblk = this->cblk(); + int16_t *bufferStart = (int16_t *)mBuffer + (offset-cblk->serverBase)*cblk->channels; + int16_t *bufferEnd = bufferStart + frames * cblk->channels; + + // Check validity of returned pointer in case the track control block would have been corrupted. + if (bufferStart < mBuffer || bufferStart > bufferEnd || bufferEnd > mBufferEnd) { + LOGW("TrackBase::getBuffer buffer out of range:\n start: %p, end %p , mBuffer %p mBufferEnd %p\n \ + server %d, serverBase %d, user %d, userBase %d", + bufferStart, bufferEnd, mBuffer, mBufferEnd, + cblk->server, cblk->serverBase, cblk->user, cblk->userBase); + return 0; + } + + return bufferStart; +} + // ---------------------------------------------------------------------------- AudioFlinger::Track::Track( @@ -915,13 +1084,14 @@ AudioFlinger::Track::Track( uint32_t sampleRate, int format, int channelCount, - int bufferCount, - int bufferSize) - : TrackBase(audioFlinger, client, streamType, sampleRate, format, channelCount, bufferCount, bufferSize) + int frameCount, + const sp& sharedBuffer) + : TrackBase(audioFlinger, client, streamType, sampleRate, format, channelCount, frameCount, sharedBuffer) { mVolume[0] = 1.0f; mVolume[1] = 1.0f; mMute = false; + mSharedBuffer = sharedBuffer; } AudioFlinger::Track::~Track() @@ -943,8 +1113,8 @@ void AudioFlinger::Track::dump(char* buffer, size_t size) mClient->pid(), mStreamType, mFormat, - mChannelCount, - mBufferCount, + mCblk->channels, + mFrameCount, mState, mMute, mFillingUpStatus, @@ -958,36 +1128,50 @@ void AudioFlinger::Track::dump(char* buffer, size_t size) status_t AudioFlinger::Track::getNextBuffer(AudioBufferProvider::Buffer* buffer) { audio_track_cblk_t* cblk = this->cblk(); - uint32_t u = cblk->user; - uint32_t s = cblk->server; - - // Check if last stepServer failed, try to step now + uint32_t framesReady; + uint32_t framesReq = buffer->frameCount; + + // Check if last stepServer failed, try to step now if (mFlags & TrackBase::STEPSERVER_FAILED) { if (!step()) goto getNextBuffer_exit; LOGV("stepServer recovered"); mFlags &= ~TrackBase::STEPSERVER_FAILED; } - if (LIKELY(u > s)) { - int index = s & audio_track_cblk_t::BUFFER_MASK; - buffer->raw = getBuffer(index); - buffer->frameCount = mAudioFlinger->frameCount(); - return NO_ERROR; + framesReady = cblk->framesReady(); + + if (LIKELY(framesReady)) { + uint32_t s = cblk->server; + uint32_t bufferEnd = cblk->serverBase + cblk->frameCount; + + bufferEnd = (cblk->loopEnd < bufferEnd) ? cblk->loopEnd : bufferEnd; + if (framesReq > framesReady) { + framesReq = framesReady; + } + if (s + framesReq > bufferEnd) { + framesReq = bufferEnd - s; + } + + buffer->raw = getBuffer(s, framesReq); + if (buffer->raw == 0) goto getNextBuffer_exit; + + buffer->frameCount = framesReq; + return NO_ERROR; } + getNextBuffer_exit: buffer->raw = 0; buffer->frameCount = 0; return NOT_ENOUGH_DATA; } -bool AudioFlinger::Track::isReady(uint32_t u, int32_t s) const { +bool AudioFlinger::Track::isReady() const { if (mFillingUpStatus != FS_FILLING) return true; - const uint32_t u_seq = u & audio_track_cblk_t::SEQUENCE_MASK; - const uint32_t u_buf = u & audio_track_cblk_t::BUFFER_MASK; - const uint32_t s_seq = s & audio_track_cblk_t::SEQUENCE_MASK; - const uint32_t s_buf = s & audio_track_cblk_t::BUFFER_MASK; - if (u_seq > s_seq && u_buf == s_buf) { + + if (mCblk->framesReady() >= mCblk->frameCount || + mCblk->forceReady) { mFillingUpStatus = FS_FILLED; + mCblk->forceReady = 0; return true; } return false; @@ -1006,7 +1190,7 @@ void AudioFlinger::Track::stop() Mutex::Autolock _l(mAudioFlinger->mLock); if (mState > STOPPED) { mState = STOPPED; - // If the track is not active (PAUSED and buffers full), flush buffers + // If the track is not active (PAUSED and buffers full), flush buffers if (mAudioFlinger->mActiveTracks.indexOf(this) < 0) { reset(); } @@ -1038,15 +1222,24 @@ void AudioFlinger::Track::flush() // NOTE: reset() will reset cblk->user and cblk->server with // the risk that at the same time, the AudioMixer is trying to read // data. In this case, getNextBuffer() would return a NULL pointer - // as audio buffer => the AudioMixer code MUST always test that pointer - // returned by getNextBuffer() is not NULL! + // as audio buffer => the AudioMixer code MUST always test that pointer + // returned by getNextBuffer() is not NULL! reset(); } void AudioFlinger::Track::reset() { - TrackBase::reset(); - mFillingUpStatus = FS_FILLING; + // Do not reset twice to avoid discarding data written just after a flush and before + // the audioflinger thread detects the track is stopped. + if (!mResetDone) { + TrackBase::reset(); + // Force underrun condition to avoid false underrun callback until first data is + // written to buffer + mCblk->flowControlFlag = 1; + mCblk->forceReady = 0; + mFillingUpStatus = FS_FILLING; + mResetDone = true; + } } void AudioFlinger::Track::mute(bool muted) @@ -1112,26 +1305,15 @@ status_t AudioFlinger::TrackHandle::onTransact( // ---------------------------------------------------------------------------- -sp AudioFlinger::audioRecordThread() -{ - Mutex::Autolock _l(mLock); - return mAudioRecordThread; -} - -void AudioFlinger::endRecord() -{ - Mutex::Autolock _l(mLock); - mAudioRecordThread.clear(); -} - sp AudioFlinger::openRecord( pid_t pid, int streamType, uint32_t sampleRate, int format, int channelCount, - int bufferCount, - uint32_t flags) + int frameCount, + uint32_t flags, + status_t *status) { sp thread; sp recordTrack; @@ -1139,46 +1321,46 @@ sp AudioFlinger::openRecord( sp client; wp wclient; AudioStreamIn* input = 0; + int inFrameCount; + size_t inputBufferSize; + status_t lStatus; // check calling permissions if (!recordingAllowed()) { + lStatus = PERMISSION_DENIED; goto Exit; } if (uint32_t(streamType) >= AudioRecord::NUM_STREAM_TYPES) { LOGE("invalid stream type"); + lStatus = BAD_VALUE; goto Exit; } if (sampleRate > MAX_SAMPLE_RATE) { LOGE("Sample rate out of range"); + lStatus = BAD_VALUE; goto Exit; } if (mSampleRate == 0) { LOGE("Audio driver not initialized"); + lStatus = NO_INIT; goto Exit; } - // Create audio thread - take mutex to prevent race condition - { - Mutex::Autolock _l(mLock); - if (mAudioRecordThread != 0) { - LOGE("Record channel already open"); - goto Exit; - } - thread = new AudioRecordThread(this); - mAudioRecordThread = thread; - } - // It's safe to release the mutex here since the client doesn't get a - // handle until we return from this call - - // open driver, initialize h/w - input = mAudioHardware->openInputStream( - AudioSystem::PCM_16_BIT, channelCount, sampleRate); - if (!input) { - LOGE("Error opening input stream"); - mAudioRecordThread.clear(); + if (mAudioRecordThread == 0) { + LOGE("Audio record thread not started"); + lStatus = NO_INIT; + goto Exit; + } + + + // Check that audio input stream accepts requested audio parameters + inputBufferSize = mAudioHardware->getInputBufferSize(sampleRate, format, channelCount); + if (inputBufferSize == 0) { + lStatus = BAD_VALUE; + LOGE("Bad audio input parameters: sampling rate %u, format %d, channels %d", sampleRate, format, channelCount); goto Exit; } @@ -1194,37 +1376,38 @@ sp AudioFlinger::openRecord( } } + // frameCount must be a multiple of input buffer size + inFrameCount = inputBufferSize/channelCount/sizeof(short); + frameCount = ((frameCount - 1)/inFrameCount + 1) * inFrameCount; + // create new record track and pass to record thread recordTrack = new RecordTrack(this, client, streamType, sampleRate, - format, channelCount, bufferCount, input->bufferSize()); - - // spin up record thread - thread->open(recordTrack, input); - thread->run("AudioRecordThread", PRIORITY_URGENT_AUDIO); + format, channelCount, frameCount); // return to handle to client recordHandle = new RecordHandle(recordTrack); + lStatus = NO_ERROR; Exit: + if (status) { + *status = lStatus; + } return recordHandle; } -status_t AudioFlinger::startRecord() { - sp t = audioRecordThread(); - if (t == 0) return NO_INIT; - return t->start(); +status_t AudioFlinger::startRecord(RecordTrack* recordTrack) { + if (mAudioRecordThread != 0) { + return mAudioRecordThread->start(recordTrack); + } + return NO_INIT; } -void AudioFlinger::stopRecord() { - sp t = audioRecordThread(); - if (t != 0) t->stop(); +void AudioFlinger::stopRecord(RecordTrack* recordTrack) { + if (mAudioRecordThread != 0) { + mAudioRecordThread->stop(recordTrack); + } } -void AudioFlinger::exitRecord() -{ - sp t = audioRecordThread(); - if (t != 0) t->exit(); -} // ---------------------------------------------------------------------------- @@ -1235,55 +1418,69 @@ AudioFlinger::RecordTrack::RecordTrack( uint32_t sampleRate, int format, int channelCount, - int bufferCount, - int bufferSize) + int frameCount) : TrackBase(audioFlinger, client, streamType, sampleRate, format, - channelCount, bufferCount, bufferSize), + channelCount, frameCount, 0), mOverflow(false) { } AudioFlinger::RecordTrack::~RecordTrack() { - mAudioFlinger->audioMixer().deleteTrackName(mName); - mAudioFlinger->exitRecord(); + mAudioFlinger->audioMixer()->deleteTrackName(mName); } status_t AudioFlinger::RecordTrack::getNextBuffer(AudioBufferProvider::Buffer* buffer) { - audio_track_cblk_t* cblk = this->cblk(); - const uint32_t u_seq = cblk->user & audio_track_cblk_t::SEQUENCE_MASK; - const uint32_t u_buf = cblk->user & audio_track_cblk_t::BUFFER_MASK; - const uint32_t s_seq = cblk->server & audio_track_cblk_t::SEQUENCE_MASK; - const uint32_t s_buf = cblk->server & audio_track_cblk_t::BUFFER_MASK; - - // Check if last stepServer failed, try to step now - if (mFlags & TrackBase::STEPSERVER_FAILED) { - if (!step()) goto getNextBuffer_exit; - LOGV("stepServer recovered"); - mFlags &= ~TrackBase::STEPSERVER_FAILED; - } + audio_track_cblk_t* cblk = this->cblk(); + uint32_t framesAvail; + uint32_t framesReq = buffer->frameCount; + + // Check if last stepServer failed, try to step now + if (mFlags & TrackBase::STEPSERVER_FAILED) { + if (!step()) goto getNextBuffer_exit; + LOGV("stepServer recovered"); + mFlags &= ~TrackBase::STEPSERVER_FAILED; + } - if (LIKELY(s_seq == u_seq || s_buf != u_buf)) { - buffer->raw = getBuffer(s_buf); - buffer->frameCount = mAudioFlinger->frameCount(); - return NO_ERROR; - } + framesAvail = cblk->framesAvailable_l(); -getNextBuffer_exit: - buffer->raw = 0; - buffer->frameCount = 0; - return NOT_ENOUGH_DATA; + if (LIKELY(framesAvail)) { + uint32_t s = cblk->server; + uint32_t bufferEnd = cblk->serverBase + cblk->frameCount; + + if (framesReq > framesAvail) { + framesReq = framesAvail; + } + if (s + framesReq > bufferEnd) { + framesReq = bufferEnd - s; + } + + buffer->raw = getBuffer(s, framesReq); + if (buffer->raw == 0) goto getNextBuffer_exit; + + buffer->frameCount = framesReq; + return NO_ERROR; + } + +getNextBuffer_exit: + buffer->raw = 0; + buffer->frameCount = 0; + return NOT_ENOUGH_DATA; } status_t AudioFlinger::RecordTrack::start() { - return mAudioFlinger->startRecord(); + return mAudioFlinger->startRecord(this); } void AudioFlinger::RecordTrack::stop() { - mAudioFlinger->stopRecord(); + mAudioFlinger->stopRecord(this); + TrackBase::reset(); + // Force overerrun condition to avoid false overrun callback until first data is + // read from buffer + mCblk->flowControlFlag = 1; } // ---------------------------------------------------------------------------- @@ -1294,7 +1491,9 @@ AudioFlinger::RecordHandle::RecordHandle(const sp& re { } -AudioFlinger::RecordHandle::~RecordHandle() {} +AudioFlinger::RecordHandle::~RecordHandle() { + stop(); +} status_t AudioFlinger::RecordHandle::start() { LOGV("RecordHandle::start()"); @@ -1318,10 +1517,8 @@ status_t AudioFlinger::RecordHandle::onTransact( // ---------------------------------------------------------------------------- -AudioFlinger::AudioRecordThread::AudioRecordThread(const sp& audioFlinger) : - mAudioFlinger(audioFlinger), - mRecordTrack(0), - mInput(0), +AudioFlinger::AudioRecordThread::AudioRecordThread(AudioHardwareInterface* audioHardware) : + mAudioHardware(audioHardware), mActive(false) { } @@ -1333,108 +1530,123 @@ AudioFlinger::AudioRecordThread::~AudioRecordThread() bool AudioFlinger::AudioRecordThread::threadLoop() { LOGV("AudioRecordThread: start record loop"); + AudioBufferProvider::Buffer buffer; + int inBufferSize = 0; + int inFrameCount = 0; + AudioStreamIn* input = 0; + mActive = 0; + // start recording while (!exitPending()) { if (!mActive) { mLock.lock(); if (!mActive && !exitPending()) { LOGV("AudioRecordThread: loop stopping"); + if (input) { + delete input; + input = 0; + } + mRecordTrack.clear(); + mWaitWorkCV.wait(mLock); + LOGV("AudioRecordThread: loop starting"); + if (mRecordTrack != 0) { + input = mAudioHardware->openInputStream(mRecordTrack->format(), + mRecordTrack->channelCount(), + mRecordTrack->sampleRate(), + &mStartStatus); + if (input != 0) { + inBufferSize = input->bufferSize(); + inFrameCount = inBufferSize/input->frameSize(); + } + } else { + mStartStatus = NO_INIT; + } + if (mStartStatus !=NO_ERROR) { + LOGW("record start failed, status %d", mStartStatus); + mActive = false; + mRecordTrack.clear(); + } + mWaitWorkCV.signal(); } mLock.unlock(); - } else { - // promote strong ref so track isn't deleted while we access it - sp t = mRecordTrack.promote(); + } else if (mRecordTrack != 0){ - // if we lose the weak reference, client is gone. - if (t == 0) { - LOGV("AudioRecordThread: client deleted track"); - break; - } - - if (LIKELY(t->getNextBuffer(&mBuffer) == NO_ERROR)) { - if (mInput->read(mBuffer.raw, t->mBufferSize) < 0) { + buffer.frameCount = inFrameCount; + if (LIKELY(mRecordTrack->getNextBuffer(&buffer) == NO_ERROR)) { + LOGV("AudioRecordThread read: %d frames", buffer.frameCount); + if (input->read(buffer.raw, inBufferSize) < 0) { LOGE("Error reading audio input"); sleep(1); } - t->releaseBuffer(&mBuffer); + mRecordTrack->releaseBuffer(&buffer); + mRecordTrack->overflow(); } // client isn't retrieving buffers fast enough else { - if (!t->setOverflow()) + if (!mRecordTrack->setOverflow()) LOGW("AudioRecordThread: buffer overflow"); + // Release the processor for a while before asking for a new buffer. + // This will give the application more chance to read from the buffer and + // clear the overflow. + usleep(5000); } } - }; - - // close hardware - close(); + } - // delete this object - no more data references after this call - mAudioFlinger->endRecord(); - return false; -} -status_t AudioFlinger::AudioRecordThread::open(const sp& recordTrack, AudioStreamIn *input) { - LOGV("AudioRecordThread::open"); - // check for record channel already open - AutoMutex lock(&mLock); - if (mRecordTrack != NULL) { - LOGE("Record channel already open"); - return ALREADY_EXISTS; + if (input) { + delete input; } - mRecordTrack = recordTrack; - mInput = input; - return NO_ERROR; + mRecordTrack.clear(); + + return false; } -status_t AudioFlinger::AudioRecordThread::start() +status_t AudioFlinger::AudioRecordThread::start(RecordTrack* recordTrack) { LOGV("AudioRecordThread::start"); AutoMutex lock(&mLock); - if (mActive) return -EBUSY; + mActive = true; + // If starting the active track, just reset mActive in case a stop + // was pending and exit + if (recordTrack == mRecordTrack.get()) return NO_ERROR; + + if (mRecordTrack != 0) return -EBUSY; - sp t = mRecordTrack.promote(); - if (t == 0) return UNKNOWN_ERROR; + mRecordTrack = recordTrack; // signal thread to start LOGV("Signal record thread"); - mActive = true; mWaitWorkCV.signal(); - return NO_ERROR; + mWaitWorkCV.wait(mLock); + LOGV("Record started, status %d", mStartStatus); + return mStartStatus; } -void AudioFlinger::AudioRecordThread::stop() { +void AudioFlinger::AudioRecordThread::stop(RecordTrack* recordTrack) { LOGV("AudioRecordThread::stop"); AutoMutex lock(&mLock); - if (mActive) { + if (mActive && (recordTrack == mRecordTrack.get())) { mActive = false; - mWaitWorkCV.signal(); } } void AudioFlinger::AudioRecordThread::exit() { LOGV("AudioRecordThread::exit"); - AutoMutex lock(&mLock); - requestExit(); - mWaitWorkCV.signal(); + { + AutoMutex lock(&mLock); + requestExit(); + mWaitWorkCV.signal(); + } + requestExitAndWait(); } -status_t AudioFlinger::AudioRecordThread::close() -{ - LOGV("AudioRecordThread::close"); - AutoMutex lock(&mLock); - if (!mInput) return NO_INIT; - delete mInput; - mInput = 0; - return NO_ERROR; -} - status_t AudioFlinger::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { diff --git a/libs/audioflinger/AudioFlinger.h b/libs/audioflinger/AudioFlinger.h index 8c026172b8..d9f7b49cab 100644 --- a/libs/audioflinger/AudioFlinger.h +++ b/libs/audioflinger/AudioFlinger.h @@ -43,13 +43,17 @@ class audio_track_cblk_t; class AudioMixer; class AudioBuffer; + // ---------------------------------------------------------------------------- #define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) #define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) + // ---------------------------------------------------------------------------- +static const nsecs_t kStandbyTimeInNsecs = seconds(3); + class AudioFlinger : public BnAudioFlinger, protected Thread { public: @@ -69,13 +73,16 @@ public: uint32_t sampleRate, int format, int channelCount, - int bufferCount, - uint32_t flags); + int frameCount, + uint32_t flags, + const sp& sharedBuffer, + status_t *status); virtual uint32_t sampleRate() const; virtual int channelCount() const; virtual int format() const; virtual size_t frameCount() const; + virtual size_t latency() const; virtual status_t setMasterVolume(float value); virtual status_t setMasterMute(bool muted); @@ -128,8 +135,9 @@ public: uint32_t sampleRate, int format, int channelCount, - int bufferCount, - uint32_t flags); + int frameCount, + uint32_t flags, + status_t *status); virtual status_t onTransact( uint32_t code, @@ -141,12 +149,15 @@ private: AudioFlinger(); virtual ~AudioFlinger(); + void setOutput(AudioStreamOut* output); + size_t getOutputFrameCount(AudioStreamOut* output); + // Internal dump utilites. status_t dumpPermissionDenial(int fd, const Vector& args); status_t dumpClients(int fd, const Vector& args); status_t dumpTracks(int fd, const Vector& args); status_t dumpInternals(int fd, const Vector& args); - + // --- Client --- class Client : public RefBase { public: @@ -183,17 +194,17 @@ private: }; enum track_flags { - STEPSERVER_FAILED = 0x01 // StepServer could not acquire cblk->lock mutex + STEPSERVER_FAILED = 0x01 // StepServer could not acquire cblk->lock mutex }; - + TrackBase( const sp& audioFlinger, const sp& client, int streamType, uint32_t sampleRate, int format, int channelCount, - int bufferCount, - int bufferSize); + int frameCount, + const sp& sharedBuffer); ~TrackBase(); virtual status_t start() = 0; @@ -203,6 +214,7 @@ private: protected: friend class AudioFlinger; friend class RecordHandle; + friend class AudioRecordThread; TrackBase(const TrackBase&); TrackBase& operator = (const TrackBase&); @@ -222,19 +234,11 @@ private: return mFormat; } - int channelCount() const { - return mChannelCount; - } - - int bufferCount() const { - return mBufferCount; - } + int channelCount() const ; int sampleRate() const; - void* getBuffer(int n) const { - return (char*)mBuffers + n * mBufferSize; - } + void* getBuffer(uint32_t offset, uint32_t frames) const; int name() const { return mName; @@ -256,16 +260,15 @@ private: sp mCblkMemory; audio_track_cblk_t* mCblk; int mStreamType; - uint8_t mFormat; - uint8_t mChannelCount; - uint8_t mBufferCount; - uint8_t mFlags; - void* mBuffers; - size_t mBufferSize; + void* mBuffer; + void* mBufferEnd; + uint32_t mFrameCount; int mName; // we don't really need a lock for these int mState; int mClientTid; + uint8_t mFormat; + uint8_t mFlags; }; // playback track @@ -277,8 +280,8 @@ private: uint32_t sampleRate, int format, int channelCount, - int bufferCount, - int bufferSize); + int frameCount, + const sp& sharedBuffer); ~Track(); void dump(char* buffer, size_t size); @@ -312,7 +315,7 @@ private: return mState == PAUSED; } - bool isReady(uint32_t u, int32_t s) const; + bool isReady() const; void setPaused() { mState = PAUSED; } void reset(); @@ -324,6 +327,8 @@ private: enum {FS_FILLING, FS_FILLED, FS_ACTIVE}; mutable uint8_t mFillingUpStatus; int8_t mRetryCount; + sp mSharedBuffer; + bool mResetDone; }; // end of Track friend class AudioBuffer; @@ -366,8 +371,8 @@ private: void remove_track_l(wp track, int name); void destroyTrack(const sp& track); - AudioMixer& audioMixer() { - return *mAudioMixer; + AudioMixer* audioMixer() { + return mAudioMixer; } // record track @@ -379,8 +384,7 @@ private: uint32_t sampleRate, int format, int channelCount, - int bufferCount, - int bufferSize); + int frameCount); ~RecordTrack(); virtual status_t start(); @@ -419,43 +423,34 @@ private: class AudioRecordThread : public Thread { public: - AudioRecordThread(const sp& audioFlinger); + AudioRecordThread(AudioHardwareInterface* audioHardware); virtual ~AudioRecordThread(); virtual bool threadLoop(); virtual status_t readyToRun() { return NO_ERROR; } virtual void onFirstRef() {} - status_t open(const sp& recordTrack, AudioStreamIn *input); - status_t start(); - void stop(); - status_t close(); + status_t start(RecordTrack* recordTrack); + void stop(RecordTrack* recordTrack); void exit(); - - bool isOpen() { return bool(mRecordTrack != NULL); } private: AudioRecordThread(); - sp mAudioFlinger; - wp mRecordTrack; - AudioStreamIn* mInput; + AudioHardwareInterface *mAudioHardware; + sp mRecordTrack; Mutex mLock; Condition mWaitWorkCV; - AudioBufferProvider::Buffer mBuffer; volatile bool mActive; + status_t mStartStatus; }; friend class AudioRecordThread; - sp audioRecordThread(); - void endRecord(); - status_t startRecord(); - void stopRecord(); - void exitRecord(); - - AudioHardwareInterface* audioHardware() { return mAudioHardware; } + status_t startRecord(RecordTrack* recordTrack); + void stopRecord(RecordTrack* recordTrack); mutable Mutex mHardwareLock; mutable Mutex mLock; + mutable Mutex mOutputLock; mutable Condition mWaitWorkCV; DefaultKeyedVector< pid_t, wp > mClients; SortedVector< wp > mActiveTracks; @@ -465,15 +460,19 @@ private: bool mMasterMute; stream_type_t mStreamTypes[AudioTrack::NUM_STREAM_TYPES]; + AudioMixer* mHardwareAudioMixer; + AudioMixer* mA2dpAudioMixer; AudioMixer* mAudioMixer; AudioHardwareInterface* mAudioHardware; + AudioHardwareInterface* mA2dpAudioInterface; + AudioStreamOut* mHardwareOutput; + AudioStreamOut* mA2dpOutput; AudioStreamOut* mOutput; sp mAudioRecordThread; uint32_t mSampleRate; size_t mFrameCount; int mChannelCount; int mFormat; - int mMixBufferSize; int16_t* mMixBuffer; mutable int mHardwareStatus; nsecs_t mLastWriteTime; diff --git a/libs/audioflinger/AudioHardwareGeneric.cpp b/libs/audioflinger/AudioHardwareGeneric.cpp index b1e5b7f334..e6a163b7c6 100644 --- a/libs/audioflinger/AudioHardwareGeneric.cpp +++ b/libs/audioflinger/AudioHardwareGeneric.cpp @@ -2,16 +2,16 @@ ** ** Copyright 2007, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ @@ -68,16 +68,25 @@ status_t AudioHardwareGeneric::standby() } AudioStreamOut* AudioHardwareGeneric::openOutputStream( - int format, int channelCount, uint32_t sampleRate) + int format, int channelCount, uint32_t sampleRate, status_t *status) { AutoMutex lock(mLock); // only one output stream allowed - if (mOutput) return 0; + if (mOutput) { + if (status) { + *status = INVALID_OPERATION; + } + return 0; + } // create new output stream AudioStreamOutGeneric* out = new AudioStreamOutGeneric(); - if (out->set(this, mFd, format, channelCount, sampleRate) == NO_ERROR) { + status_t lStatus = out->set(this, mFd, format, channelCount, sampleRate); + if (status) { + *status = lStatus; + } + if (lStatus == NO_ERROR) { mOutput = out; } else { delete out; @@ -90,16 +99,25 @@ void AudioHardwareGeneric::closeOutputStream(AudioStreamOutGeneric* out) { } AudioStreamIn* AudioHardwareGeneric::openInputStream( - int format, int channelCount, uint32_t sampleRate) + int format, int channelCount, uint32_t sampleRate, status_t *status) { AutoMutex lock(mLock); // only one input stream allowed - if (mInput) return 0; + if (mInput) { + if (status) { + *status = INVALID_OPERATION; + } + return 0; + } // create new output stream AudioStreamInGeneric* in = new AudioStreamInGeneric(); - if (in->set(this, mFd, format, channelCount, sampleRate) == NO_ERROR) { + status_t lStatus = in->set(this, mFd, format, channelCount, sampleRate); + if (status) { + *status = lStatus; + } + if (lStatus == NO_ERROR) { mInput = in; } else { delete in; diff --git a/libs/audioflinger/AudioHardwareGeneric.h b/libs/audioflinger/AudioHardwareGeneric.h index 10cc45d2d6..a2342cdc66 100644 --- a/libs/audioflinger/AudioHardwareGeneric.h +++ b/libs/audioflinger/AudioHardwareGeneric.h @@ -2,16 +2,16 @@ ** ** Copyright 2007, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ @@ -23,7 +23,7 @@ #include -#include +#include namespace android { @@ -47,6 +47,7 @@ public: virtual size_t bufferSize() const { return 4096; } virtual int channelCount() const { return 2; } virtual int format() const { return AudioSystem::PCM_16_BIT; } + virtual uint32_t latency() const { return 0; } virtual status_t setVolume(float volume) { return INVALID_OPERATION; } virtual ssize_t write(const void* buffer, size_t bytes); virtual status_t dump(int fd, const Vector& args); @@ -76,6 +77,7 @@ public: virtual status_t setGain(float gain) { return INVALID_OPERATION; } virtual ssize_t read(void* buffer, ssize_t bytes); virtual status_t dump(int fd, const Vector& args); + virtual status_t standby() { return NO_ERROR; } private: AudioHardwareGeneric *mAudioHardware; @@ -84,7 +86,7 @@ private: }; -class AudioHardwareGeneric : public AudioHardwareInterface +class AudioHardwareGeneric : public AudioHardwareBase { public: AudioHardwareGeneric(); @@ -105,12 +107,14 @@ public: virtual AudioStreamOut* openOutputStream( int format=0, int channelCount=0, - uint32_t sampleRate=0); + uint32_t sampleRate=0, + status_t *status=0); virtual AudioStreamIn* openInputStream( int format, int channelCount, - uint32_t sampleRate); + uint32_t sampleRate, + status_t *status); void closeOutputStream(AudioStreamOutGeneric* out); void closeInputStream(AudioStreamInGeneric* in); @@ -120,7 +124,7 @@ protected: private: status_t dumpInternals(int fd, const Vector& args); - + Mutex mLock; AudioStreamOutGeneric *mOutput; AudioStreamInGeneric *mInput; diff --git a/libs/audioflinger/AudioHardwareInterface.cpp b/libs/audioflinger/AudioHardwareInterface.cpp index 7387b3d36e..ac76a19d84 100644 --- a/libs/audioflinger/AudioHardwareInterface.cpp +++ b/libs/audioflinger/AudioHardwareInterface.cpp @@ -26,7 +26,7 @@ #include "AudioHardwareStub.h" #include "AudioHardwareGeneric.h" -// #define DUMP_FLINGER_OUT // if defined allows recording samples in a file +//#define DUMP_FLINGER_OUT // if defined allows recording samples in a file #ifdef DUMP_FLINGER_OUT #include "AudioDumpInterface.h" #endif @@ -54,6 +54,7 @@ static const char* routeStrings[] = "SPEAKER ", "BLUETOOTH ", "HEADSET " + "BLUETOOTH_A2DP " }; static const char* routeNone = "NONE"; @@ -115,24 +116,10 @@ AudioHardwareInterface* AudioHardwareInterface::create() // This code adds a record of buffers in a file to write calls made by AudioFlinger. // It replaces the current AudioHardwareInterface object by an intermediate one which // will record buffers in a file (after sending them to hardware) for testing purpose. - // This feature is enabled by defining symbol DUMP_FLINGER_OUT and setting environement - // "audioflinger.dump = 1". The output file is "tmp/FlingerOut.pcm". Pause are not recorded - // in the file. + // This feature is enabled by defining symbol DUMP_FLINGER_OUT. + // The output file is FLINGER_DUMP_NAME. Pause are not recorded in the file. - // read dump mode - property_get("audioflinger.dump", value, "0"); - switch(value[0]) { - case '1': - LOGV("Dump mode"); - hw = new AudioDumpInterface(hw); // replace interface - return hw; - break; - case '0': - default: - LOGV("No Dump mode"); - return hw; - break; - } + hw = new AudioDumpInterface(hw); // replace interface #endif return hw; } @@ -143,7 +130,7 @@ AudioStreamOut::~AudioStreamOut() AudioStreamIn::~AudioStreamIn() {} -AudioHardwareInterface::AudioHardwareInterface() +AudioHardwareBase::AudioHardwareBase() { // force a routing update on initialization memset(&mRoutes, 0, sizeof(mRoutes)); @@ -151,7 +138,7 @@ AudioHardwareInterface::AudioHardwareInterface() } // generics for audio routing - the real work is done in doRouting -status_t AudioHardwareInterface::setRouting(int mode, uint32_t routes) +status_t AudioHardwareBase::setRouting(int mode, uint32_t routes) { #if LOG_ROUTING_CALLS LOGD("setRouting: mode=%s, routes=[%s]", displayMode(mode), displayRoutes(routes)); @@ -173,7 +160,7 @@ status_t AudioHardwareInterface::setRouting(int mode, uint32_t routes) return doRouting(); } -status_t AudioHardwareInterface::getRouting(int mode, uint32_t* routes) +status_t AudioHardwareBase::getRouting(int mode, uint32_t* routes) { if (mode == AudioSystem::MODE_CURRENT) mode = mMode; @@ -187,7 +174,7 @@ status_t AudioHardwareInterface::getRouting(int mode, uint32_t* routes) return NO_ERROR; } -status_t AudioHardwareInterface::setMode(int mode) +status_t AudioHardwareBase::setMode(int mode) { #if LOG_ROUTING_CALLS LOGD("setMode(%s)", displayMode(mode)); @@ -204,25 +191,45 @@ status_t AudioHardwareInterface::setMode(int mode) return doRouting(); } -status_t AudioHardwareInterface::getMode(int* mode) +status_t AudioHardwareBase::getMode(int* mode) { // Implement: set audio routing *mode = mMode; return NO_ERROR; } -status_t AudioHardwareInterface::setParameter(const char* key, const char* value) +status_t AudioHardwareBase::setParameter(const char* key, const char* value) { // default implementation is to ignore return NO_ERROR; } -status_t AudioHardwareInterface::dumpState(int fd, const Vector& args) + +// default implementation +size_t AudioHardwareBase::getInputBufferSize(uint32_t sampleRate, int format, int channelCount) +{ + if (sampleRate != 8000) { + LOGW("getInputBufferSize bad sampling rate: %d", sampleRate); + return 0; + } + if (format != AudioSystem::PCM_16_BIT) { + LOGW("getInputBufferSize bad format: %d", format); + return 0; + } + if (channelCount != 1) { + LOGW("getInputBufferSize bad channel count: %d", channelCount); + return 0; + } + + return 320; +} + +status_t AudioHardwareBase::dumpState(int fd, const Vector& args) { const size_t SIZE = 256; char buffer[SIZE]; String8 result; - snprintf(buffer, SIZE, "AudioHardwareInterface::dumpState\n"); + snprintf(buffer, SIZE, "AudioHardwareBase::dumpState\n"); result.append(buffer); snprintf(buffer, SIZE, "\tmMode: %d\n", mMode); result.append(buffer); diff --git a/libs/audioflinger/AudioHardwareStub.cpp b/libs/audioflinger/AudioHardwareStub.cpp index 0046db8531..d309902a0d 100644 --- a/libs/audioflinger/AudioHardwareStub.cpp +++ b/libs/audioflinger/AudioHardwareStub.cpp @@ -2,16 +2,16 @@ ** ** Copyright 2007, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ @@ -47,20 +47,28 @@ status_t AudioHardwareStub::standby() } AudioStreamOut* AudioHardwareStub::openOutputStream( - int format, int channelCount, uint32_t sampleRate) + int format, int channelCount, uint32_t sampleRate, status_t *status) { AudioStreamOutStub* out = new AudioStreamOutStub(); - if (out->set(format, channelCount, sampleRate) == NO_ERROR) + status_t lStatus = out->set(format, channelCount, sampleRate); + if (status) { + *status = lStatus; + } + if (lStatus == NO_ERROR) return out; delete out; return 0; } AudioStreamIn* AudioHardwareStub::openInputStream( - int format, int channelCount, uint32_t sampleRate) + int format, int channelCount, uint32_t sampleRate, status_t *status) { AudioStreamInStub* in = new AudioStreamInStub(); - if (in->set(format, channelCount, sampleRate) == NO_ERROR) + status_t lStatus = in->set(format, channelCount, sampleRate); + if (status) { + *status = lStatus; + } + if (lStatus == NO_ERROR) return in; delete in; return 0; @@ -102,7 +110,7 @@ status_t AudioStreamOutStub::set(int format, int channels, uint32_t rate) if (format == 0) format = AudioSystem::PCM_16_BIT; if (channels == 0) channels = channelCount(); if (rate == 0) rate = sampleRate(); - + if ((format == AudioSystem::PCM_16_BIT) && (channels == channelCount()) && (rate == sampleRate())) @@ -129,7 +137,7 @@ status_t AudioStreamOutStub::dump(int fd, const Vector& args) snprintf(buffer, SIZE, "\tformat: %d\n", format()); result.append(buffer); ::write(fd, result.string(), result.size()); - return NO_ERROR; + return NO_ERROR; } // ---------------------------------------------------------------------------- diff --git a/libs/audioflinger/AudioHardwareStub.h b/libs/audioflinger/AudioHardwareStub.h index 1a61552d91..5316d6026f 100644 --- a/libs/audioflinger/AudioHardwareStub.h +++ b/libs/audioflinger/AudioHardwareStub.h @@ -2,16 +2,16 @@ ** ** Copyright 2007, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ @@ -21,7 +21,7 @@ #include #include -#include +#include namespace android { @@ -34,6 +34,7 @@ public: virtual size_t bufferSize() const { return 4096; } virtual int channelCount() const { return 2; } virtual int format() const { return AudioSystem::PCM_16_BIT; } + virtual uint32_t latency() const { return 0; } virtual status_t setVolume(float volume) { return NO_ERROR; } virtual ssize_t write(const void* buffer, size_t bytes); virtual status_t dump(int fd, const Vector& args); @@ -49,9 +50,10 @@ public: virtual status_t setGain(float gain) { return NO_ERROR; } virtual ssize_t read(void* buffer, ssize_t bytes); virtual status_t dump(int fd, const Vector& args); + virtual status_t standby() { return NO_ERROR; } }; -class AudioHardwareStub : public AudioHardwareInterface +class AudioHardwareStub : public AudioHardwareBase { public: AudioHardwareStub(); @@ -72,12 +74,14 @@ public: virtual AudioStreamOut* openOutputStream( int format=0, int channelCount=0, - uint32_t sampleRate=0); + uint32_t sampleRate=0, + status_t *status=0); virtual AudioStreamIn* openInputStream( int format, int channelCount, - uint32_t sampleRate); + uint32_t sampleRate, + status_t *status); protected: virtual status_t doRouting() { return NO_ERROR; } diff --git a/libs/audioflinger/AudioMixer.cpp b/libs/audioflinger/AudioMixer.cpp index 9f1b17f082..b03467f6ce 100644 --- a/libs/audioflinger/AudioMixer.cpp +++ b/libs/audioflinger/AudioMixer.cpp @@ -2,16 +2,16 @@ ** ** Copyright 2007, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ @@ -247,8 +247,8 @@ inline void AudioMixer::track_t::adjustVolumeRamp() { for (int i=0 ; i<2 ; i++) { - if (((volumeInc[i]>0) && ((prevVolume[i]>>16) >= volume[i])) || - ((volumeInc[i]<0) && ((prevVolume[i]>>16) <= volume[i]))) { + if (((volumeInc[i]>0) && (((prevVolume[i]+volumeInc[i])>>16) >= volume[i])) || + ((volumeInc[i]<0) && (((prevVolume[i]+volumeInc[i])>>16) <= volume[i]))) { volumeInc[i] = 0; prevVolume[i] = volume[i]<<16; } @@ -307,7 +307,7 @@ void AudioMixer::process__validate(state_t* state, void* output) n |= NEEDS_CHANNEL_1 + t.channelCount - 1; n |= NEEDS_FORMAT_16; n |= t.doesResample() ? NEEDS_RESAMPLE_ENABLED : NEEDS_RESAMPLE_DISABLED; - + if (t.volumeInc[0]|t.volumeInc[1]) { volumeRamp = 1; } else if (!t.doesResample() && t.volumeRL == 0) { @@ -370,7 +370,7 @@ void AudioMixer::process__validate(state_t* state, void* output) state->hook(state, output); - // Now that the volume ramp has been done, set optimal state and + // Now that the volume ramp has been done, set optimal state and // track hooks for subsequent mixer process if (countActiveTracks) { int allMuted = 1; @@ -397,7 +397,7 @@ void AudioMixer::process__validate(state_t* state, void* output) } } -static inline +static inline int32_t mulAdd(int16_t in, int16_t v, int32_t a) { #if defined(__arm__) && !defined(__thumb__) @@ -412,7 +412,7 @@ int32_t mulAdd(int16_t in, int16_t v, int32_t a) #endif } -static inline +static inline int32_t mul(int16_t in, int16_t v) { #if defined(__arm__) && !defined(__thumb__) @@ -427,7 +427,7 @@ int32_t mul(int16_t in, int16_t v) #endif } -static inline +static inline int32_t mulAddRL(int left, uint32_t inRL, uint32_t vRL, int32_t a) { #if defined(__arm__) && !defined(__thumb__) @@ -453,7 +453,7 @@ int32_t mulAddRL(int left, uint32_t inRL, uint32_t vRL, int32_t a) #endif } -static inline +static inline int32_t mulRL(int left, uint32_t inRL, uint32_t vRL) { #if defined(__arm__) && !defined(__thumb__) @@ -513,7 +513,7 @@ void AudioMixer::volumeRampStereo(track_t* t, int32_t* out, size_t frameCount, i //LOGD("[0] %p: inc=%f, v0=%f, v1=%d, final=%f, count=%d", // t, vlInc/65536.0f, vl/65536.0f, t->volume[0], // (vl + vlInc*frameCount)/65536.0f, frameCount); - + // ramp volume do { *out++ += (vl >> 16) * (*temp++ >> 12); @@ -548,7 +548,7 @@ void AudioMixer::track__16BitsStereo(track_t* t, int32_t* out, size_t frameCount vl += vlInc; vr += vrInc; } while (--frameCount); - + t->prevVolume[0] = vl; t->prevVolume[1] = vr; t->adjustVolumeRamp(); @@ -590,7 +590,7 @@ void AudioMixer::track__16BitsMono(track_t* t, int32_t* out, size_t frameCount, vl += vlInc; vr += vrInc; } while (--frameCount); - + t->prevVolume[0] = vl; t->prevVolume[1] = vr; t->adjustVolumeRamp(); @@ -609,7 +609,7 @@ void AudioMixer::track__16BitsMono(track_t* t, int32_t* out, size_t frameCount, t->in = in; } -inline +inline void AudioMixer::ditherAndClamp(int32_t* out, int32_t const *sums, size_t c) { for (size_t i=0 ; itracks[i]; - t.bufferProvider->getNextBuffer(&t.buffer); - if (t.buffer.raw) { + size_t outFrames = state->frameCount; + while (outFrames) { + t.buffer.frameCount = outFrames; + t.bufferProvider->getNextBuffer(&t.buffer); + if (!t.buffer.raw) break; + outFrames -= t.buffer.frameCount; t.bufferProvider->releaseBuffer(&t.buffer); } } @@ -652,12 +656,14 @@ void AudioMixer::process__genericNoResampling(state_t* state, void* output) const int i = 31 - __builtin_clz(en); en &= ~(1<tracks[i]; + t.buffer.frameCount = state->frameCount; t.bufferProvider->getNextBuffer(&t.buffer); + t.frameCount = t.buffer.frameCount; t.in = t.buffer.raw; // t.in == NULL can happen if the track was flushed just after having // been enabled for mixing. if (t.in == NULL) - enabledTracks &= ~(1<tracks[i]; - (t.hook)(&t, outTemp, BLOCKSIZE, state->resampleTemp); + size_t outFrames = BLOCKSIZE; + + while (outFrames) { + size_t inFrames = (t.frameCount > outFrames)?outFrames:t.frameCount; + if (inFrames) { + (t.hook)(&t, outTemp + (BLOCKSIZE-outFrames)*MAX_NUM_CHANNELS, inFrames, state->resampleTemp); + t.frameCount -= inFrames; + outFrames -= inFrames; + } + if (t.frameCount == 0 && outFrames) { + t.bufferProvider->releaseBuffer(&t.buffer); + t.buffer.frameCount = numFrames - (BLOCKSIZE - outFrames); + t.bufferProvider->getNextBuffer(&t.buffer); + t.in = t.buffer.raw; + if (t.in == NULL) { + enabledTracks &= ~(1<resampleTemp); } else { - t.bufferProvider->getNextBuffer(&t.buffer); - t.in = t.buffer.raw; - // t.in == NULL can happen if the track was flushed just after having - // been enabled for mixing. - if (t.in) { - (t.hook)(&t, outTemp, numFrames, state->resampleTemp); + + size_t outFrames = numFrames; + + while (outFrames) { + t.buffer.frameCount = outFrames; + t.bufferProvider->getNextBuffer(&t.buffer); + t.in = t.buffer.raw; + // t.in == NULL can happen if the track was flushed just after having + // been enabled for mixing. + if (t.in == NULL) break; + + (t.hook)(&t, outTemp + (numFrames-outFrames)*MAX_NUM_CHANNELS, t.buffer.frameCount, state->resampleTemp); + outFrames -= t.buffer.frameCount; t.bufferProvider->releaseBuffer(&t.buffer); } } @@ -734,45 +766,51 @@ void AudioMixer::process__OneTrack16BitsStereoNoResampling(state_t* state, void* const track_t& t = state->tracks[i]; AudioBufferProvider::Buffer& b(t.buffer); - t.bufferProvider->getNextBuffer(&b); - int16_t const *in = t.buffer.i16; - - // in == NULL can happen if the track was flushed just after having - // been enabled for mixing. - if (in == NULL) { - memset(output, 0, state->frameCount*MAX_NUM_CHANNELS*sizeof(int16_t)); - return; - } - + int32_t* out = static_cast(output); size_t numFrames = state->frameCount; + const int16_t vl = t.volume[0]; const int16_t vr = t.volume[1]; const uint32_t vrl = t.volumeRL; - if (UNLIKELY(uint32_t(vl) > UNITY_GAIN || uint32_t(vr) > UNITY_GAIN)) { - // volume is boosted, so we might need to clamp even though - // we process only one track. - do { - uint32_t rl = *reinterpret_cast(in); - in += 2; - int32_t l = mulRL(1, rl, vrl) >> 12; - int32_t r = mulRL(0, rl, vrl) >> 12; - // clamping... - l = clamp16(l); - r = clamp16(r); - *out++ = (r<<16) | (l & 0xFFFF); - } while (--numFrames); - } else { - do { - uint32_t rl = *reinterpret_cast(in); - in += 2; - int32_t l = mulRL(1, rl, vrl) >> 12; - int32_t r = mulRL(0, rl, vrl) >> 12; - *out++ = (r<<16) | (l & 0xFFFF); - } while (--numFrames); - } + while (numFrames) { + b.frameCount = numFrames; + t.bufferProvider->getNextBuffer(&b); + int16_t const *in = b.i16; - t.bufferProvider->releaseBuffer(&b); + // in == NULL can happen if the track was flushed just after having + // been enabled for mixing. + if (in == NULL) { + memset(out, 0, numFrames*MAX_NUM_CHANNELS*sizeof(int16_t)); + return; + } + size_t outFrames = b.frameCount; + + if (UNLIKELY(uint32_t(vl) > UNITY_GAIN || uint32_t(vr) > UNITY_GAIN)) { + // volume is boosted, so we might need to clamp even though + // we process only one track. + do { + uint32_t rl = *reinterpret_cast(in); + in += 2; + int32_t l = mulRL(1, rl, vrl) >> 12; + int32_t r = mulRL(0, rl, vrl) >> 12; + // clamping... + l = clamp16(l); + r = clamp16(r); + *out++ = (r<<16) | (l & 0xFFFF); + } while (--outFrames); + } else { + do { + uint32_t rl = *reinterpret_cast(in); + in += 2; + int32_t l = mulRL(1, rl, vrl) >> 12; + int32_t r = mulRL(0, rl, vrl) >> 12; + *out++ = (r<<16) | (l & 0xFFFF); + } while (--outFrames); + } + numFrames -= b.frameCount; + t.bufferProvider->releaseBuffer(&b); + } } // 2 tracks is also a common case @@ -784,71 +822,89 @@ void AudioMixer::process__TwoTracks16BitsStereoNoResampling(state_t* state, void i = 31 - __builtin_clz(en); const track_t& t0 = state->tracks[i]; AudioBufferProvider::Buffer& b0(t0.buffer); - t0.bufferProvider->getNextBuffer(&b0); en &= ~(1<tracks[i]; AudioBufferProvider::Buffer& b1(t1.buffer); - t1.bufferProvider->getNextBuffer(&b1); - + int16_t const *in0; const int16_t vl0 = t0.volume[0]; const int16_t vr0 = t0.volume[1]; + size_t frameCount0 = 0; + int16_t const *in1; const int16_t vl1 = t1.volume[0]; const int16_t vr1 = t1.volume[1]; - size_t numFrames = state->frameCount; + size_t frameCount1 = 0; + int32_t* out = static_cast(output); - - // t0/1.buffer.i16 == NULL can happen if the track was flushed just after having - // been enabled for mixing. - if (t0.buffer.i16 != NULL) { - in0 = t0.buffer.i16; - if (t1.buffer.i16 != NULL) { - in1 = t1.buffer.i16; - } else { - in1 = new int16_t[MAX_NUM_CHANNELS * state->frameCount]; - memset((void *)in1, 0, state->frameCount*MAX_NUM_CHANNELS*sizeof(int16_t)); + size_t numFrames = state->frameCount; + int16_t const *buff = NULL; + + + while (numFrames) { + + if (frameCount0 == 0) { + b0.frameCount = numFrames; + t0.bufferProvider->getNextBuffer(&b0); + if (b0.i16 == NULL) { + if (buff == NULL) { + buff = new int16_t[MAX_NUM_CHANNELS * state->frameCount]; + } + in0 = buff; + b0.frameCount = numFrames; + } else { + in0 = b0.i16; + } + frameCount0 = b0.frameCount; } - } else { - in0 = new int16_t[MAX_NUM_CHANNELS * state->frameCount]; - memset((void *)in0, 0, state->frameCount*MAX_NUM_CHANNELS*sizeof(int16_t)); - if (t1.buffer.i16 != NULL) { - in1 = t1.buffer.i16; - } else { - in1 = in0; + if (frameCount1 == 0) { + b1.frameCount = numFrames; + t1.bufferProvider->getNextBuffer(&b1); + if (b1.i16 == NULL) { + if (buff == NULL) { + buff = new int16_t[MAX_NUM_CHANNELS * state->frameCount]; + } + in1 = buff; + b1.frameCount = numFrames; + } else { + in1 = b1.i16; + } + frameCount1 = b1.frameCount; } - } - - do { - int32_t l0 = *in0++; - int32_t r0 = *in0++; - l0 = mul(l0, vl0); - r0 = mul(r0, vr0); - int32_t l = *in1++; - int32_t r = *in1++; - l = mulAdd(l, vl1, l0) >> 12; - r = mulAdd(r, vr1, r0) >> 12; - // clamping... - l = clamp16(l); - r = clamp16(r); - *out++ = (r<<16) | (l & 0xFFFF); - } while (--numFrames); + + size_t outFrames = frameCount0 < frameCount1?frameCount0:frameCount1; - - if (t0.buffer.i16 != NULL) { - t0.bufferProvider->releaseBuffer(&b0); - if (t1.buffer.i16 != NULL) { - t1.bufferProvider->releaseBuffer(&b1); - } else { - delete [] in1; + numFrames -= outFrames; + frameCount0 -= outFrames; + frameCount1 -= outFrames; + + do { + int32_t l0 = *in0++; + int32_t r0 = *in0++; + l0 = mul(l0, vl0); + r0 = mul(r0, vr0); + int32_t l = *in1++; + int32_t r = *in1++; + l = mulAdd(l, vl1, l0) >> 12; + r = mulAdd(r, vr1, r0) >> 12; + // clamping... + l = clamp16(l); + r = clamp16(r); + *out++ = (r<<16) | (l & 0xFFFF); + } while (--outFrames); + + if (frameCount0 == 0) { + t0.bufferProvider->releaseBuffer(&b0); } - } else { - delete [] in0; - if (t1.buffer.i16 != NULL) { + if (frameCount1 == 0) { t1.bufferProvider->releaseBuffer(&b1); } + } + + if (buff != NULL) { + delete [] buff; } } diff --git a/libs/audioflinger/AudioMixer.h b/libs/audioflinger/AudioMixer.h index 9ca109f62c..72ca28a172 100644 --- a/libs/audioflinger/AudioMixer.h +++ b/libs/audioflinger/AudioMixer.h @@ -2,16 +2,16 @@ ** ** Copyright 2007, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ @@ -130,7 +130,7 @@ private: int32_t volumeInc[2]; - uint16_t reserved; + uint16_t frameCount; uint8_t channelCount : 4; uint8_t enabled : 1; diff --git a/libs/audioflinger/AudioResampler.cpp b/libs/audioflinger/AudioResampler.cpp index c93ead37d9..5dabacbb70 100644 --- a/libs/audioflinger/AudioResampler.cpp +++ b/libs/audioflinger/AudioResampler.cpp @@ -14,17 +14,23 @@ * limitations under the License. */ +#define LOG_TAG "AudioResampler" +//#define LOG_NDEBUG 0 + #include #include #include #include #include - #include "AudioResampler.h" #include "AudioResamplerSinc.h" #include "AudioResamplerCubic.h" namespace android { + +#ifdef __ARM_ARCH_5E__ // optimized asm option + #define ASM_ARM_RESAMP1 // enable asm optimisation for ResamplerOrder1 +#endif // __ARM_ARCH_5E__ // ---------------------------------------------------------------------------- class AudioResamplerOrder1 : public AudioResampler { @@ -46,6 +52,15 @@ private: AudioBufferProvider* provider); void resampleStereo16(int32_t* out, size_t outFrameCount, AudioBufferProvider* provider); +#ifdef ASM_ARM_RESAMP1 // asm optimisation for ResamplerOrder1 + void AsmMono16Loop(int16_t *in, int32_t* maxOutPt, int32_t maxInIdx, + size_t &outputIndex, int32_t* out, size_t &inputIndex, int32_t vl, int32_t vr, + uint32_t &phaseFraction, uint32_t phaseIncrement); + void AsmStereo16Loop(int16_t *in, int32_t* maxOutPt, int32_t maxInIdx, + size_t &outputIndex, int32_t* out, size_t &inputIndex, int32_t vl, int32_t vr, + uint32_t &phaseFraction, uint32_t phaseIncrement); +#endif // ASM_ARM_RESAMP1 + static inline int32_t Interp(int32_t x0, int32_t x1, uint32_t f) { return x0 + (((x1 - x0) * (int32_t)(f >> kPreInterpShift)) >> kNumInterpBits); } @@ -73,20 +88,23 @@ AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount, if (quality == DEFAULT) quality = LOW_QUALITY; - + switch (quality) { default: case LOW_QUALITY: + LOGV("Create linear Resampler"); resampler = new AudioResamplerOrder1(bitDepth, inChannelCount, sampleRate); break; case MED_QUALITY: + LOGV("Create cubic Resampler"); resampler = new AudioResamplerCubic(bitDepth, inChannelCount, sampleRate); break; case HIGH_QUALITY: + LOGV("Create sinc Resampler"); resampler = new AudioResamplerSinc(bitDepth, inChannelCount, sampleRate); break; } - + // initialize resampler resampler->init(); return resampler; @@ -103,10 +121,10 @@ AudioResampler::AudioResampler(int bitDepth, int inChannelCount, inChannelCount); // LOG_ASSERT(0); } - + // initialize common members mVolume[0] = mVolume[1] = 0; - mBuffer.raw = NULL; + mBuffer.frameCount = 0; // save format for quick lookup if (inChannelCount == 1) { @@ -160,19 +178,31 @@ void AudioResamplerOrder1::resampleStereo16(int32_t* out, size_t outFrameCount, uint32_t phaseIncrement = mPhaseIncrement; size_t outputIndex = 0; size_t outputSampleCount = outFrameCount * 2; + size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate; // LOGE("starting resample %d frames, inputIndex=%d, phaseFraction=%d, phaseIncrement=%d\n", - // outFrameCount, inputIndex, phaseFraction, phaseIncrement); + // outFrameCount, inputIndex, phaseFraction, phaseIncrement); while (outputIndex < outputSampleCount) { // buffer is empty, fetch a new one - if (mBuffer.raw == NULL) { + while (mBuffer.frameCount == 0) { + mBuffer.frameCount = inFrameCount; provider->getNextBuffer(&mBuffer); - if (mBuffer.raw == NULL) - break; + if (mBuffer.raw == NULL) { + goto resampleStereo16_exit; + } + // LOGE("New buffer fetched: %d frames\n", mBuffer.frameCount); + if (mBuffer.frameCount > inputIndex) break; + + inputIndex -= mBuffer.frameCount; + mX0L = mBuffer.i16[mBuffer.frameCount*2-2]; + mX0R = mBuffer.i16[mBuffer.frameCount*2-1]; + provider->releaseBuffer(&mBuffer); + // mBuffer.frameCount == 0 now so we reload a new buffer } + int16_t *in = mBuffer.i16; // handle boundary case @@ -187,34 +217,47 @@ void AudioResamplerOrder1::resampleStereo16(int32_t* out, size_t outFrameCount, // process input samples // LOGE("general case\n"); - while (outputIndex < outputSampleCount) { + +#ifdef ASM_ARM_RESAMP1 // asm optimisation for ResamplerOrder1 + if (inputIndex + 2 < mBuffer.frameCount) { + int32_t* maxOutPt; + int32_t maxInIdx; + + maxOutPt = out + (outputSampleCount - 2); // 2 because 2 frames per loop + maxInIdx = mBuffer.frameCount - 2; + AsmStereo16Loop(in, maxOutPt, maxInIdx, outputIndex, out, inputIndex, vl, vr, + phaseFraction, phaseIncrement); + } +#endif // ASM_ARM_RESAMP1 + + while (outputIndex < outputSampleCount && inputIndex < mBuffer.frameCount) { out[outputIndex++] += vl * Interp(in[inputIndex*2-2], in[inputIndex*2], phaseFraction); out[outputIndex++] += vr * Interp(in[inputIndex*2-1], in[inputIndex*2+1], phaseFraction); Advance(&inputIndex, &phaseFraction, phaseIncrement); - if (inputIndex >= mBuffer.frameCount) - break; } + // LOGE("loop done - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex); // if done with buffer, save samples if (inputIndex >= mBuffer.frameCount) { inputIndex -= mBuffer.frameCount; - // LOGE("buffer done, new input index", inputIndex); + // LOGE("buffer done, new input index %d", inputIndex); mX0L = mBuffer.i16[mBuffer.frameCount*2-2]; mX0R = mBuffer.i16[mBuffer.frameCount*2-1]; provider->releaseBuffer(&mBuffer); - // verify that the releaseBuffer NULLS the buffer pointer - // LOG_ASSERT(mBuffer.raw == NULL); + // verify that the releaseBuffer resets the buffer frameCount + // LOG_ASSERT(mBuffer.frameCount == 0); } } // LOGE("output buffer full - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex); +resampleStereo16_exit: // save state mInputIndex = inputIndex; mPhaseFraction = phaseFraction; @@ -231,18 +274,27 @@ void AudioResamplerOrder1::resampleMono16(int32_t* out, size_t outFrameCount, uint32_t phaseIncrement = mPhaseIncrement; size_t outputIndex = 0; size_t outputSampleCount = outFrameCount * 2; + size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate; // LOGE("starting resample %d frames, inputIndex=%d, phaseFraction=%d, phaseIncrement=%d\n", // outFrameCount, inputIndex, phaseFraction, phaseIncrement); - while (outputIndex < outputSampleCount) { - // buffer is empty, fetch a new one - if (mBuffer.raw == NULL) { + while (mBuffer.frameCount == 0) { + mBuffer.frameCount = inFrameCount; provider->getNextBuffer(&mBuffer); - if (mBuffer.raw == NULL) - break; + if (mBuffer.raw == NULL) { + mInputIndex = inputIndex; + mPhaseFraction = phaseFraction; + goto resampleMono16_exit; + } // LOGE("New buffer fetched: %d frames\n", mBuffer.frameCount); + if (mBuffer.frameCount > inputIndex) break; + + inputIndex -= mBuffer.frameCount; + mX0L = mBuffer.i16[mBuffer.frameCount-1]; + provider->releaseBuffer(&mBuffer); + // mBuffer.frameCount == 0 now so we reload a new buffer } int16_t *in = mBuffer.i16; @@ -259,38 +311,284 @@ void AudioResamplerOrder1::resampleMono16(int32_t* out, size_t outFrameCount, // process input samples // LOGE("general case\n"); - while (outputIndex < outputSampleCount) { + +#ifdef ASM_ARM_RESAMP1 // asm optimisation for ResamplerOrder1 + if (inputIndex + 2 < mBuffer.frameCount) { + int32_t* maxOutPt; + int32_t maxInIdx; + + maxOutPt = out + (outputSampleCount - 2); + maxInIdx = (int32_t)mBuffer.frameCount - 2; + AsmMono16Loop(in, maxOutPt, maxInIdx, outputIndex, out, inputIndex, vl, vr, + phaseFraction, phaseIncrement); + } +#endif // ASM_ARM_RESAMP1 + + while (outputIndex < outputSampleCount && inputIndex < mBuffer.frameCount) { int32_t sample = Interp(in[inputIndex-1], in[inputIndex], phaseFraction); out[outputIndex++] += vl * sample; out[outputIndex++] += vr * sample; Advance(&inputIndex, &phaseFraction, phaseIncrement); - if (inputIndex >= mBuffer.frameCount) - break; } + + // LOGE("loop done - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex); // if done with buffer, save samples if (inputIndex >= mBuffer.frameCount) { inputIndex -= mBuffer.frameCount; - // LOGE("buffer done, new input index", inputIndex); + // LOGE("buffer done, new input index %d", inputIndex); mX0L = mBuffer.i16[mBuffer.frameCount-1]; provider->releaseBuffer(&mBuffer); - // verify that the releaseBuffer NULLS the buffer pointer - // LOG_ASSERT(mBuffer.raw == NULL); + // verify that the releaseBuffer resets the buffer frameCount + // LOG_ASSERT(mBuffer.frameCount == 0); } } // LOGE("output buffer full - outputIndex=%d, inputIndex=%d\n", outputIndex, inputIndex); +resampleMono16_exit: // save state mInputIndex = inputIndex; mPhaseFraction = phaseFraction; } +#ifdef ASM_ARM_RESAMP1 // asm optimisation for ResamplerOrder1 + +/******************************************************************* +* +* AsmMono16Loop +* asm optimized monotonic loop version; one loop is 2 frames +* Input: +* in : pointer on input samples +* maxOutPt : pointer on first not filled +* maxInIdx : index on first not used +* outputIndex : pointer on current output index +* out : pointer on output buffer +* inputIndex : pointer on current input index +* vl, vr : left and right gain +* phaseFraction : pointer on current phase fraction +* phaseIncrement +* Ouput: +* outputIndex : +* out : updated buffer +* inputIndex : index of next to use +* phaseFraction : phase fraction for next interpolation +* +*******************************************************************/ +void AudioResamplerOrder1::AsmMono16Loop(int16_t *in, int32_t* maxOutPt, int32_t maxInIdx, + size_t &outputIndex, int32_t* out, size_t &inputIndex, int32_t vl, int32_t vr, + uint32_t &phaseFraction, uint32_t phaseIncrement) +{ +#define MO_PARAM5 "36" // offset of parameter 5 (outputIndex) + + asm( + "stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}\n" + // get parameters + " ldr r6, [sp, #" MO_PARAM5 " + 20]\n" // &phaseFraction + " ldr r6, [r6]\n" // phaseFraction + " ldr r7, [sp, #" MO_PARAM5 " + 8]\n" // &inputIndex + " ldr r7, [r7]\n" // inputIndex + " ldr r8, [sp, #" MO_PARAM5 " + 4]\n" // out + " ldr r0, [sp, #" MO_PARAM5 " + 0]\n" // &outputIndex + " ldr r0, [r0]\n" // outputIndex + " add r8, r0, asl #2\n" // curOut + " ldr r9, [sp, #" MO_PARAM5 " + 24]\n" // phaseIncrement + " ldr r10, [sp, #" MO_PARAM5 " + 12]\n" // vl + " ldr r11, [sp, #" MO_PARAM5 " + 16]\n" // vr + + // r0 pin, x0, Samp + + // r1 in + // r2 maxOutPt + // r3 maxInIdx + + // r4 x1, i1, i3, Out1 + // r5 out0 + + // r6 frac + // r7 inputIndex + // r8 curOut + + // r9 inc + // r10 vl + // r11 vr + + // r12 + // r13 sp + // r14 + + // the following loop works on 2 frames + + ".Y4L01:\n" + " cmp r8, r2\n" // curOut - maxCurOut + " bcs .Y4L02\n" + +#define MO_ONE_FRAME \ + " add r0, r1, r7, asl #1\n" /* in + inputIndex */\ + " ldrsh r4, [r0]\n" /* in[inputIndex] */\ + " ldr r5, [r8]\n" /* out[outputIndex] */\ + " ldrsh r0, [r0, #-2]\n" /* in[inputIndex-1] */\ + " bic r6, r6, #0xC0000000\n" /* phaseFraction & ... */\ + " sub r4, r4, r0\n" /* in[inputIndex] - in[inputIndex-1] */\ + " mov r4, r4, lsl #2\n" /* <<2 */\ + " smulwt r4, r4, r6\n" /* (x1-x0)*.. */\ + " add r6, r6, r9\n" /* phaseFraction + phaseIncrement */\ + " add r0, r0, r4\n" /* x0 - (..) */\ + " mla r5, r0, r10, r5\n" /* vl*interp + out[] */\ + " ldr r4, [r8, #4]\n" /* out[outputIndex+1] */\ + " str r5, [r8], #4\n" /* out[outputIndex++] = ... */\ + " mla r4, r0, r11, r4\n" /* vr*interp + out[] */\ + " add r7, r7, r6, lsr #30\n" /* inputIndex + phaseFraction>>30 */\ + " str r4, [r8], #4\n" /* out[outputIndex++] = ... */ + + MO_ONE_FRAME // frame 1 + MO_ONE_FRAME // frame 2 + + " cmp r7, r3\n" // inputIndex - maxInIdx + " bcc .Y4L01\n" + ".Y4L02:\n" + + " bic r6, r6, #0xC0000000\n" // phaseFraction & ... + // save modified values + " ldr r0, [sp, #" MO_PARAM5 " + 20]\n" // &phaseFraction + " str r6, [r0]\n" // phaseFraction + " ldr r0, [sp, #" MO_PARAM5 " + 8]\n" // &inputIndex + " str r7, [r0]\n" // inputIndex + " ldr r0, [sp, #" MO_PARAM5 " + 4]\n" // out + " sub r8, r0\n" // curOut - out + " asr r8, #2\n" // new outputIndex + " ldr r0, [sp, #" MO_PARAM5 " + 0]\n" // &outputIndex + " str r8, [r0]\n" // save outputIndex + + " ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}\n" + ); +} + +/******************************************************************* +* +* AsmStereo16Loop +* asm optimized stereo loop version; one loop is 2 frames +* Input: +* in : pointer on input samples +* maxOutPt : pointer on first not filled +* maxInIdx : index on first not used +* outputIndex : pointer on current output index +* out : pointer on output buffer +* inputIndex : pointer on current input index +* vl, vr : left and right gain +* phaseFraction : pointer on current phase fraction +* phaseIncrement +* Ouput: +* outputIndex : +* out : updated buffer +* inputIndex : index of next to use +* phaseFraction : phase fraction for next interpolation +* +*******************************************************************/ +void AudioResamplerOrder1::AsmStereo16Loop(int16_t *in, int32_t* maxOutPt, int32_t maxInIdx, + size_t &outputIndex, int32_t* out, size_t &inputIndex, int32_t vl, int32_t vr, + uint32_t &phaseFraction, uint32_t phaseIncrement) +{ +#define ST_PARAM5 "40" // offset of parameter 5 (outputIndex) + asm( + "stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr}\n" + // get parameters + " ldr r6, [sp, #" ST_PARAM5 " + 20]\n" // &phaseFraction + " ldr r6, [r6]\n" // phaseFraction + " ldr r7, [sp, #" ST_PARAM5 " + 8]\n" // &inputIndex + " ldr r7, [r7]\n" // inputIndex + " ldr r8, [sp, #" ST_PARAM5 " + 4]\n" // out + " ldr r0, [sp, #" ST_PARAM5 " + 0]\n" // &outputIndex + " ldr r0, [r0]\n" // outputIndex + " add r8, r0, asl #2\n" // curOut + " ldr r9, [sp, #" ST_PARAM5 " + 24]\n" // phaseIncrement + " ldr r10, [sp, #" ST_PARAM5 " + 12]\n" // vl + " ldr r11, [sp, #" ST_PARAM5 " + 16]\n" // vr + + // r0 pin, x0, Samp + + // r1 in + // r2 maxOutPt + // r3 maxInIdx + + // r4 x1, i1, i3, out1 + // r5 out0 + + // r6 frac + // r7 inputIndex + // r8 curOut + + // r9 inc + // r10 vl + // r11 vr + + // r12 temporary + // r13 sp + // r14 + + ".Y5L01:\n" + " cmp r8, r2\n" // curOut - maxCurOut + " bcs .Y5L02\n" + +#define ST_ONE_FRAME \ + " bic r6, r6, #0xC0000000\n" /* phaseFraction & ... */\ +\ + " add r0, r1, r7, asl #2\n" /* in + 2*inputIndex */\ +\ + " ldrsh r4, [r0]\n" /* in[2*inputIndex] */\ + " ldr r5, [r8]\n" /* out[outputIndex] */\ + " ldrsh r12, [r0, #-4]\n" /* in[2*inputIndex-2] */\ + " sub r4, r4, r12\n" /* in[2*InputIndex] - in[2*InputIndex-2] */\ + " mov r4, r4, lsl #2\n" /* <<2 */\ + " smulwt r4, r4, r6\n" /* (x1-x0)*.. */\ + " add r12, r12, r4\n" /* x0 - (..) */\ + " mla r5, r12, r10, r5\n" /* vl*interp + out[] */\ + " ldr r4, [r8, #4]\n" /* out[outputIndex+1] */\ + " str r5, [r8], #4\n" /* out[outputIndex++] = ... */\ +\ + " ldrsh r12, [r0, #+2]\n" /* in[2*inputIndex+1] */\ + " ldrsh r0, [r0, #-2]\n" /* in[2*inputIndex-1] */\ + " sub r12, r12, r0\n" /* in[2*InputIndex] - in[2*InputIndex-2] */\ + " mov r12, r12, lsl #2\n" /* <<2 */\ + " smulwt r12, r12, r6\n" /* (x1-x0)*.. */\ + " add r12, r0, r12\n" /* x0 - (..) */\ + " mla r4, r12, r11, r4\n" /* vr*interp + out[] */\ + " str r4, [r8], #4\n" /* out[outputIndex++] = ... */\ +\ + " add r6, r6, r9\n" /* phaseFraction + phaseIncrement */\ + " add r7, r7, r6, lsr #30\n" /* inputIndex + phaseFraction>>30 */ + + ST_ONE_FRAME // frame 1 + ST_ONE_FRAME // frame 1 + + " cmp r7, r3\n" // inputIndex - maxInIdx + " bcc .Y5L01\n" + ".Y5L02:\n" + + " bic r6, r6, #0xC0000000\n" // phaseFraction & ... + // save modified values + " ldr r0, [sp, #" ST_PARAM5 " + 20]\n" // &phaseFraction + " str r6, [r0]\n" // phaseFraction + " ldr r0, [sp, #" ST_PARAM5 " + 8]\n" // &inputIndex + " str r7, [r0]\n" // inputIndex + " ldr r0, [sp, #" ST_PARAM5 " + 4]\n" // out + " sub r8, r0\n" // curOut - out + " asr r8, #2\n" // new outputIndex + " ldr r0, [sp, #" ST_PARAM5 " + 0]\n" // &outputIndex + " str r8, [r0]\n" // save outputIndex + + " ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}\n" + ); +} + +#endif // ASM_ARM_RESAMP1 + + // ---------------------------------------------------------------------------- } ; // namespace android diff --git a/libs/audioflinger/AudioResamplerCubic.cpp b/libs/audioflinger/AudioResamplerCubic.cpp index 4f437bf2f5..1d247bd3a6 100644 --- a/libs/audioflinger/AudioResamplerCubic.cpp +++ b/libs/audioflinger/AudioResamplerCubic.cpp @@ -60,9 +60,11 @@ void AudioResamplerCubic::resampleStereo16(int32_t* out, size_t outFrameCount, uint32_t phaseIncrement = mPhaseIncrement; size_t outputIndex = 0; size_t outputSampleCount = outFrameCount * 2; - + size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate; + // fetch first buffer - if (mBuffer.raw == NULL) { + if (mBuffer.frameCount == 0) { + mBuffer.frameCount = inFrameCount; provider->getNextBuffer(&mBuffer); if (mBuffer.raw == NULL) return; @@ -79,7 +81,7 @@ void AudioResamplerCubic::resampleStereo16(int32_t* out, size_t outFrameCount, out[outputIndex++] += vl * interp(&left, x); out[outputIndex++] += vr * interp(&right, x); // out[outputIndex++] += vr * in[inputIndex*2]; - + // increment phase phaseFraction += phaseIncrement; uint32_t indexIncrement = (phaseFraction >> kNumPhaseBits); @@ -92,6 +94,7 @@ void AudioResamplerCubic::resampleStereo16(int32_t* out, size_t outFrameCount, if (inputIndex == mBuffer.frameCount) { inputIndex = 0; provider->releaseBuffer(&mBuffer); + mBuffer.frameCount = inFrameCount; provider->getNextBuffer(&mBuffer); if (mBuffer.raw == NULL) goto save_state; // ugly, but efficient @@ -122,9 +125,11 @@ void AudioResamplerCubic::resampleMono16(int32_t* out, size_t outFrameCount, uint32_t phaseIncrement = mPhaseIncrement; size_t outputIndex = 0; size_t outputSampleCount = outFrameCount * 2; - + size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate; + // fetch first buffer - if (mBuffer.raw == NULL) { + if (mBuffer.frameCount == 0) { + mBuffer.frameCount = inFrameCount; provider->getNextBuffer(&mBuffer); if (mBuffer.raw == NULL) return; @@ -141,7 +146,7 @@ void AudioResamplerCubic::resampleMono16(int32_t* out, size_t outFrameCount, sample = interp(&left, x); out[outputIndex++] += vl * sample; out[outputIndex++] += vr * sample; - + // increment phase phaseFraction += phaseIncrement; uint32_t indexIncrement = (phaseFraction >> kNumPhaseBits); @@ -154,6 +159,7 @@ void AudioResamplerCubic::resampleMono16(int32_t* out, size_t outFrameCount, if (inputIndex == mBuffer.frameCount) { inputIndex = 0; provider->releaseBuffer(&mBuffer); + mBuffer.frameCount = inFrameCount; provider->getNextBuffer(&mBuffer); if (mBuffer.raw == NULL) goto save_state; // ugly, but efficient diff --git a/libs/audioflinger/AudioResamplerSinc.cpp b/libs/audioflinger/AudioResamplerSinc.cpp index e710d16d35..9e5e254786 100644 --- a/libs/audioflinger/AudioResamplerSinc.cpp +++ b/libs/audioflinger/AudioResamplerSinc.cpp @@ -25,18 +25,18 @@ namespace android { * These coeficients are computed with the "fir" utility found in * tools/resampler_tools * TODO: A good optimization would be to transpose this matrix, to take - * better advantage of the data-cache. + * better advantage of the data-cache. */ const int32_t AudioResamplerSinc::mFirCoefsUp[] = { - 0x7fffffff, 0x7f15d078, 0x7c5e0da6, 0x77ecd867, 0x71e2e251, 0x6a6c304a, 0x61be7269, 0x58170412, 0x4db8ab05, 0x42e92ea6, 0x37eee214, 0x2d0e3bb1, 0x22879366, 0x18951e95, 0x0f693d0d, 0x072d2621, - 0x00000000, 0xf9f66655, 0xf51a5fd7, 0xf16bbd84, 0xeee0d9ac, 0xed67a922, 0xece70de6, 0xed405897, 0xee50e505, 0xeff3be30, 0xf203370f, 0xf45a6741, 0xf6d67d53, 0xf957db66, 0xfbc2f647, 0xfe00f2b9, - 0x00000000, 0x01b37218, 0x0313a0c6, 0x041d930d, 0x04d28057, 0x053731b0, 0x05534dff, 0x05309bfd, 0x04da440d, 0x045c1aee, 0x03c1fcdd, 0x03173ef5, 0x02663ae8, 0x01b7f736, 0x0113ec79, 0x007fe6a9, - 0x00000000, 0xff96b229, 0xff44f99f, 0xff0a86be, 0xfee5f803, 0xfed518fd, 0xfed521fd, 0xfee2f4fd, 0xfefb54f8, 0xff1b159b, 0xff3f4203, 0xff6539e0, 0xff8ac502, 0xffae1ddd, 0xffcdf3f9, 0xffe96798, - 0x00000000, 0x00119de6, 0x001e6b7e, 0x0026cb7a, 0x002b4830, 0x002c83d6, 0x002b2a82, 0x0027e67a, 0x002356f9, 0x001e098e, 0x001875e4, 0x0012fbbe, 0x000de2d1, 0x00095c10, 0x00058414, 0x00026636, - 0x00000000, 0xfffe44a9, 0xfffd206d, 0xfffc7b7f, 0xfffc3c8f, 0xfffc4ac2, 0xfffc8f2b, 0xfffcf5c4, 0xfffd6df3, 0xfffdeab2, 0xfffe6275, 0xfffececf, 0xffff2c07, 0xffff788c, 0xffffb471, 0xffffe0f2, - 0x00000000, 0x000013e6, 0x00001f03, 0x00002396, 0x00002399, 0x000020b6, 0x00001c3c, 0x00001722, 0x00001216, 0x00000d81, 0x0000099c, 0x0000067c, 0x00000419, 0x0000025f, 0x00000131, 0x00000070, - 0x00000000, 0xffffffc7, 0xffffffb3, 0xffffffb3, 0xffffffbe, 0xffffffcd, 0xffffffdb, 0xffffffe7, 0xfffffff0, 0xfffffff7, 0xfffffffb, 0xfffffffe, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, - 0x00000000 // this one is needed for lerping the last coefficient + 0x7fffffff, 0x7f15d078, 0x7c5e0da6, 0x77ecd867, 0x71e2e251, 0x6a6c304a, 0x61be7269, 0x58170412, 0x4db8ab05, 0x42e92ea6, 0x37eee214, 0x2d0e3bb1, 0x22879366, 0x18951e95, 0x0f693d0d, 0x072d2621, + 0x00000000, 0xf9f66655, 0xf51a5fd7, 0xf16bbd84, 0xeee0d9ac, 0xed67a922, 0xece70de6, 0xed405897, 0xee50e505, 0xeff3be30, 0xf203370f, 0xf45a6741, 0xf6d67d53, 0xf957db66, 0xfbc2f647, 0xfe00f2b9, + 0x00000000, 0x01b37218, 0x0313a0c6, 0x041d930d, 0x04d28057, 0x053731b0, 0x05534dff, 0x05309bfd, 0x04da440d, 0x045c1aee, 0x03c1fcdd, 0x03173ef5, 0x02663ae8, 0x01b7f736, 0x0113ec79, 0x007fe6a9, + 0x00000000, 0xff96b229, 0xff44f99f, 0xff0a86be, 0xfee5f803, 0xfed518fd, 0xfed521fd, 0xfee2f4fd, 0xfefb54f8, 0xff1b159b, 0xff3f4203, 0xff6539e0, 0xff8ac502, 0xffae1ddd, 0xffcdf3f9, 0xffe96798, + 0x00000000, 0x00119de6, 0x001e6b7e, 0x0026cb7a, 0x002b4830, 0x002c83d6, 0x002b2a82, 0x0027e67a, 0x002356f9, 0x001e098e, 0x001875e4, 0x0012fbbe, 0x000de2d1, 0x00095c10, 0x00058414, 0x00026636, + 0x00000000, 0xfffe44a9, 0xfffd206d, 0xfffc7b7f, 0xfffc3c8f, 0xfffc4ac2, 0xfffc8f2b, 0xfffcf5c4, 0xfffd6df3, 0xfffdeab2, 0xfffe6275, 0xfffececf, 0xffff2c07, 0xffff788c, 0xffffb471, 0xffffe0f2, + 0x00000000, 0x000013e6, 0x00001f03, 0x00002396, 0x00002399, 0x000020b6, 0x00001c3c, 0x00001722, 0x00001216, 0x00000d81, 0x0000099c, 0x0000067c, 0x00000419, 0x0000025f, 0x00000131, 0x00000070, + 0x00000000, 0xffffffc7, 0xffffffb3, 0xffffffb3, 0xffffffbe, 0xffffffcd, 0xffffffdb, 0xffffffe7, 0xfffffff0, 0xfffffff7, 0xfffffffb, 0xfffffffe, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, + 0x00000000 // this one is needed for lerping the last coefficient }; /* @@ -46,20 +46,20 @@ const int32_t AudioResamplerSinc::mFirCoefsUp[] = { * these coefficient from the above by "Stretching" them in time). */ const int32_t AudioResamplerSinc::mFirCoefsDown[] = { - 0x7fffffff, 0x7f55e46d, 0x7d5b4c60, 0x7a1b4b98, 0x75a7fb14, 0x7019f0bd, 0x698f875a, 0x622bfd59, 0x5a167256, 0x5178cc54, 0x487e8e6c, 0x3f53aae8, 0x36235ad4, 0x2d17047b, 0x245539ab, 0x1c00d540, - 0x14383e57, 0x0d14d5ca, 0x06aa910b, 0x0107c38b, 0xfc351654, 0xf835abae, 0xf5076b45, 0xf2a37202, 0xf0fe9faa, 0xf00a3bbd, 0xefb4aa81, 0xefea2b05, 0xf0959716, 0xf1a11e83, 0xf2f6f7a0, 0xf481fff4, - 0xf62e48ce, 0xf7e98ca5, 0xf9a38b4c, 0xfb4e4bfa, 0xfcde456f, 0xfe4a6d30, 0xff8c2fdf, 0x009f5555, 0x0181d393, 0x0233940f, 0x02b62f06, 0x030ca07d, 0x033afa62, 0x03461725, 0x03334f83, 0x030835fa, - 0x02ca59cc, 0x027f12d1, 0x022b570d, 0x01d39a49, 0x017bb78f, 0x0126e414, 0x00d7aaaf, 0x008feec7, 0x0050f584, 0x001b73e3, 0xffefa063, 0xffcd46ed, 0xffb3ddcd, 0xffa29aaa, 0xff988691, 0xff949066, - 0xff959d24, 0xff9a959e, 0xffa27195, 0xffac4011, 0xffb72d2b, 0xffc28569, 0xffcdb706, 0xffd85171, 0xffe20364, 0xffea97e9, 0xfff1f2b2, 0xfff80c06, 0xfffcec92, 0x0000a955, 0x00035fd8, 0x000532cf, - 0x00064735, 0x0006c1f9, 0x0006c62d, 0x000673ba, 0x0005e68f, 0x00053630, 0x000475a3, 0x0003b397, 0x0002fac1, 0x00025257, 0x0001be9e, 0x0001417a, 0x0000dafd, 0x000089eb, 0x00004c28, 0x00001f1d, - 0x00000000, 0xffffec10, 0xffffe0be, 0xffffdbc5, 0xffffdb39, 0xffffdd8b, 0xffffe182, 0xffffe638, 0xffffeb0a, 0xffffef8f, 0xfffff38b, 0xfffff6e3, 0xfffff993, 0xfffffba6, 0xfffffd30, 0xfffffe4a, - 0xffffff09, 0xffffff85, 0xffffffd1, 0xfffffffb, 0x0000000f, 0x00000016, 0x00000015, 0x00000012, 0x0000000d, 0x00000009, 0x00000006, 0x00000003, 0x00000002, 0x00000001, 0x00000000, 0x00000000, - 0x00000000 // this one is needed for lerping the last coefficient + 0x7fffffff, 0x7f55e46d, 0x7d5b4c60, 0x7a1b4b98, 0x75a7fb14, 0x7019f0bd, 0x698f875a, 0x622bfd59, 0x5a167256, 0x5178cc54, 0x487e8e6c, 0x3f53aae8, 0x36235ad4, 0x2d17047b, 0x245539ab, 0x1c00d540, + 0x14383e57, 0x0d14d5ca, 0x06aa910b, 0x0107c38b, 0xfc351654, 0xf835abae, 0xf5076b45, 0xf2a37202, 0xf0fe9faa, 0xf00a3bbd, 0xefb4aa81, 0xefea2b05, 0xf0959716, 0xf1a11e83, 0xf2f6f7a0, 0xf481fff4, + 0xf62e48ce, 0xf7e98ca5, 0xf9a38b4c, 0xfb4e4bfa, 0xfcde456f, 0xfe4a6d30, 0xff8c2fdf, 0x009f5555, 0x0181d393, 0x0233940f, 0x02b62f06, 0x030ca07d, 0x033afa62, 0x03461725, 0x03334f83, 0x030835fa, + 0x02ca59cc, 0x027f12d1, 0x022b570d, 0x01d39a49, 0x017bb78f, 0x0126e414, 0x00d7aaaf, 0x008feec7, 0x0050f584, 0x001b73e3, 0xffefa063, 0xffcd46ed, 0xffb3ddcd, 0xffa29aaa, 0xff988691, 0xff949066, + 0xff959d24, 0xff9a959e, 0xffa27195, 0xffac4011, 0xffb72d2b, 0xffc28569, 0xffcdb706, 0xffd85171, 0xffe20364, 0xffea97e9, 0xfff1f2b2, 0xfff80c06, 0xfffcec92, 0x0000a955, 0x00035fd8, 0x000532cf, + 0x00064735, 0x0006c1f9, 0x0006c62d, 0x000673ba, 0x0005e68f, 0x00053630, 0x000475a3, 0x0003b397, 0x0002fac1, 0x00025257, 0x0001be9e, 0x0001417a, 0x0000dafd, 0x000089eb, 0x00004c28, 0x00001f1d, + 0x00000000, 0xffffec10, 0xffffe0be, 0xffffdbc5, 0xffffdb39, 0xffffdd8b, 0xffffe182, 0xffffe638, 0xffffeb0a, 0xffffef8f, 0xfffff38b, 0xfffff6e3, 0xfffff993, 0xfffffba6, 0xfffffd30, 0xfffffe4a, + 0xffffff09, 0xffffff85, 0xffffffd1, 0xfffffffb, 0x0000000f, 0x00000016, 0x00000015, 0x00000012, 0x0000000d, 0x00000009, 0x00000006, 0x00000003, 0x00000002, 0x00000001, 0x00000000, 0x00000000, + 0x00000000 // this one is needed for lerping the last coefficient }; // ---------------------------------------------------------------------------- -static inline +static inline int32_t mulRL(int left, int32_t in, uint32_t vRL) { #if defined(__arm__) && !defined(__thumb__) @@ -85,7 +85,7 @@ int32_t mulRL(int left, int32_t in, uint32_t vRL) #endif } -static inline +static inline int32_t mulAdd(int16_t in, int32_t v, int32_t a) { #if defined(__arm__) && !defined(__thumb__) @@ -95,12 +95,14 @@ int32_t mulAdd(int16_t in, int32_t v, int32_t a) : [in]"%r"(in), [v]"r"(v), [a]"r"(a) : ); return out; -#else - return a + ((in * int32_t(v))>>16); +#else + return a + in * (v>>16); + // improved precision + // return a + in * (v>>16) + ((in * (v & 0xffff)) >> 16); #endif } -static inline +static inline int32_t mulAddRL(int left, uint32_t inRL, int32_t v, int32_t a) { #if defined(__arm__) && !defined(__thumb__) @@ -119,9 +121,11 @@ int32_t mulAddRL(int left, uint32_t inRL, int32_t v, int32_t a) return out; #else if (left) { - return a + ((int16_t(inRL&0xFFFF) * int32_t(v))>>16); + return a + (int16_t(inRL&0xFFFF) * (v>>16)); + //improved precision + // return a + (int16_t(inRL&0xFFFF) * (v>>16)) + ((int16_t(inRL&0xFFFF) * (v & 0xffff)) >> 16); } else { - return a + ((int16_t(inRL>>16) * int32_t(v))>>16); + return a + (int16_t(inRL>>16) * (v>>16)); } #endif } @@ -129,37 +133,37 @@ int32_t mulAddRL(int left, uint32_t inRL, int32_t v, int32_t a) // ---------------------------------------------------------------------------- AudioResamplerSinc::AudioResamplerSinc(int bitDepth, - int inChannelCount, int32_t sampleRate) - : AudioResampler(bitDepth, inChannelCount, sampleRate), - mState(0) + int inChannelCount, int32_t sampleRate) + : AudioResampler(bitDepth, inChannelCount, sampleRate), + mState(0) { - /* - * Layout of the state buffer for 32 tap: - * - * "present" sample beginning of 2nd buffer - * v v - * 0 01 2 23 3 - * 0 F0 0 F0 F - * [pppppppppppppppInnnnnnnnnnnnnnnnpppppppppppppppInnnnnnnnnnnnnnnn] - * ^ ^ head - * - * p = past samples, convoluted with the (p)ositive side of sinc() - * n = future samples, convoluted with the (n)egative side of sinc() - * r = extra space for implementing the ring buffer - * - */ + /* + * Layout of the state buffer for 32 tap: + * + * "present" sample beginning of 2nd buffer + * v v + * 0 01 2 23 3 + * 0 F0 0 F0 F + * [pppppppppppppppInnnnnnnnnnnnnnnnpppppppppppppppInnnnnnnnnnnnnnnn] + * ^ ^ head + * + * p = past samples, convoluted with the (p)ositive side of sinc() + * n = future samples, convoluted with the (n)egative side of sinc() + * r = extra space for implementing the ring buffer + * + */ - const size_t numCoefs = 2*halfNumCoefs; - const size_t stateSize = numCoefs * inChannelCount * 2; - mState = new int16_t[stateSize]; - memset(mState, 0, sizeof(int16_t)*stateSize); - mImpulse = mState + (halfNumCoefs-1)*inChannelCount; - mRingFull = mImpulse + (numCoefs+1)*inChannelCount; + const size_t numCoefs = 2*halfNumCoefs; + const size_t stateSize = numCoefs * inChannelCount * 2; + mState = new int16_t[stateSize]; + memset(mState, 0, sizeof(int16_t)*stateSize); + mImpulse = mState + (halfNumCoefs-1)*inChannelCount; + mRingFull = mImpulse + (numCoefs+1)*inChannelCount; } AudioResamplerSinc::~AudioResamplerSinc() { - delete [] mState; + delete [] mState; } void AudioResamplerSinc::init() { @@ -168,9 +172,9 @@ void AudioResamplerSinc::init() { void AudioResamplerSinc::resample(int32_t* out, size_t outFrameCount, AudioBufferProvider* provider) { - mFirCoefs = (mInSampleRate <= mSampleRate) ? mFirCoefsUp : mFirCoefsDown; + mFirCoefs = (mInSampleRate <= mSampleRate) ? mFirCoefsUp : mFirCoefsDown; - // select the appropriate resampler + // select the appropriate resampler switch (mChannelCount) { case 1: resample<1>(out, outFrameCount, provider); @@ -193,43 +197,68 @@ void AudioResamplerSinc::resample(int32_t* out, size_t outFrameCount, uint32_t phaseIncrement = mPhaseIncrement; size_t outputIndex = 0; size_t outputSampleCount = outFrameCount * 2; + size_t inFrameCount = (outFrameCount*mInSampleRate)/mSampleRate; AudioBufferProvider::Buffer& buffer(mBuffer); while (outputIndex < outputSampleCount) { // buffer is empty, fetch a new one - if (buffer.raw == NULL) { + while (buffer.frameCount == 0) { + buffer.frameCount = inFrameCount; provider->getNextBuffer(&buffer); - if (buffer.raw == NULL) - break; - const uint32_t phaseIndex = phaseFraction >> kNumPhaseBits; - if (phaseIndex) { - read(impulse, phaseFraction, buffer.i16, inputIndex); + if (buffer.raw == NULL) { + goto resample_exit; } + const uint32_t phaseIndex = phaseFraction >> kNumPhaseBits; + if (phaseIndex == 1) { + // read one frame + read(impulse, phaseFraction, buffer.i16, inputIndex); + } else if (phaseIndex == 2) { + // read 2 frames + read(impulse, phaseFraction, buffer.i16, inputIndex); + inputIndex++; + if (inputIndex >= mBuffer.frameCount) { + inputIndex -= mBuffer.frameCount; + provider->releaseBuffer(&buffer); + } else { + read(impulse, phaseFraction, buffer.i16, inputIndex); + } + } } int16_t *in = buffer.i16; - const size_t frameCount = buffer.frameCount; + const size_t frameCount = buffer.frameCount; - // Always read-in the first samples from the input buffer - int16_t* head = impulse + halfNumCoefs*CHANNELS; - head[0] = in[inputIndex*CHANNELS + 0]; - if (CHANNELS == 2) - head[1] = in[inputIndex*CHANNELS + 1]; + // Always read-in the first samples from the input buffer + int16_t* head = impulse + halfNumCoefs*CHANNELS; + head[0] = in[inputIndex*CHANNELS + 0]; + if (CHANNELS == 2) + head[1] = in[inputIndex*CHANNELS + 1]; // handle boundary case - int32_t l, r; + int32_t l, r; while (outputIndex < outputSampleCount) { - filterCoefficient(l, r, phaseFraction, impulse); - out[outputIndex++] = mulRL(1, l, vRL); - out[outputIndex++] = mulRL(0, r, vRL); + filterCoefficient(l, r, phaseFraction, impulse); + out[outputIndex++] += 2 * mulRL(1, l, vRL); + out[outputIndex++] += 2 * mulRL(0, r, vRL); - phaseFraction += phaseIncrement; - const uint32_t phaseIndex = phaseFraction >> kNumPhaseBits; - if (phaseIndex) { - inputIndex += phaseIndex; - if (inputIndex >= frameCount) - break; - read(impulse, phaseFraction, in, inputIndex); - } + phaseFraction += phaseIncrement; + const uint32_t phaseIndex = phaseFraction >> kNumPhaseBits; + if (phaseIndex == 1) { + inputIndex++; + if (inputIndex >= frameCount) + break; // need a new buffer + read(impulse, phaseFraction, in, inputIndex); + } else if(phaseIndex == 2) { // maximum value + inputIndex++; + if (inputIndex >= frameCount) + break; // 0 frame available, 2 frames needed + // read first frame + read(impulse, phaseFraction, in, inputIndex); + inputIndex++; + if (inputIndex >= frameCount) + break; // 0 frame available, 1 frame needed + // read second frame + read(impulse, phaseFraction, in, inputIndex); + } } // if done with buffer, save samples @@ -239,80 +268,89 @@ void AudioResamplerSinc::resample(int32_t* out, size_t outFrameCount, } } +resample_exit: mImpulse = impulse; mInputIndex = inputIndex; mPhaseFraction = phaseFraction; } template +/*** +* read() +* +* This function reads only one frame from input buffer and writes it in +* state buffer +* +**/ void AudioResamplerSinc::read( - int16_t*& impulse, uint32_t& phaseFraction, - int16_t const* in, size_t inputIndex) + int16_t*& impulse, uint32_t& phaseFraction, + int16_t const* in, size_t inputIndex) { - // read new samples into the ring buffer - while (phaseFraction >> kNumPhaseBits) { - const uint32_t phaseIndex = phaseFraction >> kNumPhaseBits; - impulse += CHANNELS; - phaseFraction -= 1LU<= mRingFull) { - const size_t stateSize = (halfNumCoefs*2)*CHANNELS; - memcpy(mState, mState+stateSize, sizeof(int16_t)*stateSize); - impulse -= stateSize; - } - int16_t* head = impulse + halfNumCoefs*CHANNELS; - head[0] = in[inputIndex*CHANNELS + 0]; - if (CHANNELS == 2) - head[1] = in[inputIndex*CHANNELS + 1]; - } + const uint32_t phaseIndex = phaseFraction >> kNumPhaseBits; + impulse += CHANNELS; + phaseFraction -= 1LU<= mRingFull) { + const size_t stateSize = (halfNumCoefs*2)*CHANNELS; + memcpy(mState, mState+stateSize, sizeof(int16_t)*stateSize); + impulse -= stateSize; + } + int16_t* head = impulse + halfNumCoefs*CHANNELS; + head[0] = in[inputIndex*CHANNELS + 0]; + if (CHANNELS == 2) + head[1] = in[inputIndex*CHANNELS + 1]; } template void AudioResamplerSinc::filterCoefficient( - int32_t& l, int32_t& r, uint32_t phase, int16_t const *samples) -{ - // compute the index of the coefficient on the positive side and - // negative side - uint32_t indexP = (phase & cMask) >> cShift; - uint16_t lerpP = (phase & pMask) >> pShift; - uint32_t indexN = (-phase & cMask) >> cShift; - uint16_t lerpN = (-phase & pMask) >> pShift; - - l = 0; - r = 0; - int32_t const* coefs = mFirCoefs; - int16_t const *sP = samples; - int16_t const *sN = samples+CHANNELS; - for (unsigned int i=0 ; i(l, r, coefs+indexP, lerpP, sP); - interpolate(l, r, coefs+indexN, lerpN, sN); - sP -= CHANNELS; sN += CHANNELS; coefs += 1<> cShift; + uint16_t lerpP = (phase & pMask) >> pShift; + uint32_t indexN = (-phase & cMask) >> cShift; + uint16_t lerpN = (-phase & pMask) >> pShift; + if ((indexP == 0) && (lerpP == 0)) { + indexN = cMask >> cShift; + lerpN = pMask >> pShift; + } + + l = 0; + r = 0; + int32_t const* coefs = mFirCoefs; + int16_t const *sP = samples; + int16_t const *sN = samples+CHANNELS; + for (unsigned int i=0 ; i(l, r, coefs+indexP, lerpP, sP); interpolate(l, r, coefs+indexN, lerpN, sN); - sP -= CHANNELS; sN += CHANNELS; coefs += 1<(l, r, coefs+indexP, lerpP, sP); interpolate(l, r, coefs+indexN, lerpN, sN); - sP -= CHANNELS; sN += CHANNELS; coefs += 1<(l, r, coefs+indexP, lerpP, sP); interpolate(l, r, coefs+indexN, lerpN, sN); - sP -= CHANNELS; sN += CHANNELS; coefs += 1<(l, r, coefs+indexP, lerpP, sP); + interpolate(l, r, coefs+indexN, lerpN, sN); + sP -= CHANNELS; sN += CHANNELS; coefs += 1< void AudioResamplerSinc::interpolate( int32_t& l, int32_t& r, - int32_t const* coefs, int16_t lerp, int16_t const* samples) + int32_t const* coefs, int16_t lerp, int16_t const* samples) { - int32_t c0 = coefs[0]; - int32_t c1 = coefs[1]; - int32_t sinc = mulAdd(lerp, (c1-c0)<<1, c0); - if (CHANNELS == 2) { - uint32_t rl = *reinterpret_cast(samples); - l = mulAddRL(1, rl, sinc, l); - r = mulAddRL(0, rl, sinc, r); - } else { - r = l = mulAdd(samples[0], sinc, l); - } + int32_t c0 = coefs[0]; + int32_t c1 = coefs[1]; + int32_t sinc = mulAdd(lerp, (c1-c0)<<1, c0); + if (CHANNELS == 2) { + uint32_t rl = *reinterpret_cast(samples); + l = mulAddRL(1, rl, sinc, l); + r = mulAddRL(0, rl, sinc, r); + } else { + r = l = mulAdd(samples[0], sinc, l); + } } // ---------------------------------------------------------------------------- diff --git a/libs/audioflinger/AudioResamplerSinc.h b/libs/audioflinger/AudioResamplerSinc.h index 89b9577bab..e6cb90b808 100644 --- a/libs/audioflinger/AudioResamplerSinc.h +++ b/libs/audioflinger/AudioResamplerSinc.h @@ -24,19 +24,20 @@ #include "AudioResampler.h" namespace android { + // ---------------------------------------------------------------------------- class AudioResamplerSinc : public AudioResampler { public: - AudioResamplerSinc(int bitDepth, int inChannelCount, int32_t sampleRate); + AudioResamplerSinc(int bitDepth, int inChannelCount, int32_t sampleRate); + + ~AudioResamplerSinc(); - ~AudioResamplerSinc(); - virtual void resample(int32_t* out, size_t outFrameCount, AudioBufferProvider* provider); private: void init(); - + template void resample(int32_t* out, size_t outFrameCount, AudioBufferProvider* provider); @@ -52,12 +53,12 @@ private: template inline void read(int16_t*& impulse, uint32_t& phaseFraction, - int16_t const* in, size_t inputIndex); + int16_t const* in, size_t inputIndex); int16_t *mState; int16_t *mImpulse; int16_t *mRingFull; - + int32_t const * mFirCoefs; static const int32_t mFirCoefsDown[]; static const int32_t mFirCoefsUp[]; @@ -67,15 +68,15 @@ private: static const int32_t RESAMPLE_FIR_LERP_INT_BITS = 4; // we have 16 coefs samples per zero-crossing - static const int coefsBits = RESAMPLE_FIR_LERP_INT_BITS; - static const int cShift = kNumPhaseBits - coefsBits; - static const uint32_t cMask = ((1< #include #include +#include #include @@ -27,7 +28,9 @@ #include #include "DisplayHardware/DisplayHardware.h" -#include "ui/BlitHardware.h" + +#include +#include using namespace android; @@ -91,19 +94,13 @@ DisplayHardware::~DisplayHardware() fini(); } -float DisplayHardware::getDpiX() const { return mDpiX; } -float DisplayHardware::getDpiY() const { return mDpiY; } -float DisplayHardware::getRefreshRate() const { return mRefreshRate; } - -int DisplayHardware::getWidth() const { - return mWidth; -} -int DisplayHardware::getHeight() const { - return mHeight; -} -PixelFormat DisplayHardware::getFormat() const { - return mFormat; -} +float DisplayHardware::getDpiX() const { return mDpiX; } +float DisplayHardware::getDpiY() const { return mDpiY; } +float DisplayHardware::getDensity() const { return mDensity; } +float DisplayHardware::getRefreshRate() const { return mRefreshRate; } +int DisplayHardware::getWidth() const { return mWidth; } +int DisplayHardware::getHeight() const { return mHeight; } +PixelFormat DisplayHardware::getFormat() const { return mFormat; } void DisplayHardware::init(uint32_t dpy) { @@ -195,6 +192,12 @@ void DisplayHardware::init(uint32_t dpy) mDpiY = 25.4f * float(value)/EGL_DISPLAY_SCALING; } mRefreshRate = 60.f; // TODO: get the real refresh rate + + // compute a "density" automatically as a scale factor from 160 dpi + // TODO: this value should be calculated a compile time based on the + // board. + mDensity = floorf((mDpiX>mDpiY ? mDpiX : mDpiY)*0.1f + 0.5f) * (10.0f/160.0f); + LOGI("density = %f", mDensity); /* * Create our OpenGL ES context @@ -237,8 +240,18 @@ void DisplayHardware::init(uint32_t dpy) mSurface = surface; mContext = context; mFormat = GGL_PIXEL_FORMAT_RGB_565; + + hw_module_t const* module; - mBlitEngine = copybit_init(); + mBlitEngine = NULL; + if (hw_get_module(COPYBIT_HARDWARE_MODULE_ID, &module) == 0) { + copybit_open(module, &mBlitEngine); + } + + mOverlayEngine = NULL; + if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID, &module) == 0) { + overlay_open(module, &mOverlayEngine); + } } /* @@ -252,7 +265,8 @@ void DisplayHardware::fini() { eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglTerminate(mDisplay); - copybit_term(mBlitEngine); + copybit_close(mBlitEngine); + overlay_close(mOverlayEngine); } void DisplayHardware::releaseScreen() const diff --git a/libs/surfaceflinger/DisplayHardware/DisplayHardware.h b/libs/surfaceflinger/DisplayHardware/DisplayHardware.h index 299e2363f9..de4a2ccdd5 100644 --- a/libs/surfaceflinger/DisplayHardware/DisplayHardware.h +++ b/libs/surfaceflinger/DisplayHardware/DisplayHardware.h @@ -26,6 +26,8 @@ #include "DisplayHardware/DisplayHardwareBase.h" +struct overlay_device_t; +struct copybit_device_t; struct copybit_image_t; struct copybit_t; @@ -64,6 +66,7 @@ public: float getDpiX() const; float getDpiY() const; float getRefreshRate() const; + float getDensity() const; int getWidth() const; int getHeight() const; PixelFormat getFormat() const; @@ -74,7 +77,8 @@ public: void getDisplaySurface(copybit_image_t* img) const; void getDisplaySurface(GGLSurface* fb) const; EGLDisplay getEGLDisplay() const { return mDisplay; } - copybit_t* getBlitEngine() const { return mBlitEngine; } + copybit_device_t* getBlitEngine() const { return mBlitEngine; } + overlay_device_t* getOverlayEngine() const { return mOverlayEngine; } Rect bounds() const { return Rect(mWidth, mHeight); @@ -91,13 +95,15 @@ private: float mDpiX; float mDpiY; float mRefreshRate; + float mDensity; int mWidth; int mHeight; PixelFormat mFormat; uint32_t mFlags; mutable Region mDirty; sp mDisplaySurface; - copybit_t* mBlitEngine; + copybit_device_t* mBlitEngine; + overlay_device_t* mOverlayEngine; }; }; // namespace android diff --git a/libs/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp b/libs/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp index 90f6287432..f75e5c229d 100644 --- a/libs/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp +++ b/libs/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp @@ -49,8 +49,10 @@ // ---------------------------------------------------------------------------- namespace android { -static char const * const kSleepFileName = "/sys/android_power/wait_for_fb_sleep"; -static char const * const kWakeFileName = "/sys/android_power/wait_for_fb_wake"; +static char const * kSleepFileName = "/sys/power/wait_for_fb_sleep"; +static char const * kWakeFileName = "/sys/power/wait_for_fb_wake"; +static char const * const kOldSleepFileName = "/sys/android_power/wait_for_fb_sleep"; +static char const * const kOldWakeFileName = "/sys/android_power/wait_for_fb_wake"; // This dir exists if the framebuffer console is present, either built into // the kernel or loaded as a module. @@ -123,16 +125,22 @@ status_t DisplayHardwareBase::DisplayEventThread::releaseScreen() const status_t DisplayHardwareBase::DisplayEventThread::readyToRun() { if (access(kSleepFileName, R_OK) || access(kWakeFileName, R_OK)) { - LOGE("Couldn't open %s or %s", kSleepFileName, kWakeFileName); - return NO_INIT; + if (access(kOldSleepFileName, R_OK) || access(kOldWakeFileName, R_OK)) { + LOGE("Couldn't open %s or %s", kSleepFileName, kWakeFileName); + return NO_INIT; + } + kSleepFileName = kOldSleepFileName; + kWakeFileName = kOldWakeFileName; } return NO_ERROR; } status_t DisplayHardwareBase::DisplayEventThread::initCheck() const { - return (access(kSleepFileName, R_OK) == 0 && - access(kWakeFileName, R_OK) == 0 && + return (((access(kSleepFileName, R_OK) == 0 && + access(kWakeFileName, R_OK) == 0) || + (access(kOldSleepFileName, R_OK) == 0 && + access(kOldWakeFileName, R_OK) == 0)) && access(kFbconSysDir, F_OK) != 0) ? NO_ERROR : NO_INIT; } diff --git a/libs/surfaceflinger/GPUHardware/GPUHardware.cpp b/libs/surfaceflinger/GPUHardware/GPUHardware.cpp index b24a0f2124..eb75f9998b 100644 --- a/libs/surfaceflinger/GPUHardware/GPUHardware.cpp +++ b/libs/surfaceflinger/GPUHardware/GPUHardware.cpp @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -48,36 +49,113 @@ #include "GPUHardware/GPUHardware.h" + /* - * This file manages the GPU if there is one. The intent is that this code - * needs to be different for every devce. Currently there is no abstraction, - * but in the long term, this code needs to be refactored so that API and - * implementation are separated. + * Manage the GPU. This implementation is very specific to the G1. + * There are no abstraction here. + * + * All this code will soon go-away and be replaced by a new architecture + * for managing graphics accelerators. * - * In this particular implementation, the GPU, its memory and register are - * managed here. Clients (such as OpenGL ES) request the GPU when then need - * it and are given a revokable heap containing the registers on memory. + * In the meantime, it is conceptually possible to instantiate a + * GPUHardwareInterface for another GPU (see GPUFactory at the bottom + * of this file); practically... doubtful. * */ namespace android { + // --------------------------------------------------------------------------- +class GPUClientHeap; +class GPUAreaHeap; + +class GPUHardware : public GPUHardwareInterface, public IBinder::DeathRecipient +{ +public: + static const int GPU_RESERVED_SIZE; + static const int GPUR_SIZE; + + GPUHardware(); + virtual ~GPUHardware(); + + virtual void revoke(int pid); + virtual sp request(int pid); + virtual status_t request(int pid, + const sp& callback, + ISurfaceComposer::gpu_info_t* gpu); + + virtual status_t friendlyRevoke(); + virtual void unconditionalRevoke(); + + virtual pid_t getOwner() const { return mOwner; } + + // used for debugging only... + virtual sp getAllocator() const; + +private: + + + enum { + NO_OWNER = -1, + }; + + struct GPUArea { + sp heap; + sp clientHeap; + sp map(); + }; + + struct Client { + pid_t pid; + GPUArea smi; + GPUArea ebi; + GPUArea reg; + void createClientHeaps(); + void revokeAllHeaps(); + }; + + Client& getClientLocked(pid_t pid); + status_t requestLocked(int pid); + void releaseLocked(); + void takeBackGPULocked(); + void registerCallbackLocked(const sp& callback, + Client& client); + + virtual void binderDied(const wp& who); + + mutable Mutex mLock; + sp mSMIHeap; + sp mEBIHeap; + sp mREGHeap; + + KeyedVector mClients; + DefaultKeyedVector< wp, pid_t > mRegisteredClients; + + pid_t mOwner; + + sp mCurrentAllocator; + sp mCallback; + + sp mAllocator; + + Condition mCondition; +}; + // size reserved for GPU surfaces // 1200 KB fits exactly: // - two 320*480 16-bits double-buffered surfaces // - one 320*480 32-bits double-buffered surface -// - one 320*240 16-bits double-bufferd, 4x anti-aliased surface -static const int GPU_RESERVED_SIZE = 1200 * 1024; - -static const int GPUR_SIZE = 1 * 1024 * 1024; +// - one 320*240 16-bits double-buffered, 4x anti-aliased surface +const int GPUHardware::GPU_RESERVED_SIZE = 1200 * 1024; +const int GPUHardware::GPUR_SIZE = 1 * 1024 * 1024; // --------------------------------------------------------------------------- /* * GPUHandle is a special IMemory given to the client. It represents their * handle to the GPU. Once they give it up, they loose GPU access, or if - * they explicitely revoke their acces through the binder code 1000. + * they explicitly revoke their access through the binder code 1000. * In both cases, this triggers a callback to revoke() * first, and then actually powers down the chip. * @@ -92,42 +170,99 @@ static const int GPUR_SIZE = 1 * 1024 * 1024; * */ -class GPUHandle : public BnMemory +class GPUClientHeap : public MemoryHeapPmem { public: - GPUHandle(const sp& gpu, const sp& heap) - : mGPU(gpu), mClientHeap(heap) { - } - virtual ~GPUHandle(); - virtual sp getMemory(ssize_t* offset, size_t* size) const; - virtual status_t onTransact( - uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); - void setOwner(int owner) { mOwner = owner; } + GPUClientHeap(const wp& gpu, + const sp& heap) + : MemoryHeapPmem(heap), mGPU(gpu) { } +protected: + wp mGPU; +}; + +class GPUAreaHeap : public MemoryHeapBase +{ +public: + GPUAreaHeap(const wp& gpu, + const char* const vram, size_t size=0, size_t reserved=0) + : MemoryHeapBase(vram, size), mGPU(gpu) { + if (base() != MAP_FAILED) { + if (reserved == 0) + reserved = virtualSize(); + mAllocator = new SimpleBestFitAllocator(reserved); + } + } + virtual sp createClientHeap() { + sp parentHeap(this); + return new GPUClientHeap(mGPU, parentHeap); + } + virtual const sp& getAllocator() const { + return mAllocator; + } private: - void revokeNotification(); + sp mAllocator; +protected: wp mGPU; - sp mClientHeap; - int mOwner; }; -GPUHandle::~GPUHandle() { +class GPURegisterHeap : public GPUAreaHeap +{ +public: + GPURegisterHeap(const sp& gpu) + : GPUAreaHeap(gpu, "/dev/hw3d", GPUHardware::GPUR_SIZE) { } + virtual sp createClientHeap() { + sp parentHeap(this); + return new MemoryHeapRegs(mGPU, parentHeap); + } +private: + class MemoryHeapRegs : public GPUClientHeap { + public: + MemoryHeapRegs(const wp& gpu, + const sp& heap) + : GPUClientHeap(gpu, heap) { } + sp createMemory(size_t offset, size_t size); + virtual void revoke(); + private: + class GPUHandle : public MemoryHeapPmem::MemoryPmem { + public: + GPUHandle(const sp& gpu, + const sp& heap) + : MemoryHeapPmem::MemoryPmem(heap), + mGPU(gpu), mOwner(gpu->getOwner()) { } + virtual ~GPUHandle(); + virtual sp getMemory( + ssize_t* offset, size_t* size) const; + virtual void revoke() { }; + virtual status_t onTransact( + uint32_t code, const Parcel& data, + Parcel* reply, uint32_t flags); + private: + void revokeNotification(); + wp mGPU; + pid_t mOwner; + }; + }; +}; + +GPURegisterHeap::MemoryHeapRegs::GPUHandle::~GPUHandle() { //LOGD("GPUHandle %p released, revoking GPU", this); revokeNotification(); } - -void GPUHandle::revokeNotification() { +void GPURegisterHeap::MemoryHeapRegs::GPUHandle::revokeNotification() { sp hw(mGPU.promote()); if (hw != 0) { hw->revoke(mOwner); } } -sp GPUHandle::getMemory(ssize_t* offset, size_t* size) const +sp GPURegisterHeap::MemoryHeapRegs::GPUHandle::getMemory( + ssize_t* offset, size_t* size) const { + sp heap = getHeap(); if (offset) *offset = 0; - if (size) *size = mClientHeap !=0 ? mClientHeap->virtualSize() : 0; - return mClientHeap; + if (size) *size = heap !=0 ? heap->virtualSize() : 0; + return heap; } -status_t GPUHandle::onTransact( +status_t GPURegisterHeap::MemoryHeapRegs::GPUHandle::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { status_t err = BnMemory::onTransact(code, data, reply, flags); @@ -150,22 +285,14 @@ status_t GPUHandle::onTransact( // --------------------------------------------------------------------------- -class MemoryHeapRegs : public MemoryHeapPmem -{ -public: - MemoryHeapRegs(const wp& gpu, const sp& heap); - virtual ~MemoryHeapRegs(); - sp mapMemory(size_t offset, size_t size); - virtual void revoke(); -private: - wp mGPU; -}; -MemoryHeapRegs::MemoryHeapRegs(const wp& gpu, const sp& heap) - : MemoryHeapPmem(heap), mGPU(gpu) +sp GPURegisterHeap::MemoryHeapRegs::createMemory( + size_t offset, size_t size) { + sp memory; + sp gpu = mGPU.promote(); + if (heapID()>0 && gpu!=0) { #if HAVE_ANDROID_OS - if (heapID()>0) { /* this is where the GPU is powered on and the registers are mapped * in the client */ //LOGD("ioctl(HW3D_GRANT_GPU)"); @@ -174,27 +301,16 @@ MemoryHeapRegs::MemoryHeapRegs(const wp& gpu, const sp MemoryHeapRegs::mapMemory(size_t offset, size_t size) -{ - sp memory; - sp gpu = mGPU.promote(); - if (heapID()>0 && gpu!=0) memory = new GPUHandle(gpu, this); +#endif + } return memory; } -void MemoryHeapRegs::revoke() +void GPURegisterHeap::MemoryHeapRegs::revoke() { MemoryHeapPmem::revoke(); #if HAVE_ANDROID_OS @@ -207,25 +323,6 @@ void MemoryHeapRegs::revoke() #endif } -// --------------------------------------------------------------------------- - -class GPURegisterHeap : public PMemHeapInterface -{ -public: - GPURegisterHeap(const sp& gpu) - : PMemHeapInterface("/dev/hw3d", GPUR_SIZE), mGPU(gpu) - { - } - virtual ~GPURegisterHeap() { - } - virtual sp createClientHeap() { - sp parentHeap(this); - return new MemoryHeapRegs(mGPU, parentHeap); - } -private: - wp mGPU; -}; - /*****************************************************************************/ GPUHardware::GPUHardware() @@ -237,85 +334,87 @@ GPUHardware::~GPUHardware() { } -sp GPUHardware::request(int pid) +status_t GPUHardware::requestLocked(int pid) { - sp dealer; - - LOGD("pid %d requesting gpu surface (current owner = %d)", pid, mOwner); - const int self_pid = getpid(); if (pid == self_pid) { // can't use GPU from surfaceflinger's process - return dealer; + return PERMISSION_DENIED; } - Mutex::Autolock _l(mLock); - if (mOwner != pid) { - // someone already has the gpu. - takeBackGPULocked(); - - // releaseLocked() should be a no-op most of the time - releaseLocked(); - - requestLocked(); + if (mREGHeap != 0) { + if (mOwner != NO_OWNER) { + // someone already has the gpu. + takeBackGPULocked(); + releaseLocked(); + } + } else { + // first time, initialize the stuff. + if (mSMIHeap == 0) + mSMIHeap = new GPUAreaHeap(this, "/dev/pmem_gpu0"); + if (mEBIHeap == 0) + mEBIHeap = new GPUAreaHeap(this, + "/dev/pmem_gpu1", 0, GPU_RESERVED_SIZE); + mREGHeap = new GPURegisterHeap(this); + mAllocator = mEBIHeap->getAllocator(); + if (mAllocator == NULL) { + // something went terribly wrong. + mSMIHeap.clear(); + mEBIHeap.clear(); + mREGHeap.clear(); + return INVALID_OPERATION; + } + } + Client& client = getClientLocked(pid); + mCurrentAllocator = new MemoryDealer(client.ebi.clientHeap, mAllocator); + mOwner = pid; } + return NO_ERROR; +} - dealer = mAllocator; - mOwner = pid; - if (dealer == 0) { - mOwner = SURFACE_FAILED; +sp GPUHardware::request(int pid) +{ + sp dealer; + Mutex::Autolock _l(mLock); + Client* client; + LOGD("pid %d requesting gpu surface (current owner = %d)", pid, mOwner); + if (requestLocked(pid) == NO_ERROR) { + dealer = mCurrentAllocator; + LOGD_IF(dealer!=0, "gpu surface granted to pid %d", mOwner); } - - LOGD_IF(dealer!=0, "gpu surface granted to pid %d", mOwner); return dealer; } -status_t GPUHardware::request(const sp& callback, +status_t GPUHardware::request(int pid, const sp& callback, ISurfaceComposer::gpu_info_t* gpu) { - sp gpuHandle; - IPCThreadState* ipc = IPCThreadState::self(); - const int pid = ipc->getCallingPid(); - const int self_pid = getpid(); + if (callback == 0) + return BAD_VALUE; + sp gpuHandle; LOGD("pid %d requesting gpu core (owner = %d)", pid, mOwner); - - if (pid == self_pid) { - // can't use GPU from surfaceflinger's process - return PERMISSION_DENIED; - } - Mutex::Autolock _l(mLock); - if (mOwner != pid) { - // someone already has the gpu. - takeBackGPULocked(); - - // releaseLocked() should be a no-op most of the time - releaseLocked(); - - requestLocked(); - } - - if (mHeapR.isValid()) { + status_t err = requestLocked(pid); + if (err == NO_ERROR) { + // it's guaranteed to be there, be construction + Client& client = mClients.editValueFor(pid); + registerCallbackLocked(callback, client); gpu->count = 2; - gpu->regions[0].region = mHeap0.map(true); - gpu->regions[0].reserved = mHeap0.reserved; - gpu->regions[1].region = mHeap1.map(true); - gpu->regions[1].reserved = mHeap1.reserved; - gpu->regs = mHeapR.map(); + gpu->regions[0].region = client.smi.map(); + gpu->regions[1].region = client.ebi.map(); + gpu->regs = client.reg.map(); + gpu->regions[0].reserved = 0; + gpu->regions[1].reserved = GPU_RESERVED_SIZE; if (gpu->regs != 0) { - static_cast< GPUHandle* >(gpu->regs.get())->setOwner(pid); + //LOGD("gpu core granted to pid %d, handle base=%p", + // mOwner, gpu->regs->pointer()); } mCallback = callback; - mOwner = pid; - //LOGD("gpu core granted to pid %d, handle base=%p", - // mOwner, gpu->regs->pointer()); } else { LOGW("couldn't grant gpu core to pid %d", pid); } - - return NO_ERROR; + return err; } void GPUHardware::revoke(int pid) @@ -330,16 +429,16 @@ void GPUHardware::revoke(int pid) // mOwner could be <0 if the same process acquired the GPU // several times without releasing it first. mCondition.signal(); - releaseLocked(true); + releaseLocked(); } } status_t GPUHardware::friendlyRevoke() { Mutex::Autolock _l(mLock); - takeBackGPULocked(); //LOGD("friendlyRevoke owner=%d", mOwner); - releaseLocked(true); + takeBackGPULocked(); + releaseLocked(); return NO_ERROR; } @@ -353,90 +452,37 @@ void GPUHardware::takeBackGPULocked() } } -void GPUHardware::requestLocked() +void GPUHardware::releaseLocked() { - if (mAllocator == 0) { - GPUPart* part = 0; - sp surfaceHeap; - if (mHeap1.promote() == false) { - //LOGD("requestLocked: (1) creating new heap"); - mHeap1.set(new PMemHeap("/dev/pmem_gpu1", 0, GPU_RESERVED_SIZE)); - } - if (mHeap1.isValid()) { - //LOGD("requestLocked: (1) heap is valid"); - // NOTE: if GPU1 is available we use it for our surfaces - // this could be device specific, so we should do something more - // generic - surfaceHeap = static_cast< PMemHeap* >( mHeap1.getHeap().get() ); - part = &mHeap1; - if (mHeap0.promote() == false) { - //LOGD("requestLocked: (0) creating new heap"); - mHeap0.set(new PMemHeap("/dev/pmem_gpu0")); - } - } else { - //LOGD("requestLocked: (1) heap is not valid"); - // No GPU1, use GPU0 only - if (mHeap0.promote() == false) { - //LOGD("requestLocked: (0) creating new heap"); - mHeap0.set(new PMemHeap("/dev/pmem_gpu0", 0, GPU_RESERVED_SIZE)); - } - if (mHeap0.isValid()) { - //LOGD("requestLocked: (0) heap is valid"); - surfaceHeap = static_cast< PMemHeap* >( mHeap0.getHeap().get() ); - part = &mHeap0; - } - } - - if (mHeap0.isValid() || mHeap1.isValid()) { - if (mHeapR.promote() == false) { - //LOGD("requestLocked: (R) creating new register heap"); - mHeapR.set(new GPURegisterHeap(this)); - } - } else { - // we got nothing... - mHeap0.clear(); - mHeap1.clear(); - } - - if (mHeapR.isValid() == false) { - //LOGD("requestLocked: (R) register heap not valid!!!"); - // damn, couldn't get the gpu registers! - mHeap0.clear(); - mHeap1.clear(); - surfaceHeap.clear(); - part = NULL; - } - - if (surfaceHeap != 0 && part && part->getClientHeap()!=0) { - part->reserved = GPU_RESERVED_SIZE; - part->surface = true; - mAllocatorDebug = static_cast( - surfaceHeap->getAllocator().get()); - mAllocator = new MemoryDealer( - part->getClientHeap(), - surfaceHeap->getAllocator()); + //LOGD("revoking gpu from pid %d", mOwner); + if (mOwner != NO_OWNER) { + // this may fail because the client might have died, and have + // been removed from the list. + ssize_t index = mClients.indexOfKey(mOwner); + if (index >= 0) { + Client& client(mClients.editValueAt(index)); + client.revokeAllHeaps(); } + mOwner = NO_OWNER; + mCurrentAllocator.clear(); + mCallback.clear(); } } -void GPUHardware::releaseLocked(bool dispose) +GPUHardware::Client& GPUHardware::getClientLocked(pid_t pid) { - /* - * if dispose is set, we will force the destruction of the heap, - * so it is given back to other systems, such as camera. - * Otherwise, we'll keep a weak pointer to it, this way we might be able - * to reuse it later if it's still around. - */ - //LOGD("revoking gpu from pid %d", mOwner); - mOwner = NO_OWNER; - mAllocator.clear(); - mCallback.clear(); - - /* if we're asked for a full revoke, dispose only of the heap - * we're not using for surface (as we might need it while drawing) */ - mHeap0.release(mHeap0.surface ? false : dispose); - mHeap1.release(mHeap1.surface ? false : dispose); - mHeapR.release(false); + ssize_t index = mClients.indexOfKey(pid); + if (index < 0) { + Client client; + client.pid = pid; + client.smi.heap = mSMIHeap; + client.ebi.heap = mEBIHeap; + client.reg.heap = mREGHeap; + index = mClients.add(pid, client); + } + Client& client(mClients.editValueAt(index)); + client.createClientHeaps(); + return client; } // ---------------------------------------------------------------------------- @@ -444,8 +490,7 @@ void GPUHardware::releaseLocked(bool dispose) sp GPUHardware::getAllocator() const { Mutex::Autolock _l(mLock); - sp allocator = mAllocatorDebug.promote(); - return allocator; + return mAllocator; } void GPUHardware::unconditionalRevoke() @@ -456,100 +501,79 @@ void GPUHardware::unconditionalRevoke() // --------------------------------------------------------------------------- - -GPUHardware::GPUPart::GPUPart() - : surface(false), reserved(0) -{ -} - -GPUHardware::GPUPart::~GPUPart() { -} - -const sp& GPUHardware::GPUPart::getHeap() const { - return mHeap; -} - -const sp& GPUHardware::GPUPart::getClientHeap() const { - return mClientHeap; -} - -bool GPUHardware::GPUPart::isValid() const { - return ((mHeap!=0) && (mHeap->base() != MAP_FAILED)); +sp GPUHardware::GPUArea::map() { + sp memory; + if (clientHeap != 0 && heap != 0) { + memory = clientHeap->mapMemory(0, heap->virtualSize()); + } + return memory; } -void GPUHardware::GPUPart::clear() +void GPUHardware::Client::createClientHeaps() { - mHeap.clear(); - mHeapWeak.clear(); - mClientHeap.clear(); - surface = false; + if (smi.clientHeap == 0) + smi.clientHeap = smi.heap->createClientHeap(); + if (ebi.clientHeap == 0) + ebi.clientHeap = ebi.heap->createClientHeap(); + if (reg.clientHeap == 0) + reg.clientHeap = reg.heap->createClientHeap(); } -void GPUHardware::GPUPart::set(const sp& heap) +void GPUHardware::Client::revokeAllHeaps() { - mHeapWeak.clear(); - if (heap!=0 && heap->base() == MAP_FAILED) { - mHeap.clear(); - mClientHeap.clear(); - } else { - mHeap = heap; - mClientHeap = mHeap->createClientHeap(); - } + if (smi.clientHeap != 0) + smi.clientHeap->revoke(); + if (ebi.clientHeap != 0) + ebi.clientHeap->revoke(); + if (reg.clientHeap != 0) + reg.clientHeap->revoke(); } -bool GPUHardware::GPUPart::promote() +void GPUHardware::registerCallbackLocked(const sp& callback, + Client& client) { - //LOGD("mHeapWeak=%p, mHeap=%p", mHeapWeak.unsafe_get(), mHeap.get()); - if (mHeap == 0) { - mHeap = mHeapWeak.promote(); + sp binder = callback->asBinder(); + if (mRegisteredClients.add(binder, client.pid) >= 0) { + binder->linkToDeath(this); } - if (mHeap != 0) { - if (mClientHeap != 0) { - mClientHeap->revoke(); - } - mClientHeap = mHeap->createClientHeap(); - } else { - surface = false; - } - return mHeap != 0; } -sp GPUHardware::GPUPart::map(bool clear) +void GPUHardware::binderDied(const wp& who) { - sp memory; - if (mClientHeap != NULL) { - memory = mClientHeap->mapMemory(0, mHeap->virtualSize()); - if (clear && memory!=0) { - //StopWatch sw("memset"); - memset(memory->pointer(), 0, memory->size()); + Mutex::Autolock _l(mLock); + pid_t pid = mRegisteredClients.valueFor(who); + if (pid != 0) { + ssize_t index = mClients.indexOfKey(pid); + if (index >= 0) { + //LOGD("*** removing client at %d", index); + Client& client(mClients.editValueAt(index)); + client.revokeAllHeaps(); // not really needed in theory + mClients.removeItemsAt(index); + if (mClients.size() == 0) { + //LOGD("*** was last client closing everything"); + mCallback.clear(); + mAllocator.clear(); + mCurrentAllocator.clear(); + mSMIHeap.clear(); + mREGHeap.clear(); + + // NOTE: we cannot clear the EBI heap because surfaceflinger + // itself may be using it, since this is where surfaces + // are allocated. if we're in the middle of compositing + // a surface (even if its process just died), we cannot + // rip the heap under our feet. + + mOwner = NO_OWNER; + } } } - return memory; } -void GPUHardware::GPUPart::release(bool dispose) +// --------------------------------------------------------------------------- + +sp GPUFactory::getGPU() { - if (mClientHeap != 0) { - mClientHeap->revoke(); - mClientHeap.clear(); - } - if (dispose) { - if (mHeapWeak!=0 && mHeap==0) { - mHeap = mHeapWeak.promote(); - } - if (mHeap != 0) { - mHeap->dispose(); - mHeapWeak.clear(); - mHeap.clear(); - } else { - surface = false; - } - } else { - if (mHeap != 0) { - mHeapWeak = mHeap; - mHeap.clear(); - } - } + return new GPUHardware(); } // --------------------------------------------------------------------------- diff --git a/libs/surfaceflinger/GPUHardware/GPUHardware.h b/libs/surfaceflinger/GPUHardware/GPUHardware.h index 9a78b99762..335452808f 100644 --- a/libs/surfaceflinger/GPUHardware/GPUHardware.h +++ b/libs/surfaceflinger/GPUHardware/GPUHardware.h @@ -22,92 +22,39 @@ #include #include +#include + +#include namespace android { // --------------------------------------------------------------------------- -class GPUHardwareInterface : public RefBase +class IGPUCallback; + +class GPUHardwareInterface : public virtual RefBase { public: virtual void revoke(int pid) = 0; virtual sp request(int pid) = 0; - virtual status_t request(const sp& callback, + virtual status_t request(int pid, const sp& callback, ISurfaceComposer::gpu_info_t* gpu) = 0; virtual status_t friendlyRevoke() = 0; - virtual void unconditionalRevoke() = 0; // used for debugging only... virtual sp getAllocator() const = 0; virtual pid_t getOwner() const = 0; + virtual void unconditionalRevoke() = 0; }; // --------------------------------------------------------------------------- -class IMemory; -class MemoryHeapPmem; -class PMemHeap; - -class GPUHardware : public GPUHardwareInterface -{ +class GPUFactory +{ public: - GPUHardware(); - virtual ~GPUHardware(); - - virtual void revoke(int pid); - virtual sp request(int pid); - virtual status_t request(const sp& callback, - ISurfaceComposer::gpu_info_t* gpu); - - virtual status_t friendlyRevoke(); - virtual void unconditionalRevoke(); - - // used for debugging only... - virtual sp getAllocator() const; - virtual pid_t getOwner() const { return mOwner; } - -private: - enum { - NO_OWNER = -1, - SURFACE_FAILED = -2 - }; - - void requestLocked(); - void releaseLocked(bool dispose = false); - void takeBackGPULocked(); - - class GPUPart - { - public: - bool surface; - size_t reserved; - GPUPart(); - ~GPUPart(); - const sp& getHeap() const; - const sp& getClientHeap() const; - bool isValid() const; - void clear(); - void set(const sp& heap); - bool promote(); - sp map(bool clear = false); - void release(bool dispose); - private: - sp mHeap; - wp mHeapWeak; - sp mClientHeap; - }; - - mutable Mutex mLock; - GPUPart mHeap0; // SMI - GPUPart mHeap1; // EBI1 - GPUPart mHeapR; - sp mAllocator; - pid_t mOwner; - sp mCallback; - wp mAllocatorDebug; - - Condition mCondition; + // the gpu factory + static sp getGPU(); }; // --------------------------------------------------------------------------- diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp index 4f6bae1dd6..8ba08513cc 100644 --- a/libs/surfaceflinger/Layer.cpp +++ b/libs/surfaceflinger/Layer.cpp @@ -92,26 +92,29 @@ status_t Layer::setBuffers( Client* client, status_t err = getPixelFormatInfo(format, &info); if (err) return err; - // TODO: if eHardware is explicitely requested, we should fail + // TODO: if eHardware is explicitly requested, we should fail // on systems where we can't allocate memory that can be used with // DMA engines for instance. + + // FIXME: we always ask for hardware for now (this should come from copybit) + flags |= ISurfaceComposer::eHardware; - int memory_type = NATIVE_MEMORY_TYPE_PMEM; + const uint32_t memory_flags = flags & + (ISurfaceComposer::eGPU | + ISurfaceComposer::eHardware | + ISurfaceComposer::eSecure); // pixel-alignment. the final alignment may be bigger because // we always force a 4-byte aligned bpr. uint32_t alignment = 1; - const uint32_t mask = ISurfaceComposer::eGPU | ISurfaceComposer::eSecure; - if ((flags & mask) == ISurfaceComposer::eGPU) { - // don't grant GPU memory if GPU is disabled - char value[PROPERTY_VALUE_MAX]; - property_get("debug.egl.hw", value, "1"); - if (atoi(value) != 0) { - flags |= ISurfaceComposer::eHardware; - memory_type = NATIVE_MEMORY_TYPE_GPU; - // TODO: this value should come from the h/w - alignment = 8; + if (flags & ISurfaceComposer::eGPU) { + // FIXME: this value should come from the h/w + alignment = 8; + // FIXME: this is msm7201A specific, as its GPU only supports + // BGRA_8888. + if (format == PIXEL_FORMAT_RGBA_8888) { + format = PIXEL_FORMAT_BGRA_8888; } } @@ -119,7 +122,7 @@ status_t Layer::setBuffers( Client* client, mNeedsBlending = (info.h_alpha - info.l_alpha) > 0; sp allocators[2]; for (int i=0 ; i<2 ; i++) { - allocators[i] = client->createAllocator(memory_type); + allocators[i] = client->createAllocator(memory_flags); if (allocators[i] == 0) return NO_MEMORY; mBuffers[i].init(allocators[i]); @@ -133,7 +136,7 @@ status_t Layer::setBuffers( Client* client, mSurface = new Surface(clientIndex(), allocators[0]->getMemoryHeap(), allocators[1]->getMemoryHeap(), - memory_type, mIdentity); + mIdentity); return NO_ERROR; } @@ -180,7 +183,7 @@ void Layer::onDraw(const Region& clip) const front.getBitmapSurface(&src); copybit_rect_t srect = { 0, 0, t.width, t.height }; - copybit_t* copybit = mFlinger->getBlitEngine(); + copybit_device_t* copybit = mFlinger->getBlitEngine(); copybit->set_parameter(copybit, COPYBIT_TRANSFORM, getOrientation()); copybit->set_parameter(copybit, COPYBIT_PLANE_ALPHA, s.alpha); copybit->set_parameter(copybit, COPYBIT_DITHER, diff --git a/libs/surfaceflinger/LayerBase.cpp b/libs/surfaceflinger/LayerBase.cpp index 17c9f42ac5..af353e2fb4 100644 --- a/libs/surfaceflinger/LayerBase.cpp +++ b/libs/surfaceflinger/LayerBase.cpp @@ -30,7 +30,7 @@ #include "DisplayHardware/DisplayHardware.h" -// We don't honor the premultipliad alpha flags, which means that +// We don't honor the premultiplied alpha flags, which means that // premultiplied surface may be composed using a non-premultiplied // equation. We do this because it may be a lot faster on some hardware // The correct value is HONOR_PREMULTIPLIED_ALPHA = 1 @@ -256,7 +256,7 @@ void LayerBase::validateVisibility(const Transform& planeTransform) // see if we can/should use 2D h/w with the new configuration mCanUseCopyBit = false; - copybit_t* copybit = mFlinger->getBlitEngine(); + copybit_device_t* copybit = mFlinger->getBlitEngine(); if (copybit) { const int step = copybit->get(copybit, COPYBIT_ROTATION_STEP_DEG); const int scaleBits = copybit->get(copybit, COPYBIT_SCALING_FRAC_BITS); @@ -413,7 +413,7 @@ void LayerBase::drawWithOpenGL(const Region& clip, // premultiplied alpha. // If the texture doesn't have an alpha channel we can - // use REPLACE and switch to non premultiplied-alpha + // use REPLACE and switch to non premultiplied alpha // blending (SRCA/ONE_MINUS_SRCA). GLenum env, src; @@ -431,11 +431,11 @@ void LayerBase::drawWithOpenGL(const Region& clip, glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, env); } else { glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glColor4x(0x10000, 0x10000, 0x10000, 0x10000); if (needsBlending()) { GLenum src = mPremultipliedAlpha ? GL_ONE : GL_SRC_ALPHA; glEnable(GL_BLEND); glBlendFunc(src, GL_ONE_MINUS_SRC_ALPHA); - glColor4x(0x10000, 0x10000, 0x10000, 0x10000); } else { glDisable(GL_BLEND); } @@ -463,7 +463,7 @@ void LayerBase::drawWithOpenGL(const Region& clip, glMatrixMode(GL_TEXTURE); glLoadIdentity(); if (!(mFlags & DisplayHardware::NPOT_EXTENSION)) { - // find the smalest power-of-two that will accomodate our surface + // find the smallest power-of-two that will accommodate our surface GLuint tw = 1 << (31 - clz(t.width)); GLuint th = 1 << (31 - clz(t.height)); if (tw < t.width) tw <<= 1; @@ -556,7 +556,7 @@ void LayerBase::loadTexture(const Region& dirty, GLuint texture_w = tw; GLuint texture_h = th; if (!(flags & DisplayHardware::NPOT_EXTENSION)) { - // find the smalest power-of-two that will accomodate our surface + // find the smallest power-of-two that will accommodate our surface texture_w = 1 << (31 - clz(t.width)); texture_h = 1 << (31 - clz(t.height)); if (texture_w < t.width) texture_w <<= 1; @@ -582,6 +582,8 @@ void LayerBase::loadTexture(const Region& dirty, glTexImage2D(GL_DIRECT_TEXTURE_2D_QUALCOMM, 0, GL_RGBA, tw, th, 0, GL_RGBA, GL_UNSIGNED_BYTE, t.data); + } else if (t.format == GGL_PIXEL_FORMAT_BGRA_8888) { + // TODO: add GL_BGRA extension } else { // oops, we don't handle this format, try the regular path goto regular; @@ -592,7 +594,7 @@ void LayerBase::loadTexture(const Region& dirty, regular: Rect bounds(dirty.bounds()); GLvoid* data = 0; - if (texture_w!=textureWidth || texture_w!=textureHeight) { + if (texture_w!=textureWidth || texture_h!=textureHeight) { // texture size changed, we need to create a new one if (!textureWidth || !textureHeight) { @@ -606,31 +608,36 @@ regular: bounds.set(Rect(tw, th)); } } - + if (t.format == GGL_PIXEL_FORMAT_RGB_565) { glTexImage2D(GL_TEXTURE_2D, 0, - GL_RGB, tw, th, 0, + GL_RGB, texture_w, texture_h, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_4444) { glTexImage2D(GL_TEXTURE_2D, 0, - GL_RGBA, tw, th, 0, + GL_RGBA, texture_w, texture_h, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888) { glTexImage2D(GL_TEXTURE_2D, 0, - GL_RGBA, tw, th, 0, + GL_RGBA, texture_w, texture_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); } else if ( t.format == GGL_PIXEL_FORMAT_YCbCr_422_SP || t.format == GGL_PIXEL_FORMAT_YCbCr_420_SP) { // just show the Y plane of YUV buffers data = t.data; glTexImage2D(GL_TEXTURE_2D, 0, - GL_LUMINANCE, tw, th, 0, + GL_LUMINANCE, texture_w, texture_h, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data); + } else { + // oops, we don't handle this format! + LOGE("layer %p, texture=%d, using format %d, which is not " + "supported by the GL", this, textureName, t.format); + textureName = -1; } - textureWidth = tw; - textureHeight = th; + textureWidth = texture_w; + textureHeight = texture_h; } - if (!data) { + if (!data && textureName>=0) { if (t.format == GGL_PIXEL_FORMAT_RGB_565) { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), diff --git a/libs/surfaceflinger/LayerBase.h b/libs/surfaceflinger/LayerBase.h index 10c1bc1859..b3f3771ae7 100644 --- a/libs/surfaceflinger/LayerBase.h +++ b/libs/surfaceflinger/LayerBase.h @@ -23,6 +23,8 @@ #include #include +#include + #include #include "Transform.h" @@ -223,16 +225,14 @@ public: Surface(SurfaceID id, int identity) { mParams.token = id; mParams.identity = identity; - mParams.type = 0; } Surface(SurfaceID id, const sp& heap0, const sp& heap1, - int memory_type, int identity) + int identity) { mParams.token = id; mParams.identity = identity; - mParams.type = memory_type; mParams.heap[0] = heap0; mParams.heap[1] = heap1; } @@ -240,8 +240,8 @@ public: // TODO: We now have a point here were we can clean-up the // client's mess. // This is also where surface id should be recycled. - //LOGD("Surface %d, heaps={%p, %p}, type=%d destroyed", - // mId, mHeap[0].get(), mHeap[1].get(), mMemoryType); + //LOGD("Surface %d, heaps={%p, %p} destroyed", + // mId, mHeap[0].get(), mHeap[1].get()); } virtual void getSurfaceData( @@ -254,6 +254,10 @@ public: { return INVALID_OPERATION; } virtual void postBuffer(ssize_t offset) { } virtual void unregisterBuffers() { }; + virtual sp createOverlay( + uint32_t w, uint32_t h, int32_t format) { + return NULL; + }; private: ISurfaceFlingerClient::surface_data_t mParams; diff --git a/libs/surfaceflinger/LayerBlur.cpp b/libs/surfaceflinger/LayerBlur.cpp index 192cedad01..e3ae7fb972 100644 --- a/libs/surfaceflinger/LayerBlur.cpp +++ b/libs/surfaceflinger/LayerBlur.cpp @@ -145,11 +145,13 @@ void LayerBlur::onDraw(const Region& clip) const mRefreshCache = false; mAutoRefreshPending = false; - uint16_t* const pixels = (uint16_t*)malloc(w*h*2); + // allocate enough memory for 4-bytes (2 pixels) aligned data + const int32_t s = (w + 1) & ~1; + uint16_t* const pixels = (uint16_t*)malloc(s*h*2); - // this reads the frame-buffer, so a h/w GL would have to + // This reads the frame-buffer, so a h/w GL would have to // finish() its rendering first. we don't want to do that - // too often. + // too often. Read data is 4-bytes aligned. glReadPixels(X, Y, w, h, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, pixels); // blur that texture. @@ -157,7 +159,7 @@ void LayerBlur::onDraw(const Region& clip) const bl.version = sizeof(GGLSurface); bl.width = w; bl.height = h; - bl.stride = w; + bl.stride = s; bl.format = GGL_PIXEL_FORMAT_RGB_565; bl.data = (GGLubyte*)pixels; blurFilter(&bl, 8, 2); diff --git a/libs/surfaceflinger/LayerBuffer.cpp b/libs/surfaceflinger/LayerBuffer.cpp index d871fc311f..3861e68198 100644 --- a/libs/surfaceflinger/LayerBuffer.cpp +++ b/libs/surfaceflinger/LayerBuffer.cpp @@ -104,7 +104,7 @@ void LayerBuffer::onDraw(const Region& clip) const * the requested scale factor, in which case we perform the scaling * in several passes. */ - copybit_t* copybit = mFlinger->getBlitEngine(); + copybit_device_t* copybit = mFlinger->getBlitEngine(); const float min = copybit->get(copybit, COPYBIT_MINIFICATION_LIMIT); const float mag = copybit->get(copybit, COPYBIT_MAGNIFICATION_LIMIT); @@ -123,7 +123,7 @@ void LayerBuffer::onDraw(const Region& clip) const if (UNLIKELY(mTemporaryDealer == 0)) { // allocate a memory-dealer for this the first time mTemporaryDealer = mFlinger->getSurfaceHeapManager() - ->createHeap(NATIVE_MEMORY_TYPE_PMEM); + ->createHeap(ISurfaceComposer::eHardware); mTempBitmap.init(mTemporaryDealer); } @@ -230,7 +230,18 @@ sp LayerBuffer::getSurface() const status_t LayerBuffer::registerBuffers(int w, int h, int hstride, int vstride, PixelFormat format, const sp& memoryHeap) { - status_t err = (memoryHeap!=0 && memoryHeap->heapID() >= 0) ? NO_ERROR : NO_INIT; + if (memoryHeap == NULL) { + // this is allowed, but in this case, it is illegal to receive + // postBuffer(). The surface just erases the framebuffer with + // fully transparent pixels. + mHeap.clear(); + mWidth = w; + mHeight = h; + mNeedsBlending = false; + return NO_ERROR; + } + + status_t err = (memoryHeap->heapID() >= 0) ? NO_ERROR : NO_INIT; if (err != NO_ERROR) return err; @@ -281,6 +292,32 @@ void LayerBuffer::unregisterBuffers() invalidateLocked(); } +sp LayerBuffer::createOverlay(uint32_t w, uint32_t h, int32_t format) +{ + sp result; + Mutex::Autolock _l(mLock); + if (mHeap != 0 || mBuffer != 0) { + // we're a push surface. error. + return result; + } + + overlay_device_t* overlay_dev = mFlinger->getOverlayEngine(); + if (overlay_dev == NULL) { + // overlays not supported + return result; + } + + overlay_t* overlay = overlay_dev->createOverlay(overlay_dev, w, h, format); + if (overlay == NULL) { + // couldn't create the overlay (no memory? no more overlays?) + return result; + } + + /* TODO: implement the real stuff here */ + + return result; +} + sp LayerBuffer::getBuffer() const { Mutex::Autolock _l(mLock); @@ -330,6 +367,15 @@ void LayerBuffer::SurfaceBuffer::unregisterBuffers() owner->unregisterBuffers(); } +sp LayerBuffer::SurfaceBuffer::createOverlay( + uint32_t w, uint32_t h, int32_t format) { + sp result; + LayerBuffer* owner(getOwner()); + if (owner) + result = owner->createOverlay(w, h, format); + return result; +} + void LayerBuffer::SurfaceBuffer::disown() { Mutex::Autolock _l(mLock); diff --git a/libs/surfaceflinger/LayerBuffer.h b/libs/surfaceflinger/LayerBuffer.h index ef473dd4b0..3e616f2762 100644 --- a/libs/surfaceflinger/LayerBuffer.h +++ b/libs/surfaceflinger/LayerBuffer.h @@ -33,6 +33,7 @@ namespace android { class MemoryDealer; class Region; +class Overlay; class LayerBuffer : public LayerBaseClient { @@ -56,6 +57,7 @@ public: PixelFormat format, const sp& heap); void postBuffer(ssize_t offset); void unregisterBuffers(); + sp createOverlay(uint32_t w, uint32_t h, int32_t format); void invalidate(); void invalidateLocked(); @@ -107,7 +109,9 @@ private: PixelFormat format, const sp& heap); virtual void postBuffer(ssize_t offset); virtual void unregisterBuffers(); - void disown(); + virtual sp createOverlay( + uint32_t w, uint32_t h, int32_t format); + void disown(); private: LayerBuffer* getOwner() const { Mutex::Autolock _l(mLock); diff --git a/libs/surfaceflinger/LayerDim.cpp b/libs/surfaceflinger/LayerDim.cpp index fc23d539c8..0c347cc518 100644 --- a/libs/surfaceflinger/LayerDim.cpp +++ b/libs/surfaceflinger/LayerDim.cpp @@ -48,7 +48,7 @@ void LayerDim::initDimmer(SurfaceFlinger* flinger, uint32_t w, uint32_t h) { // must only be called once. mDimmerDealer = flinger->getSurfaceHeapManager() - ->createHeap(NATIVE_MEMORY_TYPE_PMEM); + ->createHeap(ISurfaceComposer::eHardware); if (mDimmerDealer != 0) { mDimmerBitmap.init(mDimmerDealer); mDimmerBitmap.setBits(w, h, 1, PIXEL_FORMAT_RGB_565); @@ -81,7 +81,7 @@ void LayerDim::onDraw(const Region& clip) const mDimmerBitmap.getBitmapSurface(&src); const copybit_rect_t& srect(drect); - copybit_t* copybit = mFlinger->getBlitEngine(); + copybit_device_t* copybit = mFlinger->getBlitEngine(); copybit->set_parameter(copybit, COPYBIT_TRANSFORM, 0); copybit->set_parameter(copybit, COPYBIT_PLANE_ALPHA, s.alpha); copybit->set_parameter(copybit, COPYBIT_DITHER, COPYBIT_ENABLE); diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp index 45496b28e6..e8de21a3be 100644 --- a/libs/surfaceflinger/SurfaceFlinger.cpp +++ b/libs/surfaceflinger/SurfaceFlinger.cpp @@ -38,7 +38,6 @@ #include #include -#include #include #include #include @@ -202,23 +201,6 @@ void SurfaceFlinger::init() { LOGI("SurfaceFlinger is starting"); - // create the shared control-block - mServerHeap = new MemoryDealer(4096, MemoryDealer::READ_ONLY); - LOGE_IF(mServerHeap==0, "can't create shared memory dealer"); - - mServerCblkMemory = mServerHeap->allocate(4096); - LOGE_IF(mServerCblkMemory==0, "can't create shared control block"); - - mServerCblk = static_cast(mServerCblkMemory->pointer()); - LOGE_IF(mServerCblk==0, "can't get to shared control block's address"); - new(mServerCblk) surface_flinger_cblk_t; - - // create the surface Heap manager, which manages the heaps - // (be it in RAM or VRAM) where surfaces are allocated - // We give 8 MB per client. - mSurfaceHeapManager = new SurfaceHeapManager(8 << 20); - mGPU = new GPUHardware(); - // debugging stuff... char value[PROPERTY_VALUE_MAX]; property_get("debug.sf.showupdates", value, "0"); @@ -244,11 +226,16 @@ SurfaceFlinger::~SurfaceFlinger() glDeleteTextures(1, &mWormholeTexName); } -copybit_t* SurfaceFlinger::getBlitEngine() const +copybit_device_t* SurfaceFlinger::getBlitEngine() const { return graphicPlane(0).displayHardware().getBlitEngine(); } +overlay_device_t* SurfaceFlinger::getOverlayEngine() const +{ + return graphicPlane(0).displayHardware().getOverlayEngine(); +} + sp SurfaceFlinger::getCblk() const { return mServerCblkMemory; @@ -257,7 +244,9 @@ sp SurfaceFlinger::getCblk() const status_t SurfaceFlinger::requestGPU(const sp& callback, gpu_info_t* gpu) { - status_t err = mGPU->request(callback, gpu); + IPCThreadState* ipc = IPCThreadState::self(); + const int pid = ipc->getCallingPid(); + status_t err = mGPU->request(pid, callback, gpu); return err; } @@ -360,7 +349,26 @@ status_t SurfaceFlinger::readyToRun() LOGI( "SurfaceFlinger's main thread ready to run. " "Initializing graphics H/W..."); - // + // create the shared control-block + mServerHeap = new MemoryDealer(4096, MemoryDealer::READ_ONLY); + LOGE_IF(mServerHeap==0, "can't create shared memory dealer"); + + mServerCblkMemory = mServerHeap->allocate(4096); + LOGE_IF(mServerCblkMemory==0, "can't create shared control block"); + + mServerCblk = static_cast(mServerCblkMemory->pointer()); + LOGE_IF(mServerCblk==0, "can't get to shared control block's address"); + new(mServerCblk) surface_flinger_cblk_t; + + // get a reference to the GPU if we have one + mGPU = GPUFactory::getGPU(); + + // create the surface Heap manager, which manages the heaps + // (be it in RAM or VRAM) where surfaces are allocated + // We give 8 MB per client. + mSurfaceHeapManager = new SurfaceHeapManager(this, 8 << 20); + + GLES_localSurfaceManager = static_cast(this); // we only support one display currently @@ -395,7 +403,7 @@ status_t SurfaceFlinger::readyToRun() dcblk->xdpi = hw.getDpiX(); dcblk->ydpi = hw.getDpiY(); dcblk->fps = hw.getRefreshRate(); - dcblk->density = 1.0f; // XXX: do someting more real here... + dcblk->density = hw.getDensity(); asm volatile ("":::"memory"); // Initialize OpenGL|ES @@ -407,6 +415,7 @@ status_t SurfaceFlinger::readyToRun() glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + glPixelStorei(GL_PACK_ALIGNMENT, 4); glEnableClientState(GL_VERTEX_ARRAY); glEnable(GL_SCISSOR_TEST); glShadeModel(GL_FLAT); @@ -1679,7 +1688,7 @@ status_t SurfaceFlinger::onTransact( Client::Client(ClientID clientID, const sp& flinger) : ctrlblk(0), cid(clientID), mPid(0), mBitmap(0), mFlinger(flinger) { - mSharedHeapAllocator = getSurfaceHeapManager()->createHeap(NATIVE_MEMORY_TYPE_HEAP); + mSharedHeapAllocator = getSurfaceHeapManager()->createHeap(); const int pgsize = getpagesize(); const int cblksize=((sizeof(per_client_cblk_t)+(pgsize-1))&~(pgsize-1)); mCblkHeap = new MemoryDealer(cblksize); @@ -1703,10 +1712,6 @@ const sp& Client::getSurfaceHeapManager() const { return mFlinger->getSurfaceHeapManager(); } -const sp& Client::getGPU() const { - return mFlinger->getGPU(); -} - int32_t Client::generateId(int pid) { const uint32_t i = clz( ~mBitmap ); @@ -1734,25 +1739,11 @@ void Client::free(int32_t id) } } -sp Client::createAllocator(int memory_type) +sp Client::createAllocator(uint32_t flags) { sp allocator; - if (memory_type == NATIVE_MEMORY_TYPE_GPU) { - allocator = getGPU()->request(getClientPid()); - if (allocator == 0) - memory_type = NATIVE_MEMORY_TYPE_PMEM; - } - if (memory_type == NATIVE_MEMORY_TYPE_PMEM) { - allocator = mPMemAllocator; - if (allocator == 0) { - allocator = getSurfaceHeapManager()->createHeap( - NATIVE_MEMORY_TYPE_PMEM); - mPMemAllocator = allocator; - } - } - if (allocator == 0) - allocator = mSharedHeapAllocator; - + allocator = getSurfaceHeapManager()->createHeap( + flags, getClientPid(), mSharedHeapAllocator); return allocator; } diff --git a/libs/surfaceflinger/SurfaceFlinger.h b/libs/surfaceflinger/SurfaceFlinger.h index 1581474f68..92021d0f6f 100644 --- a/libs/surfaceflinger/SurfaceFlinger.h +++ b/libs/surfaceflinger/SurfaceFlinger.h @@ -41,7 +41,8 @@ #include "BootAnimation.h" #include "Barrier.h" -struct copybit_t; +struct copybit_device_t; +struct overlay_device_t; namespace android { @@ -74,7 +75,7 @@ public: int32_t generateId(int pid); void free(int32_t id); status_t bindLayer(LayerBaseClient* layer, int32_t id); - sp createAllocator(int memory_type); + sp createAllocator(uint32_t memory_type); inline bool isValid(int32_t i) const; inline const uint8_t* inUseArray() const; @@ -92,7 +93,6 @@ public: private: int getClientPid() const { return mPid; } - const sp& getGPU() const; int mPid; uint32_t mBitmap; @@ -179,7 +179,8 @@ public: return mGPU; } - copybit_t* getBlitEngine() const; + copybit_device_t* getBlitEngine() const; + overlay_device_t* getOverlayEngine() const; private: friend class BClient; diff --git a/libs/surfaceflinger/VRamHeap.cpp b/libs/surfaceflinger/VRamHeap.cpp index 3852d51954..77bc5766be 100644 --- a/libs/surfaceflinger/VRamHeap.cpp +++ b/libs/surfaceflinger/VRamHeap.cpp @@ -37,6 +37,8 @@ #include +#include "GPUHardware/GPUHardware.h" +#include "SurfaceFlinger.h" #include "VRamHeap.h" #if HAVE_ANDROID_OS @@ -59,8 +61,9 @@ int SurfaceHeapManager::global_pmem_heap = 0; // --------------------------------------------------------------------------- -SurfaceHeapManager::SurfaceHeapManager(size_t clientHeapSize) - : mClientHeapSize(clientHeapSize) +SurfaceHeapManager::SurfaceHeapManager(const sp& flinger, + size_t clientHeapSize) + : mFlinger(flinger), mClientHeapSize(clientHeapSize) { SurfaceHeapManager::global_pmem_heap = 1; } @@ -81,25 +84,53 @@ void SurfaceHeapManager::onFirstRef() } } -sp SurfaceHeapManager::createHeap(int type) +sp SurfaceHeapManager::createHeap( + uint32_t flags, + pid_t client_pid, + const sp& defaultAllocator) { - if (!global_pmem_heap && type==NATIVE_MEMORY_TYPE_PMEM) - type = NATIVE_MEMORY_TYPE_HEAP; - - const sp& heap(mPMemHeap); sp dealer; - switch (type) { - case NATIVE_MEMORY_TYPE_HEAP: - dealer = new MemoryDealer(mClientHeapSize, 0, "SFNativeHeap"); - break; - case NATIVE_MEMORY_TYPE_PMEM: - if (heap != 0) { - dealer = new MemoryDealer( - heap->createClientHeap(), - heap->getAllocator()); + if (flags & ISurfaceComposer::eGPU) { + // don't grant GPU memory if GPU is disabled + char value[PROPERTY_VALUE_MAX]; + property_get("debug.egl.hw", value, "1"); + if (atoi(value) == 0) { + flags &= ~ISurfaceComposer::eGPU; + } + } + + if (flags & ISurfaceComposer::eGPU) { + // FIXME: this is msm7201A specific, where gpu surfaces may not be secure + if (!(flags & ISurfaceComposer::eSecure)) { + // if GPU doesn't work, we try eHardware + flags |= ISurfaceComposer::eHardware; + // asked for GPU memory, try that first + dealer = mFlinger->getGPU()->request(client_pid); + } + } + + if (dealer == NULL) { + if (defaultAllocator != NULL) + // if a default allocator is given, use that + dealer = defaultAllocator; + } + + if (dealer == NULL) { + // always try h/w accelerated memory first + if (global_pmem_heap) { + const sp& heap(mPMemHeap); + if (dealer == NULL && heap != NULL) { + dealer = new MemoryDealer( + heap->createClientHeap(), + heap->getAllocator()); + } } - break; + } + + if (dealer == NULL) { + // return the ashmem allocator (software rendering) + dealer = new MemoryDealer(mClientHeapSize, 0, "SFNativeHeap"); } return dealer; } @@ -122,22 +153,8 @@ sp SurfaceHeapManager::getAllocator(int type) const // --------------------------------------------------------------------------- -PMemHeapInterface::PMemHeapInterface(int fd, size_t size) - : MemoryHeapBase(fd, size) { -} -PMemHeapInterface::PMemHeapInterface(const char* device, size_t size) - : MemoryHeapBase(device, size) { -} -PMemHeapInterface::PMemHeapInterface(size_t size, uint32_t flags, char const * name) - : MemoryHeapBase(size, flags, name) { -} -PMemHeapInterface::~PMemHeapInterface() { -} - -// --------------------------------------------------------------------------- - PMemHeap::PMemHeap(const char* const device, size_t size, size_t reserved) - : PMemHeapInterface(device, size) + : MemoryHeapBase(device, size) { //LOGD("%s, %p, mFD=%d", __PRETTY_FUNCTION__, this, heapID()); if (base() != MAP_FAILED) { diff --git a/libs/surfaceflinger/VRamHeap.h b/libs/surfaceflinger/VRamHeap.h index 03e0336815..91401679cb 100644 --- a/libs/surfaceflinger/VRamHeap.h +++ b/libs/surfaceflinger/VRamHeap.h @@ -27,16 +27,19 @@ namespace android { class PMemHeap; class MemoryHeapPmem; +class SurfaceFlinger; // --------------------------------------------------------------------------- class SurfaceHeapManager : public RefBase { public: - SurfaceHeapManager(size_t clientHeapSize); + SurfaceHeapManager(const sp& flinger, size_t clientHeapSize); virtual ~SurfaceHeapManager(); virtual void onFirstRef(); - sp createHeap(int type); + /* use ISurfaceComposer flags eGPU|eHArdware|eSecure */ + sp createHeap(uint32_t flags=0, pid_t client_pid = 0, + const sp& defaultAllocator = 0); // used for debugging only... sp getAllocator(int type) const; @@ -44,6 +47,7 @@ public: private: sp getHeap(int type) const; + sp mFlinger; mutable Mutex mLock; size_t mClientHeapSize; sp mPMemHeap; @@ -52,19 +56,7 @@ private: // --------------------------------------------------------------------------- -class PMemHeapInterface : public MemoryHeapBase -{ -public: - PMemHeapInterface(int fd, size_t size); - PMemHeapInterface(const char* device, size_t size = 0); - PMemHeapInterface(size_t size, uint32_t flags = 0, char const * name = NULL); - virtual ~PMemHeapInterface(); - virtual sp createClientHeap() = 0; -}; - -// --------------------------------------------------------------------------- - -class PMemHeap : public PMemHeapInterface +class PMemHeap : public MemoryHeapBase { public: PMemHeap(const char* const vram, diff --git a/libs/ui/Android.mk b/libs/ui/Android.mk index 71579c5b68..7b513006a7 100644 --- a/libs/ui/Android.mk +++ b/libs/ui/Android.mk @@ -2,7 +2,6 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - BlitHardware.cpp \ Camera.cpp \ CameraParameters.cpp \ EGLDisplaySurface.cpp \ @@ -14,10 +13,12 @@ LOCAL_SRC_FILES:= \ ICamera.cpp \ ICameraClient.cpp \ ICameraService.cpp \ + IOverlay.cpp \ ISurfaceComposer.cpp \ ISurface.cpp \ ISurfaceFlingerClient.cpp \ LayerState.cpp \ + Overlay.cpp \ PixelFormat.cpp \ Point.cpp \ Rect.cpp \ diff --git a/libs/ui/BlitHardware.cpp b/libs/ui/BlitHardware.cpp deleted file mode 100644 index 90838b4353..0000000000 --- a/libs/ui/BlitHardware.cpp +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "SurfaceFlinger" - -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include - -#if HAVE_ANDROID_OS -#include -#include -#endif - -#include - -/******************************************************************************/ - -namespace android { -class CopybitMSM7K : public copybit_t { -public: - CopybitMSM7K(); - ~CopybitMSM7K(); - - status_t getStatus() const { - if (mFD<0) return mFD; - return NO_ERROR; - } - - status_t setParameter(int name, int value); - - status_t get(int name); - - status_t blit( - const copybit_image_t& dst, - const copybit_image_t& src, - copybit_region_t const* region); - - status_t stretch( - const copybit_image_t& dst, - const copybit_image_t& src, - const copybit_rect_t& dst_rect, - const copybit_rect_t& src_rect, - copybit_region_t const* region); - -#if HAVE_ANDROID_OS -private: - static int copybit_set_parameter(copybit_t* handle, int name, int value); - static int copybit_blit( copybit_t* handle, - copybit_image_t const* dst, copybit_image_t const* src, - copybit_region_t const* region); - static int copybit_stretch(copybit_t* handle, - copybit_image_t const* dst, copybit_image_t const* src, - copybit_rect_t const* dst_rect, copybit_rect_t const* src_rect, - copybit_region_t const* region); - static int copybit_get(copybit_t* handle, int name); - - int getFormat(int format); - void setImage(mdp_img* img, const copybit_image_t& rhs); - void setRects(mdp_blit_req* req, const copybit_rect_t& dst, - const copybit_rect_t& src, const copybit_rect_t& scissor); - void setInfos(mdp_blit_req* req); - static void intersect(copybit_rect_t* out, - const copybit_rect_t& lhs, const copybit_rect_t& rhs); - status_t msm_copybit(void const* list); -#endif - int mFD; - uint8_t mAlpha; - uint8_t mFlags; -}; -}; // namespace android - -using namespace android; - -/******************************************************************************/ - -struct copybit_t* copybit_init() -{ - CopybitMSM7K* engine = new CopybitMSM7K(); - if (engine->getStatus() != NO_ERROR) { - delete engine; - engine = 0; - } - return (struct copybit_t*)engine; - -} - -int copybit_term(copybit_t* handle) -{ - delete static_cast(handle); - return NO_ERROR; -} - -namespace android { -/******************************************************************************/ - -static inline -int min(int a, int b) { - return (ab) ? a : b; -} - -static inline -void MULDIV(uint32_t& a, uint32_t& b, int mul, int div) -{ - if (mul != div) { - a = (mul * a) / div; - b = (mul * b) / div; - } -} - -//----------------------------------------------------------------------------- - -#if HAVE_ANDROID_OS - -int CopybitMSM7K::copybit_set_parameter(copybit_t* handle, int name, int value) -{ - return static_cast(handle)->setParameter(name, value); -} - -int CopybitMSM7K::copybit_get(copybit_t* handle, int name) -{ - return static_cast(handle)->get(name); -} - -int CopybitMSM7K::copybit_blit( - copybit_t* handle, - copybit_image_t const* dst, - copybit_image_t const* src, - struct copybit_region_t const* region) -{ - return static_cast(handle)->blit(*dst, *src, region); -} - -int CopybitMSM7K::copybit_stretch( - copybit_t* handle, - copybit_image_t const* dst, - copybit_image_t const* src, - copybit_rect_t const* dst_rect, - copybit_rect_t const* src_rect, - struct copybit_region_t const* region) -{ - return static_cast(handle)->stretch( - *dst, *src, *dst_rect, *src_rect, region); -} - -//----------------------------------------------------------------------------- - -CopybitMSM7K::CopybitMSM7K() - : mFD(-1), mAlpha(MDP_ALPHA_NOP), mFlags(0) -{ - int fd = open("/dev/graphics/fb0", O_RDWR, 0); - if (fd > 0) { - struct fb_fix_screeninfo finfo; - if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo) == 0) { - if (!strcmp(finfo.id, "msmfb")) { - mFD = fd; - copybit_t::set_parameter = copybit_set_parameter; - copybit_t::get = copybit_get; - copybit_t::blit = copybit_blit; - copybit_t::stretch = copybit_stretch; - } - } - } - if (fd<0 || mFD<0) { - if (fd>0) { close(fd); } - mFD = -errno; - } -} - -CopybitMSM7K::~CopybitMSM7K() -{ - if (mFD > 0){ - close(mFD); - } -} - -status_t CopybitMSM7K::setParameter(int name, int value) -{ - switch(name) { - case COPYBIT_ROTATION_DEG: - switch (value) { - case 0: - mFlags &= ~0x7; - break; - case 90: - mFlags &= ~0x7; - mFlags |= MDP_ROT_90; - break; - case 180: - mFlags &= ~0x7; - mFlags |= MDP_ROT_180; - break; - case 270: - mFlags &= ~0x7; - mFlags |= MDP_ROT_270; - break; - default: - return BAD_VALUE; - } - break; - case COPYBIT_PLANE_ALPHA: - if (value < 0) value = 0; - if (value >= 256) value = 255; - mAlpha = value; - break; - case COPYBIT_DITHER: - if (value == COPYBIT_ENABLE) { - mFlags |= MDP_DITHER; - } else if (value == COPYBIT_DISABLE) { - mFlags &= ~MDP_DITHER; - } - break; - case COPYBIT_TRANSFORM: - mFlags &= ~0x7; - mFlags |= value & 0x7; - break; - default: - return BAD_VALUE; - } - return NO_ERROR; -} - -status_t CopybitMSM7K::get(int name) -{ - switch(name) { - case COPYBIT_MINIFICATION_LIMIT: - return 4; - case COPYBIT_MAGNIFICATION_LIMIT: - return 4; - case COPYBIT_SCALING_FRAC_BITS: - return 32; - case COPYBIT_ROTATION_STEP_DEG: - return 90; - } - return BAD_VALUE; -} - -status_t CopybitMSM7K::blit( - const copybit_image_t& dst, - const copybit_image_t& src, - copybit_region_t const* region) -{ - - copybit_rect_t dr = { 0, 0, dst.w, dst.h }; - copybit_rect_t sr = { 0, 0, src.w, src.h }; - return CopybitMSM7K::stretch(dst, src, dr, sr, region); -} - -status_t CopybitMSM7K::stretch( - const copybit_image_t& dst, - const copybit_image_t& src, - const copybit_rect_t& dst_rect, - const copybit_rect_t& src_rect, - copybit_region_t const* region) -{ - struct { - uint32_t count; - struct mdp_blit_req req[12]; - } list; - - if (mAlpha<255) { - switch (src.format) { - // we dont' support plane alpha with RGBA formats - case COPYBIT_RGBA_8888: - case COPYBIT_RGBA_5551: - case COPYBIT_RGBA_4444: - return INVALID_OPERATION; - } - } - - const uint32_t maxCount = sizeof(list.req)/sizeof(list.req[0]); - const copybit_rect_t bounds = { 0, 0, dst.w, dst.h }; - copybit_rect_t clip; - list.count = 0; - int err = 0; - while (!err && region->next(region, &clip)) { - intersect(&clip, bounds, clip); - setInfos(&list.req[list.count]); - setImage(&list.req[list.count].dst, dst); - setImage(&list.req[list.count].src, src); - setRects(&list.req[list.count], dst_rect, src_rect, clip); - if (++list.count == maxCount) { - err = msm_copybit(&list); - list.count = 0; - } - } - if (!err && list.count) { - err = msm_copybit(&list); - } - return err; -} - -status_t CopybitMSM7K::msm_copybit(void const* list) -{ - int err = ioctl(mFD, MSMFB_BLIT, static_cast(list)); - LOGE_IF(err<0, "copyBits failed (%s)", strerror(errno)); - if (err == 0) - return NO_ERROR; - return -errno; -} - -int CopybitMSM7K::getFormat(int format) -{ - switch (format) { - case COPYBIT_RGBA_8888: return MDP_RGBA_8888; - case COPYBIT_RGB_565: return MDP_RGB_565; - case COPYBIT_YCbCr_422_SP: return MDP_Y_CBCR_H2V1; - case COPYBIT_YCbCr_420_SP: return MDP_Y_CBCR_H2V2; - } - return -1; -} - -void CopybitMSM7K::setInfos(mdp_blit_req* req) -{ - req->alpha = mAlpha; - req->transp_mask = MDP_TRANSP_NOP; - req->flags = mFlags; -} - -void CopybitMSM7K::setImage(mdp_img* img, const copybit_image_t& rhs) -{ - img->width = rhs.w; - img->height = rhs.h; - img->format = getFormat(rhs.format); - img->offset = rhs.offset; - img->memory_id = rhs.fd; -} - -void CopybitMSM7K::setRects(mdp_blit_req* e, - const copybit_rect_t& dst, const copybit_rect_t& src, - const copybit_rect_t& scissor) -{ - copybit_rect_t clip; - intersect(&clip, scissor, dst); - - e->dst_rect.x = clip.l; - e->dst_rect.y = clip.t; - e->dst_rect.w = clip.r - clip.l; - e->dst_rect.h = clip.b - clip.t; - - uint32_t W, H; - if (mFlags & COPYBIT_TRANSFORM_ROT_90) { - e->src_rect.x = (clip.t - dst.t) + src.t; - e->src_rect.y = (dst.r - clip.r) + src.l; - e->src_rect.w = (clip.b - clip.t); - e->src_rect.h = (clip.r - clip.l); - W = dst.b - dst.t; - H = dst.r - dst.l; - } else { - e->src_rect.x = (clip.l - dst.l) + src.l; - e->src_rect.y = (clip.t - dst.t) + src.t; - e->src_rect.w = (clip.r - clip.l); - e->src_rect.h = (clip.b - clip.t); - W = dst.r - dst.l; - H = dst.b - dst.t; - } - MULDIV(e->src_rect.x, e->src_rect.w, src.r - src.l, W); - MULDIV(e->src_rect.y, e->src_rect.h, src.b - src.t, H); - if (mFlags & COPYBIT_TRANSFORM_FLIP_V) { - e->src_rect.y = e->src.height - (e->src_rect.y + e->src_rect.h); - } - if (mFlags & COPYBIT_TRANSFORM_FLIP_H) { - e->src_rect.x = e->src.width - (e->src_rect.x + e->src_rect.w); - } -} - -void CopybitMSM7K::intersect(copybit_rect_t* out, - const copybit_rect_t& lhs, const copybit_rect_t& rhs) -{ - out->l = max(lhs.l, rhs.l); - out->t = max(lhs.t, rhs.t); - out->r = min(lhs.r, rhs.r); - out->b = min(lhs.b, rhs.b); -} - -/******************************************************************************/ -#else // HAVE_ANDROID_OS - -CopybitMSM7K::CopybitMSM7K() - : mFD(-1) -{ -} - -CopybitMSM7K::~CopybitMSM7K() -{ -} - -status_t CopybitMSM7K::setParameter(int name, int value) -{ - return NO_INIT; -} - -status_t CopybitMSM7K::get(int name) -{ - return BAD_VALUE; -} - -status_t CopybitMSM7K::blit( - const copybit_image_t& dst, - const copybit_image_t& src, - copybit_region_t const* region) -{ - return NO_INIT; -} - -status_t CopybitMSM7K::stretch( - const copybit_image_t& dst, - const copybit_image_t& src, - const copybit_rect_t& dst_rect, - const copybit_rect_t& src_rect, - copybit_region_t const* region) -{ - return NO_INIT; -} - -#endif // HAVE_ANDROID_OS - -/******************************************************************************/ -}; // namespace android diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp index 1528e6ed20..9527009575 100644 --- a/libs/ui/Camera.cpp +++ b/libs/ui/Camera.cpp @@ -1,28 +1,28 @@ /* ** -** Copyright 2008, The Android Open Source Project +** Copyright (C) 2008, The Android Open Source Project +** Copyright (C) 2008 HTC Inc. ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ +//#define LOG_NDEBUG 0 #define LOG_TAG "Camera" #include - #include #include #include #include - #include #include @@ -60,20 +60,36 @@ const sp& Camera::getCameraService() // --------------------------------------------------------------------------- Camera::Camera() - : mStatus(UNKNOWN_ERROR), - mShutterCallback(0), - mShutterCallbackCookie(0), - mRawCallback(0), - mRawCallbackCookie(0), - mJpegCallback(0), - mJpegCallbackCookie(0), - mFrameCallback(0), - mFrameCallbackCookie(0), - mErrorCallback(0), - mErrorCallbackCookie(0), - mAutoFocusCallback(0), - mAutoFocusCallbackCookie(0) { + init(); +} + +Camera::Camera(const sp& camera) +{ + init(); + // connect this client to existing camera remote + if (camera->connect(this) == NO_ERROR) { + mStatus = NO_ERROR; + mCamera = camera; + camera->asBinder()->linkToDeath(this); + } +} + +void Camera::init() +{ + mStatus = UNKNOWN_ERROR; + mShutterCallback = 0; + mShutterCallbackCookie = 0; + mRawCallback = 0; + mRawCallbackCookie = 0; + mJpegCallback = 0; + mJpegCallbackCookie = 0; + mFrameCallback = 0; + mFrameCallbackCookie = 0; + mErrorCallback = 0; + mErrorCallbackCookie = 0; + mAutoFocusCallback = 0; + mAutoFocusCallbackCookie = 0; } Camera::~Camera() @@ -83,6 +99,7 @@ Camera::~Camera() sp Camera::connect() { + LOGV("connect"); sp c = new Camera(); const sp& cs = getCameraService(); if (cs != 0) { @@ -97,6 +114,7 @@ sp Camera::connect() void Camera::disconnect() { + LOGV("disconnect"); if (mCamera != 0) { mErrorCallback = 0; mCamera->disconnect(); @@ -104,9 +122,24 @@ void Camera::disconnect() } } +status_t Camera::reconnect() +{ + LOGV("reconnect"); + if (mCamera != 0) { + return mCamera->connect(this); + } + return NO_INIT; +} + +sp Camera::remote() +{ + return mCamera; +} + // pass the buffered ISurface to the camera service status_t Camera::setPreviewDisplay(const sp& surface) { + LOGV("setPreviewDisplay"); if (surface == 0) { LOGE("app passed NULL surface"); return NO_INIT; @@ -114,81 +147,105 @@ status_t Camera::setPreviewDisplay(const sp& surface) return mCamera->setPreviewDisplay(surface->getISurface()); } +status_t Camera::setPreviewDisplay(const sp& surface) +{ + LOGV("setPreviewDisplay"); + if (surface == 0) { + LOGE("app passed NULL surface"); + return NO_INIT; + } + return mCamera->setPreviewDisplay(surface); +} + + // start preview mode, must call setPreviewDisplay first status_t Camera::startPreview() { + LOGV("startPreview"); return mCamera->startPreview(); } // stop preview mode void Camera::stopPreview() { + LOGV("stopPreview"); mCamera->stopPreview(); } status_t Camera::autoFocus() { + LOGV("autoFocus"); return mCamera->autoFocus(); } // take a picture status_t Camera::takePicture() { + LOGV("takePicture"); return mCamera->takePicture(); } // set preview/capture parameters - key/value pairs status_t Camera::setParameters(const String8& params) { + LOGV("setParameters"); return mCamera->setParameters(params); } // get preview/capture parameters - key/value pairs String8 Camera::getParameters() const { + LOGV("getParameters"); String8 params = mCamera->getParameters(); return params; } void Camera::setAutoFocusCallback(autofocus_callback cb, void *cookie) { + LOGV("setAutoFocusCallback"); mAutoFocusCallback = cb; mAutoFocusCallbackCookie = cookie; } void Camera::setShutterCallback(shutter_callback cb, void *cookie) { + LOGV("setShutterCallback"); mShutterCallback = cb; mShutterCallbackCookie = cookie; } void Camera::setRawCallback(frame_callback cb, void *cookie) { + LOGV("setRawCallback"); mRawCallback = cb; mRawCallbackCookie = cookie; } void Camera::setJpegCallback(frame_callback cb, void *cookie) { + LOGV("setJpegCallback"); mJpegCallback = cb; mJpegCallbackCookie = cookie; } -void Camera::setFrameCallback(frame_callback cb, void *cookie) +void Camera::setFrameCallback(frame_callback cb, void *cookie, int frame_callback_flag) { + LOGV("setFrameCallback"); mFrameCallback = cb; mFrameCallbackCookie = cookie; - mCamera->setHasFrameCallback(cb != NULL); + mCamera->setFrameCallbackFlag(frame_callback_flag); } void Camera::setErrorCallback(error_callback cb, void *cookie) { + LOGV("setErrorCallback"); mErrorCallback = cb; mErrorCallbackCookie = cookie; } void Camera::autoFocusCallback(bool focused) { + LOGV("autoFocusCallback"); if (mAutoFocusCallback) { mAutoFocusCallback(focused, mAutoFocusCallbackCookie); } @@ -196,6 +253,7 @@ void Camera::autoFocusCallback(bool focused) void Camera::shutterCallback() { + LOGV("shutterCallback"); if (mShutterCallback) { mShutterCallback(mShutterCallbackCookie); } @@ -203,6 +261,7 @@ void Camera::shutterCallback() void Camera::rawCallback(const sp& picture) { + LOGV("rawCallback"); if (mRawCallback) { mRawCallback(picture, mRawCallbackCookie); } @@ -211,6 +270,7 @@ void Camera::rawCallback(const sp& picture) // callback from camera service when image is ready void Camera::jpegCallback(const sp& picture) { + LOGV("jpegCallback"); if (mJpegCallback) { mJpegCallback(picture, mJpegCallbackCookie); } @@ -219,6 +279,7 @@ void Camera::jpegCallback(const sp& picture) // callback from camera service when video frame is ready void Camera::frameCallback(const sp& frame) { + LOGV("frameCallback"); if (mFrameCallback) { mFrameCallback(frame, mFrameCallbackCookie); } @@ -227,19 +288,21 @@ void Camera::frameCallback(const sp& frame) // callback from camera service when an error occurs in preview or takePicture void Camera::errorCallback(status_t error) { + LOGV("errorCallback"); if (mErrorCallback) { mErrorCallback(error, mErrorCallbackCookie); } } -void Camera::binderDied(const wp& who) { +void Camera::binderDied(const wp& who) { LOGW("ICamera died"); if (mErrorCallback) { mErrorCallback(DEAD_OBJECT, mErrorCallbackCookie); } } -void Camera::DeathNotifier::binderDied(const wp& who) { +void Camera::DeathNotifier::binderDied(const wp& who) { + LOGV("binderDied"); Mutex::Autolock _l(Camera::mLock); Camera::mCameraService.clear(); LOGW("Camera server died!"); diff --git a/libs/ui/EGLDisplaySurface.cpp b/libs/ui/EGLDisplaySurface.cpp index ea245f5e0d..44258a8d2c 100644 --- a/libs/ui/EGLDisplaySurface.cpp +++ b/libs/ui/EGLDisplaySurface.cpp @@ -28,11 +28,15 @@ #include #include +#include + +#include #include #include #include #include +#include #if HAVE_ANDROID_OS #include @@ -42,7 +46,6 @@ #include -#include // ---------------------------------------------------------------------------- @@ -78,7 +81,12 @@ EGLDisplaySurface::EGLDisplaySurface() mBlitEngine = 0; egl_native_window_t::fd = mapFrameBuffer(); if (egl_native_window_t::fd >= 0) { - mBlitEngine = copybit_init(); + + hw_module_t const* module; + if (hw_get_module(COPYBIT_HARDWARE_MODULE_ID, &module) == 0) { + copybit_open(module, &mBlitEngine); + } + const float in2mm = 25.4f; float refreshRate = 1000000000000000LLU / ( float( mInfo.upper_margin + mInfo.lower_margin + mInfo.yres ) @@ -108,7 +116,7 @@ EGLDisplaySurface::EGLDisplaySurface() EGLDisplaySurface::~EGLDisplaySurface() { magic = 0; - copybit_term(mBlitEngine); + copybit_close(mBlitEngine); mBlitEngine = 0; close(egl_native_window_t::fd); munmap(mFb[0].data, mSize); @@ -147,9 +155,6 @@ void EGLDisplaySurface::setSwapRectangle(int l, int t, int w, int h) uint32_t EGLDisplaySurface::swapBuffers() { - if (!(mFlags & PAGE_FLIP)) - return 0; - #define SHOW_FPS 0 #if SHOW_FPS nsecs_t now = systemTime(); @@ -171,6 +176,11 @@ uint32_t EGLDisplaySurface::swapBuffers() } } #endif + /* If we can't do the page_flip, just copy the back buffer to the front */ + if (!(mFlags & PAGE_FLIP)) { + memcpy(mFb[0].data, mFb[1].data, mInfo.xres*mInfo.yres*2); + return 0; + } // do the actual flip mIndex = 1 - mIndex; @@ -192,7 +202,7 @@ uint32_t EGLDisplaySurface::swapBuffers() * with msm7k. */ if (egl_native_window_t::memory_type == NATIVE_MEMORY_TYPE_GPU && oem[0] && mBlitEngine) { - copybit_t *copybit = mBlitEngine; + copybit_device_t *copybit = mBlitEngine; copybit_rect_t sdrect = { 0, 0, egl_native_window_t::width, egl_native_window_t::height }; copybit_image_t dst = { @@ -273,6 +283,12 @@ void EGLDisplaySurface::copyFrontToBack(const Region& copyback) } else #endif { + /* no extra copy needed since we copied back to front instead of + * flipping */ + if (!(mFlags & PAGE_FLIP)) { + return; + } + Region::iterator iterator(copyback); if (iterator) { Rect r; @@ -373,12 +389,11 @@ status_t EGLDisplaySurface::mapFrameBuffer() // bleagh, bad info from the driver refreshRate = 60*1000; // 60 Hz } - if (int(info.width) <= 0 || int(info.height) <= 0) { // the driver doesn't return that information // default to 160 dpi - info.width = 51; - info.height = 38; + info.width = ((info.xres * 25.4f)/160.0f + 0.5f); + info.height = ((info.yres * 25.4f)/160.0f + 0.5f); } float xdpi = (info.xres * 25.4f) / info.width; diff --git a/libs/ui/EGLNativeWindowSurface.cpp b/libs/ui/EGLNativeWindowSurface.cpp index 0b6afc0462..d55fb7090f 100644 --- a/libs/ui/EGLNativeWindowSurface.cpp +++ b/libs/ui/EGLNativeWindowSurface.cpp @@ -163,7 +163,12 @@ void EGLNativeWindowSurface::connect() egl_native_window_t::format = info.format; egl_native_window_t::base = intptr_t(info.base); egl_native_window_t::offset = intptr_t(info.bits) - intptr_t(info.base); - egl_native_window_t::memory_type = mSurface->getMemoryType(); + // FIXME: egl_native_window_t::memory_type used to be set from + // mSurface, but we wanted to break this dependency. We set it to + // GPU because the software rendered doesn't care, but the h/w + // accelerator needs it. Eventually, this value should go away + // completely, since memory will be managed by OpenGL. + egl_native_window_t::memory_type = NATIVE_MEMORY_TYPE_GPU; egl_native_window_t::fd = 0; } } diff --git a/libs/ui/EventHub.cpp b/libs/ui/EventHub.cpp index f0c77ba42b..abe74077f9 100644 --- a/libs/ui/EventHub.cpp +++ b/libs/ui/EventHub.cpp @@ -315,9 +315,8 @@ bool EventHub::getEvent(int32_t* outDeviceId, int32_t* outType, } //printf("poll %d, returned %d\n", mFDCount, pollres); - if(mFDs[0].revents & POLLIN) { - read_notify(mFDs[0].fd); - } + + // mFDs[0] is used for inotify, so process regular events starting at mFDs[1] for(i = 1; i < mFDCount; i++) { if(mFDs[i].revents) { LOGV("revents for %d = 0x%08x", i, mFDs[i].revents); @@ -357,6 +356,12 @@ bool EventHub::getEvent(int32_t* outDeviceId, int32_t* outType, } } } + + // read_notify() will modify mFDs and mFDCount, so this must be done after + // processing all other events. + if(mFDs[0].revents & POLLIN) { + read_notify(mFDs[0].fd); + } } } @@ -607,7 +612,7 @@ int EventHub::open_device(const char *deviceName) sprintf(propName, "hw.keyboards.%u.devname", publicID); property_set(propName, devname); - LOGI("New keyboard: publicID=%d device->id=%d devname='%s propName='%s' keylayout='%s'\n", + LOGI("New keyboard: publicID=%d device->id=%d devname='%s' propName='%s' keylayout='%s'\n", publicID, device->id, devname, propName, keylayoutFilename); } diff --git a/libs/ui/ICamera.cpp b/libs/ui/ICamera.cpp index 420bb490a0..6a2dc6bab3 100644 --- a/libs/ui/ICamera.cpp +++ b/libs/ui/ICamera.cpp @@ -2,41 +2,40 @@ ** ** Copyright 2008, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** http://www.apache.org/licenses/LICENSE-2.0 +** http://www.apache.org/licenses/LICENSE-2.0 ** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and ** limitations under the License. */ +//#define LOG_NDEBUG 0 +#define LOG_TAG "ICamera" +#include #include #include - #include - #include -#define LOG_TAG "@@@@@@@@@@@ CAMERA @@@@@@@@@@@" -#include - namespace android { enum { DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, SET_PREVIEW_DISPLAY, - SET_HAS_FRAME_CALLBACK, + SET_FRAME_CALLBACK_FLAG, START_PREVIEW, STOP_PREVIEW, AUTO_FOCUS, TAKE_PICTURE, SET_PARAMETERS, - GET_PARAMETERS + GET_PARAMETERS, + CONNECT }; class BpCamera: public BpInterface @@ -50,6 +49,7 @@ public: // disconnect from camera service void disconnect() { + LOGV("disconnect"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); remote()->transact(DISCONNECT, data, &reply); @@ -58,25 +58,29 @@ public: // pass the buffered ISurface to the camera service status_t setPreviewDisplay(const sp& surface) { + LOGV("setPreviewDisplay"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); data.writeStrongBinder(surface->asBinder()); remote()->transact(SET_PREVIEW_DISPLAY, data, &reply); return reply.readInt32(); } - - // tell the service whether to callback with each preview frame - void setHasFrameCallback(bool installed) + + // set the frame callback flag to affect how the received frames from + // preview are handled. + void setFrameCallbackFlag(int frame_callback_flag) { + LOGV("setFrameCallbackFlag(%d)", frame_callback_flag); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); - data.writeInt32((int32_t)installed); - remote()->transact(SET_HAS_FRAME_CALLBACK, data, &reply); + data.writeInt32(frame_callback_flag); + remote()->transact(SET_FRAME_CALLBACK_FLAG, data, &reply); } // start preview mode, must call setPreviewDisplay first status_t startPreview() { + LOGV("startPreview"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); remote()->transact(START_PREVIEW, data, &reply); @@ -86,6 +90,7 @@ public: // stop preview mode void stopPreview() { + LOGV("stopPreview"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); remote()->transact(STOP_PREVIEW, data, &reply); @@ -94,6 +99,7 @@ public: // auto focus status_t autoFocus() { + LOGV("autoFocus"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); remote()->transact(AUTO_FOCUS, data, &reply); @@ -104,6 +110,7 @@ public: // take a picture - returns an IMemory (ref-counted mmap) status_t takePicture() { + LOGV("takePicture"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); remote()->transact(TAKE_PICTURE, data, &reply); @@ -114,6 +121,7 @@ public: // set preview/capture parameters - key/value pairs status_t setParameters(const String8& params) { + LOGV("setParameters"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); data.writeString8(params); @@ -124,11 +132,20 @@ public: // get preview/capture parameters - key/value pairs String8 getParameters() const { + LOGV("getParameters"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); remote()->transact(GET_PARAMETERS, data, &reply); return reply.readString8(); } + virtual status_t connect(const sp& cameraClient) + { + Parcel data, reply; + data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); + data.writeStrongBinder(cameraClient->asBinder()); + remote()->transact(CONNECT, data, &reply); + return reply.readInt32(); + } }; IMPLEMENT_META_INTERFACE(Camera, "android.hardware.ICamera"); @@ -146,53 +163,68 @@ status_t BnCamera::onTransact( { switch(code) { case DISCONNECT: { + LOGV("DISCONNECT"); CHECK_INTERFACE(ICamera, data, reply); disconnect(); return NO_ERROR; } break; case SET_PREVIEW_DISPLAY: { + LOGV("SET_PREVIEW_DISPLAY"); CHECK_INTERFACE(ICamera, data, reply); sp surface = interface_cast(data.readStrongBinder()); reply->writeInt32(setPreviewDisplay(surface)); return NO_ERROR; } break; - case SET_HAS_FRAME_CALLBACK: { + case SET_FRAME_CALLBACK_FLAG: { + LOGV("SET_FRAME_CALLBACK_TYPE"); CHECK_INTERFACE(ICamera, data, reply); - bool installed = (bool)data.readInt32(); - setHasFrameCallback(installed); + int frame_callback_flag = data.readInt32(); + setFrameCallbackFlag(frame_callback_flag); return NO_ERROR; } break; case START_PREVIEW: { + LOGV("START_PREVIEW"); CHECK_INTERFACE(ICamera, data, reply); reply->writeInt32(startPreview()); return NO_ERROR; } break; case STOP_PREVIEW: { + LOGV("STOP_PREVIEW"); CHECK_INTERFACE(ICamera, data, reply); stopPreview(); return NO_ERROR; } break; case AUTO_FOCUS: { + LOGV("AUTO_FOCUS"); CHECK_INTERFACE(ICamera, data, reply); reply->writeInt32(autoFocus()); return NO_ERROR; } break; case TAKE_PICTURE: { + LOGV("TAKE_PICTURE"); CHECK_INTERFACE(ICamera, data, reply); reply->writeInt32(takePicture()); return NO_ERROR; } break; case SET_PARAMETERS: { + LOGV("SET_PARAMETERS"); CHECK_INTERFACE(ICamera, data, reply); - String8 params(data.readString8()); - reply->writeInt32(setParameters(params)); + String8 params(data.readString8()); + reply->writeInt32(setParameters(params)); return NO_ERROR; } break; case GET_PARAMETERS: { + LOGV("GET_PARAMETERS"); CHECK_INTERFACE(ICamera, data, reply); reply->writeString8(getParameters()); return NO_ERROR; } break; + case CONNECT: { + CHECK_INTERFACE(ICamera, data, reply); + sp cameraClient = interface_cast(data.readStrongBinder()); + reply->writeInt32(connect(cameraClient)); + return NO_ERROR; + } break; default: return BBinder::onTransact(code, data, reply, flags); } diff --git a/libs/ui/ICameraClient.cpp b/libs/ui/ICameraClient.cpp index 3737034fe9..c5d6d52f4d 100644 --- a/libs/ui/ICameraClient.cpp +++ b/libs/ui/ICameraClient.cpp @@ -15,9 +15,11 @@ ** limitations under the License. */ +//#define LOG_NDEBUG 0 +#define LOG_TAG "ICameraClient" +#include #include #include - #include namespace android { @@ -42,6 +44,7 @@ public: // callback to let the app know the shutter has closed, ideal for playing the shutter sound void shutterCallback() { + LOGV("shutterCallback"); Parcel data, reply; data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); remote()->transact(SHUTTER_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); @@ -50,6 +53,7 @@ public: // callback from camera service to app with picture data void rawCallback(const sp& picture) { + LOGV("rawCallback"); Parcel data, reply; data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); data.writeStrongBinder(picture->asBinder()); @@ -59,6 +63,7 @@ public: // callback from camera service to app with picture data void jpegCallback(const sp& picture) { + LOGV("jpegCallback"); Parcel data, reply; data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); data.writeStrongBinder(picture->asBinder()); @@ -68,6 +73,7 @@ public: // callback from camera service to app with video frame data void frameCallback(const sp& frame) { + LOGV("frameCallback"); Parcel data, reply; data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); data.writeStrongBinder(frame->asBinder()); @@ -77,6 +83,7 @@ public: // callback from camera service to app to report error void errorCallback(status_t error) { + LOGV("errorCallback"); Parcel data, reply; data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); data.writeInt32(error); @@ -86,6 +93,7 @@ public: // callback from camera service to app to report autofocus completion void autoFocusCallback(bool focused) { + LOGV("autoFocusCallback"); Parcel data, reply; data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); data.writeInt32(focused); @@ -108,35 +116,41 @@ status_t BnCameraClient::onTransact( { switch(code) { case SHUTTER_CALLBACK: { + LOGV("SHUTTER_CALLBACK"); CHECK_INTERFACE(ICameraClient, data, reply); shutterCallback(); return NO_ERROR; } break; case RAW_CALLBACK: { + LOGV("RAW_CALLBACK"); CHECK_INTERFACE(ICameraClient, data, reply); sp picture = interface_cast(data.readStrongBinder()); rawCallback(picture); return NO_ERROR; } break; case JPEG_CALLBACK: { + LOGV("JPEG_CALLBACK"); CHECK_INTERFACE(ICameraClient, data, reply); sp picture = interface_cast(data.readStrongBinder()); jpegCallback(picture); return NO_ERROR; } break; case FRAME_CALLBACK: { + LOGV("FRAME_CALLBACK"); CHECK_INTERFACE(ICameraClient, data, reply); sp frame = interface_cast(data.readStrongBinder()); frameCallback(frame); return NO_ERROR; } break; case ERROR_CALLBACK: { + LOGV("ERROR_CALLBACK"); CHECK_INTERFACE(ICameraClient, data, reply); status_t error = data.readInt32(); errorCallback(error); return NO_ERROR; } break; case AUTOFOCUS_CALLBACK: { + LOGV("AUTOFOCUS_CALLBACK"); CHECK_INTERFACE(ICameraClient, data, reply); bool focused = (bool)data.readInt32(); autoFocusCallback(focused); diff --git a/libs/ui/IOverlay.cpp b/libs/ui/IOverlay.cpp new file mode 100644 index 0000000000..59d1ea0473 --- /dev/null +++ b/libs/ui/IOverlay.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include +#include + +#include + +namespace android { + +enum { + DESTROY = IBinder::FIRST_CALL_TRANSACTION, // one-way transaction + SWAP_BUFFERS, +}; + +class BpOverlay : public BpInterface +{ +public: + BpOverlay(const sp& impl) + : BpInterface(impl) + { + } + + virtual void destroy() + { + Parcel data, reply; + data.writeInterfaceToken(IOverlay::getInterfaceDescriptor()); + remote()->transact(DESTROY, data, &reply, IBinder::FLAG_ONEWAY); + } + + virtual ssize_t swapBuffers() + { + Parcel data, reply; + data.writeInterfaceToken(IOverlay::getInterfaceDescriptor()); + remote()->transact(SWAP_BUFFERS, data, &reply); + return reply.readInt32(); + } +}; + +IMPLEMENT_META_INTERFACE(Overlay, "android.ui.IOverlay"); + +// ---------------------------------------------------------------------- + +#define CHECK_INTERFACE(interface, data, reply) \ + do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \ + LOGW("Call incorrectly routed to " #interface); \ + return PERMISSION_DENIED; \ + } } while (0) + +status_t BnOverlay::onTransact( + uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) +{ + switch(code) { + case DESTROY: { + CHECK_INTERFACE(IOverlay, data, reply); + destroy(); + return NO_ERROR; + } break; + case SWAP_BUFFERS: { + CHECK_INTERFACE(IOverlay, data, reply); + ssize_t offset = swapBuffers(); + reply->writeInt32(offset); + return NO_ERROR; + } break; + default: + return BBinder::onTransact(code, data, reply, flags); + } +} + +}; // namespace android diff --git a/libs/ui/ISurface.cpp b/libs/ui/ISurface.cpp index 817f4d9ff2..c1c959636b 100644 --- a/libs/ui/ISurface.cpp +++ b/libs/ui/ISurface.cpp @@ -22,6 +22,7 @@ #include #include +#include namespace android { @@ -30,6 +31,7 @@ enum { REGISTER_BUFFERS = IBinder::FIRST_CALL_TRANSACTION, UNREGISTER_BUFFERS, POST_BUFFER, // one-way transaction + CREATE_OVERLAY, }; class BpSurface : public BpInterface @@ -70,6 +72,18 @@ public: data.writeInterfaceToken(ISurface::getInterfaceDescriptor()); remote()->transact(UNREGISTER_BUFFERS, data, &reply); } + + virtual sp createOverlay( + uint32_t w, uint32_t h, int32_t format) + { + Parcel data, reply; + data.writeInterfaceToken(ISurface::getInterfaceDescriptor()); + data.writeInt32(w); + data.writeInt32(h); + data.writeInt32(format); + remote()->transact(CREATE_OVERLAY, data, &reply); + return Overlay::readFromParcel(reply); + } }; IMPLEMENT_META_INTERFACE(Surface, "android.ui.ISurface"); @@ -109,6 +123,14 @@ status_t BnSurface::onTransact( postBuffer(offset); return NO_ERROR; } break; + case CREATE_OVERLAY: { + CHECK_INTERFACE(ISurface, data, reply); + int w = data.readInt32(); + int h = data.readInt32(); + int f = data.readInt32(); + sp o = createOverlay(w, h, w); + return Overlay::writeToParcel(reply, o); + } break; default: return BBinder::onTransact(code, data, reply, flags); } diff --git a/libs/ui/ISurfaceFlingerClient.cpp b/libs/ui/ISurfaceFlingerClient.cpp index 9444af7fef..dd6a798b98 100644 --- a/libs/ui/ISurfaceFlingerClient.cpp +++ b/libs/ui/ISurfaceFlingerClient.cpp @@ -82,7 +82,7 @@ public: data.writeInt32(format); data.writeInt32(flags); remote()->transact(CREATE_SURFACE, data, &reply); - params->readFromParcel(data); + params->readFromParcel(reply); return interface_cast(reply.readStrongBinder()); } @@ -191,7 +191,6 @@ status_t ISurfaceFlingerClient::surface_data_t::readFromParcel(const Parcel& par { token = parcel.readInt32(); identity = parcel.readInt32(); - type = parcel.readInt32(); heap[0] = interface_cast(parcel.readStrongBinder()); heap[1] = interface_cast(parcel.readStrongBinder()); return NO_ERROR; @@ -201,7 +200,6 @@ status_t ISurfaceFlingerClient::surface_data_t::writeToParcel(Parcel* parcel) co { parcel->writeInt32(token); parcel->writeInt32(identity); - parcel->writeInt32(type); parcel->writeStrongBinder(heap[0]!=0 ? heap[0]->asBinder() : NULL); parcel->writeStrongBinder(heap[1]!=0 ? heap[1]->asBinder() : NULL); return NO_ERROR; diff --git a/libs/ui/Overlay.cpp b/libs/ui/Overlay.cpp new file mode 100644 index 0000000000..2267c3e768 --- /dev/null +++ b/libs/ui/Overlay.cpp @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include + +namespace android { + +Overlay::Overlay(overlay_handle_t* handle, + const sp& o, const sp& heap, + uint32_t w, uint32_t h, int32_t f, uint32_t ws, uint32_t hs) + : mOverlay(o), mHeap(heap), mCurrentBufferOffset(0), mOverlayHandle(handle), + mWidth(w), mHeight(h), mFormat(f), mWidthStride(ws), mHeightStride(hs) +{ +} + +Overlay::Overlay(overlay_t* overlay, + const sp& o, const sp& heap) + : mOverlay(o), mHeap(heap) +{ + mCurrentBufferOffset = 0; + mOverlayHandle = overlay->getHandleRef(overlay); + mWidth = overlay->w; + mHeight = overlay->h; + mFormat = overlay->format; + mWidthStride = overlay->w_stride; + mHeightStride = overlay->h_stride; +} + + +Overlay::~Overlay() { +} + +void Overlay::destroy() { + mOverlay->destroy(); +} + +status_t Overlay::swapBuffers() { + ssize_t result = mOverlay->swapBuffers(); + if (result < 0) + return status_t(result); + mCurrentBufferOffset = result; + return NO_ERROR; +} + +overlay_handle_t const* Overlay::getHandleRef() const { + return mOverlayHandle; +} + +size_t Overlay::getBufferOffset() const { + return mCurrentBufferOffset; +} + +sp Overlay::getHeap() const { + return mHeap; +} + +uint32_t Overlay::getWidth() const { + return mWidth; +} + +uint32_t Overlay::getHeight() const { + return mHeight; +} + +int32_t Overlay::getFormat() const { + return mFormat; +} + +int32_t Overlay::getWidthStride() const { + return mWidthStride; +} + +int32_t Overlay::getHeightStride() const { + return mHeightStride; +} + +sp Overlay::readFromParcel(const Parcel& data) { + sp result; + sp overlay = IOverlay::asInterface(data.readStrongBinder()); + if (overlay != NULL) { + sp heap = IMemoryHeap::asInterface(data.readStrongBinder()); + uint32_t w = data.readInt32(); + uint32_t h = data.readInt32(); + uint32_t f = data.readInt32(); + uint32_t ws = data.readInt32(); + uint32_t hs = data.readInt32(); + /* FIXME: handles should be promoted to "real" API and be handled by + * the framework */ + int numfd = data.readInt32(); + int numint = data.readInt32(); + overlay_handle_t* handle = (overlay_handle_t*)malloc( + sizeof(overlay_handle_t) + numint*sizeof(int)); + for (int i=0 ; ifds[i] = data.readFileDescriptor(); + for (int i=0 ; idata[i] = data.readInt32(); + result = new Overlay(handle, overlay, heap, w, h, f, ws, hs); + } + return result; +} + +status_t Overlay::writeToParcel(Parcel* reply, const sp& o) { + if (o != NULL) { + reply->writeStrongBinder(o->mOverlay->asBinder()); + reply->writeStrongBinder(o->mHeap->asBinder()); + reply->writeInt32(o->mWidth); + reply->writeInt32(o->mHeight); + reply->writeInt32(o->mFormat); + reply->writeInt32(o->mWidthStride); + reply->writeInt32(o->mHeightStride); + /* FIXME: handles should be promoted to "real" API and be handled by + * the framework */ + reply->writeInt32(o->mOverlayHandle->numFds); + reply->writeInt32(o->mOverlayHandle->numInts); + for (int i=0 ; imOverlayHandle->numFds ; i++) + reply->writeFileDescriptor(o->mOverlayHandle->fds[i]); + for (int i=0 ; imOverlayHandle->numInts ; i++) + reply->writeInt32(o->mOverlayHandle->data[i]); + } else { + reply->writeStrongBinder(NULL); + } + return NO_ERROR; +} + +// ---------------------------------------------------------------------------- + +}; // namespace android + diff --git a/libs/ui/Surface.cpp b/libs/ui/Surface.cpp index 0a9aaad0b5..4ea9ae2edb 100644 --- a/libs/ui/Surface.cpp +++ b/libs/ui/Surface.cpp @@ -47,7 +47,7 @@ Surface::Surface(const sp& client, const ISurfaceFlingerClient::surface_data_t& data, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, bool owner) - : mClient(client), mSurface(surface), mMemoryType(data.type), + : mClient(client), mSurface(surface), mToken(data.token), mIdentity(data.identity), mFormat(format), mFlags(flags), mOwner(owner) { @@ -67,7 +67,6 @@ Surface::Surface(Surface const* rhs) mSurface = rhs->mSurface; mHeap[0] = rhs->mHeap[0]; mHeap[1] = rhs->mHeap[1]; - mMemoryType = rhs->mMemoryType; mFormat = rhs->mFormat; mFlags = rhs->mFlags; mSurfaceHeapBase[0] = rhs->mSurfaceHeapBase[0]; @@ -186,7 +185,6 @@ sp Surface::readFromParcel(Parcel* parcel) sp surface = interface_cast(parcel->readStrongBinder()); data.heap[0] = interface_cast(parcel->readStrongBinder()); data.heap[1] = interface_cast(parcel->readStrongBinder()); - data.type = parcel->readInt32(); data.token = parcel->readInt32(); data.identity = parcel->readInt32(); PixelFormat format = parcel->readInt32(); @@ -207,7 +205,6 @@ status_t Surface::writeToParcel(const sp& surface, Parcel* parcel) sp client; sp sur; sp heap[2]; - int type = 0; if (surface->isValid()) { token = surface->mToken; identity = surface->mIdentity; @@ -215,7 +212,6 @@ status_t Surface::writeToParcel(const sp& surface, Parcel* parcel) sur = surface->mSurface; heap[0] = surface->mHeap[0]; heap[1] = surface->mHeap[1]; - type = surface->mMemoryType; format = surface->mFormat; flags = surface->mFlags; } @@ -223,7 +219,6 @@ status_t Surface::writeToParcel(const sp& surface, Parcel* parcel) parcel->writeStrongBinder(sur!=0 ? sur->asBinder() : NULL); parcel->writeStrongBinder(heap[0]!=0 ? heap[0]->asBinder() : NULL); parcel->writeStrongBinder(heap[1]!=0 ? heap[1]->asBinder() : NULL); - parcel->writeInt32(type); parcel->writeInt32(token); parcel->writeInt32(identity); parcel->writeInt32(format); diff --git a/libs/ui/Time.cpp b/libs/ui/Time.cpp index c98667f825..b5539135fa 100644 --- a/libs/ui/Time.cpp +++ b/libs/ui/Time.cpp @@ -85,10 +85,10 @@ Time::switchTimezone(const char* timezone) } String8 -Time::format(const char *format) const +Time::format(const char *format, const struct strftime_locale *locale) const { char buf[257]; - int n = strftime(buf, 257, format, &(this->t)); + int n = strftime_tz(buf, 257, format, &(this->t), locale); if (n > 0) { return String8(buf); } else { diff --git a/libs/utils/Android.mk b/libs/utils/Android.mk index 4a68dc1f70..cdb8ca2d70 100644 --- a/libs/utils/Android.mk +++ b/libs/utils/Android.mk @@ -139,6 +139,14 @@ LOCAL_SHARED_LIBRARIES := \ liblog \ libcutils +ifneq ($(TARGET_SIMULATOR),true) +ifeq ($(TARGET_OS)-$(TARGET_ARCH),linux-x86) +# This is needed on x86 to bring in dl_iterate_phdr for CallStack.cpp +LOCAL_SHARED_LIBRARIES += \ + libdl +endif # linux-x86 +endif # sim + LOCAL_MODULE:= libutils #LOCAL_CFLAGS+= diff --git a/libs/utils/CallStack.cpp b/libs/utils/CallStack.cpp index 4968666733..26fb22abc0 100644 --- a/libs/utils/CallStack.cpp +++ b/libs/utils/CallStack.cpp @@ -79,35 +79,35 @@ int backtrace(const void** addrs, size_t ignore, size_t size) /*****************************************************************************/ static -const char *lookup_symbol(const void* addr, uint32_t *offset, char* name, size_t bufSize) +const char *lookup_symbol(const void* addr, void **offset, char* name, size_t bufSize) { #if HAVE_DLADDR - Dl_info info; - if (dladdr(addr, &info)) { - *offset = (uint32_t)info.dli_saddr; - return info.dli_sname; - } + Dl_info info; + if (dladdr(addr, &info)) { + *offset = info.dli_saddr; + return info.dli_sname; + } #endif - return NULL; + return NULL; } static int32_t linux_gcc_demangler(const char *mangled_name, char *unmangled_name, size_t buffersize) { - size_t out_len = 0; + size_t out_len = 0; #if HAVE_CXXABI - int status = 0; - char *demangled = abi::__cxa_demangle(mangled_name, 0, &out_len, &status); - if (status == 0) { - // OK - if (out_len < buffersize) memcpy(unmangled_name, demangled, out_len); - else out_len = 0; - free(demangled); - } else { - out_len = 0; - } + int status = 0; + char *demangled = abi::__cxa_demangle(mangled_name, 0, &out_len, &status); + if (status == 0) { + // OK + if (out_len < buffersize) memcpy(unmangled_name, demangled, out_len); + else out_len = 0; + free(demangled); + } else { + out_len = 0; + } #endif - return out_len; + return out_len; } /*****************************************************************************/ @@ -115,12 +115,12 @@ int32_t linux_gcc_demangler(const char *mangled_name, char *unmangled_name, size class MapInfo { struct mapinfo { struct mapinfo *next; - unsigned start; - unsigned end; + uint64_t start; + uint64_t end; char name[]; }; - const char *map_to_name(unsigned pc, const char* def) { + const char *map_to_name(uint64_t pc, const char* def) { mapinfo* mi = getMapInfoList(); while(mi) { if ((pc >= mi->start) && (pc < mi->end)) @@ -139,8 +139,8 @@ class MapInfo { if (line[20] != 'x') return 0; mi = (mapinfo*)malloc(sizeof(mapinfo) + (len - 47)); if (mi == 0) return 0; - mi->start = strtoul(line, 0, 16); - mi->end = strtoul(line + 9, 0, 16); + mi->start = strtoull(line, 0, 16); + mi->end = strtoull(line + 9, 0, 16); mi->next = 0; strcpy(mi->name, line + 49); return mi; @@ -184,7 +184,7 @@ public: } static const char *mapAddressToName(const void* pc, const char* def) { - return sMapInfo.map_to_name((unsigned)pc, def); + return sMapInfo.map_to_name((uint64_t)pc, def); } }; @@ -278,7 +278,7 @@ String8 CallStack::toStringSingleLevel(const char* prefix, int32_t level) const char tmp[256]; char tmp1[32]; char tmp2[32]; - uint32_t offs; + void *offs; const void* ip = mStack[level]; if (!ip) return res; @@ -291,14 +291,14 @@ String8 CallStack::toStringSingleLevel(const char* prefix, int32_t level) const if (name) { if (linux_gcc_demangler(name, tmp, 256) != 0) name = tmp; - snprintf(tmp1, 32, "0x%08x: <", (size_t)ip); - snprintf(tmp2, 32, ">+0x%08x", offs); + snprintf(tmp1, 32, "0x%p: <", ip); + snprintf(tmp2, 32, ">+0x%p", offs); res.append(tmp1); res.append(name); res.append(tmp2); } else { name = MapInfo::mapAddressToName(ip, ""); - snprintf(tmp, 256, "pc %08x %s", (size_t)ip, name); + snprintf(tmp, 256, "pc %p %s", ip, name); res.append(tmp); } res.append("\n"); diff --git a/libs/utils/IPCThreadState.cpp b/libs/utils/IPCThreadState.cpp index ca49d9a5b0..04ae1424e4 100644 --- a/libs/utils/IPCThreadState.cpp +++ b/libs/utils/IPCThreadState.cpp @@ -391,6 +391,29 @@ void IPCThreadState::joinThreadPool(bool isMain) status_t result; do { int32_t cmd; + + // When we've cleared the incoming command queue, process any pending derefs + if (mIn.dataPosition() >= mIn.dataSize()) { + size_t numPending = mPendingWeakDerefs.size(); + if (numPending > 0) { + for (size_t i = 0; i < numPending; i++) { + RefBase::weakref_type* refs = mPendingWeakDerefs[i]; + refs->decWeak(mProcess.get()); + } + mPendingWeakDerefs.clear(); + } + + numPending = mPendingStrongDerefs.size(); + if (numPending > 0) { + for (size_t i = 0; i < numPending; i++) { + BBinder* obj = mPendingStrongDerefs[i]; + obj->decStrong(mProcess.get()); + } + mPendingStrongDerefs.clear(); + } + } + + // now get the next command to be processed, waiting if necessary result = talkWithDriver(); if (result >= NO_ERROR) { size_t IN = mIn.dataAvail(); @@ -832,7 +855,7 @@ status_t IPCThreadState::executeCommand(int32_t cmd) LOG_REMOTEREFS("BR_RELEASE from driver on %p", obj); obj->printRefs(); } - obj->decStrong(mProcess.get()); + mPendingStrongDerefs.push(obj); break; case BR_INCREFS: @@ -853,7 +876,7 @@ status_t IPCThreadState::executeCommand(int32_t cmd) //LOG_ASSERT(refs->refBase() == obj, // "BR_DECREFS: object %p does not match cookie %p (expected %p)", // refs, obj, refs->refBase()); - refs->decWeak(mProcess.get()); + mPendingWeakDerefs.push(refs); break; case BR_ATTEMPT_ACQUIRE: diff --git a/libs/utils/LogSocket.cpp b/libs/utils/LogSocket.cpp index e64f794a8b..55c1b99aff 100644 --- a/libs/utils/LogSocket.cpp +++ b/libs/utils/LogSocket.cpp @@ -16,7 +16,7 @@ #ifndef HAVE_WINSOCK -#define SOCKETLOG +//#define SOCKETLOG #endif #ifdef SOCKETLOG diff --git a/libs/utils/MemoryDealer.cpp b/libs/utils/MemoryDealer.cpp index e6d1d180fe..cf8201b855 100644 --- a/libs/utils/MemoryDealer.cpp +++ b/libs/utils/MemoryDealer.cpp @@ -387,21 +387,23 @@ SimpleMemory::~SimpleMemory() start = (start + pagesize-1) & ~(pagesize-1); end &= ~(pagesize-1); - void* const start_ptr = (void*)(intptr_t(getHeap()->base()) + start); - size_t size = end-start; + if (start < end) { + void* const start_ptr = (void*)(intptr_t(getHeap()->base()) + start); + size_t size = end-start; #ifndef NDEBUG - memset(start_ptr, 0xdf, size); + memset(start_ptr, 0xdf, size); #endif - -// MADV_REMOVE is not defined on Dapper based Goobuntu + + // MADV_REMOVE is not defined on Dapper based Goobuntu #ifdef MADV_REMOVE - if (size) { - int err = madvise(start_ptr, size, MADV_REMOVE); - LOGW_IF(err, "madvise(%p, %u, MADV_REMOVE) returned %s", - start_ptr, size, err<0 ? strerror(errno) : "Ok"); - } + if (size) { + int err = madvise(start_ptr, size, MADV_REMOVE); + LOGW_IF(err, "madvise(%p, %u, MADV_REMOVE) returned %s", + start_ptr, size, err<0 ? strerror(errno) : "Ok"); + } #endif + } } }; // namespace android diff --git a/libs/utils/MemoryHeapPmem.cpp b/libs/utils/MemoryHeapPmem.cpp index 1e5a1cc961..eba2b3055c 100644 --- a/libs/utils/MemoryHeapPmem.cpp +++ b/libs/utils/MemoryHeapPmem.cpp @@ -38,9 +38,20 @@ namespace android { // --------------------------------------------------------------------------- -class MemoryHeapPmem; +MemoryHeapPmem::MemoryPmem::MemoryPmem(const sp& heap) + : BnMemory(), mClientHeap(heap) +{ +} + +MemoryHeapPmem::MemoryPmem::~MemoryPmem() { + if (mClientHeap != NULL) { + mClientHeap->remove(this); + } +} -class SubRegionMemory : public BnMemory { +// --------------------------------------------------------------------------- + +class SubRegionMemory : public MemoryHeapPmem::MemoryPmem { public: SubRegionMemory(const sp& heap, ssize_t offset, size_t size); virtual ~SubRegionMemory(); @@ -50,15 +61,14 @@ private: void revoke(); size_t mSize; ssize_t mOffset; - sp mClientHeap; }; SubRegionMemory::SubRegionMemory(const sp& heap, ssize_t offset, size_t size) - : mSize(size), mOffset(offset), mClientHeap(heap) + : MemoryHeapPmem::MemoryPmem(heap), mSize(size), mOffset(offset) { #ifndef NDEBUG - void* const start_ptr = (void*)(intptr_t(mClientHeap->base()) + offset); + void* const start_ptr = (void*)(intptr_t(getHeap()->base()) + offset); memset(start_ptr, 0xda, size); #endif @@ -80,7 +90,7 @@ sp SubRegionMemory::getMemory(ssize_t* offset, size_t* size) const { if (offset) *offset = mOffset; if (size) *size = mSize; - return mClientHeap; + return getHeap(); } SubRegionMemory::~SubRegionMemory() @@ -98,8 +108,9 @@ void SubRegionMemory::revoke() // promote() it. #if HAVE_ANDROID_OS - if (mClientHeap != NULL) { - int our_fd = mClientHeap->heapID(); + if (mSize != NULL) { + const sp& heap(getHeap()); + int our_fd = heap->heapID(); struct pmem_region sub; sub.offset = mOffset; sub.len = mSize; @@ -107,7 +118,7 @@ void SubRegionMemory::revoke() LOGE_IF(err<0, "PMEM_UNMAP failed (%s), " "mFD=%d, sub.offset=%lu, sub.size=%lu", strerror(errno), our_fd, sub.offset, sub.len); - mClientHeap.clear(); + mSize = 0; } #endif } @@ -157,10 +168,7 @@ MemoryHeapPmem::~MemoryHeapPmem() sp MemoryHeapPmem::mapMemory(size_t offset, size_t size) { - sp memory; - if (heapID() > 0) - memory = new SubRegionMemory(this, offset, size); - + sp memory = createMemory(offset, size); if (memory != 0) { Mutex::Autolock _l(mLock); mAllocations.add(memory); @@ -168,6 +176,15 @@ sp MemoryHeapPmem::mapMemory(size_t offset, size_t size) return memory; } +sp MemoryHeapPmem::createMemory( + size_t offset, size_t size) +{ + sp memory; + if (heapID() > 0) + memory = new SubRegionMemory(this, offset, size); + return memory; +} + status_t MemoryHeapPmem::slap() { #if HAVE_ANDROID_OS @@ -206,21 +223,26 @@ status_t MemoryHeapPmem::unslap() void MemoryHeapPmem::revoke() { - Vector< wp > allocations; + SortedVector< wp > allocations; { // scope for lock Mutex::Autolock _l(mLock); allocations = mAllocations; - mAllocations.clear(); } ssize_t count = allocations.size(); for (ssize_t i=0 ; i memory(allocations[i].promote()); + sp memory(allocations[i].promote()); if (memory != 0) memory->revoke(); } } +void MemoryHeapPmem::remove(const wp& memory) +{ + Mutex::Autolock _l(mLock); + mAllocations.remove(memory); +} + // --------------------------------------------------------------------------- }; // namespace android diff --git a/libs/utils/ResourceTypes.cpp b/libs/utils/ResourceTypes.cpp index a5fe9fba55..5a09fb44a0 100644 --- a/libs/utils/ResourceTypes.cpp +++ b/libs/utils/ResourceTypes.cpp @@ -164,7 +164,11 @@ void Res_png_9patch::fileToDevice() size_t Res_png_9patch::serializedSize() { - return sizeof(Res_png_9patch) + // The size of this struct is 32 bytes on the 32-bit target system + // 4 * int8_t + // 4 * int32_t + // 3 * pointer + return 32 + numXDivs * sizeof(int32_t) + numYDivs * sizeof(int32_t) + numColors * sizeof(uint32_t); @@ -180,8 +184,10 @@ void* Res_png_9patch::serialize() void Res_png_9patch::serialize(void * outData) { char* data = (char*) outData; - memmove(data, this, sizeof(Res_png_9patch)); - data += sizeof(Res_png_9patch); + memmove(data, &wasDeserialized, 4); // copy wasDeserialized, numXDivs, numYDivs, numColors + memmove(data + 12, &paddingLeft, 16); // copy paddingXXXX + data += 32; + memmove(data, this->xDivs, numXDivs * sizeof(int32_t)); data += numXDivs * sizeof(int32_t); memmove(data, this->yDivs, numYDivs * sizeof(int32_t)); @@ -189,27 +195,32 @@ void Res_png_9patch::serialize(void * outData) memmove(data, this->colors, numColors * sizeof(uint32_t)); } -Res_png_9patch* Res_png_9patch::deserialize(const void* inData) -{ - deserialize(inData, (Res_png_9patch*) inData); - return (Res_png_9patch*) inData; -} - -void Res_png_9patch::deserialize(const void* inData, Res_png_9patch* outData) { - Res_png_9patch* patch = (Res_png_9patch*) inData; +static void deserializeInternal(const void* inData, Res_png_9patch* outData) { + char* patch = (char*) inData; if (inData != outData) { - memcpy(outData, inData, patch->serializedSize()); + memmove(&outData->wasDeserialized, patch, 4); // copy wasDeserialized, numXDivs, numYDivs, numColors + memmove(&outData->paddingLeft, patch + 12, 4); // copy wasDeserialized, numXDivs, numYDivs, numColors } outData->wasDeserialized = true; char* data = (char*)outData; data += sizeof(Res_png_9patch); outData->xDivs = (int32_t*) data; - data += patch->numXDivs * sizeof(int32_t); + data += outData->numXDivs * sizeof(int32_t); outData->yDivs = (int32_t*) data; - data += patch->numYDivs * sizeof(int32_t); + data += outData->numYDivs * sizeof(int32_t); outData->colors = (uint32_t*) data; } +Res_png_9patch* Res_png_9patch::deserialize(const void* inData) +{ + if (sizeof(void*) != sizeof(int32_t)) { + LOGE("Cannot deserialize on non 32-bit system\n"); + return NULL; + } + deserializeInternal(inData, (Res_png_9patch*) inData); + return (Res_png_9patch*) inData; +} + // -------------------------------------------------------------------- // -------------------------------------------------------------------- // -------------------------------------------------------------------- @@ -3863,7 +3874,7 @@ void ResTable::print() const } for (size_t configIndex=0; configIndexconfigs[configIndex]; - if ((((int)type)&0x3) != 0) { + if ((((uint64_t)type)&0x3) != 0) { printf(" NON-INTEGER ResTable_type ADDRESS: %p\n", type); continue; } diff --git a/libs/utils/futex_synchro.c b/libs/utils/futex_synchro.c index c13760d77c..ba19520339 100644 --- a/libs/utils/futex_synchro.c +++ b/libs/utils/futex_synchro.c @@ -25,8 +25,8 @@ #include -// This futex glue code is need on desktop linux, but is part of klibc on ARM -#if !defined(__arm__) +// This futex glue code is need on desktop linux, but is already part of bionic. +#if !defined(HAVE_FUTEX_WRAPPERS) #include typedef unsigned int u32; @@ -76,7 +76,7 @@ int __atomic_cmpxchg(int old, int _new, volatile int *ptr); int __atomic_swap(int _new, volatile int *ptr); int __atomic_dec(volatile int *ptr); -#endif // !defined(__arm__) +#endif // !defined(HAVE_FUTEX_WRAPPERS) // lock states diff --git a/opengl/libGLES_CM/gl_wrapper.cpp b/opengl/libGLES_CM/gl_wrapper.cpp index 5da4f9a222..3b7f45e7fc 100644 --- a/opengl/libGLES_CM/gl_wrapper.cpp +++ b/opengl/libGLES_CM/gl_wrapper.cpp @@ -373,6 +373,7 @@ public: static sp gRevokerCallback; + static request_gpu_t* gpu_acquire(void* user) { sp server( getSurfaceFlinger() ); @@ -383,7 +384,10 @@ static request_gpu_t* gpu_acquire(void* user) } ISurfaceComposer::gpu_info_t info; - gRevokerCallback = new GPURevokeRequester(); + + if (gRevokerCallback == 0) + gRevokerCallback = new GPURevokeRequester(); + status_t err = server->requestGPU(gRevokerCallback, &info); if (err != NO_ERROR) { LOGD("requestGPU returned %d", err); @@ -549,6 +553,21 @@ int binarySearch( return -1; } +static EGLint configToUniqueId(egl_display_t const* dp, int i, int index) +{ + // NOTE: this mapping works only if we have no more than two EGLimpl + return (i>0 ? dp->numConfigs[0] : 0) + index; +} + +static void uniqueIdToConfig(egl_display_t const* dp, EGLint configId, + int& i, int& index) +{ + // NOTE: this mapping works only if we have no more than two EGLimpl + size_t numConfigs = dp->numConfigs[0]; + i = configId / numConfigs; + index = configId % numConfigs; +} + static int cmp_configs(const void* a, const void *b) { EGLConfig c0 = *(EGLConfig const *)a; @@ -557,7 +576,7 @@ static int cmp_configs(const void* a, const void *b) } static char const * const gVendorString = "Android"; -static char const * const gVersionString = "1.2 Android META-EGL"; +static char const * const gVersionString = "1.3 Android META-EGL"; static char const * const gClientApiString = "OpenGL ES"; struct extention_map_t { @@ -834,7 +853,13 @@ EGLDisplay eglGetDisplay(NativeDisplayType display) property_get("debug.egl.hw", value, "1"); if (atoi(value) != 0) { cnx->hooks = &gHooks[IMPL_HARDWARE]; - cnx->dso = load_driver("libhgl.so", cnx->hooks); + property_get("debug.egl.profiler", value, "0"); + if (atoi(value) == 0) { + cnx->dso = load_driver("libhgl.so", cnx->hooks); + } else { + LOGW("Using instrumented h/w OpenGL ES library"); + cnx->dso = load_driver("libhgld.so", cnx->hooks); + } } else { LOGD("3D hardware acceleration is disabled"); } @@ -864,6 +889,8 @@ EGLDisplay eglGetDisplay(NativeDisplayType display) d->dpys[IMPL_HARDWARE] = cnx->hooks->egl.eglGetDisplay(display); if (d->dpys[IMPL_HARDWARE] == EGL_NO_DISPLAY) { + LOGE("h/w accelerated eglGetDisplay() failed (%s)", + egl_strerror(cnx->hooks->egl.eglGetError())); dlclose((void*)cnx->dso); cnx->dso = 0; // in case of failure, we want to make sure we don't try again @@ -900,7 +927,10 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) egl_connection_t* const cnx = &gEGLImpl[i]; cnx->major = -1; cnx->minor = -1; - if (cnx->dso && cnx->hooks->egl.eglInitialize( + if (!cnx->dso) + continue; + + if (cnx->hooks->egl.eglInitialize( dp->dpys[i], &cnx->major, &cnx->minor)) { //LOGD("initialized %d dpy=%p, ver=%d.%d, cnx=%p", @@ -912,10 +942,10 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) dp->queryString[i].version = cnx->hooks->egl.eglQueryString(dp->dpys[i], EGL_VERSION); dp->queryString[i].extensions = strdup( - cnx->hooks->egl.eglQueryString(dp->dpys[i], EGL_EXTENSIONS)); + cnx->hooks->egl.eglQueryString(dp->dpys[i], EGL_EXTENSIONS)); dp->queryString[i].clientApi = cnx->hooks->egl.eglQueryString(dp->dpys[i], EGL_CLIENT_APIS); - + // Dynamically insert extensions we know about if (cnx->hooks->egl.eglSwapRectangleANDROID) add_extension(dp, dp->queryString[i].extensions, @@ -924,12 +954,15 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) if (cnx->hooks->egl.eglQueryStringConfigANDROID) add_extension(dp, dp->queryString[i].extensions, "EGL_ANDROID_query_string_config"); + } else { + LOGD("%d: eglInitialize() failed (%s)", + i, egl_strerror(cnx->hooks->egl.eglGetError())); } } - + // Build the extension list that depends on the current config. // It is the intersection of our extension list and the - // underlaying EGL's extensions list + // underlying EGL's extensions list EGLBoolean res = EGL_FALSE; for (int i=0 ; i<2 ; i++) { egl_connection_t* const cnx = &gEGLImpl[i]; @@ -951,10 +984,10 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) } while (*p); free((void*)our_extensions_org); - // remove the trailling white space + // remove the trailing white space if (extensions_config[0] != 0) { size_t l = strlen(extensions_config) - 1; // new size - extensions_config[l] = 0; // remove the trailling white space + extensions_config[l] = 0; // remove the trailing white space extensions_config = (char*)realloc(extensions_config, l+1); } else { extensions_config = (char*)realloc(extensions_config, 1); @@ -1065,15 +1098,74 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list, return EGL_TRUE; } + EGLint n; EGLBoolean res = EGL_FALSE; *num_config = 0; + + + // It is unfortunate, but we need to remap the EGL_CONFIG_IDs, + // to do this, we have to go through the attrib_list array once + // to figure out both its size and if it contains an EGL_CONFIG_ID + // key. If so, the full array is copied and patched. + // NOTE: we assume that there can be only one occurrence + // of EGL_CONFIG_ID. + + EGLint patch_index = -1; + GLint attr; + size_t size = 0; + while ((attr=attrib_list[size])) { + if (attr == EGL_CONFIG_ID) + patch_index = size; + size += 2; + } + if (patch_index >= 0) { + size += 2; // we need copy the sentinel as well + EGLint* new_list = (EGLint*)malloc(size*sizeof(EGLint)); + if (new_list == 0) + return setError(EGL_BAD_ALLOC, EGL_FALSE); + memcpy(new_list, attrib_list, size*sizeof(EGLint)); + + // patch the requested EGL_CONFIG_ID + int i, index; + EGLint& configId(new_list[patch_index+1]); + uniqueIdToConfig(dp, configId, i, index); + + egl_connection_t* const cnx = &gEGLImpl[i]; + if (cnx->dso) { + cnx->hooks->egl.eglGetConfigAttrib( + dp->dpys[i], dp->configs[i][index], + EGL_CONFIG_ID, &configId); + + // and switch to the new list + attrib_list = const_cast(new_list); + + // At this point, the only configuration that can match is + // dp->configs[i][index], however, we don't know if it would be + // rejected because of the other attributes, so we do have to call + // cnx->hooks->egl.eglChooseConfig() -- but we don't have to loop + // through all the EGLimpl[]. + // We also know we can only get a single config back, and we know + // which one. + + res = cnx->hooks->egl.eglChooseConfig( + dp->dpys[i], attrib_list, configs, config_size, &n); + if (res && n>0) { + // n has to be 0 or 1, by construction, and we already know + // which config it will return (since there can be only one). + configs[0] = MAKE_CONFIG(i, index); + *num_config = 1; + } + } + + free(const_cast(attrib_list)); + return res; + } + for (int i=0 ; i<2 ; i++) { egl_connection_t* const cnx = &gEGLImpl[i]; if (cnx->dso) { - EGLint n; if (cnx->hooks->egl.eglChooseConfig( - dp->dpys[i], attrib_list, configs, config_size, &n)) - { + dp->dpys[i], attrib_list, configs, config_size, &n)) { // now we need to convert these client EGLConfig to our // internal EGLConfig format. This is done in O(n log n). for (int j=0 ; jhooks->egl.eglGetConfigAttrib( dp->dpys[i], dp->configs[i][index], attribute, value); } diff --git a/opengl/libagl/TextureObjectManager.cpp b/opengl/libagl/TextureObjectManager.cpp index 12fae63632..ce31854172 100644 --- a/opengl/libagl/TextureObjectManager.cpp +++ b/opengl/libagl/TextureObjectManager.cpp @@ -129,7 +129,7 @@ status_t EGLTextureObject::setSurface(GGLSurface const* s) // so for now, we just loose it. memset(crop_rect, 0, sizeof(crop_rect)); - // it would be nice id we could keep the generate_mipmap flag + // it would be nice if we could keep the generate_mipmap flag, // we would have to generate them right now though. generate_mipmap = GL_FALSE; @@ -286,7 +286,7 @@ sp EGLSurfaceManager::replaceTexture(GLuint name) void EGLSurfaceManager::deleteTextures(GLsizei n, const GLuint *tokens) { - // free all texures + // free all textures Mutex::Autolock _l(mLock); for (GLsizei i=0 ; iclipPlanes.enable) { // needs eye coords - want |= transform_state_t::MODELVIEW; + if (c->clipPlanes.enable || (enables & GGL_ENABLE_FOG)) { + want |= transform_state_t::MODELVIEW; // needs eye coords } ogles_validate_transform(c, want); diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp index 854a49e6a7..3e8dca958d 100644 --- a/opengl/libagl/egl.cpp +++ b/opengl/libagl/egl.cpp @@ -36,6 +36,7 @@ #include #include +#include #include "context.h" #include "state.h" @@ -57,7 +58,7 @@ static pthread_key_t gEGLErrorKey = -1; #ifndef HAVE_ANDROID_OS namespace gl { pthread_key_t gGLKey = -1; -}; // namspace gl +}; // namespace gl #endif template @@ -156,7 +157,7 @@ protected: egl_surface_t::egl_surface_t(EGLDisplay dpy, EGLConfig config, int32_t depthFormat) - : magic(0x31415265), dpy(dpy), config(config), ctx(0) + : magic(MAGIC), dpy(dpy), config(config), ctx(0) { depth.version = sizeof(GGLSurface); depth.data = 0; @@ -240,7 +241,7 @@ EGLBoolean egl_window_surface_t::swapBuffers() { uint32_t flags = nativeWindow->swapBuffers(nativeWindow); if (flags & EGL_NATIVES_FLAG_SIZE_CHANGED) { - // TODO: we probaly should reset the swap rect here + // TODO: we probably should reset the swap rect here // if the window size has changed // window->setSwapRectangle(Rect(info.w, info.h)); if (depth.data) { @@ -402,12 +403,13 @@ egl_pbuffer_surface_t::egl_pbuffer_surface_t(EGLDisplay dpy, { size_t size = w*h; switch (f) { - case GGL_PIXEL_FORMAT_RGB_565: size *= 2; break; - case GGL_PIXEL_FORMAT_RGBA_8888: size *= 4; break; - default: - LOGE("incompatible pixel format for pbuffer (format=%d)", f); - pbuffer.data = 0; - break; + case GGL_PIXEL_FORMAT_A_8: size *= 1; break; + case GGL_PIXEL_FORMAT_RGB_565: size *= 2; break; + case GGL_PIXEL_FORMAT_RGBA_8888: size *= 4; break; + default: + LOGE("incompatible pixel format for pbuffer (format=%d)", f); + pbuffer.data = 0; + break; } pbuffer.version = sizeof(GGLSurface); pbuffer.width = w; @@ -488,28 +490,28 @@ struct extention_map_t { }; static const extention_map_t gExtentionMap[] = { - { "eglSwapRectangleANDROID", (void(*)())&eglSwapRectangleANDROID }, - { "glDrawTexsOES", (void(*)())&glDrawTexsOES }, - { "glDrawTexiOES", (void(*)())&glDrawTexiOES }, - { "glDrawTexfOES", (void(*)())&glDrawTexfOES }, - { "glDrawTexxOES", (void(*)())&glDrawTexxOES }, - { "glDrawTexsvOES", (void(*)())&glDrawTexsvOES }, - { "glDrawTexivOES", (void(*)())&glDrawTexivOES }, - { "glDrawTexfvOES", (void(*)())&glDrawTexfvOES }, - { "glDrawTexxvOES", (void(*)())&glDrawTexxvOES }, - { "glQueryMatrixxOES", (void(*)())&glQueryMatrixxOES }, - { "glClipPlanef", (void(*)())&glClipPlanef }, - { "glClipPlanex", (void(*)())&glClipPlanex }, - { "glBindBuffer", (void(*)())&glBindBuffer }, - { "glBufferData", (void(*)())&glBufferData }, - { "glBufferSubData", (void(*)())&glBufferSubData }, - { "glDeleteBuffers", (void(*)())&glDeleteBuffers }, - { "glGenBuffers", (void(*)())&glGenBuffers }, + { "eglSwapRectangleANDROID", (void(*)())&eglSwapRectangleANDROID }, + { "glDrawTexsOES", (void(*)())&glDrawTexsOES }, + { "glDrawTexiOES", (void(*)())&glDrawTexiOES }, + { "glDrawTexfOES", (void(*)())&glDrawTexfOES }, + { "glDrawTexxOES", (void(*)())&glDrawTexxOES }, + { "glDrawTexsvOES", (void(*)())&glDrawTexsvOES }, + { "glDrawTexivOES", (void(*)())&glDrawTexivOES }, + { "glDrawTexfvOES", (void(*)())&glDrawTexfvOES }, + { "glDrawTexxvOES", (void(*)())&glDrawTexxvOES }, + { "glQueryMatrixxOES", (void(*)())&glQueryMatrixxOES }, + { "glClipPlanef", (void(*)())&glClipPlanef }, + { "glClipPlanex", (void(*)())&glClipPlanex }, + { "glBindBuffer", (void(*)())&glBindBuffer }, + { "glBufferData", (void(*)())&glBufferData }, + { "glBufferSubData", (void(*)())&glBufferSubData }, + { "glDeleteBuffers", (void(*)())&glDeleteBuffers }, + { "glGenBuffers", (void(*)())&glGenBuffers }, }; /* * In the lists below, attributes names MUST be sorted. - * Additinnaly, all configs must be sorted according to + * Additionally, all configs must be sorted according to * the EGL specification. */ @@ -517,9 +519,10 @@ static config_pair_t const config_base_attribute_list[] = { { EGL_STENCIL_SIZE, 0 }, { EGL_CONFIG_CAVEAT, EGL_SLOW_CONFIG }, { EGL_LEVEL, 0 }, - { EGL_MAX_PBUFFER_HEIGHT, 0 }, - { EGL_MAX_PBUFFER_PIXELS, 0 }, - { EGL_MAX_PBUFFER_WIDTH, 0 }, + { EGL_MAX_PBUFFER_HEIGHT, GGL_MAX_VIEWPORT_DIMS }, + { EGL_MAX_PBUFFER_PIXELS, + GGL_MAX_VIEWPORT_DIMS*GGL_MAX_VIEWPORT_DIMS }, + { EGL_MAX_PBUFFER_WIDTH, GGL_MAX_VIEWPORT_DIMS }, { EGL_NATIVE_RENDERABLE, EGL_TRUE }, { EGL_NATIVE_VISUAL_ID, 0 }, { EGL_NATIVE_VISUAL_TYPE, GGL_PIXEL_FORMAT_RGB_565 }, @@ -536,49 +539,72 @@ static config_pair_t const config_base_attribute_list[] = { }; // These configs can override the base attribute list +// NOTE: when adding a config here, don't forget to update eglCreate*Surface() static config_pair_t const config_0_attribute_list[] = { - { EGL_BUFFER_SIZE, 16 }, - { EGL_ALPHA_SIZE, 0 }, - { EGL_BLUE_SIZE, 5 }, - { EGL_GREEN_SIZE, 6 }, - { EGL_RED_SIZE, 5 }, - { EGL_DEPTH_SIZE, 0 }, - { EGL_CONFIG_ID, 0 }, - { EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PIXMAP_BIT }, + { EGL_BUFFER_SIZE, 16 }, + { EGL_ALPHA_SIZE, 0 }, + { EGL_BLUE_SIZE, 5 }, + { EGL_GREEN_SIZE, 6 }, + { EGL_RED_SIZE, 5 }, + { EGL_DEPTH_SIZE, 0 }, + { EGL_CONFIG_ID, 0 }, + { EGL_SURFACE_TYPE, EGL_WINDOW_BIT|EGL_PBUFFER_BIT|EGL_PIXMAP_BIT }, }; static config_pair_t const config_1_attribute_list[] = { - { EGL_BUFFER_SIZE, 16 }, - { EGL_ALPHA_SIZE, 0 }, - { EGL_BLUE_SIZE, 5 }, - { EGL_GREEN_SIZE, 6 }, - { EGL_RED_SIZE, 5 }, - { EGL_DEPTH_SIZE, 16 }, - { EGL_CONFIG_ID, 1 }, - { EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PIXMAP_BIT }, + { EGL_BUFFER_SIZE, 16 }, + { EGL_ALPHA_SIZE, 0 }, + { EGL_BLUE_SIZE, 5 }, + { EGL_GREEN_SIZE, 6 }, + { EGL_RED_SIZE, 5 }, + { EGL_DEPTH_SIZE, 16 }, + { EGL_CONFIG_ID, 1 }, + { EGL_SURFACE_TYPE, EGL_WINDOW_BIT|EGL_PBUFFER_BIT|EGL_PIXMAP_BIT }, }; static config_pair_t const config_2_attribute_list[] = { - { EGL_BUFFER_SIZE, 32 }, - { EGL_ALPHA_SIZE, 8 }, - { EGL_BLUE_SIZE, 8 }, - { EGL_GREEN_SIZE, 8 }, - { EGL_RED_SIZE, 8 }, - { EGL_DEPTH_SIZE, 0 }, - { EGL_CONFIG_ID, 2 }, - { EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PIXMAP_BIT }, + { EGL_BUFFER_SIZE, 32 }, + { EGL_ALPHA_SIZE, 8 }, + { EGL_BLUE_SIZE, 8 }, + { EGL_GREEN_SIZE, 8 }, + { EGL_RED_SIZE, 8 }, + { EGL_DEPTH_SIZE, 0 }, + { EGL_CONFIG_ID, 2 }, + { EGL_SURFACE_TYPE, EGL_WINDOW_BIT|EGL_PBUFFER_BIT|EGL_PIXMAP_BIT }, }; static config_pair_t const config_3_attribute_list[] = { - { EGL_BUFFER_SIZE, 32 }, - { EGL_ALPHA_SIZE, 8 }, - { EGL_BLUE_SIZE, 8 }, - { EGL_GREEN_SIZE, 8 }, - { EGL_RED_SIZE, 8 }, - { EGL_DEPTH_SIZE, 16 }, - { EGL_CONFIG_ID, 3 }, - { EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PIXMAP_BIT }, + { EGL_BUFFER_SIZE, 32 }, + { EGL_ALPHA_SIZE, 8 }, + { EGL_BLUE_SIZE, 8 }, + { EGL_GREEN_SIZE, 8 }, + { EGL_RED_SIZE, 8 }, + { EGL_DEPTH_SIZE, 16 }, + { EGL_CONFIG_ID, 3 }, + { EGL_SURFACE_TYPE, EGL_WINDOW_BIT|EGL_PBUFFER_BIT|EGL_PIXMAP_BIT }, +}; + +static config_pair_t const config_4_attribute_list[] = { + { EGL_BUFFER_SIZE, 8 }, + { EGL_ALPHA_SIZE, 8 }, + { EGL_BLUE_SIZE, 0 }, + { EGL_GREEN_SIZE, 0 }, + { EGL_RED_SIZE, 0 }, + { EGL_DEPTH_SIZE, 0 }, + { EGL_CONFIG_ID, 4 }, + { EGL_SURFACE_TYPE, EGL_WINDOW_BIT|EGL_PBUFFER_BIT|EGL_PIXMAP_BIT }, +}; + +static config_pair_t const config_5_attribute_list[] = { + { EGL_BUFFER_SIZE, 8 }, + { EGL_ALPHA_SIZE, 8 }, + { EGL_BLUE_SIZE, 0 }, + { EGL_GREEN_SIZE, 0 }, + { EGL_RED_SIZE, 0 }, + { EGL_DEPTH_SIZE, 16 }, + { EGL_CONFIG_ID, 5 }, + { EGL_SURFACE_TYPE, EGL_WINDOW_BIT|EGL_PBUFFER_BIT|EGL_PIXMAP_BIT }, }; static configs_t const gConfigs[] = { @@ -586,6 +612,8 @@ static configs_t const gConfigs[] = { { config_1_attribute_list, NELEM(config_1_attribute_list) }, { config_2_attribute_list, NELEM(config_2_attribute_list) }, { config_3_attribute_list, NELEM(config_3_attribute_list) }, + { config_4_attribute_list, NELEM(config_4_attribute_list) }, + { config_5_attribute_list, NELEM(config_5_attribute_list) }, }; static config_management_t const gConfigManagement[] = { @@ -669,7 +697,7 @@ static int isAttributeMatching(int i, EGLint attr, EGLint val) return 1; } } else { - // attribute nont found. this should NEVER happen. + // attribute not found. this should NEVER happen. } } else { // error, this attribute doesn't exist @@ -779,11 +807,19 @@ static EGLSurface createWindowSurface(EGLDisplay dpy, EGLConfig config, pixelFormat = GGL_PIXEL_FORMAT_RGBA_8888; depthFormat = GGL_PIXEL_FORMAT_Z_16; break; + case 4: + pixelFormat = GGL_PIXEL_FORMAT_A_8; + depthFormat = 0; + break; + case 5: + pixelFormat = GGL_PIXEL_FORMAT_A_8; + depthFormat = GGL_PIXEL_FORMAT_Z_16; + break; default: return setError(EGL_BAD_MATCH, EGL_NO_SURFACE); } - // XXX: we don't have access to the pixelFormat here just yet. + // FIXME: we don't have access to the pixelFormat here just yet. // (it's possible that the surface is not fully initialized) // maybe this should be done after the page-flip //if (EGLint(info.format) != pixelFormat) @@ -840,6 +876,14 @@ static EGLSurface createPixmapSurface(EGLDisplay dpy, EGLConfig config, pixelFormat = GGL_PIXEL_FORMAT_RGBA_8888; depthFormat = GGL_PIXEL_FORMAT_Z_16; break; + case 4: + pixelFormat = GGL_PIXEL_FORMAT_A_8; + depthFormat = 0; + break; + case 5: + pixelFormat = GGL_PIXEL_FORMAT_A_8; + depthFormat = GGL_PIXEL_FORMAT_Z_16; + break; default: return setError(EGL_BAD_MATCH, EGL_NO_SURFACE); } @@ -896,6 +940,14 @@ static EGLSurface createPbufferSurface(EGLDisplay dpy, EGLConfig config, pixelFormat = GGL_PIXEL_FORMAT_RGBA_8888; depthFormat = GGL_PIXEL_FORMAT_Z_16; break; + case 4: + pixelFormat = GGL_PIXEL_FORMAT_A_8; + depthFormat = 0; + break; + case 5: + pixelFormat = GGL_PIXEL_FORMAT_A_8; + depthFormat = GGL_PIXEL_FORMAT_Z_16; + break; default: return setError(EGL_BAD_MATCH, EGL_NO_SURFACE); } @@ -979,7 +1031,7 @@ EGLBoolean eglTerminate(EGLDisplay dpy) EGLBoolean res = EGL_TRUE; egl_display_t& d = egl_display_t::get_display(dpy); if (android_atomic_dec(&d.initialized) == 1) { - // TODO: destroy all resources (surfaces, contextes, etc...) + // TODO: destroy all resources (surfaces, contexts, etc...) //pthread_mutex_lock(&gInitMutex); //pthread_mutex_unlock(&gInitMutex); } @@ -1105,11 +1157,7 @@ EGLSurface eglCreatePixmapSurface( EGLDisplay dpy, EGLConfig config, EGLSurface eglCreatePbufferSurface( EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list) { - // none of our configs support pbuffers - // (in fact it's working but since we can't use them as - // textures yet, it's not useful at all) - //createPbufferSurface(dpy, config, attrib_list); - return EGL_NO_SURFACE; + return createPbufferSurface(dpy, config, attrib_list); } EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface eglSurface) @@ -1231,6 +1279,13 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, } EGLContext current_ctx = EGL_NO_CONTEXT; + + if ((read == EGL_NO_SURFACE && draw == EGL_NO_SURFACE) && (ctx != EGL_NO_CONTEXT)) + return setError(EGL_BAD_MATCH, EGL_FALSE); + + if ((read != EGL_NO_SURFACE || draw != EGL_NO_SURFACE) && (ctx == EGL_NO_CONTEXT)) + return setError(EGL_BAD_MATCH, EGL_FALSE); + if (ctx == EGL_NO_CONTEXT) { // if we're detaching, we need the current context current_ctx = (EGLContext)getGlThreadSpecific(); @@ -1486,7 +1541,7 @@ EGLSurface eglCreatePbufferFromClientBuffer( } // ---------------------------------------------------------------------------- -// Android extentions +// Android extensions // ---------------------------------------------------------------------------- void (*eglGetProcAddress (const char *procname))() diff --git a/opengl/libagl/light.cpp b/opengl/libagl/light.cpp index 87725cb3a3..25c41d0c5b 100644 --- a/opengl/libagl/light.cpp +++ b/opengl/libagl/light.cpp @@ -117,11 +117,11 @@ int32_t clampF(GLfixed f) { } static GLfixed fog_linear(ogles_context_t* c, GLfixed z) { - return clampF(gglMulx((c->fog.end - z), c->fog.invEndMinusStart)); + return clampF(gglMulx((c->fog.end - ((z<0)?-z:z)), c->fog.invEndMinusStart)); } static GLfixed fog_exp(ogles_context_t* c, GLfixed z) { - const float e = fixedToFloat(gglMulx(c->fog.density, z)); + const float e = fixedToFloat(gglMulx(c->fog.density, ((z<0)?-z:z))); return clampF(gglFloatToFixed(fastexpf(-e))); } @@ -556,11 +556,11 @@ static void fogx(GLenum pname, GLfixed param, ogles_context_t* c) ogles_error(c, GL_INVALID_VALUE); break; case GL_FOG_START: - c->fog.start = gglClampx(param); + c->fog.start = param; c->fog.invEndMinusStart = gglRecip(c->fog.end - c->fog.start); break; case GL_FOG_END: - c->fog.end = gglClampx(param); + c->fog.end = param; c->fog.invEndMinusStart = gglRecip(c->fog.end - c->fog.start); break; case GL_FOG_MODE: diff --git a/opengl/libagl/matrix.cpp b/opengl/libagl/matrix.cpp index 441da38e3e..f175cdad6e 100644 --- a/opengl/libagl/matrix.cpp +++ b/opengl/libagl/matrix.cpp @@ -98,8 +98,9 @@ static void validate_perspective(ogles_context_t* c, vertex_t* v) c->arrays.perspective = (c->clipPlanes.enable) ? ogles_vertex_clipAllPerspective3D : ogles_vertex_perspective3D; if (enables & (GGL_ENABLE_DEPTH_TEST|GGL_ENABLE_FOG)) { - c->arrays.perspective = (c->clipPlanes.enable) ? - ogles_vertex_clipAllPerspective3DZ : ogles_vertex_perspective3DZ; + c->arrays.perspective = ogles_vertex_perspective3DZ; + if (c->clipPlanes.enable || (enables&GGL_ENABLE_FOG)) + c->arrays.perspective = ogles_vertex_clipAllPerspective3DZ; } if ((c->arrays.vertex.size != 4) && (c->transforms.mvp4.flags & transform_t::FLAGS_2D_PROJECTION)) { diff --git a/opengl/libagl/primitives.cpp b/opengl/libagl/primitives.cpp index 20e8d37016..f164c02eea 100644 --- a/opengl/libagl/primitives.cpp +++ b/opengl/libagl/primitives.cpp @@ -133,7 +133,7 @@ void lightVertexDarkSmoothFog(ogles_context_t* c, vertex_t* v) { if (!(v->flags & vertex_t::LIT)) { v->flags |= vertex_t::LIT; - v->fog = c->fog.fog(c, v->window.z); + v->fog = c->fog.fog(c, v->eye.z); const GLvoid* cp = c->arrays.color.element( v->index & vertex_cache_t::INDEX_MASK); c->arrays.color.fetch(c, v->color.v, cp); @@ -144,14 +144,14 @@ void lightVertexDarkFlatFog(ogles_context_t* c, vertex_t* v) { if (!(v->flags & vertex_t::LIT)) { v->flags |= vertex_t::LIT; - v->fog = c->fog.fog(c, v->window.z); + v->fog = c->fog.fog(c, v->eye.z); } } static inline void lightVertexSmoothFog(ogles_context_t* c, vertex_t* v) { if (!(v->flags & vertex_t::LIT)) { - v->fog = c->fog.fog(c, v->window.z); + v->fog = c->fog.fog(c, v->eye.z); c->lighting.lightVertex(c, v); } } @@ -243,12 +243,20 @@ void compute_iterators_t::initTriangle( m_area = m_dx01*m_dy02 + (-m_dy10)*m_dx20; } +void compute_iterators_t::initLine( + vertex_t const* v0, vertex_t const* v1) +{ + m_dx01 = m_dy02 = v1->window.x - v0->window.x; + m_dy10 = m_dx20 = v0->window.y - v1->window.y; + m_area = m_dx01*m_dy02 + (-m_dy10)*m_dx20; +} + void compute_iterators_t::initLerp(vertex_t const* v0, uint32_t enables) { m_x0 = v0->window.x; m_y0 = v0->window.y; const GGLcoord area = (m_area + TRI_HALF) >> TRI_FRACTION_BITS; - const GGLcoord minArea = 2; // cannot be inversed + const GGLcoord minArea = 2; // cannot be inverted // triangles with an area smaller than 1.0 are not smooth-shaded int q=0, s=0, d=0; @@ -336,14 +344,7 @@ void compute_iterators_t::iterators1616(GGLfixed* it, it[2] = dcdy; } -#if defined(__arm__) && !defined(__thumb__) -inline void compute_iterators_t::iterators0032(int32_t* it, - int32_t c0, int32_t c1, int32_t c2) const -{ - ::iterators0032(this, it, c0, c1, c2); -} -#else -void compute_iterators_t::iterators0032(int32_t* it, +void compute_iterators_t::iterators0032(int64_t* it, int32_t c0, int32_t c1, int32_t c2) const { const int s = m_area_scale - 16; @@ -352,11 +353,27 @@ void compute_iterators_t::iterators0032(int32_t* it, // 16.16 x 16.16 == 32.32 int64_t dcdx = gglMulii(dc01, m_dy02) + gglMulii(dc02, m_dy10); int64_t dcdy = gglMulii(dc02, m_dx01) + gglMulii(dc01, m_dx20); - int32_t c = (c0<<16) - ((dcdx*m_x0 + dcdy*m_y0)>>4); - it[ 0] = c; + it[ 0] = (c0<<16) - ((dcdx*m_x0 + dcdy*m_y0)>>4); it[ 1] = dcdx; it[ 2] = dcdy; } + +#if defined(__arm__) && !defined(__thumb__) +inline void compute_iterators_t::iterators0032(int32_t* it, + int32_t c0, int32_t c1, int32_t c2) const +{ + ::iterators0032(this, it, c0, c1, c2); +} +#else +void compute_iterators_t::iterators0032(int32_t* it, + int32_t c0, int32_t c1, int32_t c2) const +{ + int64_t it64[3]; + iterators0032(it, c0, c1, c2); + it[0] = it64[0]; + it[1] = it64[1]; + it[2] = it64[2]; +} #endif // ---------------------------------------------------------------------------- @@ -454,7 +471,7 @@ void primitive_point(ogles_context_t* c, vertex_t* v) c->arrays.color.fetch(c, v->color.v, cp); } if (enables & GGL_ENABLE_FOG) { - v->fog = c->fog.fog(c, v->window.z); + v->fog = c->fog.fog(c, v->eye.z); } } @@ -514,22 +531,12 @@ void primitive_nop_line(ogles_context_t*, vertex_t*, vertex_t*) { void primitive_line(ogles_context_t* c, vertex_t* v0, vertex_t* v1) { - // This is a cheezy implementation of line drawing that - // uses 2 triangles per line. - // That said, how often line drawing is used? - // get texture coordinates fetch_texcoord(c, v0, v1, v1); // light/shade the vertices first (they're copied below) c->lighting.lightTriangle(c, v0, v1, v1); - vertex_t v[4]; - v[0] = *v0; - v[1] = *v1; - v0 = &v[0]; - v1 = &v[1]; - // clip the line if needed if (ggl_unlikely((v0->flags | v1->flags) & vertex_t::CLIP_ALL)) { unsigned int count = clip_line(c, v0, v1); @@ -546,8 +553,8 @@ void primitive_line(ogles_context_t* c, vertex_t* v0, vertex_t* v1) GGL_ENABLE_DEPTH_TEST; if (ggl_unlikely(enables & mask)) { - c->lerp.initTriangle(v0, v1, v1); - lerp_triangle(c, v0, v1, v1); + c->lerp.initLine(v0, v1); + lerp_triangle(c, v0, v1, v0); } // render our line @@ -654,17 +661,26 @@ void lerp_triangle(ogles_context_t* c, const int32_t v0z = clampZ(v0->window.z); const int32_t v1z = clampZ(v1->window.z); const int32_t v2z = clampZ(v2->window.z); - lerp.iterators0032(itz, v0z, v1z, v2z); if (ggl_unlikely(c->polygonOffset.enable)) { + const int32_t units = (c->polygonOffset.units << 16); const GLfixed factor = c->polygonOffset.factor; - const GLfixed units = c->polygonOffset.units; - int32_t maxDepthSlope = max(abs(itz[1]), abs(itz[2])); - int32_t offset = (int64_t(maxDepthSlope)*factor + - (int64_t(units) << 16)) >> 16; - itz[0] += offset; // XXX: this can cause overflows + if (factor) { + int64_t itz64[3]; + lerp.iterators0032(itz64, v0z, v1z, v2z); + int64_t maxDepthSlope = max(itz64[1], itz64[2]); + itz[0] = uint32_t(itz64[0]) + + uint32_t((maxDepthSlope*factor)>>16) + units; + itz[1] = uint32_t(itz64[1]); + itz[2] = uint32_t(itz64[2]); + } else { + lerp.iterators0032(itz, v0z, v1z, v2z); + itz[0] += units; + } + } else { + lerp.iterators0032(itz, v0z, v1z, v2z); } c->rasterizer.procs.zGrad3xv(c, itz); - } + } if (ggl_unlikely(enables & GGL_ENABLE_FOG)) { GLfixed itf[3]; @@ -880,11 +896,11 @@ void clip_triangle(ogles_context_t* c, vertex_t** output = ovl; unsigned int oc = 0; unsigned int sentinel = 0; - // previous vertice, compute distance to the plane + // previous vertex, compute distance to the plane vertex_t* s = ivl[ic-1]; const vec4_t& equation = c->clipPlanes.plane[plane].equation; GLfixed sd = dot4(equation.v, s->eye.v); - // clip each vertice against this plane... + // clip each vertex against this plane... for (unsigned int i=0 ; ieye.v); @@ -946,10 +962,10 @@ void clip_triangle(ogles_context_t* c, vertex_t** output = ovl; unsigned int oc = 0; unsigned int sentinel = 0; - // previous vertice, compute distance to the plane + // previous vertex, compute distance to the plane vertex_t* s = ivl[ic-1]; GLfixed sd = frustumPlaneDist(plane, s->clip); - // clip each vertice against this plane... + // clip each vertex against this plane... for (unsigned int i=0 ; iclip); diff --git a/opengl/libagl/vertex.cpp b/opengl/libagl/vertex.cpp index 5bcc9dc95c..dad04d6cb5 100644 --- a/opengl/libagl/vertex.cpp +++ b/opengl/libagl/vertex.cpp @@ -99,7 +99,7 @@ void clipFrustumPerspective(ogles_context_t* c, vertex_t* v, uint32_t enables) c->arrays.cull &= clip; if (ggl_likely(!clip)) { - // if the vertice is clipped, we don't do the perspective + // if the vertex is clipped, we don't do the perspective // divide, since we don't need its window coordinates. perspective(c, v, enables); } diff --git a/opengl/tests/Android.mk b/opengl/tests/Android.mk new file mode 100644 index 0000000000..5053e7d643 --- /dev/null +++ b/opengl/tests/Android.mk @@ -0,0 +1 @@ +include $(call all-subdir-makefiles) diff --git a/opengl/tests/angeles/Android.mk b/opengl/tests/angeles/Android.mk new file mode 100644 index 0000000000..41673cbe41 --- /dev/null +++ b/opengl/tests/angeles/Android.mk @@ -0,0 +1,17 @@ +# Copyright 2006 The Android Open Source Project + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) +LOCAL_SRC_FILES:= app-linux.c demo.c.arm +LOCAL_SHARED_LIBRARIES := libGLES_CM libui +LOCAL_MODULE:= angeles +LOCAL_MODULE_TAGS := tests +include $(BUILD_EXECUTABLE) + + +include $(CLEAR_VARS) +LOCAL_SRC_FILES:= gpustate.c +LOCAL_SHARED_LIBRARIES := libGLES_CM +LOCAL_MODULE:= gpustate +LOCAL_MODULE_TAGS := tests +include $(BUILD_EXECUTABLE) diff --git a/opengl/tests/angeles/MODULE_LICENSE_BSD_OR_LGPL b/opengl/tests/angeles/MODULE_LICENSE_BSD_OR_LGPL new file mode 100644 index 0000000000..e69de29bb2 diff --git a/opengl/tests/angeles/README.txt b/opengl/tests/angeles/README.txt new file mode 100644 index 0000000000..38b8a4a74d --- /dev/null +++ b/opengl/tests/angeles/README.txt @@ -0,0 +1,77 @@ +------------------------------------------------------------------------ +San Angeles Observation OpenGL ES version example +Copyright 2004-2005 Jetro Lauha +Web: http://iki.fi/jetro/ +See file license.txt for licensing information. +------------------------------------------------------------------------ + +This is an OpenGL ES port of the small self-running demonstration +called "San Angeles Observation", which was first presented in the +Assembly'2004 event. It won the first place in the 4 KB intro +competition category. + +The demonstration features a sightseeing of a futuristic city +having many different kind of buildings and items. Everything is +flat shaded with three different lights. + +The original version was made for desktop with OpenGL. It was +naturally heavily size optimized in order to fit it in the size +limit. For this OpenGL ES version example much of the code is +cleaned up and the sound is removed. Also detail level is lowered, +although it still contains over 60000 faces. + +The Win32 (2000/XP) binary package of original version is +available from this address: http://jet.ro/files/angeles.zip + +First version of this OpenGL ES port was submitted to the Khronos +OpenGL ES Coding Challenge held in 2004-2005. + +As a code example, this source shows the following: + * How to create a minimal and portable ad hoc framework + for small testing/demonstration programs. This framework + compiles for both desktop and PocketPC Win32 environment, + and a separate source is included for Linux with X11. + * How to dynamically find and use the OpenGL ES DLL or + shared object, so that the library is not needed at + the compile/link stage. + * How to use the basic features of OpenGL ES 1.0/1.1 + Common Lite, such as vertex arrays, color arrays and + lighting. + * How to create a self contained small demonstration + application with objects generated using procedural + algorithms. + +As the original version was optimized for size instead of +performance, that holds true for this OpenGL ES version as +well. Thus the performance could be significantly increased, +for example by changing the code to use glDrawElements +instead of glDrawArrays. The code uses only OpenGL ES 1.0 +Common Lite -level function calls without any extensions. + +The reference OpenGL ES implementations used for this application: + * Hybrid's OpenGL ES API Implementation (Gerbera) version 2.0.4 + Prebuilt Win32 PC executable: SanOGLES-Gerbera.exe + * PowerVR MBX SDK, OpenGL ES Windows PC Emulation version 1.04.14.0170 + Prebuilt Win32 PC executable: SanOGLES-PVRSDK.exe + +Note that DISABLE_IMPORTGL preprocessor macro can be used +to specify not to use dynamic runtime binding of the library. +You also need to define preprocessor macro PVRSDK to compile +the source with PowerVR OpenGL ES SDK. + +The demo application is briefly tested with a few other OpenGL ES +implementations as well (e.g. Vincent, GLESonGL on Linux, Dell +Axim X50v). Most of these other implementations rendered the demo +erroneously in some aspect. This may indicate that the demo source +could still have some work to do with compatibility and correct +API usage, although the non-conforming implementations are most +probably unfinished as well. + +Thanks and Acknowledgements: + +* Toni Lönnberg (!Cube) created the music for original version, which + is not featured in this OpenGL ES port. +* Sara Kapli (st Rana) for additional camera work. +* Paul Bourke for information about the supershapes. + +------------------------------------------------------------------------ diff --git a/opengl/tests/angeles/app-linux.c b/opengl/tests/angeles/app-linux.c new file mode 100644 index 0000000000..d439eb2fbf --- /dev/null +++ b/opengl/tests/angeles/app-linux.c @@ -0,0 +1,222 @@ +/* San Angeles Observation OpenGL ES version example + * Copyright 2004-2005 Jetro Lauha + * All rights reserved. + * Web: http://iki.fi/jetro/ + * + * This source is free software; you can redistribute it and/or + * modify it under the terms of EITHER: + * (1) The GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at + * your option) any later version. The text of the GNU Lesser + * General Public License is included with this source in the + * file LICENSE-LGPL.txt. + * (2) The BSD-style license that is included with this source in + * the file LICENSE-BSD.txt. + * + * This source is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files + * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. + * + * $Id: app-linux.c,v 1.4 2005/02/08 18:42:48 tonic Exp $ + * $Revision: 1.4 $ + * + * Parts of this source file is based on test/example code from + * GLESonGL implementation by David Blythe. Here is copy of the + * license notice from that source: + * + * Copyright (C) 2003 David Blythe All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * DAVID BLYTHE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include + +#include + +#include "app.h" + + +int gAppAlive = 1; + +static const char sAppName[] = + "San Angeles Observation OpenGL ES version example (Linux)"; + +static int sWindowWidth = WINDOW_DEFAULT_WIDTH; +static int sWindowHeight = WINDOW_DEFAULT_HEIGHT; +static EGLDisplay sEglDisplay = EGL_NO_DISPLAY; +static EGLContext sEglContext = EGL_NO_CONTEXT; +static EGLSurface sEglSurface = EGL_NO_SURFACE; + +const char *egl_strerror(unsigned err) +{ + switch(err){ + case EGL_SUCCESS: return "SUCCESS"; + case EGL_NOT_INITIALIZED: return "NOT INITIALIZED"; + case EGL_BAD_ACCESS: return "BAD ACCESS"; + case EGL_BAD_ALLOC: return "BAD ALLOC"; + case EGL_BAD_ATTRIBUTE: return "BAD_ATTRIBUTE"; + case EGL_BAD_CONFIG: return "BAD CONFIG"; + case EGL_BAD_CONTEXT: return "BAD CONTEXT"; + case EGL_BAD_CURRENT_SURFACE: return "BAD CURRENT SURFACE"; + case EGL_BAD_DISPLAY: return "BAD DISPLAY"; + case EGL_BAD_MATCH: return "BAD MATCH"; + case EGL_BAD_NATIVE_PIXMAP: return "BAD NATIVE PIXMAP"; + case EGL_BAD_NATIVE_WINDOW: return "BAD NATIVE WINDOW"; + case EGL_BAD_PARAMETER: return "BAD PARAMETER"; + case EGL_BAD_SURFACE: return "BAD_SURFACE"; +// case EGL_CONTEXT_LOST: return "CONTEXT LOST"; + default: return "UNKNOWN"; + } +} + +void egl_error(const char *name) +{ + unsigned err = eglGetError(); + if(err != EGL_SUCCESS) { + fprintf(stderr,"%s(): egl error 0x%x (%s)\n", + name, err, egl_strerror(err)); + } +} + +static void checkGLErrors() +{ + GLenum error = glGetError(); + if (error != GL_NO_ERROR) + fprintf(stderr, "GL Error: 0x%04x\n", (int)error); +} + + +static void checkEGLErrors() +{ + EGLint error = eglGetError(); + // GLESonGL seems to be returning 0 when there is no errors? + if (error && error != EGL_SUCCESS) + fprintf(stderr, "EGL Error: 0x%04x\n", (int)error); +} + +static int initGraphics() +{ + EGLint s_configAttribs[] = { + EGL_RED_SIZE, 5, + EGL_GREEN_SIZE, 6, + EGL_BLUE_SIZE, 5, + #if 1 + EGL_DEPTH_SIZE, 16, + EGL_STENCIL_SIZE, 0, + #else + EGL_ALPHA_SIZE, EGL_DONT_CARE, + EGL_DEPTH_SIZE, EGL_DONT_CARE, + EGL_STENCIL_SIZE, EGL_DONT_CARE, + EGL_SURFACE_TYPE, EGL_DONT_CARE, + #endif + EGL_NONE + }; + + EGLint numConfigs = -1; + EGLint majorVersion; + EGLint minorVersion; + EGLConfig config; + EGLContext context; + EGLSurface surface; + + EGLDisplay dpy; + + dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + egl_error("eglGetDisplay"); + fprintf(stderr,"dpy = 0x%08x\n", (unsigned) dpy); + + eglInitialize(dpy, &majorVersion, &minorVersion); + egl_error("eglInitialize"); + + eglGetConfigs(dpy, NULL, 0, &numConfigs); + egl_error("eglGetConfigs"); + fprintf(stderr,"num configs %d\n", numConfigs); + + eglChooseConfig(dpy, s_configAttribs, &config, 1, &numConfigs); + egl_error("eglChooseConfig"); + + surface = eglCreateWindowSurface(dpy, config, + android_createDisplaySurface(), NULL); + egl_error("eglMapWindowSurface"); + + fprintf(stderr,"surface = %p\n", surface); + + context = eglCreateContext(dpy, config, NULL, NULL); + egl_error("eglCreateContext"); + fprintf(stderr,"context = %p\n", context); + + eglMakeCurrent(dpy, surface, surface, context); + egl_error("eglMakeCurrent"); + + eglQuerySurface(dpy, surface, EGL_WIDTH, &sWindowWidth); + eglQuerySurface(dpy, surface, EGL_HEIGHT, &sWindowHeight); + + sEglDisplay = dpy; + sEglSurface = surface; + sEglContext = context; + + return EGL_TRUE; +} + + +static void deinitGraphics() +{ + eglMakeCurrent(sEglDisplay, NULL, NULL, NULL); + eglDestroyContext(sEglDisplay, sEglContext); + eglDestroySurface(sEglDisplay, sEglSurface); + eglTerminate(sEglDisplay); +} + + +int main(int argc, char *argv[]) +{ + // not referenced: + argc = argc; + argv = argv; + + if (!initGraphics()) + { + fprintf(stderr, "Graphics initialization failed.\n"); + return EXIT_FAILURE; + } + + appInit(); + + while (gAppAlive) + { + struct timeval timeNow; + + if (gAppAlive) + { + gettimeofday(&timeNow, NULL); + appRender(timeNow.tv_sec * 1000 + timeNow.tv_usec / 1000, + sWindowWidth, sWindowHeight); + checkGLErrors(); + eglSwapBuffers(sEglDisplay, sEglSurface); + checkEGLErrors(); + } + } + + appDeinit(); + deinitGraphics(); + + return EXIT_SUCCESS; +} diff --git a/opengl/tests/angeles/app.h b/opengl/tests/angeles/app.h new file mode 100644 index 0000000000..70ebd35be1 --- /dev/null +++ b/opengl/tests/angeles/app.h @@ -0,0 +1,56 @@ +/* San Angeles Observation OpenGL ES version example + * Copyright 2004-2005 Jetro Lauha + * All rights reserved. + * Web: http://iki.fi/jetro/ + * + * This source is free software; you can redistribute it and/or + * modify it under the terms of EITHER: + * (1) The GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at + * your option) any later version. The text of the GNU Lesser + * General Public License is included with this source in the + * file LICENSE-LGPL.txt. + * (2) The BSD-style license that is included with this source in + * the file LICENSE-BSD.txt. + * + * This source is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files + * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. + * + * $Id: app.h,v 1.14 2005/02/06 21:13:54 tonic Exp $ + * $Revision: 1.14 $ + */ + +#ifndef APP_H_INCLUDED +#define APP_H_INCLUDED + + +#ifdef __cplusplus +extern "C" { +#endif + + +#define WINDOW_DEFAULT_WIDTH 640 +#define WINDOW_DEFAULT_HEIGHT 480 + +#define WINDOW_BPP 16 + + +// The simple framework expects the application code to define these functions. +extern void appInit(); +extern void appDeinit(); +extern void appRender(long tick, int width, int height); + +/* Value is non-zero when application is alive, and 0 when it is closing. + * Defined by the application framework. + */ +extern int gAppAlive; + + +#ifdef __cplusplus +} +#endif + + +#endif // !APP_H_INCLUDED diff --git a/opengl/tests/angeles/cams.h b/opengl/tests/angeles/cams.h new file mode 100644 index 0000000000..2b1acb3c35 --- /dev/null +++ b/opengl/tests/angeles/cams.h @@ -0,0 +1,65 @@ +/* San Angeles Observation OpenGL ES version example + * Copyright 2004-2005 Jetro Lauha + * All rights reserved. + * Web: http://iki.fi/jetro/ + * + * This source is free software; you can redistribute it and/or + * modify it under the terms of EITHER: + * (1) The GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at + * your option) any later version. The text of the GNU Lesser + * General Public License is included with this source in the + * file LICENSE-LGPL.txt. + * (2) The BSD-style license that is included with this source in + * the file LICENSE-BSD.txt. + * + * This source is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files + * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. + * + * $Id: cams.h,v 1.7 2005/01/31 22:15:15 tonic Exp $ + * $Revision: 1.7 $ + */ + +#ifndef CAMS_H_INCLUDED +#define CAMS_H_INCLUDED + + +/* Length in milliseconds of one camera track base unit. + * The value originates from the music synchronization. + */ +#define CAMTRACK_LEN 5442 + + +// Camera track definition for one camera trucking shot. +typedef struct +{ + /* Five parameters of src[5] and dest[5]: + * eyeX, eyeY, eyeZ, viewAngle, viewHeightOffs + */ + short src[5], dest[5]; + unsigned char dist; // if >0, cam rotates around eye xy on dist * 0.1 + unsigned char len; // length multiplier +} CAMTRACK; + +static CAMTRACK sCamTracks[] = +{ + { { 4500, 2700, 100, 70, -30 }, { 50, 50, -90, -100, 0 }, 20, 1 }, + { { -1448, 4294, 25, 363, 0 }, { -136, 202, 125, -98, 100 }, 0, 1 }, + { { 1437, 4930, 200, -275, -20 }, { 1684, 0, 0, 9, 0 }, 0, 1 }, + { { 1800, 3609, 200, 0, 675 }, { 0, 0, 0, 300, 0 }, 0, 1 }, + { { 923, 996, 50, 2336, -80 }, { 0, -20, -50, 0, 170 }, 0, 1 }, + { { -1663, -43, 600, 2170, 0 }, { 20, 0, -600, 0, 100 }, 0, 1 }, + { { 1049, -1420, 175, 2111, -17 }, { 0, 0, 0, -334, 0 }, 0, 2 }, + { { 0, 0, 50, 300, 25 }, { 0, 0, 0, 300, 0 }, 70, 2 }, + { { -473, -953, 3500, -353, -350 }, { 0, 0, -2800, 0, 0 }, 0, 2 }, + { { 191, 1938, 35, 1139, -17 }, { 1205, -2909, 0, 0, 0 }, 0, 2 }, + { { -1449, -2700, 150, 0, 0 }, { 0, 2000, 0, 0, 0 }, 0, 2 }, + { { 5273, 4992, 650, 373, -50 }, { -4598, -3072, 0, 0, 0 }, 0, 2 }, + { { 3223, -3282, 1075, -393, -25 }, { 1649, -1649, 0, 0, 0 }, 0, 2 } +}; +#define CAMTRACK_COUNT (sizeof(camTracks) / sizeof(camTracks[0])) + + +#endif // !CAMS_H_INCLUDED diff --git a/opengl/tests/angeles/demo.c b/opengl/tests/angeles/demo.c new file mode 100644 index 0000000000..802f3980fa --- /dev/null +++ b/opengl/tests/angeles/demo.c @@ -0,0 +1,792 @@ +/* San Angeles Observation OpenGL ES version example + * Copyright 2004-2005 Jetro Lauha + * All rights reserved. + * Web: http://iki.fi/jetro/ + * + * This source is free software; you can redistribute it and/or + * modify it under the terms of EITHER: + * (1) The GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at + * your option) any later version. The text of the GNU Lesser + * General Public License is included with this source in the + * file LICENSE-LGPL.txt. + * (2) The BSD-style license that is included with this source in + * the file LICENSE-BSD.txt. + * + * This source is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files + * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. + * + * $Id: demo.c,v 1.10 2005/02/08 20:54:39 tonic Exp $ + * $Revision: 1.10 $ + */ + +#include +#include +#include +#include + +#include + +#include "app.h" +#include "shapes.h" +#include "cams.h" + + +// Total run length is 20 * camera track base unit length (see cams.h). +#define RUN_LENGTH (20 * CAMTRACK_LEN) +#undef PI +#define PI 3.1415926535897932f +#define RANDOM_UINT_MAX 65535 + + +static unsigned long sRandomSeed = 0; + +static void seedRandom(unsigned long seed) +{ + sRandomSeed = seed; +} + +static unsigned long randomUInt() +{ + sRandomSeed = sRandomSeed * 0x343fd + 0x269ec3; + return sRandomSeed >> 16; +} + + +// Capped conversion from float to fixed. +static long floatToFixed(float value) +{ + if (value < -32768) value = -32768; + if (value > 32767) value = 32767; + return (long)(value * 65536); +} + +#define FIXED(value) floatToFixed(value) + + +// Definition of one GL object in this demo. +typedef struct { + /* Vertex array and color array are enabled for all objects, so their + * pointers must always be valid and non-NULL. Normal array is not + * used by the ground plane, so when its pointer is NULL then normal + * array usage is disabled. + * + * Vertex array is supposed to use GL_FIXED datatype and stride 0 + * (i.e. tightly packed array). Color array is supposed to have 4 + * components per color with GL_UNSIGNED_BYTE datatype and stride 0. + * Normal array is supposed to use GL_FIXED datatype and stride 0. + */ + GLfixed *vertexArray; + GLubyte *colorArray; + GLfixed *normalArray; + GLint vertexComponents; + GLsizei count; +} GLOBJECT; + + +static long sStartTick = 0; +static long sTick = 0; + +static int sCurrentCamTrack = 0; +static long sCurrentCamTrackStartTick = 0; +static long sNextCamTrackStartTick = 0x7fffffff; + +static GLOBJECT *sSuperShapeObjects[SUPERSHAPE_COUNT] = { NULL }; +static GLOBJECT *sGroundPlane = NULL; + + +typedef struct { + float x, y, z; +} VECTOR3; + + +static void freeGLObject(GLOBJECT *object) +{ + if (object == NULL) + return; + free(object->normalArray); + free(object->colorArray); + free(object->vertexArray); + free(object); +} + + +static GLOBJECT * newGLObject(long vertices, int vertexComponents, + int useNormalArray) +{ + GLOBJECT *result; + result = (GLOBJECT *)malloc(sizeof(GLOBJECT)); + if (result == NULL) + return NULL; + result->count = vertices; + result->vertexComponents = vertexComponents; + result->vertexArray = (GLfixed *)malloc(vertices * vertexComponents * + sizeof(GLfixed)); + result->colorArray = (GLubyte *)malloc(vertices * 4 * sizeof(GLubyte)); + if (useNormalArray) + { + result->normalArray = (GLfixed *)malloc(vertices * 3 * + sizeof(GLfixed)); + } + else + result->normalArray = NULL; + if (result->vertexArray == NULL || + result->colorArray == NULL || + (useNormalArray && result->normalArray == NULL)) + { + freeGLObject(result); + return NULL; + } + return result; +} + + +static void drawGLObject(GLOBJECT *object) +{ + assert(object != NULL); + + glVertexPointer(object->vertexComponents, GL_FIXED, + 0, object->vertexArray); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, object->colorArray); + + // Already done in initialization: + //glEnableClientState(GL_VERTEX_ARRAY); + //glEnableClientState(GL_COLOR_ARRAY); + + if (object->normalArray) + { + glNormalPointer(GL_FIXED, 0, object->normalArray); + glEnableClientState(GL_NORMAL_ARRAY); + } + else + glDisableClientState(GL_NORMAL_ARRAY); + glDrawArrays(GL_TRIANGLES, 0, object->count); +} + + +static void vector3Sub(VECTOR3 *dest, VECTOR3 *v1, VECTOR3 *v2) +{ + dest->x = v1->x - v2->x; + dest->y = v1->y - v2->y; + dest->z = v1->z - v2->z; +} + + +static void superShapeMap(VECTOR3 *point, float r1, float r2, float t, float p) +{ + // sphere-mapping of supershape parameters + point->x = (float)(cos(t) * cos(p) / r1 / r2); + point->y = (float)(sin(t) * cos(p) / r1 / r2); + point->z = (float)(sin(p) / r2); +} + + +static float ssFunc(const float t, const float *p) +{ + return (float)(pow(pow(fabs(cos(p[0] * t / 4)) / p[1], p[4]) + + pow(fabs(sin(p[0] * t / 4)) / p[2], p[5]), 1 / p[3])); +} + + +// Creates and returns a supershape object. +// Based on Paul Bourke's POV-Ray implementation. +// http://astronomy.swin.edu.au/~pbourke/povray/supershape/ +static GLOBJECT * createSuperShape(const float *params) +{ + const int resol1 = (int)params[SUPERSHAPE_PARAMS - 3]; + const int resol2 = (int)params[SUPERSHAPE_PARAMS - 2]; + // latitude 0 to pi/2 for no mirrored bottom + // (latitudeBegin==0 for -pi/2 to pi/2 originally) + const int latitudeBegin = resol2 / 4; + const int latitudeEnd = resol2 / 2; // non-inclusive + const int longitudeCount = resol1; + const int latitudeCount = latitudeEnd - latitudeBegin; + const long triangleCount = longitudeCount * latitudeCount * 2; + const long vertices = triangleCount * 3; + GLOBJECT *result; + float baseColor[3]; + int a, longitude, latitude; + long currentVertex, currentQuad; + + result = newGLObject(vertices, 3, 1); + if (result == NULL) + return NULL; + + for (a = 0; a < 3; ++a) + baseColor[a] = ((randomUInt() % 155) + 100) / 255.f; + + currentQuad = 0; + currentVertex = 0; + + // longitude -pi to pi + for (longitude = 0; longitude < longitudeCount; ++longitude) + { + + // latitude 0 to pi/2 + for (latitude = latitudeBegin; latitude < latitudeEnd; ++latitude) + { + float t1 = -PI + longitude * 2 * PI / resol1; + float t2 = -PI + (longitude + 1) * 2 * PI / resol1; + float p1 = -PI / 2 + latitude * 2 * PI / resol2; + float p2 = -PI / 2 + (latitude + 1) * 2 * PI / resol2; + float r0, r1, r2, r3; + + r0 = ssFunc(t1, params); + r1 = ssFunc(p1, ¶ms[6]); + r2 = ssFunc(t2, params); + r3 = ssFunc(p2, ¶ms[6]); + + if (r0 != 0 && r1 != 0 && r2 != 0 && r3 != 0) + { + VECTOR3 pa, pb, pc, pd; + VECTOR3 v1, v2, n; + float ca; + int i; + //float lenSq, invLenSq; + + superShapeMap(&pa, r0, r1, t1, p1); + superShapeMap(&pb, r2, r1, t2, p1); + superShapeMap(&pc, r2, r3, t2, p2); + superShapeMap(&pd, r0, r3, t1, p2); + + // kludge to set lower edge of the object to fixed level + if (latitude == latitudeBegin + 1) + pa.z = pb.z = 0; + + vector3Sub(&v1, &pb, &pa); + vector3Sub(&v2, &pd, &pa); + + // Calculate normal with cross product. + /* i j k i j + * v1.x v1.y v1.z | v1.x v1.y + * v2.x v2.y v2.z | v2.x v2.y + */ + + n.x = v1.y * v2.z - v1.z * v2.y; + n.y = v1.z * v2.x - v1.x * v2.z; + n.z = v1.x * v2.y - v1.y * v2.x; + + /* Pre-normalization of the normals is disabled here because + * they will be normalized anyway later due to automatic + * normalization (GL_NORMALIZE). It is enabled because the + * objects are scaled with glScale. + */ + /* + lenSq = n.x * n.x + n.y * n.y + n.z * n.z; + invLenSq = (float)(1 / sqrt(lenSq)); + n.x *= invLenSq; + n.y *= invLenSq; + n.z *= invLenSq; + */ + + ca = pa.z + 0.5f; + + for (i = currentVertex * 3; + i < (currentVertex + 6) * 3; + i += 3) + { + result->normalArray[i] = FIXED(n.x); + result->normalArray[i + 1] = FIXED(n.y); + result->normalArray[i + 2] = FIXED(n.z); + } + for (i = currentVertex * 4; + i < (currentVertex + 6) * 4; + i += 4) + { + int a, color[3]; + for (a = 0; a < 3; ++a) + { + color[a] = (int)(ca * baseColor[a] * 255); + if (color[a] > 255) color[a] = 255; + } + result->colorArray[i] = (GLubyte)color[0]; + result->colorArray[i + 1] = (GLubyte)color[1]; + result->colorArray[i + 2] = (GLubyte)color[2]; + result->colorArray[i + 3] = 0; + } + result->vertexArray[currentVertex * 3] = FIXED(pa.x); + result->vertexArray[currentVertex * 3 + 1] = FIXED(pa.y); + result->vertexArray[currentVertex * 3 + 2] = FIXED(pa.z); + ++currentVertex; + result->vertexArray[currentVertex * 3] = FIXED(pb.x); + result->vertexArray[currentVertex * 3 + 1] = FIXED(pb.y); + result->vertexArray[currentVertex * 3 + 2] = FIXED(pb.z); + ++currentVertex; + result->vertexArray[currentVertex * 3] = FIXED(pd.x); + result->vertexArray[currentVertex * 3 + 1] = FIXED(pd.y); + result->vertexArray[currentVertex * 3 + 2] = FIXED(pd.z); + ++currentVertex; + result->vertexArray[currentVertex * 3] = FIXED(pb.x); + result->vertexArray[currentVertex * 3 + 1] = FIXED(pb.y); + result->vertexArray[currentVertex * 3 + 2] = FIXED(pb.z); + ++currentVertex; + result->vertexArray[currentVertex * 3] = FIXED(pc.x); + result->vertexArray[currentVertex * 3 + 1] = FIXED(pc.y); + result->vertexArray[currentVertex * 3 + 2] = FIXED(pc.z); + ++currentVertex; + result->vertexArray[currentVertex * 3] = FIXED(pd.x); + result->vertexArray[currentVertex * 3 + 1] = FIXED(pd.y); + result->vertexArray[currentVertex * 3 + 2] = FIXED(pd.z); + ++currentVertex; + } // r0 && r1 && r2 && r3 + ++currentQuad; + } // latitude + } // longitude + + // Set number of vertices in object to the actual amount created. + result->count = currentVertex; + + return result; +} + + +static GLOBJECT * createGroundPlane() +{ + const int scale = 4; + const int yBegin = -15, yEnd = 15; // ends are non-inclusive + const int xBegin = -15, xEnd = 15; + const long triangleCount = (yEnd - yBegin) * (xEnd - xBegin) * 2; + const long vertices = triangleCount * 3; + GLOBJECT *result; + int x, y; + long currentVertex, currentQuad; + + result = newGLObject(vertices, 2, 0); + if (result == NULL) + return NULL; + + currentQuad = 0; + currentVertex = 0; + + for (y = yBegin; y < yEnd; ++y) + { + for (x = xBegin; x < xEnd; ++x) + { + GLubyte color; + int i, a; + color = (GLubyte)((randomUInt() & 0x5f) + 81); // 101 1111 + for (i = currentVertex * 4; i < (currentVertex + 6) * 4; i += 4) + { + result->colorArray[i] = color; + result->colorArray[i + 1] = color; + result->colorArray[i + 2] = color; + result->colorArray[i + 3] = 0; + } + + // Axis bits for quad triangles: + // x: 011100 (0x1c), y: 110001 (0x31) (clockwise) + // x: 001110 (0x0e), y: 100011 (0x23) (counter-clockwise) + for (a = 0; a < 6; ++a) + { + const int xm = x + ((0x1c >> a) & 1); + const int ym = y + ((0x31 >> a) & 1); + const float m = (float)(cos(xm * 2) * sin(ym * 4) * 0.75f); + result->vertexArray[currentVertex * 2] = + FIXED(xm * scale + m); + result->vertexArray[currentVertex * 2 + 1] = + FIXED(ym * scale + m); + ++currentVertex; + } + ++currentQuad; + } + } + return result; +} + + +static void drawGroundPlane() +{ + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + glEnable(GL_BLEND); + glBlendFunc(GL_ZERO, GL_SRC_COLOR); + glDisable(GL_LIGHTING); + + drawGLObject(sGroundPlane); + + glEnable(GL_LIGHTING); + glDisable(GL_BLEND); + glEnable(GL_DEPTH_TEST); +} + + +static void drawFadeQuad() +{ + static const GLfixed quadVertices[] = { + -0x10000, -0x10000, + 0x10000, -0x10000, + -0x10000, 0x10000, + 0x10000, -0x10000, + 0x10000, 0x10000, + -0x10000, 0x10000 + }; + + const int beginFade = sTick - sCurrentCamTrackStartTick; + const int endFade = sNextCamTrackStartTick - sTick; + const int minFade = beginFade < endFade ? beginFade : endFade; + + if (minFade < 1024) + { + const GLfixed fadeColor = minFade << 6; + glColor4x(fadeColor, fadeColor, fadeColor, 0); + + glDisable(GL_DEPTH_TEST); + glEnable(GL_BLEND); + glBlendFunc(GL_ZERO, GL_SRC_COLOR); + glDisable(GL_LIGHTING); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + glVertexPointer(2, GL_FIXED, 0, quadVertices); + glDrawArrays(GL_TRIANGLES, 0, 6); + + glEnableClientState(GL_COLOR_ARRAY); + + glMatrixMode(GL_MODELVIEW); + + glEnable(GL_LIGHTING); + glDisable(GL_BLEND); + glEnable(GL_DEPTH_TEST); + } +} + + +// Called from the app framework. +void appInit() +{ + int a; + + glEnable(GL_NORMALIZE); + glEnable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + glShadeModel(GL_FLAT); + + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glEnable(GL_LIGHT1); + glEnable(GL_LIGHT2); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + seedRandom(15); + + for (a = 0; a < SUPERSHAPE_COUNT; ++a) + { + sSuperShapeObjects[a] = createSuperShape(sSuperShapeParams[a]); + assert(sSuperShapeObjects[a] != NULL); + } + sGroundPlane = createGroundPlane(); + assert(sGroundPlane != NULL); +} + + +// Called from the app framework. +void appDeinit() +{ + int a; + for (a = 0; a < SUPERSHAPE_COUNT; ++a) + freeGLObject(sSuperShapeObjects[a]); + freeGLObject(sGroundPlane); +} + + +static void gluPerspective(GLfloat fovy, GLfloat aspect, + GLfloat zNear, GLfloat zFar) +{ + GLfloat xmin, xmax, ymin, ymax; + + ymax = zNear * (GLfloat)tan(fovy * PI / 360); + ymin = -ymax; + xmin = ymin * aspect; + xmax = ymax * aspect; + + glFrustumx((GLfixed)(xmin * 65536), (GLfixed)(xmax * 65536), + (GLfixed)(ymin * 65536), (GLfixed)(ymax * 65536), + (GLfixed)(zNear * 65536), (GLfixed)(zFar * 65536)); +} + + +static void prepareFrame(int width, int height) +{ + glViewport(0, 0, width, height); + + glClearColorx((GLfixed)(0.1f * 65536), + (GLfixed)(0.2f * 65536), + (GLfixed)(0.3f * 65536), 0x10000); + glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45, (float)width / height, 0.5f, 150); + + glMatrixMode(GL_MODELVIEW); + + glLoadIdentity(); +} + + +static void configureLightAndMaterial() +{ + static GLfixed light0Position[] = { -0x40000, 0x10000, 0x10000, 0 }; + static GLfixed light0Diffuse[] = { 0x10000, 0x6666, 0, 0x10000 }; + static GLfixed light1Position[] = { 0x10000, -0x20000, -0x10000, 0 }; + static GLfixed light1Diffuse[] = { 0x11eb, 0x23d7, 0x5999, 0x10000 }; + static GLfixed light2Position[] = { -0x10000, 0, -0x40000, 0 }; + static GLfixed light2Diffuse[] = { 0x11eb, 0x2b85, 0x23d7, 0x10000 }; + static GLfixed materialSpecular[] = { 0x10000, 0x10000, 0x10000, 0x10000 }; + + glLightxv(GL_LIGHT0, GL_POSITION, light0Position); + glLightxv(GL_LIGHT0, GL_DIFFUSE, light0Diffuse); + glLightxv(GL_LIGHT1, GL_POSITION, light1Position); + glLightxv(GL_LIGHT1, GL_DIFFUSE, light1Diffuse); + glLightxv(GL_LIGHT2, GL_POSITION, light2Position); + glLightxv(GL_LIGHT2, GL_DIFFUSE, light2Diffuse); + glMaterialxv(GL_FRONT_AND_BACK, GL_SPECULAR, materialSpecular); + + glMaterialx(GL_FRONT_AND_BACK, GL_SHININESS, 60 << 16); + glEnable(GL_COLOR_MATERIAL); +} + + +static void drawModels(float zScale) +{ + const int translationScale = 9; + int x, y; + + seedRandom(9); + + glScalex(1 << 16, 1 << 16, (GLfixed)(zScale * 65536)); + + for (y = -5; y <= 5; ++y) + { + for (x = -5; x <= 5; ++x) + { + float buildingScale; + GLfixed fixedScale; + + int curShape = randomUInt() % SUPERSHAPE_COUNT; + buildingScale = sSuperShapeParams[curShape][SUPERSHAPE_PARAMS - 1]; + fixedScale = (GLfixed)(buildingScale * 65536); + + glPushMatrix(); + glTranslatex((x * translationScale) * 65536, + (y * translationScale) * 65536, + 0); + glRotatex((GLfixed)((randomUInt() % 360) << 16), 0, 0, 1 << 16); + glScalex(fixedScale, fixedScale, fixedScale); + + drawGLObject(sSuperShapeObjects[curShape]); + glPopMatrix(); + } + } + + for (x = -2; x <= 2; ++x) + { + const int shipScale100 = translationScale * 500; + const int offs100 = x * shipScale100 + (sTick % shipScale100); + float offs = offs100 * 0.01f; + GLfixed fixedOffs = (GLfixed)(offs * 65536); + glPushMatrix(); + glTranslatex(fixedOffs, -4 * 65536, 2 << 16); + drawGLObject(sSuperShapeObjects[SUPERSHAPE_COUNT - 1]); + glPopMatrix(); + glPushMatrix(); + glTranslatex(-4 * 65536, fixedOffs, 4 << 16); + glRotatex(90 << 16, 0, 0, 1 << 16); + drawGLObject(sSuperShapeObjects[SUPERSHAPE_COUNT - 1]); + glPopMatrix(); + } +} + + +/* Following gluLookAt implementation is adapted from the + * Mesa 3D Graphics library. http://www.mesa3d.org + */ +static void gluLookAt(GLfloat eyex, GLfloat eyey, GLfloat eyez, + GLfloat centerx, GLfloat centery, GLfloat centerz, + GLfloat upx, GLfloat upy, GLfloat upz) +{ + GLfloat m[16]; + GLfloat x[3], y[3], z[3]; + GLfloat mag; + + /* Make rotation matrix */ + + /* Z vector */ + z[0] = eyex - centerx; + z[1] = eyey - centery; + z[2] = eyez - centerz; + mag = (float)sqrt(z[0] * z[0] + z[1] * z[1] + z[2] * z[2]); + if (mag) { /* mpichler, 19950515 */ + z[0] /= mag; + z[1] /= mag; + z[2] /= mag; + } + + /* Y vector */ + y[0] = upx; + y[1] = upy; + y[2] = upz; + + /* X vector = Y cross Z */ + x[0] = y[1] * z[2] - y[2] * z[1]; + x[1] = -y[0] * z[2] + y[2] * z[0]; + x[2] = y[0] * z[1] - y[1] * z[0]; + + /* Recompute Y = Z cross X */ + y[0] = z[1] * x[2] - z[2] * x[1]; + y[1] = -z[0] * x[2] + z[2] * x[0]; + y[2] = z[0] * x[1] - z[1] * x[0]; + + /* mpichler, 19950515 */ + /* cross product gives area of parallelogram, which is < 1.0 for + * non-perpendicular unit-length vectors; so normalize x, y here + */ + + mag = (float)sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]); + if (mag) { + x[0] /= mag; + x[1] /= mag; + x[2] /= mag; + } + + mag = (float)sqrt(y[0] * y[0] + y[1] * y[1] + y[2] * y[2]); + if (mag) { + y[0] /= mag; + y[1] /= mag; + y[2] /= mag; + } + +#define M(row,col) m[col*4+row] + M(0, 0) = x[0]; + M(0, 1) = x[1]; + M(0, 2) = x[2]; + M(0, 3) = 0.0; + M(1, 0) = y[0]; + M(1, 1) = y[1]; + M(1, 2) = y[2]; + M(1, 3) = 0.0; + M(2, 0) = z[0]; + M(2, 1) = z[1]; + M(2, 2) = z[2]; + M(2, 3) = 0.0; + M(3, 0) = 0.0; + M(3, 1) = 0.0; + M(3, 2) = 0.0; + M(3, 3) = 1.0; +#undef M + { + int a; + GLfixed fixedM[16]; + for (a = 0; a < 16; ++a) + fixedM[a] = (GLfixed)(m[a] * 65536); + glMultMatrixx(fixedM); + } + + /* Translate Eye to Origin */ + glTranslatex((GLfixed)(-eyex * 65536), + (GLfixed)(-eyey * 65536), + (GLfixed)(-eyez * 65536)); +} + + +static void camTrack() +{ + float lerp[5]; + float eX, eY, eZ, cX, cY, cZ; + float trackPos; + CAMTRACK *cam; + long currentCamTick; + int a; + + if (sNextCamTrackStartTick <= sTick) + { + ++sCurrentCamTrack; + sCurrentCamTrackStartTick = sNextCamTrackStartTick; + } + sNextCamTrackStartTick = sCurrentCamTrackStartTick + + sCamTracks[sCurrentCamTrack].len * CAMTRACK_LEN; + + cam = &sCamTracks[sCurrentCamTrack]; + currentCamTick = sTick - sCurrentCamTrackStartTick; + trackPos = (float)currentCamTick / (CAMTRACK_LEN * cam->len); + + for (a = 0; a < 5; ++a) + lerp[a] = (cam->src[a] + cam->dest[a] * trackPos) * 0.01f; + + if (cam->dist) + { + float dist = cam->dist * 0.1f; + cX = lerp[0]; + cY = lerp[1]; + cZ = lerp[2]; + eX = cX - (float)cos(lerp[3]) * dist; + eY = cY - (float)sin(lerp[3]) * dist; + eZ = cZ - lerp[4]; + } + else + { + eX = lerp[0]; + eY = lerp[1]; + eZ = lerp[2]; + cX = eX + (float)cos(lerp[3]); + cY = eY + (float)sin(lerp[3]); + cZ = eZ + lerp[4]; + } + gluLookAt(eX, eY, eZ, cX, cY, cZ, 0, 0, 1); +} + + +// Called from the app framework. +/* The tick is current time in milliseconds, width and height + * are the image dimensions to be rendered. + */ +void appRender(long tick, int width, int height) +{ + if (sStartTick == 0) + sStartTick = tick; + if (!gAppAlive) + return; + + // Actual tick value is "blurred" a little bit. + sTick = (sTick + tick - sStartTick) >> 1; + + // Terminate application after running through the demonstration once. + if (sTick >= RUN_LENGTH) + { + gAppAlive = 0; + return; + } + + // Prepare OpenGL ES for rendering of the frame. + prepareFrame(width, height); + + // Update the camera position and set the lookat. + camTrack(); + + // Configure environment. + configureLightAndMaterial(); + + // Draw the reflection by drawing models with negated Z-axis. + glPushMatrix(); + drawModels(-1); + glPopMatrix(); + + // Blend the ground plane to the window. + drawGroundPlane(); + + // Draw all the models normally. + drawModels(1); + + // Draw fade quad over whole window (when changing cameras). + drawFadeQuad(); +} diff --git a/opengl/tests/angeles/gpustate.c b/opengl/tests/angeles/gpustate.c new file mode 100644 index 0000000000..3c540c9ca5 --- /dev/null +++ b/opengl/tests/angeles/gpustate.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include + +static void *map_memory(const char *fn, unsigned base, unsigned size) +{ + int fd; + void *ptr; + + fd = open(fn, O_RDWR | O_SYNC); + if(fd < 0) { + perror("cannot open %s for mapping"); + return MAP_FAILED; + } + + ptr = mmap(0, size, PROT_READ | PROT_WRITE, + MAP_SHARED, fd, base); + close(fd); + + if(ptr == MAP_FAILED) { + fprintf(stderr,"cannot map %s (@%08x,%08x)\n", fn, base, size); + } + return ptr; +} + + +int main(int argc, char** argv) +{ + void *grp_regs = map_memory("/dev/hw3d", 0, 1024 * 1024); + printf("GPU base mapped at %p\n", grp_regs); + int state_offset = 0x10140; + printf("GPU state = %08lx\n", + *((long*)((char*)grp_regs + state_offset)) ); + + return 0; +} diff --git a/opengl/tests/angeles/include/GLES/egl.h b/opengl/tests/angeles/include/GLES/egl.h new file mode 100644 index 0000000000..cdf8410833 --- /dev/null +++ b/opengl/tests/angeles/include/GLES/egl.h @@ -0,0 +1,229 @@ +#ifndef __egl_h_ +#define __egl_h_ + +/* +** License Applicability. Except to the extent portions of this file are +** made subject to an alternative license as permitted in the SGI Free +** Software License B, Version 1.0 (the "License"), the contents of this +** file are subject only to the provisions of the License. You may not use +** this file except in compliance with the License. You may obtain a copy +** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 +** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: +** +** http://oss.sgi.com/projects/FreeB +** +** Note that, as provided in the License, the Software is distributed on an +** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS +** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND +** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A +** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. +** +** Original Code. The Original Code is: OpenGL Sample Implementation, +** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, +** Inc. The Original Code is Copyright (c) 1991-2004 Silicon Graphics, Inc. +** Copyright in any portions created by third parties is as indicated +** elsewhere herein. All Rights Reserved. +** +** Additional Notice Provisions: The application programming interfaces +** established by SGI in conjunction with the Original Code are The +** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released +** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version +** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X +** Window System(R) (Version 1.3), released October 19, 1998. This software +** was created using the OpenGL(R) version 1.2.1 Sample Implementation +** published by SGI, but has not been independently verified as being +** compliant with the OpenGL(R) version 1.2.1 Specification. +*/ + +#include +#include + +/* +** egltypes.h is platform dependent. It defines: +** +** - EGL types and resources +** - Native types +** - EGL and native handle values +** +** EGL types and resources are to be typedef'ed with appropriate platform +** dependent resource handle types. EGLint must be an integer of at least +** 32-bit. +** +** NativeDisplayType, NativeWindowType and NativePixmapType are to be +** replaced with corresponding types of the native window system in egl.h. +** +** EGL and native handle values must match their types. +** +** Example egltypes.h: +*/ + +#if 0 + +#include +#include + +/* +** Types and resources +*/ +typedef int EGLBoolean; +typedef int32_t EGLint; +typedef void *EGLDisplay; +typedef void *EGLConfig; +typedef void *EGLSurface; +typedef void *EGLContext; + +/* +** EGL and native handle values +*/ +#define EGL_DEFAULT_DISPLAY ((NativeDisplayType)0) +#define EGL_NO_CONTEXT ((EGLContext)0) +#define EGL_NO_DISPLAY ((EGLDisplay)0) +#define EGL_NO_SURFACE ((EGLSurface)0) + +#endif + +/* +** Versioning and extensions +*/ +#define EGL_VERSION_1_0 1 + +/* +** Boolean +*/ +#define EGL_FALSE 0 +#define EGL_TRUE 1 + +/* +** Errors +*/ +#define EGL_SUCCESS 0x3000 +#define EGL_NOT_INITIALIZED 0x3001 +#define EGL_BAD_ACCESS 0x3002 +#define EGL_BAD_ALLOC 0x3003 +#define EGL_BAD_ATTRIBUTE 0x3004 +#define EGL_BAD_CONFIG 0x3005 +#define EGL_BAD_CONTEXT 0x3006 +#define EGL_BAD_CURRENT_SURFACE 0x3007 +#define EGL_BAD_DISPLAY 0x3008 +#define EGL_BAD_MATCH 0x3009 +#define EGL_BAD_NATIVE_PIXMAP 0x300A +#define EGL_BAD_NATIVE_WINDOW 0x300B +#define EGL_BAD_PARAMETER 0x300C +#define EGL_BAD_SURFACE 0x300D +/* 0x300E - 0x301F reserved for additional errors. */ + +/* +** Config attributes +*/ +#define EGL_BUFFER_SIZE 0x3020 +#define EGL_ALPHA_SIZE 0x3021 +#define EGL_BLUE_SIZE 0x3022 +#define EGL_GREEN_SIZE 0x3023 +#define EGL_RED_SIZE 0x3024 +#define EGL_DEPTH_SIZE 0x3025 +#define EGL_STENCIL_SIZE 0x3026 +#define EGL_CONFIG_CAVEAT 0x3027 +#define EGL_CONFIG_ID 0x3028 +#define EGL_LEVEL 0x3029 +#define EGL_MAX_PBUFFER_HEIGHT 0x302A +#define EGL_MAX_PBUFFER_PIXELS 0x302B +#define EGL_MAX_PBUFFER_WIDTH 0x302C +#define EGL_NATIVE_RENDERABLE 0x302D +#define EGL_NATIVE_VISUAL_ID 0x302E +#define EGL_NATIVE_VISUAL_TYPE 0x302F +/*#define EGL_PRESERVED_RESOURCES 0x3030*/ +#define EGL_SAMPLES 0x3031 +#define EGL_SAMPLE_BUFFERS 0x3032 +#define EGL_SURFACE_TYPE 0x3033 +#define EGL_TRANSPARENT_TYPE 0x3034 +#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 +#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 +#define EGL_TRANSPARENT_RED_VALUE 0x3037 + +/* +** Config attribute and value +*/ +#define EGL_NONE 0x3038 +/* 0x3039 - 0x304F reserved for additional config attributes. */ + +/* +** Config values +*/ +#define EGL_DONT_CARE ((EGLint) -1) +#define EGL_PBUFFER_BIT 0x01 +#define EGL_PIXMAP_BIT 0x02 +#define EGL_WINDOW_BIT 0x04 +#define EGL_SLOW_CONFIG 0x3050 +#define EGL_NON_CONFORMANT_CONFIG 0x3051 +#define EGL_TRANSPARENT_RGB 0x3052 + +/* +** String names +*/ +#define EGL_VENDOR 0x3053 +#define EGL_VERSION 0x3054 +#define EGL_EXTENSIONS 0x3055 + +/* +** Surface attributes +*/ +#define EGL_HEIGHT 0x3056 +#define EGL_WIDTH 0x3057 +#define EGL_LARGEST_PBUFFER 0x3058 + +/* +** Current surfaces +*/ +#define EGL_DRAW 0x3059 +#define EGL_READ 0x305A + +/* +** Engines +*/ +#define EGL_CORE_NATIVE_ENGINE 0x305B + +/* 0x305C-0x3FFFF reserved for future use */ + +/* +** Functions +*/ +#ifdef __cplusplus +extern "C" { +#endif + +GLAPI EGLint APIENTRY eglGetError (void); + +GLAPI EGLDisplay APIENTRY eglGetDisplay (NativeDisplayType display); +GLAPI EGLBoolean APIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor); +GLAPI EGLBoolean APIENTRY eglTerminate (EGLDisplay dpy); +GLAPI const char * APIENTRY eglQueryString (EGLDisplay dpy, EGLint name); +GLAPI void (* APIENTRY eglGetProcAddress (const char *procname))(); + +GLAPI EGLBoolean APIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); +GLAPI EGLBoolean APIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); +GLAPI EGLBoolean APIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); + +GLAPI EGLSurface APIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list); +GLAPI EGLSurface APIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list); +GLAPI EGLSurface APIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); +GLAPI EGLBoolean APIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface); +GLAPI EGLBoolean APIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); + +GLAPI EGLContext APIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list); +GLAPI EGLBoolean APIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx); +GLAPI EGLBoolean APIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); +GLAPI EGLContext APIENTRY eglGetCurrentContext (void); +GLAPI EGLSurface APIENTRY eglGetCurrentSurface (EGLint readdraw); +GLAPI EGLDisplay APIENTRY eglGetCurrentDisplay (void); +GLAPI EGLBoolean APIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); + +GLAPI EGLBoolean APIENTRY eglWaitGL (void); +GLAPI EGLBoolean APIENTRY eglWaitNative (EGLint engine); +GLAPI EGLBoolean APIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface draw); +GLAPI EGLBoolean APIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, NativePixmapType target); + +#ifdef __cplusplus +} +#endif + +#endif /* ___egl_h_ */ diff --git a/opengl/tests/angeles/include/GLES/egltypes.h b/opengl/tests/angeles/include/GLES/egltypes.h new file mode 100644 index 0000000000..9db36c9876 --- /dev/null +++ b/opengl/tests/angeles/include/GLES/egltypes.h @@ -0,0 +1,20 @@ +/* +** Types and resources +*/ +typedef int EGLBoolean; +typedef long EGLint; +typedef void *EGLDisplay; +typedef void *EGLConfig; +typedef void *EGLSurface; +typedef void *EGLContext; +typedef void *NativeDisplayType; +typedef void *NativeWindowType; +typedef void *NativePixmapType; + +/* +** EGL and native handle values +*/ +#define EGL_DEFAULT_DISPLAY ((NativeDisplayType)0) +#define EGL_NO_CONTEXT ((EGLContext)0) +#define EGL_NO_DISPLAY ((EGLDisplay)0) +#define EGL_NO_SURFACE ((EGLSurface)0) diff --git a/opengl/tests/angeles/include/GLES/gl.h b/opengl/tests/angeles/include/GLES/gl.h new file mode 100644 index 0000000000..415482228d --- /dev/null +++ b/opengl/tests/angeles/include/GLES/gl.h @@ -0,0 +1,584 @@ +#ifndef __gl_h_ +#define __gl_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** License Applicability. Except to the extent portions of this file are +** made subject to an alternative license as permitted in the SGI Free +** Software License B, Version 1.0 (the "License"), the contents of this +** file are subject only to the provisions of the License. You may not use +** this file except in compliance with the License. You may obtain a copy +** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 +** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: +** +** http://oss.sgi.com/projects/FreeB +** +** Note that, as provided in the License, the Software is distributed on an +** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS +** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND +** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A +** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. +** +** Original Code. The Original Code is: OpenGL Sample Implementation, +** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, +** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. +** Copyright in any portions created by third parties is as indicated +** elsewhere herein. All Rights Reserved. +** +** Additional Notice Provisions: The application programming interfaces +** established by SGI in conjunction with the Original Code are The +** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released +** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version +** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X +** Window System(R) (Version 1.3), released October 19, 1998. This software +** was created using the OpenGL(R) version 1.2.1 Sample Implementation +** published by SGI, but has not been independently verified as being +** compliant with the OpenGL(R) version 1.2.1 Specification. +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) +#define WIN32_LEAN_AND_MEAN 1 +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef signed char GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLsizei; +typedef unsigned char GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef float GLfloat; +typedef float GLclampf; +typedef void GLvoid; +typedef int GLintptrARB; +typedef int GLsizeiptrARB; +typedef int GLfixed; +typedef int GLclampx; +/* Internal convenience typedefs */ +typedef void (*_GLfuncptr)(); + +/*************************************************************/ + +/* Extensions */ +#define GL_OES_VERSION_1_0 1 +#define GL_OES_read_format 1 +#define GL_OES_compressed_paletted_texture 1 + +/* ClearBufferMask */ +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 + +/* Boolean */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* BeginMode */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 + +/* AlphaFunction */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 + +/* BlendingFactorDest */ +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 + +/* BlendingFactorSrc */ +/* GL_ZERO */ +/* GL_ONE */ +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +/* GL_SRC_ALPHA */ +/* GL_ONE_MINUS_SRC_ALPHA */ +/* GL_DST_ALPHA */ +/* GL_ONE_MINUS_DST_ALPHA */ + +/* ColorMaterialFace */ +/* GL_FRONT_AND_BACK */ + +/* ColorMaterialParameter */ +/* GL_AMBIENT_AND_DIFFUSE */ + +/* ColorPointerType */ +/* GL_UNSIGNED_BYTE */ +/* GL_FLOAT */ +/* GL_FIXED */ + +/* CullFaceMode */ +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_FRONT_AND_BACK 0x0408 + +/* DepthFunction */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* EnableCap */ +#define GL_FOG 0x0B60 +#define GL_LIGHTING 0x0B50 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_CULL_FACE 0x0B44 +#define GL_ALPHA_TEST 0x0BC0 +#define GL_BLEND 0x0BE2 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_DITHER 0x0BD0 +#define GL_STENCIL_TEST 0x0B90 +#define GL_DEPTH_TEST 0x0B71 +/* GL_LIGHT0 */ +/* GL_LIGHT1 */ +/* GL_LIGHT2 */ +/* GL_LIGHT3 */ +/* GL_LIGHT4 */ +/* GL_LIGHT5 */ +/* GL_LIGHT6 */ +/* GL_LIGHT7 */ +#define GL_POINT_SMOOTH 0x0B10 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_NORMALIZE 0x0BA1 +#define GL_RESCALE_NORMAL 0x803A +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 + +/* ErrorCode */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 + +/* FogMode */ +/* GL_LINEAR */ +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 + +/* FogParameter */ +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_COLOR 0x0B66 + +/* FrontFaceDirection */ +#define GL_CW 0x0900 +#define GL_CCW 0x0901 + +/* GetPName */ +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 + +/* HintMode */ +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* HintTarget */ +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 + +/* LightModelParameter */ +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 + +/* LightParameter */ +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 + +/* DataType */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_FLOAT 0x1406 +#define GL_FIXED 0x140C + +/* LogicOp */ +#define GL_CLEAR 0x1500 +#define GL_AND 0x1501 +#define GL_AND_REVERSE 0x1502 +#define GL_COPY 0x1503 +#define GL_AND_INVERTED 0x1504 +#define GL_NOOP 0x1505 +#define GL_XOR 0x1506 +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_EQUIV 0x1509 +#define GL_INVERT 0x150A +#define GL_OR_REVERSE 0x150B +#define GL_COPY_INVERTED 0x150C +#define GL_OR_INVERTED 0x150D +#define GL_NAND 0x150E +#define GL_SET 0x150F + +/* MaterialFace */ +/* GL_FRONT_AND_BACK */ + +/* MaterialParameter */ +#define GL_EMISSION 0x1600 +#define GL_SHININESS 0x1601 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +/* GL_AMBIENT */ +/* GL_DIFFUSE */ +/* GL_SPECULAR */ + +/* MatrixMode */ +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +/* NormalPointerType */ +/* GL_BYTE */ +/* GL_SHORT */ +/* GL_FLOAT */ +/* GL_FIXED */ + +/* PixelFormat */ +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A + +/* PixelStoreParameter */ +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_ALIGNMENT 0x0D05 + +/* PixelType */ +/* GL_UNSIGNED_BYTE */ +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 + +/* ShadingModel */ +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 + +/* StencilFunction */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* StencilOp */ +/* GL_ZERO */ +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +/* GL_INVERT */ + +/* StringName */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* TexCoordPointerType */ +/* GL_SHORT */ +/* GL_FLOAT */ +/* GL_FIXED */ +/* GL_BYTE */ + +/* TextureEnvMode */ +#define GL_MODULATE 0x2100 +#define GL_DECAL 0x2101 +/* GL_BLEND */ +#define GL_ADD 0x0104 +/* GL_REPLACE */ + +/* TextureEnvParameter */ +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_ENV_COLOR 0x2201 + +/* TextureEnvTarget */ +#define GL_TEXTURE_ENV 0x2300 + +/* TextureMagFilter */ +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 + +/* TextureMinFilter */ +/* GL_NEAREST */ +/* GL_LINEAR */ +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 + +/* TextureParameterName */ +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 + +/* TextureTarget */ +/* GL_TEXTURE_2D */ + +/* TextureUnit */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF + +/* TextureWrapMode */ +#define GL_REPEAT 0x2901 +#define GL_CLAMP_TO_EDGE 0x812F + +/* PixelInternalFormat */ +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 + +/* VertexPointerType */ +/* GL_SHORT */ +/* GL_FLOAT */ +/* GL_FIXED */ +/* GL_BYTE */ + +/* LightName */ +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 + + +/*************************************************************/ + +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glAlphaFunc (GLenum func, GLclampf ref); +GLAPI void APIENTRY glAlphaFuncx (GLenum func, GLclampx ref); +GLAPI void APIENTRY glBindTexture (GLenum target, GLuint texture); +GLAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GLAPI void APIENTRY glClear (GLbitfield mask); +GLAPI void APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GLAPI void APIENTRY glClearColorx (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); +GLAPI void APIENTRY glClearDepthf (GLclampf depth); +GLAPI void APIENTRY glClearDepthx (GLclampx depth); +GLAPI void APIENTRY glClearStencil (GLint s); +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glColor4x (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GLAPI void APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCullFace (GLenum mode); +GLAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glDepthFunc (GLenum func); +GLAPI void APIENTRY glDepthMask (GLboolean flag); +GLAPI void APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); +GLAPI void APIENTRY glDepthRangex (GLclampx zNear, GLclampx zFar); +GLAPI void APIENTRY glDisable (GLenum cap); +GLAPI void APIENTRY glDisableClientState (GLenum array); +GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); +GLAPI void APIENTRY glEnable (GLenum cap); +GLAPI void APIENTRY glEnableClientState (GLenum array); +GLAPI void APIENTRY glFinish (void); +GLAPI void APIENTRY glFlush (void); +GLAPI void APIENTRY glFogf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFogfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFogx (GLenum pname, GLfixed param); +GLAPI void APIENTRY glFogxv (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glFrontFace (GLenum mode); +GLAPI void APIENTRY glFrustumf (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); +GLAPI void APIENTRY glFrustumx (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); +GLAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures); +GLAPI GLenum APIENTRY glGetError (void); +GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *params); +GLAPI const GLubyte * APIENTRY glGetString (GLenum name); +GLAPI void APIENTRY glHint (GLenum target, GLenum mode); +GLAPI void APIENTRY glLightModelf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glLightModelfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glLightModelx (GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightModelxv (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glLightx (GLenum light, GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightxv (GLenum light, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLineWidth (GLfloat width); +GLAPI void APIENTRY glLineWidthx (GLfixed width); +GLAPI void APIENTRY glLoadIdentity (void); +GLAPI void APIENTRY glLoadMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadMatrixx (const GLfixed *m); +GLAPI void APIENTRY glLogicOp (GLenum opcode); +GLAPI void APIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMaterialx (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glMaterialxv (GLenum face, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glMatrixMode (GLenum mode); +GLAPI void APIENTRY glMultMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultMatrixx (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4x (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormal3x (GLfixed nx, GLfixed ny, GLfixed nz); +GLAPI void APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glOrthof (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); +GLAPI void APIENTRY glOrthox (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); +GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param); +GLAPI void APIENTRY glPointSize (GLfloat size); +GLAPI void APIENTRY glPointSizex (GLfixed size); +GLAPI void APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GLAPI void APIENTRY glPolygonOffsetx (GLfixed factor, GLfixed units); +GLAPI void APIENTRY glPopMatrix (void); +GLAPI void APIENTRY glPushMatrix (void); +GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); +GLAPI void APIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glRotatex (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSampleCoveragex (GLclampx value, GLboolean invert); +GLAPI void APIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glScalex (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glShadeModel (GLenum mode); +GLAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMask (GLuint mask); +GLAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GLAPI void APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTexEnvx (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexEnvxv (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTexParameterx (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTranslatex (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#ifdef __cplusplus +} +#endif + +#endif /* __gl_h_ */ diff --git a/opengl/tests/angeles/license-BSD.txt b/opengl/tests/angeles/license-BSD.txt new file mode 100644 index 0000000000..8924e3ca28 --- /dev/null +++ b/opengl/tests/angeles/license-BSD.txt @@ -0,0 +1,34 @@ +This is the BSD-style license for the "San Angeles Observation" +OpenGL ES version example source code +--------------------------------------------------------------- + +San Angeles Observation OpenGL ES version example +Copyright (c) 2004-2005, Jetro Lauha +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of the software product's copyright owner nor + the names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/opengl/tests/angeles/license-LGPL.txt b/opengl/tests/angeles/license-LGPL.txt new file mode 100644 index 0000000000..b1e3f5a263 --- /dev/null +++ b/opengl/tests/angeles/license-LGPL.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/opengl/tests/angeles/license.txt b/opengl/tests/angeles/license.txt new file mode 100644 index 0000000000..620841e82e --- /dev/null +++ b/opengl/tests/angeles/license.txt @@ -0,0 +1,19 @@ +San Angeles Observation OpenGL ES version example +Copyright 2004-2005 Jetro Lauha +All rights reserved. +Web: http://iki.fi/jetro/ + +This source is free software; you can redistribute it and/or +modify it under the terms of EITHER: + (1) The GNU Lesser General Public License as published by the Free + Software Foundation; either version 2.1 of the License, or (at + your option) any later version. The text of the GNU Lesser + General Public License is included with this source in the + file LICENSE-LGPL.txt. + (2) The BSD-style license that is included with this source in + the file LICENSE-BSD.txt. + +This source is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files +LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. diff --git a/opengl/tests/angeles/shapes.h b/opengl/tests/angeles/shapes.h new file mode 100644 index 0000000000..25ffae8ce4 --- /dev/null +++ b/opengl/tests/angeles/shapes.h @@ -0,0 +1,59 @@ +/* San Angeles Observation OpenGL ES version example + * Copyright 2004-2005 Jetro Lauha + * All rights reserved. + * Web: http://iki.fi/jetro/ + * + * This source is free software; you can redistribute it and/or + * modify it under the terms of EITHER: + * (1) The GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at + * your option) any later version. The text of the GNU Lesser + * General Public License is included with this source in the + * file LICENSE-LGPL.txt. + * (2) The BSD-style license that is included with this source in + * the file LICENSE-BSD.txt. + * + * This source is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files + * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. + * + * $Id: shapes.h,v 1.6 2005/01/31 22:15:30 tonic Exp $ + * $Revision: 1.6 $ + */ + +#ifndef SHAPES_H_INCLUDED +#define SHAPES_H_INCLUDED + + +#define SUPERSHAPE_PARAMS 15 + +static const float sSuperShapeParams[][SUPERSHAPE_PARAMS] = +{ + // m a b n1 n2 n3 m a b n1 n2 n3 res1 res2 scale (org.res1,res2) + { 10, 1, 2, 90, 1, -45, 8, 1, 1, -1, 1, -0.4f, 20, 30, 2 }, // 40, 60 + { 10, 1, 2, 90, 1, -45, 4, 1, 1, 10, 1, -0.4f, 20, 20, 4 }, // 40, 40 + { 10, 1, 2, 60, 1, -10, 4, 1, 1, -1, -2, -0.4f, 41, 41, 1 }, // 82, 82 + { 6, 1, 1, 60, 1, -70, 8, 1, 1, 0.4f, 3, 0.25f, 20, 20, 1 }, // 40, 40 + { 4, 1, 1, 30, 1, 20, 12, 1, 1, 0.4f, 3, 0.25f, 10, 30, 1 }, // 20, 60 + { 8, 1, 1, 30, 1, -4, 8, 2, 1, -1, 5, 0.5f, 25, 26, 1 }, // 60, 60 + { 13, 1, 1, 30, 1, -4, 13, 1, 1, 1, 5, 1, 30, 30, 6 }, // 60, 60 + { 10, 1, 1.1f, -0.5f, 0.1f, 70, 60, 1, 1, -90, 0, -0.25f, 20, 60, 8 }, // 60, 180 + { 7, 1, 1, 20, -0.3f, -3.5f, 6, 1, 1, -1, 4.5f, 0.5f, 10, 20, 4 }, // 60, 80 + { 4, 1, 1, 10, 10, 10, 4, 1, 1, 10, 10, 10, 10, 20, 1 }, // 20, 40 + { 4, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 10, 10, 2 }, // 10, 10 + { 1, 1, 1, 38, -0.25f, 19, 4, 1, 1, 10, 10, 10, 10, 15, 2 }, // 20, 40 + { 2, 1, 1, 0.7f, 0.3f, 0.2f, 3, 1, 1, 100, 100, 100, 10, 25, 2 }, // 20, 50 + { 6, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 30, 30, 2 }, // 60, 60 + { 3, 1, 1, 1, 1, 1, 6, 1, 1, 2, 1, 1, 10, 20, 2 }, // 20, 40 + { 6, 1, 1, 6, 5.5f, 100, 6, 1, 1, 25, 10, 10, 30, 20, 2 }, // 60, 40 + { 3, 1, 1, 0.5f, 1.7f, 1.7f, 2, 1, 1, 10, 10, 10, 20, 20, 2 }, // 40, 40 + { 5, 1, 1, 0.1f, 1.7f, 1.7f, 1, 1, 1, 0.3f, 0.5f, 0.5f, 20, 20, 4 }, // 40, 40 + { 2, 1, 1, 6, 5.5f, 100, 6, 1, 1, 4, 10, 10, 10, 22, 1 }, // 40, 40 + { 6, 1, 1, -1, 70, 0.1f, 9, 1, 0.5f, -98, 0.05f, -45, 20, 30, 4 }, // 60, 91 + { 6, 1, 1, -1, 90, -0.1f, 7, 1, 1, 90, 1.3f, 34, 13, 16, 1 }, // 32, 60 +}; +#define SUPERSHAPE_COUNT (sizeof(sSuperShapeParams) / sizeof(sSuperShapeParams[0])) + + +#endif // !SHAPES_H_INCLUDED diff --git a/opengl/tests/filter/Android.mk b/opengl/tests/filter/Android.mk new file mode 100644 index 0000000000..1c4253c2c0 --- /dev/null +++ b/opengl/tests/filter/Android.mk @@ -0,0 +1,16 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES:= \ + filter.c + +LOCAL_SHARED_LIBRARIES := \ + libcutils \ + libGLES_CM \ + libui + +LOCAL_MODULE:= test-opengl-filter + +LOCAL_MODULE_TAGS := tests + +include $(BUILD_EXECUTABLE) diff --git a/opengl/tests/filter/filter.c b/opengl/tests/filter/filter.c new file mode 100644 index 0000000000..c8bac06cd5 --- /dev/null +++ b/opengl/tests/filter/filter.c @@ -0,0 +1,125 @@ +#include +#include + +#include + +int main(int argc, char** argv) +{ + if (argc!=2 && argc!=3) { + printf("usage: %s <0-6> [pbuffer]\n", argv[0]); + return 0; + } + + const int test = atoi(argv[1]); + int usePbuffer = argc==3 && !strcmp(argv[2], "pbuffer"); + EGLint s_configAttribs[] = { + EGL_SURFACE_TYPE, EGL_PBUFFER_BIT|EGL_WINDOW_BIT, + EGL_RED_SIZE, 5, + EGL_GREEN_SIZE, 6, + EGL_BLUE_SIZE, 5, + EGL_NONE + }; + + EGLint numConfigs = -1; + EGLint majorVersion; + EGLint minorVersion; + EGLConfig config; + EGLContext context; + EGLSurface surface; + EGLint w, h; + + EGLDisplay dpy; + + dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + eglInitialize(dpy, &majorVersion, &minorVersion); + eglChooseConfig(dpy, s_configAttribs, &config, 1, &numConfigs); + if (!usePbuffer) { + surface = eglCreateWindowSurface(dpy, config, + android_createDisplaySurface(), NULL); + } else { + printf("using pbuffer\n"); + EGLint attribs[] = { EGL_WIDTH, 320, EGL_HEIGHT, 480, EGL_NONE }; + surface = eglCreatePbufferSurface(dpy, config, attribs); + } + context = eglCreateContext(dpy, config, NULL, NULL); + eglMakeCurrent(dpy, surface, surface, context); + eglQuerySurface(dpy, surface, EGL_WIDTH, &w); + eglQuerySurface(dpy, surface, EGL_HEIGHT, &h); + GLint dim = w +#include +#include +#include +#include + +#include + +long long systemTime() +{ + struct timespec t; + t.tv_sec = t.tv_nsec = 0; + clock_gettime(CLOCK_MONOTONIC, &t); + return (long long)(t.tv_sec)*1000000000LL + t.tv_nsec; +} + +int main(int argc, char** argv) +{ + EGLint s_configAttribs[] = { + EGL_RED_SIZE, 5, + EGL_GREEN_SIZE, 6, + EGL_BLUE_SIZE, 5, + EGL_NONE + }; + + EGLint numConfigs = -1; + EGLint majorVersion; + EGLint minorVersion; + EGLConfig config; + EGLContext context; + EGLSurface surface; + EGLint w, h; + + EGLDisplay dpy; + + dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + eglInitialize(dpy, &majorVersion, &minorVersion); + eglChooseConfig(dpy, s_configAttribs, &config, 1, &numConfigs); + surface = eglCreateWindowSurface(dpy, config, + android_createDisplaySurface(), NULL); + context = eglCreateContext(dpy, config, NULL, NULL); + eglMakeCurrent(dpy, surface, surface, context); + eglQuerySurface(dpy, surface, EGL_WIDTH, &w); + eglQuerySurface(dpy, surface, EGL_HEIGHT, &h); + GLint dim = w +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "egl_surface.h" + +#define LOGI(x...) do { printf("INFO: " x); } while (0) +#define LOGW(x...) do { printf("WARN: " x); } while (0) +#define LOGE(x...) do { printf("ERR: " x); } while (0) + +// ---------------------------------------------------------------------------- + +egl_native_window_t* android_createDisplaySurface() +{ + egl_native_window_t* s = new android::EGLDisplaySurface(); + s->memory_type = NATIVE_MEMORY_TYPE_GPU; + return s; +} + +#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) +#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) + +// ---------------------------------------------------------------------------- +namespace android { +// ---------------------------------------------------------------------------- + +EGLDisplaySurface::EGLDisplaySurface() + : EGLNativeSurface() +{ + egl_native_window_t::version = sizeof(egl_native_window_t); + egl_native_window_t::ident = 0; + egl_native_window_t::incRef = &EGLDisplaySurface::hook_incRef; + egl_native_window_t::decRef = &EGLDisplaySurface::hook_decRef; + egl_native_window_t::swapBuffers = &EGLDisplaySurface::hook_swapBuffers; + egl_native_window_t::setSwapRectangle = &EGLDisplaySurface::hook_setSwapRectangle; + egl_native_window_t::nextBuffer = &EGLDisplaySurface::hook_nextBuffer; + egl_native_window_t::connect = 0; + egl_native_window_t::disconnect = 0; + + mFb[0].data = 0; + mFb[1].data = 0; + egl_native_window_t::fd = mapFrameBuffer(); + if (egl_native_window_t::fd >= 0) { + const float in2mm = 25.4f; + float refreshRate = 1000000000000000LLU / ( + float( mInfo.upper_margin + mInfo.lower_margin + mInfo.yres ) + * ( mInfo.left_margin + mInfo.right_margin + mInfo.xres ) + * mInfo.pixclock); + + const GGLSurface& buffer = mFb[1 - mIndex]; + egl_native_window_t::width = buffer.width; + egl_native_window_t::height = buffer.height; + egl_native_window_t::stride = buffer.stride; + egl_native_window_t::format = buffer.format; + egl_native_window_t::base = intptr_t(mFb[0].data); + egl_native_window_t::offset = + intptr_t(buffer.data) - egl_native_window_t::base; + egl_native_window_t::flags = 0; + egl_native_window_t::xdpi = (mInfo.xres * in2mm) / mInfo.width; + egl_native_window_t::ydpi = (mInfo.yres * in2mm) / mInfo.height; + egl_native_window_t::fps = refreshRate; + egl_native_window_t::memory_type = NATIVE_MEMORY_TYPE_FB; + // no error, set the magic word + egl_native_window_t::magic = 0x600913; + } + mSwapCount = -1; + mPageFlipCount = 0; +} + +EGLDisplaySurface::~EGLDisplaySurface() +{ + magic = 0; + close(egl_native_window_t::fd); + munmap(mFb[0].data, mSize); + if (!(mFlags & PAGE_FLIP)) + free((void*)mFb[1].data); +} + +void EGLDisplaySurface::hook_incRef(NativeWindowType window) { + EGLDisplaySurface* that = static_cast(window); + that->incStrong(that); +} +void EGLDisplaySurface::hook_decRef(NativeWindowType window) { + EGLDisplaySurface* that = static_cast(window); + that->decStrong(that); +} +uint32_t EGLDisplaySurface::hook_swapBuffers(NativeWindowType window) { + EGLDisplaySurface* that = static_cast(window); + return that->swapBuffers(); +} +uint32_t EGLDisplaySurface::hook_nextBuffer(NativeWindowType window) { + EGLDisplaySurface* that = static_cast(window); + return that->nextBuffer(); +} +void EGLDisplaySurface::hook_setSwapRectangle(NativeWindowType window, + int l, int t, int w, int h) { + EGLDisplaySurface* that = static_cast(window); + that->setSwapRectangle(l, t, w, h); +} + +void EGLDisplaySurface::setSwapRectangle(int l, int t, int w, int h) +{ + mInfo.reserved[0] = 0x54445055; // "UPDT"; + mInfo.reserved[1] = (uint16_t)l | ((uint32_t)t << 16); + mInfo.reserved[2] = (uint16_t)(l+w) | ((uint32_t)(t+h) << 16); +} + +uint32_t EGLDisplaySurface::swapBuffers() +{ + if (!(mFlags & PAGE_FLIP)) + return 0; + + // do the actual flip + mIndex = 1 - mIndex; + mInfo.activate = FB_ACTIVATE_VBL; + mInfo.yoffset = mIndex ? mInfo.yres : 0; + if (ioctl(egl_native_window_t::fd, FBIOPUT_VSCREENINFO, &mInfo) == -1) { + LOGE("FBIOPUT_VSCREENINFO failed"); + return 0; + } + + /* + * this is a monstruous hack: Because the h/w accelerator is not able + * to render directly into the framebuffer, we need to copy its + * internal framebuffer out to the fb. the base address of the internal fb + * is given in oem[0]. + * All this is needed only in standalone mode, in SurfaceFlinger mode + * we control where the GPU renders. + */ + if (egl_native_window_t::memory_type == NATIVE_MEMORY_TYPE_GPU && oem[0]) { + // could use MDP here, but that's tricky because we need + // /dev/pmem_gpu* filedescriptor + const GGLSurface& buffer = mFb[mIndex]; + memcpy( buffer.data, + (void*)(oem[0] + egl_native_window_t::offset), + buffer.stride*buffer.height*2); + } + + // update the address of the buffer to draw to next + const GGLSurface& buffer = mFb[1 - mIndex]; + egl_native_window_t::offset = + intptr_t(buffer.data) - egl_native_window_t::base; + + mPageFlipCount++; + + // We don't support screen-size changes for now + return 0; +} + +int32_t EGLDisplaySurface::getPageFlipCount() const +{ + return mPageFlipCount; +} + +uint32_t EGLDisplaySurface::nextBuffer() +{ + // update the address of the buffer to draw to next + const GGLSurface& buffer = mFb[mIndex]; + egl_native_window_t::offset = + intptr_t(buffer.data) - egl_native_window_t::base; + return 0; +} + +int EGLDisplaySurface::mapFrameBuffer() +{ + char const * const device_template[] = { + "/dev/graphics/fb%u", + "/dev/fb%u", + 0 }; + int fd = -1; + int i=0; + char name[64]; + while ((fd==-1) && device_template[i]) { + snprintf(name, 64, device_template[i], 0); + fd = open(name, O_RDWR, 0); + i++; + } + if (fd < 0) + return -errno; + + struct fb_fix_screeninfo finfo; + if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo) == -1) + return -errno; + + struct fb_var_screeninfo info; + if (ioctl(fd, FBIOGET_VSCREENINFO, &info) == -1) + return -errno; + + info.reserved[0] = 0; + info.reserved[1] = 0; + info.reserved[2] = 0; + info.xoffset = 0; + info.yoffset = 0; + info.yres_virtual = info.yres * 2; + info.bits_per_pixel = 16; + info.activate = FB_ACTIVATE_NOW; + + uint32_t flags = PAGE_FLIP; + if (ioctl(fd, FBIOPUT_VSCREENINFO, &info) == -1) { + info.yres_virtual = info.yres; + flags &= ~PAGE_FLIP; + LOGW("FBIOPUT_VSCREENINFO failed, page flipping not supported"); + } + + if (info.yres_virtual < info.yres * 2) { + info.yres_virtual = info.yres; + flags &= ~PAGE_FLIP; + LOGW("page flipping not supported (yres_virtual=%d, requested=%d)", + info.yres_virtual, info.yres*2); + } + + if (ioctl(fd, FBIOGET_VSCREENINFO, &info) == -1) + return -errno; + + int refreshRate = 1000000000000000LLU / + ( + uint64_t( info.upper_margin + info.lower_margin + info.yres ) + * ( info.left_margin + info.right_margin + info.xres ) + * info.pixclock + ); + + if (refreshRate == 0) { + // bleagh, bad info from the driver + refreshRate = 60*1000; // 60 Hz + } + + if (int(info.width) <= 0 || int(info.height) <= 0) { + // stupid driver, doesn't return that information + // default to Sooner's screen size (160 dpi) + info.width = 51; + info.height = 38; + } + + float xdpi = (info.xres * 25.4f) / info.width; + float ydpi = (info.yres * 25.4f) / info.height; + float fps = refreshRate / 1000.0f; + + LOGI( "using (fd=%d)\n" + "id = %s\n" + "xres = %d px\n" + "yres = %d px\n" + "xres_virtual = %d px\n" + "yres_virtual = %d px\n" + "bpp = %d\n" + "r = %2u:%u\n" + "g = %2u:%u\n" + "b = %2u:%u\n", + fd, + finfo.id, + info.xres, + info.yres, + info.xres_virtual, + info.yres_virtual, + info.bits_per_pixel, + info.red.offset, info.red.length, + info.green.offset, info.green.length, + info.blue.offset, info.blue.length + ); + + LOGI( "width = %d mm (%f dpi)\n" + "height = %d mm (%f dpi)\n" + "refresh rate = %.2f Hz\n", + info.width, xdpi, + info.height, ydpi, + fps + ); + + + if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo) == -1) + return -errno; + + if (finfo.smem_len <= 0) + return -errno; + + /* + * Open and map the display. + */ + + void* buffer = (uint16_t*) mmap( + 0, finfo.smem_len, + PROT_READ | PROT_WRITE, + MAP_SHARED, + fd, 0); + + if (buffer == MAP_FAILED) + return -errno; + + // at least for now, always clear the fb + memset(buffer, 0, finfo.smem_len); + + uint8_t* offscreen[2]; + offscreen[0] = (uint8_t*)buffer; + if (flags & PAGE_FLIP) { + offscreen[1] = (uint8_t*)buffer + finfo.line_length*info.yres; + } else { + offscreen[1] = (uint8_t*)malloc(finfo.smem_len); + if (offscreen[1] == 0) { + munmap(buffer, finfo.smem_len); + return -ENOMEM; + } + } + + mFlags = flags; + mInfo = info; + mFinfo = finfo; + mSize = finfo.smem_len; + mIndex = 0; + for (int i=0 ; i<2 ; i++) { + mFb[i].version = sizeof(GGLSurface); + mFb[i].width = info.xres; + mFb[i].height = info.yres; + mFb[i].stride = finfo.line_length / (info.bits_per_pixel >> 3); + mFb[i].data = (uint8_t*)(offscreen[i]); + mFb[i].format = NATIVE_PIXEL_FORMAT_RGB_565; + } + return fd; +} + +// ---------------------------------------------------------------------------- +}; // namespace android +// ---------------------------------------------------------------------------- diff --git a/opengl/tests/sfsim/egl_surface.h b/opengl/tests/sfsim/egl_surface.h new file mode 100644 index 0000000000..70a94fcab9 --- /dev/null +++ b/opengl/tests/sfsim/egl_surface.h @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_SIM_EGL_SURFACE_H +#define ANDROID_SIM_EGL_SURFACE_H + +#include +#include +#include + +#include + +#include + +typedef struct { + ssize_t version; // always set to sizeof(GGLSurface) + uint32_t width; // width in pixels + uint32_t height; // height in pixels + int32_t stride; // stride in pixels + uint8_t* data; // pointer to the bits + uint8_t format; // pixel format + uint8_t rfu[3]; // must be zero + void* reserved; +} GGLSurface; + +// --------------------------------------------------------------------------- +namespace android { +// --------------------------------------------------------------------------- + +template +class EGLNativeSurface : public egl_native_window_t +{ +public: + EGLNativeSurface() : mCount(0) { + memset(egl_native_window_t::reserved, 0, + sizeof(egl_native_window_t::reserved)); + memset(egl_native_window_t::reserved_proc, 0, + sizeof(egl_native_window_t::reserved_proc)); + memset(egl_native_window_t::oem, 0, + sizeof(egl_native_window_t::oem)); + } + inline void incStrong(void*) const { + /* in a real implementation, the inc must be atomic */ + mCount++; + } + inline void decStrong(void*) const { + /* in a real implementation, the dec must be atomic */ + if (--mCount == 1) { + delete static_cast(this); + } + } +protected: + EGLNativeSurface& operator = (const EGLNativeSurface& rhs); + EGLNativeSurface(const EGLNativeSurface& rhs); + inline ~EGLNativeSurface() { }; + mutable volatile int32_t mCount; +}; + + +class EGLDisplaySurface : public EGLNativeSurface +{ +public: + EGLDisplaySurface(); + ~EGLDisplaySurface(); + + int32_t getPageFlipCount() const; + +private: + static void hook_incRef(NativeWindowType window); + static void hook_decRef(NativeWindowType window); + static uint32_t hook_swapBuffers(NativeWindowType window); + static void hook_setSwapRectangle(NativeWindowType window, int l, int t, int w, int h); + static uint32_t hook_nextBuffer(NativeWindowType window); + + uint32_t swapBuffers(); + uint32_t nextBuffer(); + void setSwapRectangle(int l, int t, int w, int h); + + int mapFrameBuffer(); + + enum { + PAGE_FLIP = 0x00000001 + }; + GGLSurface mFb[2]; + int mIndex; + uint32_t mFlags; + size_t mSize; + fb_var_screeninfo mInfo; + fb_fix_screeninfo mFinfo; + int32_t mPageFlipCount; + int32_t mSwapCount; + uint32_t mFeatureFlags; +}; + +// --------------------------------------------------------------------------- +}; // namespace android +// --------------------------------------------------------------------------- + +#endif // ANDROID_SIM_EGL_SURFACE_H + diff --git a/opengl/tests/sfsim/sfsim.c b/opengl/tests/sfsim/sfsim.c new file mode 100644 index 0000000000..14ba490d70 --- /dev/null +++ b/opengl/tests/sfsim/sfsim.c @@ -0,0 +1,112 @@ +#include +#include + +#include + +int main(int argc, char** argv) +{ + if (argc != 2) { + printf("usage: %s <0-6>\n", argv[0]); + return 0; + } + + const int test = atoi(argv[1]); + + EGLint s_configAttribs[] = { + EGL_RED_SIZE, 5, + EGL_GREEN_SIZE, 6, + EGL_BLUE_SIZE, 5, + EGL_NONE + }; + + EGLint numConfigs = -1; + EGLint majorVersion; + EGLint minorVersion; + EGLConfig config; + EGLContext context; + EGLSurface surface; + EGLint w, h; + + EGLDisplay dpy; + + dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + eglInitialize(dpy, &majorVersion, &minorVersion); + eglChooseConfig(dpy, s_configAttribs, &config, 1, &numConfigs); + surface = eglCreateWindowSurface(dpy, config, + android_createDisplaySurface(), NULL); + context = eglCreateContext(dpy, config, NULL, NULL); + eglMakeCurrent(dpy, surface, surface, context); + eglQuerySurface(dpy, surface, EGL_WIDTH, &w); + eglQuerySurface(dpy, surface, EGL_HEIGHT, &h); + GLint dim = w +#include + +#include + +int main(int argc, char** argv) +{ + EGLint s_configAttribs[] = { + EGL_RED_SIZE, 5, + EGL_GREEN_SIZE, 6, + EGL_BLUE_SIZE, 5, + EGL_NONE + }; + + EGLint numConfigs = -1; + EGLint majorVersion; + EGLint minorVersion; + EGLConfig config; + EGLContext context; + EGLSurface surface; + EGLint w, h; + + EGLDisplay dpy; + + dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + eglInitialize(dpy, &majorVersion, &minorVersion); + eglChooseConfig(dpy, s_configAttribs, &config, 1, &numConfigs); + surface = eglCreateWindowSurface(dpy, config, + android_createDisplaySurface(), NULL); + context = eglCreateContext(dpy, config, NULL, NULL); + eglMakeCurrent(dpy, surface, surface, context); + eglQuerySurface(dpy, surface, EGL_WIDTH, &w); + eglQuerySurface(dpy, surface, EGL_HEIGHT, &h); + GLint dim = w +#include +#include +#include + +EGLDisplay eglDisplay; +EGLSurface eglSurface; +EGLContext eglContext; +GLuint texture; + +#define FIXED_ONE 0x10000 +#define ITERATIONS 50 + +int init_gl_surface(void); +void free_gl_surface(void); +void init_scene(void); +void render(int quads); +void create_texture(void); +int readTimer(void); + +static void gluLookAt(float eyeX, float eyeY, float eyeZ, + float centerX, float centerY, float centerZ, float upX, float upY, + float upZ) +{ + // See the OpenGL GLUT documentation for gluLookAt for a description + // of the algorithm. We implement it in a straightforward way: + + float fx = centerX - eyeX; + float fy = centerY - eyeY; + float fz = centerZ - eyeZ; + + // Normalize f + float rlf = 1.0f / sqrtf(fx*fx + fy*fy + fz*fz); + fx *= rlf; + fy *= rlf; + fz *= rlf; + + // Normalize up + float rlup = 1.0f / sqrtf(upX*upX + upY*upY + upZ*upZ); + upX *= rlup; + upY *= rlup; + upZ *= rlup; + + // compute s = f x up (x means "cross product") + + float sx = fy * upZ - fz * upY; + float sy = fz * upX - fx * upZ; + float sz = fx * upY - fy * upX; + + // compute u = s x f + float ux = sy * fz - sz * fy; + float uy = sz * fx - sx * fz; + float uz = sx * fy - sy * fx; + + float m[16] ; + m[0] = sx; + m[1] = ux; + m[2] = -fx; + m[3] = 0.0f; + + m[4] = sy; + m[5] = uy; + m[6] = -fy; + m[7] = 0.0f; + + m[8] = sz; + m[9] = uz; + m[10] = -fz; + m[11] = 0.0f; + + m[12] = 0.0f; + m[13] = 0.0f; + m[14] = 0.0f; + m[15] = 1.0f; + + glMultMatrixf(m); + glTranslatef(-eyeX, -eyeY, -eyeZ); +} + +int main(int argc, char **argv) +{ + int q; + int start, end; + + printf("Initializing EGL...\n"); + + if(!init_gl_surface()) + { + printf("GL initialisation failed - exiting\n"); + return 0; + } + + init_scene(); + + create_texture(); + + printf("Start test...\n"); + + render(argc==2 ? atoi(argv[1]) : ITERATIONS); + + free_gl_surface(); + + return 0; +} + +int init_gl_surface(void) +{ + EGLint numConfigs = 1; + EGLConfig myConfig = {0}; + EGLint attrib[] = + { + EGL_DEPTH_SIZE, 16, + EGL_NONE + }; + + if ( (eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY)) == EGL_NO_DISPLAY ) + { + printf("eglGetDisplay failed\n"); + return 0; + } + + if ( eglInitialize(eglDisplay, NULL, NULL) != EGL_TRUE ) + { + printf("eglInitialize failed\n"); + return 0; + } + + if ( eglChooseConfig(eglDisplay, attrib, &myConfig, 1, &numConfigs) != EGL_TRUE ) + { + printf("eglChooseConfig failed\n"); + return 0; + } + + if ( (eglSurface = eglCreateWindowSurface(eglDisplay, myConfig, + android_createDisplaySurface(), 0)) == EGL_NO_SURFACE ) + { + printf("eglCreateWindowSurface failed\n"); + return 0; + } + + if ( (eglContext = eglCreateContext(eglDisplay, myConfig, 0, 0)) == EGL_NO_CONTEXT ) + { + printf("eglCreateContext failed\n"); + return 0; + } + + if ( eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext) != EGL_TRUE ) + { + printf("eglMakeCurrent failed\n"); + return 0; + } + + return 1; +} + +void free_gl_surface(void) +{ + if (eglDisplay != EGL_NO_DISPLAY) + { + eglMakeCurrent( EGL_NO_DISPLAY, EGL_NO_SURFACE, + EGL_NO_SURFACE, EGL_NO_CONTEXT ); + eglDestroyContext( eglDisplay, eglContext ); + eglDestroySurface( eglDisplay, eglSurface ); + eglTerminate( eglDisplay ); + eglDisplay = EGL_NO_DISPLAY; + } +} + +void init_scene(void) +{ + glDisable(GL_DITHER); + glEnable(GL_CULL_FACE); + + float ratio = 320.0f / 480.0f; + glViewport(0, 0, 320, 480); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustumf(-ratio, ratio, -1, 1, 1, 10); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt( + 0, 0, 3, // eye + 0, 0, 0, // center + 0, 1, 0); // up + + glEnable(GL_TEXTURE_2D); + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); +} + +void create_texture(void) +{ + const unsigned int on = 0xff0000ff; + const unsigned int off = 0xffffffff; + const unsigned int pixels[] = + { + on, off, on, off, on, off, on, off, + off, on, off, on, off, on, off, on, + on, off, on, off, on, off, on, off, + off, on, off, on, off, on, off, on, + on, off, on, off, on, off, on, off, + off, on, off, on, off, on, off, on, + on, off, on, off, on, off, on, off, + off, on, off, on, off, on, off, on, + }; + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); + glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); +} + +void render(int quads) +{ + int i, j; + + const GLfloat vertices[] = { + -1, -1, 0, + 1, -1, 0, + 1, 1, 0, + -1, 1, 0 + }; + + const GLfixed texCoords[] = { + 0, 0, + FIXED_ONE, 0, + FIXED_ONE, FIXED_ONE, + 0, FIXED_ONE + }; + + const GLushort template[] = { 0, 1, 2, 0, 2, 3 }; + + + GLushort* indices = (GLushort*)malloc(quads*sizeof(template)); + for (i=0 ; i out/android/graphics/Canvas.java +echo "public interface Canvas {}" >> out/android/graphics/Canvas.java + +GLFILE=out/javax/microedition/khronos/opengles/GL.java +cp stubs/GLHeader.java-if $GLFILE + +GLGEN_FILES="CFunc.java CType.java CodeEmitter.java GenerateGL.java JFunc.java JType.java JniCodeEmitter.java ParameterChecker.java" + +pushd src > /dev/null +javac ${GLGEN_FILES} +popd > /dev/null +java -classpath src GenerateGL -c glspec-1.0 glspec-1.0ext glspec-1.1 glspec-1.1ext glspec-1.1extpack glspec-checks + +pushd out > /dev/null +mkdir classes +javac -d classes com/google/android/gles_jni/GLImpl.java javax/microedition/khronos/opengles/GL10.java javax/microedition/khronos/opengles/GL10Ext.java javax/microedition/khronos/opengles/GL11.java javax/microedition/khronos/opengles/GL11Ext.java javax/microedition/khronos/opengles/GL11ExtensionPack.java +popd > /dev/null + +rm -rf generated +mkdir -p generated/C +cp out/com_google_android_gles_jni_GLImpl.cpp generated/C +cp -r out/com generated +cp -r out/javax generated + +rm -rf out + +# com_google_android_gles_jni_GLImpl.cpp +if cmp ../../../frameworks/base/core/jni/com_google_android_gles_jni_GLImpl.cpp generated/C/com_google_android_gles_jni_GLImpl.cpp ; then +echo com_google_android_gles_jni_GLImpl.cpp unchanged +else +echo Please edit ../../../frameworks/base/core/jni/com_google_android_gles_jni_GLImpl.cpp +echo Please cp generated/C/com_google_android_gles_jni_GLImpl.cpp ../../../frameworks/base/core/jni +fi + +# GLImpl.java +if cmp ../../java/com/google/android/gles_jni/GLImpl.java generated/com/google/android/gles_jni/GLImpl.java ; then +echo GLImpl.java unchanged +else +echo Please edit ../../java/com/google/android/gles_jni/GLImpl.java +echo Please cp generated/com/google/android/gles_jni/GLImpl.java ../../java/com/google/android/gles_jni +fi + +# GL.java +if cmp ../../java/javax/microedition/khronos/opengles/GL.java generated/javax/microedition/khronos/opengles/GL.java ; then +echo GL.java unchanged +else +echo Please edit ../../java/javax/microedition/khronos/opengles/GL.java +echo Please cp generated/javax/microedition/khronos/opengles/GL.java ../../java/javax/microedition/khronos/opengles/GL.java +fi + +# GL10.java +if cmp ../../java/javax/microedition/khronos/opengles/GL10.java generated/javax/microedition/khronos/opengles/GL10.java ; then +echo GL10.java unchanged +else +echo Please edit ../../java/javax/microedition/khronos/opengles/GL10.java +echo Please cp generated/javax/microedition/khronos/opengles/GL10.java ../../java/javax/microedition/khronos/opengles/GL10.java +fi + +# GL10Ext.java +if cmp ../../java/javax/microedition/khronos/opengles/GL10Ext.java generated/javax/microedition/khronos/opengles/GL10Ext.java ; then +echo GL10Ext.java unchanged +else +echo Please edit ../../java/javax/microedition/khronos/opengles/GL10Ext.java +echo Please cp generated/javax/microedition/khronos/opengles/GL10Ext.java ../../java/javax/microedition/khronos/opengles/GL10Ext.java +fi + +# GL11.java +if cmp ../../java/javax/microedition/khronos/opengles/GL11.java generated/javax/microedition/khronos/opengles/GL11.java ; then +echo GL11.java unchanged +else +echo Please edit ../../java/javax/microedition/khronos/opengles/GL11.java +echo Please cp generated/javax/microedition/khronos/opengles/GL11.java ../../java/javax/microedition/khronos/opengles/GL11.java +fi + +# GL11Ext.java +if cmp ../../java/javax/microedition/khronos/opengles/GL11Ext.java generated/javax/microedition/khronos/opengles/GL11Ext.java ; then +echo GL11Ext.java unchanged +else +echo Please edit ../../java/javax/microedition/khronos/opengles/GL11Ext.java +echo Please cp generated/javax/microedition/khronos/opengles/GL11Ext.java ../../java/javax/microedition/khronos/opengles/GL11Ext.java +fi + +# GL11ExtensionPack.java +if cmp ../../java/javax/microedition/khronos/opengles/GL11ExtensionPack.java generated/javax/microedition/khronos/opengles/GL11ExtensionPack.java ; then +echo GL11ExtensionPack.java unchanged +else +echo Please edit ../../java/javax/microedition/khronos/opengles/GL11ExtensionPack.java +echo Please cp generated/javax/microedition/khronos/opengles/GL11ExtensionPack.java ../../java/javax/microedition/khronos/opengles/GL11ExtensionPack.java +fi + +rm -rf generated diff --git a/opengl/tools/glgen/glspec-1.0 b/opengl/tools/glgen/glspec-1.0 new file mode 100644 index 0000000000..c442320bf5 --- /dev/null +++ b/opengl/tools/glgen/glspec-1.0 @@ -0,0 +1,106 @@ +void glActiveTexture ( GLenum texture ) +void glAlphaFunc ( GLenum func, GLclampf ref ) +void glAlphaFuncx ( GLenum func, GLclampx ref ) +void glBindTexture ( GLenum target, GLuint texture ) +void glBlendFunc ( GLenum sfactor, GLenum dfactor ) +void glClear ( GLbitfield mask ) +void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ) +void glClearColorx ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha ) +void glClearDepthf ( GLclampf depth ) +void glClearDepthx ( GLclampx depth ) +void glClearStencil ( GLint s ) +void glClientActiveTexture ( GLenum texture ) +void glColor4f ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) +void glColor4x ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha ) +void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ) +void glColorPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) +void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ) +void glCompressedTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ) +void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ) +void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ) +void glCullFace ( GLenum mode ) +void glDeleteTextures ( GLsizei n, const GLuint *textures ) +void glDepthFunc ( GLenum func ) +void glDepthMask ( GLboolean flag ) +void glDepthRangef ( GLclampf zNear, GLclampf zFar ) +void glDepthRangex ( GLclampx zNear, GLclampx zFar ) +void glDisable ( GLenum cap ) +void glDisableClientState ( GLenum array ) +void glDrawArrays ( GLenum mode, GLint first, GLsizei count ) +void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ) +void glEnable ( GLenum cap ) +void glEnableClientState ( GLenum array ) +void glFinish ( void ) +void glFlush ( void ) +void glFogf ( GLenum pname, GLfloat param ) +void glFogfv ( GLenum pname, const GLfloat *params ) +void glFogx ( GLenum pname, GLfixed param ) +void glFogxv ( GLenum pname, const GLfixed *params ) +void glFrontFace ( GLenum mode ) +void glFrustumf ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) +void glFrustumx ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) +void glGenTextures ( GLsizei n, GLuint *textures ) +GLenum glGetError ( void ) +void glGetIntegerv ( GLenum pname, GLint *params ) +const GLubyte * glGetString ( GLenum name ) +void glHint ( GLenum target, GLenum mode ) +void glLightModelf ( GLenum pname, GLfloat param ) +void glLightModelfv ( GLenum pname, const GLfloat *params ) +void glLightModelx ( GLenum pname, GLfixed param ) +void glLightModelxv ( GLenum pname, const GLfixed *params ) +void glLightf ( GLenum light, GLenum pname, GLfloat param ) +void glLightfv ( GLenum light, GLenum pname, const GLfloat *params ) +void glLightx ( GLenum light, GLenum pname, GLfixed param ) +void glLightxv ( GLenum light, GLenum pname, const GLfixed *params ) +void glLineWidth ( GLfloat width ) +void glLineWidthx ( GLfixed width ) +void glLoadIdentity ( void ) +void glLoadMatrixf ( const GLfloat *m ) +void glLoadMatrixx ( const GLfixed *m ) +void glLogicOp ( GLenum opcode ) +void glMaterialf ( GLenum face, GLenum pname, GLfloat param ) +void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params ) +void glMaterialx ( GLenum face, GLenum pname, GLfixed param ) +void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params ) +void glMatrixMode ( GLenum mode ) +void glMultMatrixf ( const GLfloat *m ) +void glMultMatrixx ( const GLfixed *m ) +void glMultiTexCoord4f ( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ) +void glMultiTexCoord4x ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q ) +void glNormal3f ( GLfloat nx, GLfloat ny, GLfloat nz ) +void glNormal3x ( GLfixed nx, GLfixed ny, GLfixed nz ) +void glNormalPointer ( GLenum type, GLsizei stride, const GLvoid *pointer ) +void glOrthof ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) +void glOrthox ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) +void glPixelStorei ( GLenum pname, GLint param ) +void glPointSize ( GLfloat size ) +void glPointSizex ( GLfixed size ) +void glPolygonOffset ( GLfloat factor, GLfloat units ) +void glPolygonOffsetx ( GLfixed factor, GLfixed units ) +void glPopMatrix ( void ) +void glPushMatrix ( void ) +void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ) +void glRotatef ( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ) +void glRotatex ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z ) +void glSampleCoverage ( GLclampf value, GLboolean invert ) +void glSampleCoveragex ( GLclampx value, GLboolean invert ) +void glScalef ( GLfloat x, GLfloat y, GLfloat z ) +void glScalex ( GLfixed x, GLfixed y, GLfixed z ) +void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height ) +void glShadeModel ( GLenum mode ) +void glStencilFunc ( GLenum func, GLint ref, GLuint mask ) +void glStencilMask ( GLuint mask ) +void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass ) +void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) +void glTexEnvf ( GLenum target, GLenum pname, GLfloat param ) +void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params ) +void glTexEnvx ( GLenum target, GLenum pname, GLfixed param ) +void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params ) +void glTexImage2D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) +void glTexParameterf ( GLenum target, GLenum pname, GLfloat param ) +void glTexParameterx ( GLenum target, GLenum pname, GLfixed param ) +void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ) +void glTranslatef ( GLfloat x, GLfloat y, GLfloat z ) +void glTranslatex ( GLfixed x, GLfixed y, GLfixed z ) +void glVertexPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) +void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height ) diff --git a/opengl/tools/glgen/glspec-1.0ext b/opengl/tools/glgen/glspec-1.0ext new file mode 100644 index 0000000000..7d19758196 --- /dev/null +++ b/opengl/tools/glgen/glspec-1.0ext @@ -0,0 +1 @@ +GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent ) diff --git a/opengl/tools/glgen/glspec-1.1 b/opengl/tools/glgen/glspec-1.1 new file mode 100644 index 0000000000..9149a7f97f --- /dev/null +++ b/opengl/tools/glgen/glspec-1.1 @@ -0,0 +1,42 @@ +void glBindBuffer ( GLenum target, GLuint buffer ) +void glBufferData ( GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage ) +void glBufferSubData ( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data ) +void glClipPlanef ( GLenum plane, const GLfloat *equation ) +void glClipPlanex ( GLenum plane, const GLfixed *equation ) +void glColor4ub ( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ) +void glColorPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) +void glDeleteBuffers ( GLsizei n, const GLuint *buffers ) +void glDrawElements ( GLenum mode, GLsizei count, GLenum type, GLint offset ) +void glGenBuffers ( GLsizei n, GLuint *buffers ) +void glGetBooleanv ( GLenum pname, GLboolean *params ) +void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) +void glGetClipPlanef ( GLenum pname, GLfloat *eqn ) +void glGetClipPlanex ( GLenum pname, GLfixed *eqn ) +void glGetFixedv ( GLenum pname, GLfixed *params ) +void glGetFloatv ( GLenum pname, GLfloat *params ) +void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params ) +void glGetLightxv ( GLenum light, GLenum pname, GLfixed *params ) +void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params ) +void glGetMaterialxv ( GLenum face, GLenum pname, GLfixed *params ) +void glGetTexEnviv ( GLenum env, GLenum pname, GLint *params ) +void glGetTexEnvxv ( GLenum env, GLenum pname, GLfixed *params ) +void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params ) +void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params ) +void glGetTexParameterxv ( GLenum target, GLenum pname, GLfixed *params ) +GLboolean glIsBuffer ( GLuint buffer ) +GLboolean glIsEnabled ( GLenum cap ) +GLboolean glIsTexture ( GLuint texture ) +void glNormalPointer ( GLenum type, GLsizei stride, GLint offset ) +void glPointParameterf ( GLenum pname, GLfloat param ) +void glPointParameterfv ( GLenum pname, const GLfloat *params ) +void glPointParameterx ( GLenum pname, GLfixed param ) +void glPointParameterxv ( GLenum pname, const GLfixed *params ) +void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer ) +void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) +void glTexEnvi ( GLenum target, GLenum pname, GLint param ) +void glTexEnviv ( GLenum target, GLenum pname, const GLint *params ) +void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params ) +void glTexParameteri ( GLenum target, GLenum pname, GLint param ) +void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params ) +void glTexParameterxv ( GLenum target, GLenum pname, const GLfixed *params ) +void glVertexPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) diff --git a/opengl/tools/glgen/glspec-1.1ext b/opengl/tools/glgen/glspec-1.1ext new file mode 100644 index 0000000000..cc08c73528 --- /dev/null +++ b/opengl/tools/glgen/glspec-1.1ext @@ -0,0 +1,16 @@ +void glCurrentPaletteMatrixOES ( GLuint matrixpaletteindex ) +void glDrawTexfOES ( GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height ) +void glDrawTexfvOES ( const GLfloat *coords ) +void glDrawTexiOES ( GLint x, GLint y, GLint z, GLint width, GLint height ) +void glDrawTexivOES ( const GLint *coords ) +void glDrawTexsOES ( GLshort x, GLshort y, GLshort z, GLshort width, GLshort height ) +void glDrawTexsvOES ( const GLshort *coords ) +void glDrawTexxOES ( GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height ) +void glDrawTexxvOES ( const GLfixed *coords ) +void glEnable ( GLenum cap ) +void glEnableClientState ( GLenum array ) +void glLoadPaletteFromModelViewMatrixOES ( void ) +void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) +void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, GLint offset ) +void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) +void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, GLint offset ) diff --git a/opengl/tools/glgen/glspec-1.1extpack b/opengl/tools/glgen/glspec-1.1extpack new file mode 100644 index 0000000000..ca9e6d2c5e --- /dev/null +++ b/opengl/tools/glgen/glspec-1.1extpack @@ -0,0 +1,38 @@ +void glBindFramebufferOES ( GLint target, GLint framebuffer ) +void glBindRenderbufferOES ( GLint target, GLint renderbuffer ) +void glBindTexture ( GLint target, GLint texture ) +void glBlendEquation ( GLint mode ) +void glBlendEquationSeparate ( GLint modeRGB, GLint modeAlpha ) +void glBlendFuncSeparate ( GLint srcRGB, GLint dstRGB, GLint srcAlpha, GLint dstAlpha ) +GLint glCheckFramebufferStatusOES ( GLint target ) +void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ) +void glCopyTexImage2D ( GLint target, GLint level, GLint internalformat, GLint x, GLint y, GLint width, GLint height, GLint border ) +void glDeleteFramebuffersOES ( GLint n, GLint *framebuffers ) +void glDeleteRenderbuffersOES ( GLint n, GLint *renderbuffers ) +void glEnable ( GLint cap ) +void glFramebufferRenderbufferOES ( GLint target, GLint attachment, GLint renderbuffertarget, GLint renderbuffer ) +void glFramebufferTexture2DOES ( GLint target, GLint attachment, GLint textarget, GLint texture, GLint level ) +void glGenerateMipmapOES ( GLint target ) +void glGenFramebuffersOES ( GLint n, GLint *framebuffers ) +void glGenRenderbuffersOES ( GLint n, GLint *renderbuffers ) +void glGetFramebufferAttachmentParameterivOES ( GLint target, GLint attachment, GLint pname, GLint *params ) +void glGetIntegerv ( GLint pname, GLint *params ) +void glGetRenderbufferParameterivOES ( GLint target, GLint pname, GLint *params ) +void glGetTexGenfv ( GLint coord, GLint pname, GLfloat *params ) +void glGetTexGeniv ( GLint coord, GLint pname, GLint *params ) +void glGetTexGenxv ( GLint coord, GLint pname, GLint *params ) +GLboolean glIsFramebufferOES ( GLint framebuffer ) +GLboolean glIsRenderbufferOES ( GLint renderbuffer ) +void glRenderbufferStorageOES ( GLint target, GLint internalformat, GLint width, GLint height ) +void glStencilOp ( GLint fail, GLint zfail, GLint zpass ) +void glTexEnvf ( GLint target, GLint pname, GLfloat param ) +void glTexEnvfv ( GLint target, GLint pname, GLfloat *params ) +void glTexEnvx ( GLint target, GLint pname, GLint param ) +void glTexEnvxv ( GLint target, GLint pname, GLint *params ) +void glTexGenf ( GLint coord, GLint pname, GLfloat param ) +void glTexGenfv ( GLint coord, GLint pname, GLfloat *params ) +void glTexGeni ( GLint coord, GLint pname, GLint param ) +void glTexGeniv ( GLint coord, GLint pname, GLint *params ) +void glTexGenx ( GLint coord, GLint pname, GLint param ) +void glTexGenxv ( GLint coord, GLint pname, GLint *params ) +void glTexParameterf ( GLint target, GLint pname, GLfloat param ) diff --git a/opengl/tools/glgen/glspec-checks b/opengl/tools/glgen/glspec-checks new file mode 100644 index 0000000000..a84ed65332 --- /dev/null +++ b/opengl/tools/glgen/glspec-checks @@ -0,0 +1,59 @@ +glClipPlanef check equation 4 +glClipPlanex check equation 4 +glDeleteBuffers check buffers n +glDeleteTextures check textures n +glDrawElements check_AIOOBE indices count +glFog ifcheck params 1 pname GL_FOG_MODE,GL_FOG_DENSITY,GL_FOG_START,GL_FOG_END ifcheck params 4 pname GL_FOG_COLOR +glGenBuffers check buffers n +glGenTextures check textures n +glGetClipPlane check eqn 4 +glGetIntegerv ifcheck params 1 pname GL_ALPHA_BITS,GL_ALPHA_TEST_FUNC,GL_ALPHA_TEST_REF,GL_BLEND_DST,GL_BLUE_BITS,GL_COLOR_ARRAY_BUFFER_BINDING,GL_COLOR_ARRAY_SIZE,GL_COLOR_ARRAY_STRIDE,GL_COLOR_ARRAY_TYPE,GL_CULL_FACE,GL_DEPTH_BITS,GL_DEPTH_CLEAR_VALUE,GL_DEPTH_FUNC,GL_DEPTH_WRITEMASK,GL_FOG_DENSITY,GL_FOG_END,GL_FOG_MODE,GL_FOG_START,GL_FRONT_FACE,GL_GREEN_BITS,GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES,GL_IMPLEMENTATION_COLOR_READ_TYPE_OES,GL_LIGHT_MODEL_TWO_SIDE,GL_LINE_SMOOTH_HINT,GL_LINE_WIDTH,GL_LOGIC_OP_MODE,GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES,GL_MATRIX_INDEX_ARRAY_SIZE_OES,GL_MATRIX_INDEX_ARRAY_STRIDE_OES,GL_MATRIX_INDEX_ARRAY_TYPE_OES,GL_MATRIX_MODE,GL_MAX_CLIP_PLANES,GL_MAX_ELEMENTS_INDICES,GL_MAX_ELEMENTS_VERTICES,GL_MAX_LIGHTS,GL_MAX_MODELVIEW_STACK_DEPTH,GL_MAX_PALETTE_MATRICES_OES,GL_MAX_PROJECTION_STACK_DEPTH,GL_MAX_TEXTURE_SIZE,GL_MAX_TEXTURE_STACK_DEPTH,GL_MAX_TEXTURE_UNITS,GL_MAX_VERTEX_UNITS_OES,GL_MODELVIEW_STACK_DEPTH,GL_NORMAL_ARRAY_BUFFER_BINDING,GL_NORMAL_ARRAY_STRIDE,GL_NORMAL_ARRAY_TYPE,GL_NUM_COMPRESSED_TEXTURE_FORMATS,GL_PACK_ALIGNMENT,GL_PERSPECTIVE_CORRECTION_HINT,GL_POINT_SIZE,GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES,GL_POINT_SIZE_ARRAY_STRIDE_OES,GL_POINT_SIZE_ARRAY_TYPE_OES,GL_POINT_SMOOTH_HINT,GL_POLYGON_OFFSET_FACTOR,GL_POLYGON_OFFSET_UNITS,GL_PROJECTION_STACK_DEPTH,GL_RED_BITS,GL_SHADE_MODEL,GL_STENCIL_BITS,GL_STENCIL_CLEAR_VALUE,GL_STENCIL_FAIL,GL_STENCIL_FUNC,GL_STENCIL_PASS_DEPTH_FAIL,GL_STENCIL_PASS_DEPTH_PASS,GL_STENCIL_REF,GL_STENCIL_VALUE_MASK,GL_STENCIL_WRITEMASK,GL_SUBPIXEL_BITS,GL_TEXTURE_BINDING_2D,GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING,GL_TEXTURE_COORD_ARRAY_SIZE,GL_TEXTURE_COORD_ARRAY_STRIDE,GL_TEXTURE_COORD_ARRAY_TYPE,GL_TEXTURE_STACK_DEPTH,GL_UNPACK_ALIGNMENT,GL_VERTEX_ARRAY_BUFFER_BINDING,GL_VERTEX_ARRAY_SIZE,GL_VERTEX_ARRAY_STRIDE,GL_VERTEX_ARRAY_TYPE,GL_WEIGHT_ARRAY_BUFFER_BINDING_OES,GL_WEIGHT_ARRAY_SIZE_OES,GL_WEIGHT_ARRAY_STRIDE_OES,GL_WEIGHT_ARRAY_TYPE_OES ifcheck params 2 pname GL_ALIASED_POINT_SIZE_RANGE,GL_ALIASED_LINE_WIDTH_RANGE,GL_DEPTH_RANGE,GL_MAX_VIEWPORT_DIMS,GL_SMOOTH_LINE_WIDTH_RANGE,GL_SMOOTH_POINT_SIZE_RANGE ifcheck params 4 pname GL_COLOR_CLEAR_VALUE,GL_COLOR_WRITEMASK,GL_SCISSOR_BOX,GL_VIEWPORT ifcheck params 16 pname GL_MODELVIEW_MATRIX,GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES,GL_PROJECTION_MATRIX,GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES,GL_TEXTURE_MATRIX,GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES ifcheck params _NUM_COMPRESSED_TEXTURE_FORMATS pname GL_COMPRESSED_TEXTURE_FORMATS,GL_FOG_COLOR,GL_LIGHT_MODEL_AMBIENT +glGetLight ifcheck params 1 pname GL_SPOT_EXPONENT,GL_SPOT_CUTOFF,GL_CONSTANT_ATTENUATION,GL_LINEAR_ATTENUATION,GL_QUADRATIC_ATTENUATION ifcheck params 3 pname GL_SPOT_DIRECTION ifcheck params 4 pname GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_EMISSION +glGetMaterial ifcheck params 1 pname GL_SHININESS ifcheck params 4 pname GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_EMISSION,GL_AMBIENT_AND_DIFFUSE +glGetTexEnv ifcheck params 1 pname GL_TEXTURE_ENV_MODE,GL_COMBINE_RGB,GL_COMBINE_ALPHA ifcheck params 4 pname GL_TEXTURE_ENV_COLOR +glGetTexParameter check params 1 +glLightModel ifcheck params 1 pname GL_LIGHT_MODEL_TWO_SIDE ifcheck params 4 pname GL_LIGHT_MODEL_AMBIENT +glLight ifcheck params 1 pname GL_SPOT_EXPONENT,GL_SPOT_CUTOFF,GL_CONSTANT_ATTENUATION,GL_LINEAR_ATTENUATION,GL_QUADRATIC_ATTENUATION ifcheck params 3 pname GL_SPOT_DIRECTION ifcheck params 4 pname GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_EMISSION +glLoadMatrix check m 16 +glMaterial ifcheck params 1 pname GL_SHININESS ifcheck params 4 pname GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_EMISSION,GL_AMBIENT_AND_DIFFUSE +glMultMatrix check m 16 +glPointParameter check params 1 +glTexEnv ifcheck params 1 pname GL_TEXTURE_ENV_MODE,GL_COMBINE_RGB,GL_COMBINE_ALPHA ifcheck params 4 pname GL_TEXTURE_ENV_COLOR +glTexImage2D nullAllowed +glTexSubImage2D nullAllowed +glBufferData nullAllowed +glTexParameter check params 1 +glQueryMatrixxOES check mantissa 16 check exponent 16 return -1 +glDrawTexfvOES check coords 5 +glDrawTexivOES check coords 5 +glDrawTexsvOES check coords 5 +glDrawTexxvOES check coords 5 +glBindFramebufferOES unsupported +glBindRenderbufferOES unsupported +glBlendEquation unsupported +glBlendEquationSeparate unsupported +glBlendFuncSeparate unsupported +glCheckFramebufferStatusOES unsupported return 0 +glCurrentPaletteMatrixOES unsupported +glDeleteFramebuffersOES unsupported +glDeleteRenderbuffersOES unsupported +glFramebufferRenderbufferOES unsupported +glFramebufferStorageOES unsupported +glFramebufferTexture2DOES unsupported +glGenFramebuffersOES unsupported +glGenRenderbuffersOES unsupported +glGenerateMipmapOES unsupported +glGetBufferParameter unsupported +glGetFramebufferAttachmentParameterivOES unsupported +glGetRenderbufferParameterivOES unsupported +glGetTexGen unsupported +glIsFramebufferOES unsupported return JNI_FALSE +glIsRenderbufferOES unsupported return JNI_FALSE +glLoadPaletteFromModelViewMatrixOES unsupported +glMatrixIndexPointerOES unsupported +glRenderbufferStorageOES unsupported return false +glTexGen unsupported +glTexGenf unsupported +glTexGeni unsupported +glTexGenx unsupported +glWeightPointerOES unsupported diff --git a/opengl/tools/glgen/src/CFunc.java b/opengl/tools/glgen/src/CFunc.java new file mode 100644 index 0000000000..0794f41742 --- /dev/null +++ b/opengl/tools/glgen/src/CFunc.java @@ -0,0 +1,155 @@ + +import java.util.*; + +public class CFunc { + + String original; + + CType ftype; + String fname; + + List argNames = new ArrayList(); + List argTypes = new ArrayList(); + + boolean hasPointerArg = false; + boolean hasTypedPointerArg = false; + + public CFunc(String original) { + this.original = original; + } + + public String getOriginal() { + return original; + } + + public void setName(String fname) { + this.fname = fname; + } + + public String getName() { + return fname; + } + + public void setType(CType ftype) { + this.ftype = ftype; + } + + public CType getType() { + return ftype; + } + + public void addArgument(String argName, CType argType) { + argNames.add(argName); + argTypes.add(argType); + + if (argType.isPointer()) { + hasPointerArg = true; + } + if (argType.isTypedPointer()) { + hasTypedPointerArg = true; + } + } + + public int getNumArgs() { + return argNames.size(); + } + + public int getArgIndex(String name) { + int len = argNames.size(); + for (int i = 0; i < len; i++) { + if (name.equals(argNames.get(i))) { + return i; + } + } + return -1; + } + + public String getArgName(int index) { + return argNames.get(index); + } + + public CType getArgType(int index) { + return argTypes.get(index); + } + + public boolean hasPointerArg() { + return hasPointerArg; + } + + public boolean hasTypedPointerArg() { + return hasTypedPointerArg; + } + + public String toString() { + String s = "Function " + fname + " returns " + ftype + ": "; + for (int i = 0; i < argNames.size(); i++) { + if (i > 0) { + s += ", "; + } + s += argTypes.get(i) + " " + argNames.get(i); + } + return s; + } + + public static CFunc parseCFunc(String s) { + CFunc cfunc = new CFunc(s); + String[] tokens = s.split("\\s"); + + int i = 0; + CType ftype = new CType(); + String ftypeName = tokens[i++]; + if (ftypeName.equals("const")) { + ftype.setIsConst(true); + ftypeName = tokens[i++]; + } + ftype.setBaseType(ftypeName); + + String fname = tokens[i++]; + if (fname.equals("*")) { + ftype.setIsPointer(true); + fname = tokens[i++]; + } + + cfunc.setName(fname); + cfunc.setType(ftype); + + while (i < tokens.length) { + String tok = tokens[i++]; + + if (tok.equals("(")) { + continue; + } + if (tok.equals(")")) { + break; + } + + CType argType = new CType(); + + String argTypeName = tok; + String argName = ""; + + if (argTypeName.equals("const")) { + argType.setIsConst(true); + argTypeName = tokens[i++]; + } + argType.setBaseType(argTypeName); + + if (argTypeName.equals("void")) { + break; + } + + argName = tokens[i++]; + if (argName.startsWith("*")) { + argType.setIsPointer(true); + argName = argName.substring(1, argName.length()); + } + if (argName.endsWith(",")) { + argName = argName.substring(0, argName.length() - 1); + } + + cfunc.addArgument(argName, argType); + } + + return cfunc; + } +} diff --git a/opengl/tools/glgen/src/CType.java b/opengl/tools/glgen/src/CType.java new file mode 100644 index 0000000000..331ec625a5 --- /dev/null +++ b/opengl/tools/glgen/src/CType.java @@ -0,0 +1,85 @@ + +public class CType { + + String baseType; + boolean isConst; + boolean isPointer; + + public CType() { + } + + public CType(String baseType) { + setBaseType(baseType); + } + + public CType(String baseType, boolean isConst, boolean isPointer) { + setBaseType(baseType); + setIsConst(isConst); + setIsPointer(isPointer); + } + + public String getDeclaration() { + return baseType + (isPointer ? " *" : ""); + } + + public void setIsConst(boolean isConst) { + this.isConst = isConst; + } + + public boolean isConst() { + return isConst; + } + + public void setIsPointer(boolean isPointer) { + this.isPointer = isPointer; + } + + public boolean isPointer() { + return isPointer; + } + + boolean isVoid() { + String baseType = getBaseType(); + return baseType.equals("GLvoid") || + baseType.equals("void"); + } + + public boolean isTypedPointer() { + return isPointer() && !isVoid(); + } + + public void setBaseType(String baseType) { + this.baseType = baseType; + } + + public String getBaseType() { + return baseType; + } + + public String toString() { + String s = ""; + if (isConst()) { + s += "const "; + } + s += baseType; + if (isPointer()) { + s += "*"; + } + + return s; + } + + public int hashCode() { + return baseType.hashCode() ^ (isPointer ? 2 : 0) ^ (isConst ? 1 : 0); + } + + public boolean equals(Object o) { + if (o != null && o instanceof CType) { + CType c = (CType)o; + return baseType.equals(c.baseType) && + isPointer() == c.isPointer() && + isConst() == c.isConst(); + } + return false; + } +} diff --git a/opengl/tools/glgen/src/CodeEmitter.java b/opengl/tools/glgen/src/CodeEmitter.java new file mode 100644 index 0000000000..3e9b90aab8 --- /dev/null +++ b/opengl/tools/glgen/src/CodeEmitter.java @@ -0,0 +1,8 @@ + +public interface CodeEmitter { + + void setVersion(int version, boolean ext, boolean pack); + void emitCode(CFunc cfunc, String original); + void addNativeRegistration(String fname); + void emitNativeRegistration(); +} diff --git a/opengl/tools/glgen/src/GenerateGL.java b/opengl/tools/glgen/src/GenerateGL.java new file mode 100644 index 0000000000..657ee6e7c7 --- /dev/null +++ b/opengl/tools/glgen/src/GenerateGL.java @@ -0,0 +1,164 @@ + +import java.io.*; +import java.util.*; + +public class GenerateGL { + + static void copy(String filename, PrintStream out) throws IOException { + BufferedReader br = new BufferedReader(new FileReader(filename)); + String s; + while ((s = br.readLine()) != null) { + out.println(s); + } + } + + private static void emit(int version, boolean ext, boolean pack, + CodeEmitter emitter, + BufferedReader specReader, + PrintStream glStream, + PrintStream glImplStream, + PrintStream cStream) throws Exception { + String s = null; + int counter = 0; + while ((s = specReader.readLine()) != null) { + if (s.trim().startsWith("//")) { + continue; + } + + CFunc cfunc = CFunc.parseCFunc(s); + + String fname = cfunc.getName(); + File f = new File("stubs/" + fname + + ".java-1" + version + "-if"); + if (f.exists()) { + System.out.println("Special-casing function " + fname); + copy("stubs/" + fname + + ".java-1" + version + "-if", glStream); + copy("stubs/" + fname + ".java-impl", glImplStream); + copy("stubs/" + fname + ".cpp", cStream); + + // Register native function names + // This should be improved to require fewer discrete files + String filename = "stubs/" + fname + ".nativeReg"; + BufferedReader br = + new BufferedReader(new FileReader(filename)); + String nfunc; + while ((nfunc = br.readLine()) != null) { + emitter.addNativeRegistration(nfunc); + } + } else { + emitter.setVersion(version, ext, pack); + emitter.emitCode(cfunc, s); + } + } + } + + public static void main(String[] args) throws Exception { + String classPathName = "com/google/android/gles_jni/GLImpl"; + boolean useContextPointer = true; + + int aidx = 0; + while (args[aidx].charAt(0) == '-') { + switch (args[aidx].charAt(1)) { + case 'c': + useContextPointer = false; + break; + + default: + System.err.println("Unknown flag: " + args[aidx]); + System.exit(1); + } + + aidx++; + } + + System.out.println("useContextPointer = " + useContextPointer); + + BufferedReader spec10Reader = + new BufferedReader(new FileReader(args[aidx++])); + BufferedReader spec10ExtReader = + new BufferedReader(new FileReader(args[aidx++])); + BufferedReader spec11Reader = + new BufferedReader(new FileReader(args[aidx++])); + BufferedReader spec11ExtReader = + new BufferedReader(new FileReader(args[aidx++])); + BufferedReader spec11ExtPackReader = + new BufferedReader(new FileReader(args[aidx++])); + BufferedReader checksReader = + new BufferedReader(new FileReader(args[aidx++])); + + String gl10Filename = "javax/microedition/khronos/opengles/GL10.java"; + String gl10ExtFilename = + "javax/microedition/khronos/opengles/GL10Ext.java"; + String gl11Filename = "javax/microedition/khronos/opengles/GL11.java"; + String gl11ExtFilename = + "javax/microedition/khronos/opengles/GL11Ext.java"; + String gl11ExtPackFilename = + "javax/microedition/khronos/opengles/GL11ExtensionPack.java"; + String glImplFilename = "com/google/android/gles_jni/GLImpl.java"; + String cFilename = "com_google_android_gles_jni_GLImpl.cpp"; + + PrintStream gl10Stream = + new PrintStream(new FileOutputStream("out/" + gl10Filename)); + PrintStream gl10ExtStream = + new PrintStream(new FileOutputStream("out/" + gl10ExtFilename)); + PrintStream gl11Stream = + new PrintStream(new FileOutputStream("out/" + gl11Filename)); + PrintStream gl11ExtStream = + new PrintStream(new FileOutputStream("out/" + gl11ExtFilename)); + PrintStream gl11ExtPackStream = + new PrintStream(new FileOutputStream("out/" + gl11ExtPackFilename)); + PrintStream glImplStream = + new PrintStream(new FileOutputStream("out/" + glImplFilename)); + PrintStream cStream = + new PrintStream(new FileOutputStream("out/" + cFilename)); + + ParameterChecker checker = new ParameterChecker(checksReader); + + CodeEmitter emitter = + new JniCodeEmitter(classPathName, + checker, + gl10Stream, gl10ExtStream, + gl11Stream, gl11ExtStream, gl11ExtPackStream, + glImplStream, cStream, + useContextPointer); + + gl10Stream.println("/* //device/java/android/" + gl10Filename); + gl10ExtStream.println("/* //device/java/android/" + gl10ExtFilename); + gl11Stream.println("/* //device/java/android/" + gl11Filename); + gl11ExtStream.println("/* //device/java/android/" + gl11ExtFilename); + gl11ExtPackStream.println("/* //device/java/android/" + + gl11ExtPackFilename); + glImplStream.println("/* //device/java/android/" + glImplFilename); + cStream.println("/* //device/libs/android_runtime/" + cFilename); + + copy("stubs/GL10Header.java-if", gl10Stream); + copy("stubs/GL10ExtHeader.java-if", gl10ExtStream); + copy("stubs/GL11Header.java-if", gl11Stream); + copy("stubs/GL11ExtHeader.java-if", gl11ExtStream); + copy("stubs/GL11ExtensionPackHeader.java-if", gl11ExtPackStream); + copy("stubs/GLImplHeader.java-impl", glImplStream); + copy("stubs/GLCHeader.cpp", cStream); + + emit(0, false, false, + emitter, spec10Reader, gl10Stream, glImplStream, cStream); + emit(0, true, false, + emitter, spec10ExtReader, gl10ExtStream, glImplStream, cStream); + emit(1, false, false, + emitter, spec11Reader, gl11Stream, glImplStream, cStream); + emit(1, true, false, + emitter, spec11ExtReader, gl11ExtStream, glImplStream, cStream); + emit(1, true, true, + emitter, spec11ExtPackReader, gl11ExtPackStream, glImplStream, + cStream); + + emitter.emitNativeRegistration(); + + gl10Stream.println("}"); + gl10ExtStream.println("}"); + gl11Stream.println("}"); + gl11ExtStream.println("}"); + gl11ExtPackStream.println("}"); + glImplStream.println("}"); + } +} diff --git a/opengl/tools/glgen/src/JFunc.java b/opengl/tools/glgen/src/JFunc.java new file mode 100644 index 0000000000..42d466c33e --- /dev/null +++ b/opengl/tools/glgen/src/JFunc.java @@ -0,0 +1,148 @@ + +import java.util.ArrayList; +import java.util.List; + +public class JFunc { + + String className = "com.google.android.gles_jni.GL11Impl"; + + CFunc cfunc; + JType ftype; + String fname; + + List argNames = new ArrayList(); + List argTypes = new ArrayList(); + List argCIndices = new ArrayList(); + + boolean hasBufferArg = false; + boolean hasTypedBufferArg = false; + ArrayList bufferArgNames = new ArrayList(); + + public JFunc(CFunc cfunc) { + this.cfunc = cfunc; + } + + public CFunc getCFunc() { + return cfunc; + } + + public void setName(String fname) { + this.fname = fname; + } + + public String getName() { + return fname; + } + + public void setType(JType ftype) { + this.ftype = ftype; + } + + public JType getType() { + return ftype; + } + + public void setClassName(String className) { + this.className = className; + } + + public String getClassName() { + return className; + } + + public boolean hasBufferArg() { + return hasBufferArg; + } + + public boolean hasTypedBufferArg() { + return hasTypedBufferArg; + } + + public String getBufferArgName(int index) { + return bufferArgNames.get(index); + } + + public void addArgument(String argName, JType argType, int cindex) { + argNames.add(argName); + argTypes.add(argType); + argCIndices.add(new Integer(cindex)); + + if (argType.isBuffer()) { + hasBufferArg = true; + bufferArgNames.add(argName); + } + if (argType.isTypedBuffer()) { + hasTypedBufferArg = true; + bufferArgNames.add(argName); + } + } + + public int getNumArgs() { + return argNames.size(); + } + + public int getArgIndex(String name) { + int len = argNames.size(); + for (int i = 0; i < len; i++) { + if (name.equals(argNames.get(i))) { + return i; + } + } + return -1; + } + + public String getArgName(int index) { + return argNames.get(index); + } + + public JType getArgType(int index) { + return argTypes.get(index); + } + + public int getArgCIndex(int index) { + return argCIndices.get(index).intValue(); + } + + public static JFunc convert(CFunc cfunc, boolean useArray) { + JFunc jfunc = new JFunc(cfunc); + jfunc.setName(cfunc.getName()); + jfunc.setType(JType.convert(cfunc.getType(), false)); + + int numArgs = cfunc.getNumArgs(); + int numOffsets = 0; + for (int i = 0; i < numArgs; i++) { + CType cArgType = cfunc.getArgType(i); + if (cArgType.isTypedPointer() && useArray) { + ++numOffsets; + } + } + + for (int i = 0; i < numArgs; i++) { + String cArgName = cfunc.getArgName(i); + CType cArgType = cfunc.getArgType(i); + + jfunc.addArgument(cArgName, JType.convert(cArgType, useArray), i); + if (cArgType.isTypedPointer() && useArray) { + if (numOffsets > 1) { + jfunc.addArgument(cArgName + "Offset", new JType("int"), i); + } else { + jfunc.addArgument("offset", new JType("int"), i); + } + } + } + + return jfunc; + } + + public String toString() { + String s = "Function " + fname + " returns " + ftype + ": "; + for (int i = 0; i < argNames.size(); i++) { + if (i > 0) { + s += ", "; + } + s += argTypes.get(i) + " " + argNames.get(i); + } + return s; + } + +} diff --git a/opengl/tools/glgen/src/JType.java b/opengl/tools/glgen/src/JType.java new file mode 100644 index 0000000000..a16d4400d8 --- /dev/null +++ b/opengl/tools/glgen/src/JType.java @@ -0,0 +1,139 @@ + +import java.util.HashMap; + +public class JType { + + String baseType; + boolean isArray; + boolean isClass; + + static HashMap typeMapping = new HashMap(); + static HashMap arrayTypeMapping = new HashMap(); + + static { + // Primitive types + typeMapping.put(new CType("GLbitfield"), new JType("int")); + typeMapping.put(new CType("GLboolean"), new JType("boolean")); + typeMapping.put(new CType("GLclampf"), new JType("float")); + typeMapping.put(new CType("GLclampx"), new JType("int")); + typeMapping.put(new CType("GLenum"), new JType("int")); + typeMapping.put(new CType("GLfloat"), new JType("float")); + typeMapping.put(new CType("GLfixed"), new JType("int")); + typeMapping.put(new CType("GLint"), new JType("int")); + typeMapping.put(new CType("GLintptr"), new JType("int")); + typeMapping.put(new CType("GLshort"), new JType("short")); + typeMapping.put(new CType("GLsizei"), new JType("int")); + typeMapping.put(new CType("GLsizeiptr"), new JType("int")); + typeMapping.put(new CType("GLubyte"), new JType("byte")); + typeMapping.put(new CType("GLuint"), new JType("int")); + typeMapping.put(new CType("void"), new JType("void")); + typeMapping.put(new CType("GLubyte", true, true), new JType("String")); + + // Untyped pointers map to untyped Buffers + typeMapping.put(new CType("GLvoid", true, true), + new JType("java.nio.Buffer", true, false)); + typeMapping.put(new CType("GLvoid", false, true), + new JType("java.nio.Buffer", true, false)); + typeMapping.put(new CType("void", false, true), + new JType("java.nio.Buffer", true, false)); + + // Typed pointers map to typed Buffers + typeMapping.put(new CType("GLboolean", false, true), + new JType("java.nio.IntBuffer", true, false)); + typeMapping.put(new CType("GLfixed", false, true), + new JType("java.nio.IntBuffer", true, false)); + typeMapping.put(new CType("GLfixed", true, true), + new JType("java.nio.IntBuffer", true, false)); + typeMapping.put(new CType("GLfloat", false, true), + new JType("java.nio.FloatBuffer", true, false)); + typeMapping.put(new CType("GLfloat", true, true), + new JType("java.nio.FloatBuffer", true, false)); + typeMapping.put(new CType("GLint", false, true), + new JType("java.nio.IntBuffer", true, false)); + typeMapping.put(new CType("GLint", true, true), + new JType("java.nio.IntBuffer", true, false)); + typeMapping.put(new CType("GLuint", false, true), + new JType("java.nio.IntBuffer", true, false)); + typeMapping.put(new CType("GLuint", true, true), + new JType("java.nio.IntBuffer", true, false)); + typeMapping.put(new CType("GLshort", true, true), + new JType("java.nio.ShortBuffer", true, false)); + + // Typed pointers map to arrays + offsets + arrayTypeMapping.put(new CType("GLboolean", false, true), + new JType("boolean", false, true)); + arrayTypeMapping.put(new CType("GLfixed", true, true), new JType("int", false, true)); + arrayTypeMapping.put(new CType("GLfixed", false, true), new JType("int", false, true)); + arrayTypeMapping.put(new CType("GLfloat", false, true), new JType("float", false, true)); + arrayTypeMapping.put(new CType("GLfloat", true, true), new JType("float", false, true)); + arrayTypeMapping.put(new CType("GLint", false, true), new JType("int", false, true)); + arrayTypeMapping.put(new CType("GLint", true, true), new JType("int", false, true)); + arrayTypeMapping.put(new CType("GLshort", true, true), new JType("short", false, true)); + arrayTypeMapping.put(new CType("GLuint", false, true), new JType("int", false, true)); + arrayTypeMapping.put(new CType("GLuint", true, true), new JType("int", false, true)); + arrayTypeMapping.put(new CType("GLintptr"), new JType("int", false, true)); + arrayTypeMapping.put(new CType("GLsizeiptr"), new JType("int", false, true)); + } + + public JType() { + } + + public JType(String primitiveTypeName) { + this.baseType = primitiveTypeName; + this.isClass = false; + this.isArray = false; + } + + public JType(String primitiveTypeName, boolean isClass, boolean isArray) { + this.baseType = primitiveTypeName; + this.isClass = isClass; + this.isArray = isArray; + } + + public String getBaseType() { + return baseType; + } + + public String toString() { + return baseType + (isArray ? "[]" : ""); + } + + public boolean isArray() { + return isArray; + } + + public boolean isClass() { + return isClass; + } + + public boolean isPrimitive() { + return !isClass() && !isArray(); + } + + public boolean isVoid() { + return baseType.equals("void"); + } + + public boolean isBuffer() { + return baseType.indexOf("Buffer") != -1; + } + + public boolean isTypedBuffer() { + return !baseType.equals("java.nio.Buffer") && + (baseType.indexOf("Buffer") != -1); + } + + public static JType convert(CType ctype, boolean useArray) { + JType javaType = null; + if (useArray) { + javaType = arrayTypeMapping.get(ctype); + } + if (javaType == null) { + javaType = typeMapping.get(ctype); + } + if (javaType == null) { + throw new RuntimeException("Unsupported C type: " + ctype); + } + return javaType; + } +} diff --git a/opengl/tools/glgen/src/JniCodeEmitter.java b/opengl/tools/glgen/src/JniCodeEmitter.java new file mode 100644 index 0000000000..33b9a3e538 --- /dev/null +++ b/opengl/tools/glgen/src/JniCodeEmitter.java @@ -0,0 +1,1086 @@ +import java.io.PrintStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; + +/** + * Emits a Java interface and Java & C implementation for a C function. + * + *

    The Java interface will have Buffer and array variants for functions that + * have a typed pointer argument. The array variant will convert a single " *data" + * argument to a pair of arguments "[] data, int offset". + */ +public class JniCodeEmitter implements CodeEmitter { + + // If true, use C++ style for calling through a JNIEnv *: + // env->Func(...) + // If false, use C style: + // (*env)->Func(env, ...) + static final boolean mUseCPlusPlus = true; + + boolean mUseContextPointer = true; + + String mClassPathName; + + ParameterChecker mChecker; + PrintStream mJava10InterfaceStream; + PrintStream mJava10ExtInterfaceStream; + PrintStream mJava11InterfaceStream; + PrintStream mJava11ExtInterfaceStream; + PrintStream mJava11ExtPackInterfaceStream; + PrintStream mJavaImplStream; + PrintStream mCStream; + + PrintStream mJavaInterfaceStream; + + List nativeRegistrations = new ArrayList(); + + boolean needsExit; + + static String indent = " "; + + HashSet mFunctionsEmitted = new HashSet(); + + /** + * @param java10InterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 functions + * @param java10ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 extension functions + * @param java11InterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 functions + * @param java11ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension functions + * @param java11ExtPackInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension Pack functions + * @param javaImplStream the PrintStream to which to emit the Java implementation + * @param cStream the PrintStream to which to emit the C implementation + */ + public JniCodeEmitter(String classPathName, + ParameterChecker checker, + PrintStream java10InterfaceStream, + PrintStream java10ExtInterfaceStream, + PrintStream java11InterfaceStream, + PrintStream java11ExtInterfaceStream, + PrintStream java11ExtPackInterfaceStream, + PrintStream javaImplStream, + PrintStream cStream, + boolean useContextPointer) { + mClassPathName = classPathName; + mChecker = checker; + mJava10InterfaceStream = java10InterfaceStream; + mJava10ExtInterfaceStream = java10ExtInterfaceStream; + mJava11InterfaceStream = java11InterfaceStream; + mJava11ExtInterfaceStream = java11ExtInterfaceStream; + mJava11ExtPackInterfaceStream = java11ExtPackInterfaceStream; + mJavaImplStream = javaImplStream; + mCStream = cStream; + mUseContextPointer = useContextPointer; + } + + public void setVersion(int version, boolean ext, boolean pack) { + if (version == 0) { + mJavaInterfaceStream = ext ? mJava10ExtInterfaceStream : + mJava10InterfaceStream; + } else if (version == 1) { + mJavaInterfaceStream = ext ? + (pack ? mJava11ExtPackInterfaceStream : + mJava11ExtInterfaceStream) : + mJava11InterfaceStream; + } else { + throw new RuntimeException("Bad version: " + version); + } + } + + public void emitCode(CFunc cfunc, String original) { + JFunc jfunc; + String signature; + boolean duplicate; + + if (cfunc.hasTypedPointerArg()) { + jfunc = JFunc.convert(cfunc, true); + + // Don't emit duplicate functions + // These may appear because they are defined in multiple + // Java interfaces (e.g., GL11/GL11ExtensionPack) + signature = jfunc.toString(); + duplicate = false; + if (mFunctionsEmitted.contains(signature)) { + duplicate = true; + } else { + mFunctionsEmitted.add(signature); + } + + if (!duplicate) { + emitNativeDeclaration(jfunc, mJavaImplStream); + emitJavaCode(jfunc, mJavaImplStream); + } + emitJavaInterfaceCode(jfunc, mJavaInterfaceStream); + if (!duplicate) { + emitJniCode(jfunc, mCStream); + } + } + + jfunc = JFunc.convert(cfunc, false); + + signature = jfunc.toString(); + duplicate = false; + if (mFunctionsEmitted.contains(signature)) { + duplicate = true; + } else { + mFunctionsEmitted.add(signature); + } + + if (!duplicate) { + emitNativeDeclaration(jfunc, mJavaImplStream); + } + emitJavaInterfaceCode(jfunc, mJavaInterfaceStream); + if (!duplicate) { + emitJavaCode(jfunc, mJavaImplStream); + emitJniCode(jfunc, mCStream); + } + } + + public void emitNativeDeclaration(JFunc jfunc, PrintStream out) { + out.println(" // C function " + jfunc.getCFunc().getOriginal()); + out.println(); + + emitFunction(jfunc, out, true, false); + } + + public void emitJavaInterfaceCode(JFunc jfunc, PrintStream out) { + emitFunction(jfunc, out, false, true); + } + + public void emitJavaCode(JFunc jfunc, PrintStream out) { + emitFunction(jfunc, out, false, false); + } + + void emitFunctionCall(JFunc jfunc, PrintStream out, String iii, boolean grabArray ) { + boolean isVoid = jfunc.getType().isVoid(); + boolean isPointerFunc = jfunc.getName().endsWith("Pointer") && + jfunc.getCFunc().hasPointerArg(); + + if (!isVoid) { + out.println(iii + + jfunc.getType() + " _returnValue;"); + } + out.println(iii + + (isVoid ? "" : "_returnValue = ") + + jfunc.getName() + + (isPointerFunc ? "Bounds" : "" ) + + "("); + + int numArgs = jfunc.getNumArgs(); + for (int i = 0; i < numArgs; i++) { + String argName = jfunc.getArgName(i); + JType argType = jfunc.getArgType(i); + + if (grabArray && argType.isTypedBuffer()) { + String typeName = argType.getBaseType(); + typeName = typeName.substring(9, typeName.length() - 6); + out.println(iii + indent + "get" + typeName + "Array(" + argName + "),"); + out.print(iii + indent + "getOffset(" + argName + ")"); + } else { + out.print(iii + indent + argName); + } + if (i == numArgs - 1) { + if (isPointerFunc) { + out.println(","); + out.println(iii + indent + argName + ".remaining()"); + } else { + out.println(); + } + } else { + out.println(","); + } + } + + out.println(iii + ");"); + } + + void printIfcheckPostamble(PrintStream out, boolean isBuffer, + boolean emitExceptionCheck, String iii) { + printIfcheckPostamble(out, isBuffer, emitExceptionCheck, + "offset", "_remaining", iii); + } + + void printIfcheckPostamble(PrintStream out, boolean isBuffer, + boolean emitExceptionCheck, + String offset, String remaining, String iii) { + out.println(iii + " default:"); + out.println(iii + " _needed = 0;"); + out.println(iii + " break;"); + out.println(iii + "}"); + + out.println(iii + "if (" + remaining + " < _needed) {"); + if (emitExceptionCheck) { + out.println(iii + indent + "_exception = 1;"); + } + out.println(iii + indent + + (mUseCPlusPlus ? "_env" : "(*_env)") + + "->ThrowNew(" + + (mUseCPlusPlus ? "" : "_env, ") + + "IAEClass, " + + "\"" + + (isBuffer ? + "remaining()" : "length - " + offset) + + " < needed\");"); + out.println(iii + indent + "goto exit;"); + needsExit = true; + out.println(iii + "}"); + } + + boolean isNullAllowed(CFunc cfunc) { + String[] checks = mChecker.getChecks(cfunc.getName()); + int index = 1; + if (checks != null) { + while (index < checks.length) { + if (checks[index].equals("return")) { + index += 2; + } else if (checks[index].startsWith("check")) { + index += 3; + } else if (checks[index].equals("ifcheck")) { + index += 5; + } else if (checks[index].equals("unsupported")) { + index += 1; + } else if (checks[index].equals("nullAllowed")) { + return true; + } else { + System.out.println("Error: unknown keyword \"" + + checks[index] + "\""); + System.exit(0); + } + } + } + return false; + } + + String getErrorReturnValue(CFunc cfunc) { + CType returnType = cfunc.getType(); + boolean isVoid = returnType.isVoid(); + if (isVoid) { + return null; + } + + String[] checks = mChecker.getChecks(cfunc.getName()); + + int index = 1; + if (checks != null) { + while (index < checks.length) { + if (checks[index].equals("return")) { + return checks[index + 1]; + } else if (checks[index].startsWith("check")) { + index += 3; + } else if (checks[index].equals("ifcheck")) { + index += 5; + } else if (checks[index].equals("unsupported")) { + index += 1; + } else if (checks[index].equals("nullAllowed")) { + index += 1; + } else { + System.out.println("Error: unknown keyword \"" + + checks[index] + "\""); + System.exit(0); + } + } + } + + return null; + } + + boolean isUnsupportedFunc(CFunc cfunc) { + String[] checks = mChecker.getChecks(cfunc.getName()); + int index = 1; + if (checks != null) { + while (index < checks.length) { + if (checks[index].equals("unsupported")) { + return true; + } else if (checks[index].equals("return")) { + index += 2; + } else if (checks[index].startsWith("check")) { + index += 3; + } else if (checks[index].equals("ifcheck")) { + index += 5; + } else if (checks[index].equals("nullAllowed")) { + index += 1; + } else { + System.out.println("Error: unknown keyword \"" + + checks[index] + "\""); + System.exit(0); + } + } + } + return false; + } + + void emitNativeBoundsChecks(CFunc cfunc, String cname, PrintStream out, + boolean isBuffer, boolean emitExceptionCheck, + String offset, String remaining, String iii) { + CType returnType = cfunc.getType(); + boolean isVoid = returnType.isVoid(); + + String[] checks = mChecker.getChecks(cfunc.getName()); + String checkVar; + String retval = getErrorReturnValue(cfunc); + + boolean lastWasIfcheck = false; + + int index = 1; + if (checks != null) { + boolean remainingDeclared = false; + boolean nullCheckDeclared = false; + boolean offsetChecked = false; + while (index < checks.length) { + if (checks[index].startsWith("check")) { + if (lastWasIfcheck) { + printIfcheckPostamble(out, isBuffer, emitExceptionCheck, + offset, remaining, iii); + } + lastWasIfcheck = false; + if (cname != null && !cname.equals(checks[index + 1])) { + index += 3; + continue; + } + out.println(iii + "if (" + remaining + " < " + + checks[index + 2] + + ") {"); + if (emitExceptionCheck) { + out.println(iii + indent + "_exception = 1;"); + } + String exceptionClassName = "IAEClass"; + // If the "check" keyword was of the form + // "check_", use the class name in the + // exception to be thrown + int underscore = checks[index].indexOf('_'); + if (underscore >= 0) { + exceptionClassName = checks[index].substring(underscore + 1) + "Class"; + } + out.println(iii + indent + + (mUseCPlusPlus ? "_env" : "(*_env)") + + "->ThrowNew(" + + (mUseCPlusPlus ? "" : "_env, ") + + exceptionClassName + ", " + + "\"" + + (isBuffer ? + "remaining()" : "length - " + offset) + + " < " + checks[index + 2] + + "\");"); + + out.println(iii + indent + "goto exit;"); + needsExit = true; + out.println(iii + "}"); + + index += 3; + } else if (checks[index].equals("ifcheck")) { + String[] matches = checks[index + 4].split(","); + + if (!lastWasIfcheck) { + out.println(iii + "int _needed;"); + out.println(iii + + "switch (" + + checks[index + 3] + + ") {"); + } + + for (int i = 0; i < matches.length; i++) { + out.println("#if defined(" + matches[i] + ")"); + out.println(iii + + " case " + + matches[i] + + ":"); + out.println("#endif // defined(" + matches[i] + ")"); + } + out.println(iii + + " _needed = " + + checks[index + 2] + + ";"); + out.println(iii + + " break;"); + + lastWasIfcheck = true; + index += 5; + } else if (checks[index].equals("return")) { + // ignore + index += 2; + } else if (checks[index].equals("unsupported")) { + // ignore + index += 1; + } else if (checks[index].equals("nullAllowed")) { + // ignore + index += 1; + } else { + System.out.println("Error: unknown keyword \"" + + checks[index] + "\""); + System.exit(0); + } + } + } + + if (lastWasIfcheck) { + printIfcheckPostamble(out, isBuffer, emitExceptionCheck, iii); + } + } + + boolean hasNonConstArg(JFunc jfunc, CFunc cfunc, + List nonPrimitiveArgs) { + if (nonPrimitiveArgs.size() > 0) { + for (int i = nonPrimitiveArgs.size() - 1; i >= 0; i--) { + int idx = nonPrimitiveArgs.get(i).intValue(); + int cIndex = jfunc.getArgCIndex(idx); + if (jfunc.getArgType(idx).isArray()) { + if (!cfunc.getArgType(cIndex).isConst()) { + return true; + } + } else if (jfunc.getArgType(idx).isBuffer()) { + if (!cfunc.getArgType(cIndex).isConst()) { + return true; + } + } + } + } + + return false; + } + + /** + * Emit a function in several variants: + * + * if nativeDecl: public native func(args); + * + * if !nativeDecl: + * if interfaceDecl: public func(args); + * if !interfaceDecl: public func(args) { body } + */ + void emitFunction(JFunc jfunc, + PrintStream out, + boolean nativeDecl, boolean interfaceDecl) { + boolean isPointerFunc = + jfunc.getName().endsWith("Pointer") && + jfunc.getCFunc().hasPointerArg(); + + if (!nativeDecl && !interfaceDecl && !isPointerFunc) { + // If it's not a pointer function, we've already emitted it + // with nativeDecl == true + return; + } + + if (isPointerFunc) { + out.println(indent + + (nativeDecl ? "private native " : + (interfaceDecl ? "" : "public ")) + + jfunc.getType() + " " + + jfunc.getName() + + (nativeDecl ? "Bounds" : "") + + "("); + } else { + out.println(indent + + (nativeDecl ? "public native " : + (interfaceDecl ? "" : "public ")) + + jfunc.getType() + " " + + jfunc.getName() + + "("); + } + + int numArgs = jfunc.getNumArgs(); + for (int i = 0; i < numArgs; i++) { + String argName = jfunc.getArgName(i); + JType argType = jfunc.getArgType(i); + + out.print(indent + indent + argType + " " + argName); + if (i == numArgs - 1) { + if (isPointerFunc && nativeDecl) { + out.println(","); + out.println(indent + indent + "int remaining"); + } else { + out.println(); + } + } else { + out.println(","); + } + } + + if (nativeDecl || interfaceDecl) { + out.println(indent + ");"); + } else { + out.println(indent + ") {"); + + String iii = indent + indent; + + String fname = jfunc.getName(); + if (isPointerFunc) { + // TODO - deal with VBO variants + if (fname.equals("glColorPointer")) { + out.println(iii + "if ((size == 4) &&"); + out.println(iii + " ((type == GL_FLOAT) ||"); + out.println(iii + " (type == GL_UNSIGNED_BYTE) ||"); + out.println(iii + " (type == GL_FIXED)) &&"); + out.println(iii + " (stride >= 0)) {"); + out.println(iii + indent + "_colorPointer = pointer;"); + out.println(iii + "}"); + } else if (fname.equals("glNormalPointer")) { + out.println(iii + "if (((type == GL_FLOAT) ||"); + out.println(iii + " (type == GL_BYTE) ||"); + out.println(iii + " (type == GL_SHORT) ||"); + out.println(iii + " (type == GL_FIXED)) &&"); + out.println(iii + " (stride >= 0)) {"); + out.println(iii + indent + "_normalPointer = pointer;"); + out.println(iii + "}"); + } else if (fname.equals("glTexCoordPointer")) { + out.println(iii + "if (((size == 2) ||"); + out.println(iii + " (size == 3) ||"); + out.println(iii + " (size == 4)) &&"); + out.println(iii + " ((type == GL_FLOAT) ||"); + out.println(iii + " (type == GL_BYTE) ||"); + out.println(iii + " (type == GL_SHORT) ||"); + out.println(iii + " (type == GL_FIXED)) &&"); + out.println(iii + " (stride >= 0)) {"); + out.println(iii + indent + "_texCoordPointer = pointer;"); + out.println(iii + "}"); + } else if (fname.equals("glVertexPointer")) { + out.println(iii + "if (((size == 2) ||"); + out.println(iii + " (size == 3) ||"); + out.println(iii + " (size == 4)) &&"); + out.println(iii + " ((type == GL_FLOAT) ||"); + out.println(iii + " (type == GL_BYTE) ||"); + out.println(iii + " (type == GL_SHORT) ||"); + out.println(iii + " (type == GL_FIXED)) &&"); + out.println(iii + " (stride >= 0)) {"); + out.println(iii + indent + "_vertexPointer = pointer;"); + out.println(iii + "}"); + } + } + + // emitBoundsChecks(jfunc, out, iii); + emitFunctionCall(jfunc, out, iii, false); + + boolean isVoid = jfunc.getType().isVoid(); + + if (!isVoid) { + out.println(indent + indent + "return _returnValue;"); + } + out.println(indent + "}"); + } + out.println(); + } + + public static String getJniName(JType jType) { + String jniName = ""; + if (jType.isClass()) { + return "L" + jType.getBaseType() + ";"; + } else if (jType.isArray()) { + jniName = "["; + } + + String baseType = jType.getBaseType(); + if (baseType.equals("int")) { + jniName += "I"; + } else if (baseType.equals("float")) { + jniName += "F"; + } else if (baseType.equals("boolean")) { + jniName += "Z"; + } else if (baseType.equals("short")) { + jniName += "S"; + } else if (baseType.equals("long")) { + jniName += "L"; + } else if (baseType.equals("byte")) { + jniName += "B"; + } + return jniName; + } + + String getJniType(JType jType) { + if (jType.isVoid()) { + return "void"; + } + + String baseType = jType.getBaseType(); + if (jType.isPrimitive()) { + if (baseType.equals("String")) { + return "jstring"; + } else { + return "j" + baseType; + } + } else if (jType.isArray()) { + return "j" + baseType + "Array"; + } else { + return "jobject"; + } + } + + String getJniMangledName(String name) { + name = name.replaceAll("_", "_1"); + name = name.replaceAll(";", "_2"); + name = name.replaceAll("\\[", "_3"); + return name; + } + + public void emitJniCode(JFunc jfunc, PrintStream out) { + CFunc cfunc = jfunc.getCFunc(); + + // Emit comment identifying original C function + // + // Example: + // + // /* void glClipPlanef ( GLenum plane, const GLfloat *equation ) */ + // + out.println("/* " + cfunc.getOriginal() + " */"); + + // Emit JNI signature (name) + // + // Example: + // + // void + // android_glClipPlanef__I_3FI + // + + String outName = "android_" + jfunc.getName(); + boolean isPointerFunc = outName.endsWith("Pointer") && + jfunc.getCFunc().hasPointerArg(); + boolean isVBOPointerFunc = (outName.endsWith("Pointer") || + outName.endsWith("DrawElements")) && + !jfunc.getCFunc().hasPointerArg(); + if (isPointerFunc) { + outName += "Bounds"; + } + + out.print("static "); + out.println(getJniType(jfunc.getType())); + out.print(outName); + + String rsignature = getJniName(jfunc.getType()); + + String signature = ""; + int numArgs = jfunc.getNumArgs(); + for (int i = 0; i < numArgs; i++) { + JType argType = jfunc.getArgType(i); + signature += getJniName(argType); + } + if (isPointerFunc) { + signature += "I"; + } + + // Append signature to function name + String sig = getJniMangledName(signature).replace('.', '_'); + out.print("__" + sig); + outName += "__" + sig; + + signature = signature.replace('.', '/'); + rsignature = rsignature.replace('.', '/'); + + out.println(); + if (rsignature.length() == 0) { + rsignature = "V"; + } + + String s = "{\"" + + jfunc.getName() + + (isPointerFunc ? "Bounds" : "") + + "\", \"(" + signature +")" + + rsignature + + "\", (void *) " + + outName + + " },"; + nativeRegistrations.add(s); + + List nonPrimitiveArgs = new ArrayList(); + int numBufferArgs = 0; + List bufferArgNames = new ArrayList(); + + // Emit JNI signature (arguments) + // + // Example: + // + // (JNIEnv *_env, jobject this, jint plane, jfloatArray equation_ref, jint offset) { + // + out.print(" (JNIEnv *_env, jobject _this"); + for (int i = 0; i < numArgs; i++) { + out.print(", "); + JType argType = jfunc.getArgType(i); + String suffix; + if (!argType.isPrimitive()) { + if (argType.isArray()) { + suffix = "_ref"; + } else { + suffix = "_buf"; + } + nonPrimitiveArgs.add(new Integer(i)); + if (jfunc.getArgType(i).isBuffer()) { + int cIndex = jfunc.getArgCIndex(i); + String cname = cfunc.getArgName(cIndex); + bufferArgNames.add(cname); + numBufferArgs++; + } + } else { + suffix = ""; + } + + out.print(getJniType(argType) + " " + jfunc.getArgName(i) + suffix); + } + if (isPointerFunc) { + out.print(", jint remaining"); + } + out.println(") {"); + + int numArrays = 0; + int numBuffers = 0; + for (int i = 0; i < nonPrimitiveArgs.size(); i++) { + int idx = nonPrimitiveArgs.get(i).intValue(); + int cIndex = jfunc.getArgCIndex(idx); + String cname = cfunc.getArgName(cIndex); + if (jfunc.getArgType(idx).isArray()) { + ++numArrays; + } + if (jfunc.getArgType(idx).isBuffer()) { + ++numBuffers; + } + } + + // Emit method body + + // Emit local variable declarations for _exception and _returnValue + // + // Example: + // + // android::gl::ogles_context_t *ctx; + // + // jint _exception; + // GLenum _returnValue; + // + CType returnType = cfunc.getType(); + boolean isVoid = returnType.isVoid(); + + boolean isUnsupported = isUnsupportedFunc(cfunc); + if (isUnsupported) { + out.println(indent + + "_env->ThrowNew(UOEClass,"); + out.println(indent + + " \"" + cfunc.getName() + "\");"); + if (!isVoid) { + String retval = getErrorReturnValue(cfunc); + out.println(indent + "return " + retval + ";"); + } + out.println("}"); + out.println(); + return; + } + + if (mUseContextPointer) { + out.println(indent + + "android::gl::ogles_context_t *ctx = getContext(_env, _this);"); + } + + boolean emitExceptionCheck = (numArrays > 0 || numBuffers > 0) && + hasNonConstArg(jfunc, cfunc, nonPrimitiveArgs); + // mChecker.getChecks(cfunc.getName()) != null + + // Emit an _exeption variable if there will be error checks + if (emitExceptionCheck) { + out.println(indent + "jint _exception = 0;"); + } + + // Emit a single _array or multiple _XXXArray variables + if (numBufferArgs == 1) { + out.println(indent + "jarray _array = (jarray) 0;"); + } else { + for (int i = 0; i < numBufferArgs; i++) { + out.println(indent + "jarray _" + bufferArgNames.get(i) + + "Array = (jarray) 0;"); + } + } + if (!isVoid) { + String retval = getErrorReturnValue(cfunc); + if (retval != null) { + out.println(indent + returnType.getDeclaration() + + " _returnValue = " + retval + ";"); + } else { + out.println(indent + returnType.getDeclaration() + + " _returnValue;"); + } + } + + // Emit local variable declarations for pointer arguments + // + // Example: + // + // GLfixed *eqn_base; + // GLfixed *eqn; + // + String offset = "offset"; + String remaining = "_remaining"; + if (nonPrimitiveArgs.size() > 0) { + for (int i = 0; i < nonPrimitiveArgs.size(); i++) { + int idx = nonPrimitiveArgs.get(i).intValue(); + int cIndex = jfunc.getArgCIndex(idx); + String cname = cfunc.getArgName(cIndex); + + CType type = cfunc.getArgType(jfunc.getArgCIndex(idx)); + String decl = type.getDeclaration(); + if (jfunc.getArgType(idx).isArray()) { + out.println(indent + + decl + + (decl.endsWith("*") ? "" : " ") + + jfunc.getArgName(idx) + + "_base = (" + decl + ") 0;"); + } + remaining = (numArrays <= 1 && numBuffers <= 1) ? "_remaining" : + "_" + cname + "Remaining"; + out.println(indent + + "jint " + remaining + ";"); + out.println(indent + + decl + + (decl.endsWith("*") ? "" : " ") + + jfunc.getArgName(idx) + + " = (" + decl + ") 0;"); + } + + out.println(); + } + + String retval = isVoid ? "" : " _returnValue"; + + // Emit 'GetPrimitiveArrayCritical' for arrays + // Emit 'GetPointer' calls for Buffer pointers + int bufArgIdx = 0; + if (nonPrimitiveArgs.size() > 0) { + for (int i = 0; i < nonPrimitiveArgs.size(); i++) { + int idx = nonPrimitiveArgs.get(i).intValue(); + int cIndex = jfunc.getArgCIndex(idx); + + String cname = cfunc.getArgName(cIndex); + offset = numArrays <= 1 ? "offset" : + cname + "Offset"; + remaining = (numArrays <= 1 && numBuffers <= 1) ? "_remaining" : + "_" + cname + "Remaining"; + + if (jfunc.getArgType(idx).isArray()) { + out.println(indent + + "if (!" + + cname + + "_ref) {"); + if (emitExceptionCheck) { + out.println(indent + indent + "_exception = 1;"); + } + out.println(indent + " " + + (mUseCPlusPlus ? "_env" : "(*_env)") + + "->ThrowNew(" + + (mUseCPlusPlus ? "" : "_env, ") + + "IAEClass, " + + "\"" + cname + + " == null\");"); + out.println(indent + " goto exit;"); + needsExit = true; + out.println(indent + "}"); + + out.println(indent + "if (" + offset + " < 0) {"); + if (emitExceptionCheck) { + out.println(indent + indent + "_exception = 1;"); + } + out.println(indent + " " + + (mUseCPlusPlus ? "_env" : "(*_env)") + + "->ThrowNew(" + + (mUseCPlusPlus ? "" : "_env, ") + + "IAEClass, " + + "\"" + offset + " < 0\");"); + out.println(indent + " goto exit;"); + needsExit = true; + out.println(indent + "}"); + + out.println(indent + remaining + " = " + + (mUseCPlusPlus ? "_env" : "(*_env)") + + "->GetArrayLength(" + + (mUseCPlusPlus ? "" : "_env, ") + + cname + "_ref) - " + offset + ";"); + + emitNativeBoundsChecks(cfunc, cname, out, false, + emitExceptionCheck, + offset, remaining, " "); + + out.println(indent + + cname + + "_base = (" + + cfunc.getArgType(cIndex).getDeclaration() + + ")"); + out.println(indent + " " + + (mUseCPlusPlus ? "_env" : "(*_env)") + + "->GetPrimitiveArrayCritical(" + + (mUseCPlusPlus ? "" : "_env, ") + + jfunc.getArgName(idx) + + "_ref, (jboolean *)0);"); + out.println(indent + + cname + " = " + cname + "_base + " + offset + + ";"); + out.println(); + } else { + String array = numBufferArgs <= 1 ? "_array" : + "_" + bufferArgNames.get(bufArgIdx++) + "Array"; + + boolean nullAllowed = isNullAllowed(cfunc); + if (nullAllowed) { + out.println(indent + "if (" + cname + "_buf) {"); + out.print(indent); + } + + out.println(indent + + cname + + " = (" + + cfunc.getArgType(cIndex).getDeclaration() + + ")getPointer(_env, " + + cname + + "_buf, &" + array + ", &" + remaining + ");"); + + if (nullAllowed) { + out.println(indent + "}"); + } + + emitNativeBoundsChecks(cfunc, cname, out, true, + emitExceptionCheck, + offset, remaining, " "); + } + } + } + + if (!isVoid) { + out.print(indent + "_returnValue = "); + } else { + out.print(indent); + } + String name = cfunc.getName(); + + if (mUseContextPointer) { + name = name.substring(2, name.length()); // Strip off 'gl' prefix + name = name.substring(0, 1).toLowerCase() + + name.substring(1, name.length()); + out.print("ctx->procs."); + } + + out.print(name + (isPointerFunc ? "Bounds" : "") + "("); + + numArgs = cfunc.getNumArgs(); + if (numArgs == 0) { + if (mUseContextPointer) { + out.println("ctx);"); + } else { + out.println(");"); + } + } else { + if (mUseContextPointer) { + out.println("ctx,"); + } else { + out.println(); + } + for (int i = 0; i < numArgs; i++) { + String typecast; + if (i == numArgs - 1 && isVBOPointerFunc) { + typecast = "const GLvoid *"; + } else { + typecast = cfunc.getArgType(i).getDeclaration(); + } + out.print(indent + indent + + "(" + + typecast + + ")" + + cfunc.getArgName(i)); + + if (i == numArgs - 1) { + if (isPointerFunc) { + out.println(","); + out.println(indent + indent + "(GLsizei)remaining"); + } else { + out.println(); + } + } else { + out.println(","); + } + } + out.println(indent + ");"); + } + + if (needsExit) { + out.println(); + out.println("exit:"); + needsExit = false; + } + + bufArgIdx = 0; + if (nonPrimitiveArgs.size() > 0) { + for (int i = nonPrimitiveArgs.size() - 1; i >= 0; i--) { + int idx = nonPrimitiveArgs.get(i).intValue(); + + int cIndex = jfunc.getArgCIndex(idx); + if (jfunc.getArgType(idx).isArray()) { + + // If the argument is 'const', GL will not write to it. + // In this case, we can use the 'JNI_ABORT' flag to avoid + // the need to write back to the Java array + out.println(indent + + "if (" + jfunc.getArgName(idx) + "_base) {"); + out.println(indent + indent + + (mUseCPlusPlus ? "_env" : "(*_env)") + + "->ReleasePrimitiveArrayCritical(" + + (mUseCPlusPlus ? "" : "_env, ") + + jfunc.getArgName(idx) + "_ref, " + + cfunc.getArgName(cIndex) + + "_base,"); + out.println(indent + indent + indent + + (cfunc.getArgType(cIndex).isConst() ? + "JNI_ABORT" : + "_exception ? JNI_ABORT: 0") + + ");"); + out.println(indent + "}"); + } else if (jfunc.getArgType(idx).isBuffer()) { + String array = numBufferArgs <= 1 ? "_array" : + "_" + bufferArgNames.get(bufArgIdx++) + "Array"; + out.println(indent + "if (" + array + ") {"); + out.println(indent + indent + + "releasePointer(_env, " + array + ", " + + cfunc.getArgName(cIndex) + + ", " + + (cfunc.getArgType(cIndex).isConst() ? + "JNI_FALSE" : "_exception ? JNI_FALSE : JNI_TRUE") + + ");"); + out.println(indent + "}"); + } + } + } + + if (!isVoid) { + out.println(indent + "return _returnValue;"); + } + + out.println("}"); + out.println(); + } + + public void addNativeRegistration(String s) { + nativeRegistrations.add(s); + } + + public void emitNativeRegistration() { + mCStream.println("static const char *classPathName = \"" + + mClassPathName + + "\";"); + mCStream.println(); + + mCStream.println("static JNINativeMethod methods[] = {"); + + mCStream.println("{\"_nativeClassInit\", \"()V\", (void*)nativeClassInit },"); + + Iterator i = nativeRegistrations.iterator(); + while (i.hasNext()) { + mCStream.println(i.next()); + } + + mCStream.println("};"); + mCStream.println(); + + + mCStream.println("int register_com_google_android_gles_jni_GLImpl(JNIEnv *_env)"); + mCStream.println("{"); + mCStream.println(indent + + "int err;"); + + mCStream.println(indent + + "err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));"); + + mCStream.println(indent + "return err;"); + mCStream.println("}"); + } +} diff --git a/opengl/tools/glgen/src/ParameterChecker.java b/opengl/tools/glgen/src/ParameterChecker.java new file mode 100644 index 0000000000..df26acdf46 --- /dev/null +++ b/opengl/tools/glgen/src/ParameterChecker.java @@ -0,0 +1,28 @@ + +import java.io.BufferedReader; +import java.util.HashMap; + +public class ParameterChecker { + + HashMap map = new HashMap(); + + public ParameterChecker(BufferedReader reader) throws Exception { + String s; + while ((s = reader.readLine()) != null) { + String[] tokens = s.split("\\s"); + map.put(tokens[0], tokens); + } + } + + public String[] getChecks(String functionName) { + String[] checks = map.get(functionName); + if (checks == null && + (functionName.endsWith("fv") || + functionName.endsWith("xv") || + functionName.endsWith("iv"))) { + functionName = functionName.substring(0, functionName.length() - 2); + checks = map.get(functionName); + } + return checks; + } +} diff --git a/opengl/tools/glgen/stubs/GL10ExtHeader.java-if b/opengl/tools/glgen/stubs/GL10ExtHeader.java-if new file mode 100644 index 0000000000..b0999c25f6 --- /dev/null +++ b/opengl/tools/glgen/stubs/GL10ExtHeader.java-if @@ -0,0 +1,22 @@ +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +// This source file is automatically generated + +package javax.microedition.khronos.opengles; + +public interface GL10Ext extends GL { + diff --git a/opengl/tools/glgen/stubs/GL10Header.java-if b/opengl/tools/glgen/stubs/GL10Header.java-if new file mode 100644 index 0000000000..8392821e7a --- /dev/null +++ b/opengl/tools/glgen/stubs/GL10Header.java-if @@ -0,0 +1,259 @@ +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +// This source file is automatically generated + +package javax.microedition.khronos.opengles; + +public interface GL10 extends GL { + int GL_ADD = 0x0104; + int GL_ALIASED_LINE_WIDTH_RANGE = 0x846E; + int GL_ALIASED_POINT_SIZE_RANGE = 0x846D; + int GL_ALPHA = 0x1906; + int GL_ALPHA_BITS = 0x0D55; + int GL_ALPHA_TEST = 0x0BC0; + int GL_ALWAYS = 0x0207; + int GL_AMBIENT = 0x1200; + int GL_AMBIENT_AND_DIFFUSE = 0x1602; + int GL_AND = 0x1501; + int GL_AND_INVERTED = 0x1504; + int GL_AND_REVERSE = 0x1502; + int GL_BACK = 0x0405; + int GL_BLEND = 0x0BE2; + int GL_BLUE_BITS = 0x0D54; + int GL_BYTE = 0x1400; + int GL_CCW = 0x0901; + int GL_CLAMP_TO_EDGE = 0x812F; + int GL_CLEAR = 0x1500; + int GL_COLOR_ARRAY = 0x8076; + int GL_COLOR_BUFFER_BIT = 0x4000; + int GL_COLOR_LOGIC_OP = 0x0BF2; + int GL_COLOR_MATERIAL = 0x0B57; + int GL_COMPRESSED_TEXTURE_FORMATS = 0x86A3; + int GL_CONSTANT_ATTENUATION = 0x1207; + int GL_COPY = 0x1503; + int GL_COPY_INVERTED = 0x150C; + int GL_CULL_FACE = 0x0B44; + int GL_CW = 0x0900; + int GL_DECAL = 0x2101; + int GL_DECR = 0x1E03; + int GL_DEPTH_BITS = 0x0D56; + int GL_DEPTH_BUFFER_BIT = 0x0100; + int GL_DEPTH_TEST = 0x0B71; + int GL_DIFFUSE = 0x1201; + int GL_DITHER = 0x0BD0; + int GL_DONT_CARE = 0x1100; + int GL_DST_ALPHA = 0x0304; + int GL_DST_COLOR = 0x0306; + int GL_EMISSION = 0x1600; + int GL_EQUAL = 0x0202; + int GL_EQUIV = 0x1509; + int GL_EXP = 0x0800; + int GL_EXP2 = 0x0801; + int GL_EXTENSIONS = 0x1F03; + int GL_FALSE = 0; + int GL_FASTEST = 0x1101; + int GL_FIXED = 0x140C; + int GL_FLAT = 0x1D00; + int GL_FLOAT = 0x1406; + int GL_FOG = 0x0B60; + int GL_FOG_COLOR = 0x0B66; + int GL_FOG_DENSITY = 0x0B62; + int GL_FOG_END = 0x0B64; + int GL_FOG_HINT = 0x0C54; + int GL_FOG_MODE = 0x0B65; + int GL_FOG_START = 0x0B63; + int GL_FRONT = 0x0404; + int GL_FRONT_AND_BACK = 0x0408; + int GL_GEQUAL = 0x0206; + int GL_GREATER = 0x0204; + int GL_GREEN_BITS = 0x0D53; + int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 0x8B9B; + int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 0x8B9A; + int GL_INCR = 0x1E02; + int GL_INVALID_ENUM = 0x0500; + int GL_INVALID_OPERATION = 0x0502; + int GL_INVALID_VALUE = 0x0501; + int GL_INVERT = 0x150A; + int GL_KEEP = 0x1E00; + int GL_LEQUAL = 0x0203; + int GL_LESS = 0x0201; + int GL_LIGHT_MODEL_AMBIENT = 0x0B53; + int GL_LIGHT_MODEL_TWO_SIDE = 0x0B52; + int GL_LIGHT0 = 0x4000; + int GL_LIGHT1 = 0x4001; + int GL_LIGHT2 = 0x4002; + int GL_LIGHT3 = 0x4003; + int GL_LIGHT4 = 0x4004; + int GL_LIGHT5 = 0x4005; + int GL_LIGHT6 = 0x4006; + int GL_LIGHT7 = 0x4007; + int GL_LIGHTING = 0x0B50; + int GL_LINE_LOOP = 0x0002; + int GL_LINE_SMOOTH = 0x0B20; + int GL_LINE_SMOOTH_HINT = 0x0C52; + int GL_LINE_STRIP = 0x0003; + int GL_LINEAR = 0x2601; + int GL_LINEAR_ATTENUATION = 0x1208; + int GL_LINEAR_MIPMAP_LINEAR = 0x2703; + int GL_LINEAR_MIPMAP_NEAREST = 0x2701; + int GL_LINES = 0x0001; + int GL_LUMINANCE = 0x1909; + int GL_LUMINANCE_ALPHA = 0x190A; + int GL_MAX_ELEMENTS_INDICES = 0x80E9; + int GL_MAX_ELEMENTS_VERTICES = 0x80E8; + int GL_MAX_LIGHTS = 0x0D31; + int GL_MAX_MODELVIEW_STACK_DEPTH = 0x0D36; + int GL_MAX_PROJECTION_STACK_DEPTH = 0x0D38; + int GL_MAX_TEXTURE_SIZE = 0x0D33; + int GL_MAX_TEXTURE_STACK_DEPTH = 0x0D39; + int GL_MAX_TEXTURE_UNITS = 0x84E2; + int GL_MAX_VIEWPORT_DIMS = 0x0D3A; + int GL_MODELVIEW = 0x1700; + int GL_MODULATE = 0x2100; + int GL_MULTISAMPLE = 0x809D; + int GL_NAND = 0x150E; + int GL_NEAREST = 0x2600; + int GL_NEAREST_MIPMAP_LINEAR = 0x2702; + int GL_NEAREST_MIPMAP_NEAREST = 0x2700; + int GL_NEVER = 0x0200; + int GL_NICEST = 0x1102; + int GL_NO_ERROR = 0; + int GL_NOOP = 0x1505; + int GL_NOR = 0x1508; + int GL_NORMAL_ARRAY = 0x8075; + int GL_NORMALIZE = 0x0BA1; + int GL_NOTEQUAL = 0x0205; + int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2; + int GL_ONE = 1; + int GL_ONE_MINUS_DST_ALPHA = 0x0305; + int GL_ONE_MINUS_DST_COLOR = 0x0307; + int GL_ONE_MINUS_SRC_ALPHA = 0x0303; + int GL_ONE_MINUS_SRC_COLOR = 0x0301; + int GL_OR = 0x1507; + int GL_OR_INVERTED = 0x150D; + int GL_OR_REVERSE = 0x150B; + int GL_OUT_OF_MEMORY = 0x0505; + int GL_PACK_ALIGNMENT = 0x0D05; + int GL_PALETTE4_R5_G6_B5_OES = 0x8B92; + int GL_PALETTE4_RGB5_A1_OES = 0x8B94; + int GL_PALETTE4_RGB8_OES = 0x8B90; + int GL_PALETTE4_RGBA4_OES = 0x8B93; + int GL_PALETTE4_RGBA8_OES = 0x8B91; + int GL_PALETTE8_R5_G6_B5_OES = 0x8B97; + int GL_PALETTE8_RGB5_A1_OES = 0x8B99; + int GL_PALETTE8_RGB8_OES = 0x8B95; + int GL_PALETTE8_RGBA4_OES = 0x8B98; + int GL_PALETTE8_RGBA8_OES = 0x8B96; + int GL_PERSPECTIVE_CORRECTION_HINT = 0x0C50; + int GL_POINT_SMOOTH = 0x0B10; + int GL_POINT_SMOOTH_HINT = 0x0C51; + int GL_POINTS = 0x0000; + int GL_POINT_FADE_THRESHOLD_SIZE = 0x8128; + int GL_POINT_SIZE = 0x0B11; + int GL_POLYGON_OFFSET_FILL = 0x8037; + int GL_POLYGON_SMOOTH_HINT = 0x0C53; + int GL_POSITION = 0x1203; + int GL_PROJECTION = 0x1701; + int GL_QUADRATIC_ATTENUATION = 0x1209; + int GL_RED_BITS = 0x0D52; + int GL_RENDERER = 0x1F01; + int GL_REPEAT = 0x2901; + int GL_REPLACE = 0x1E01; + int GL_RESCALE_NORMAL = 0x803A; + int GL_RGB = 0x1907; + int GL_RGBA = 0x1908; + int GL_SAMPLE_ALPHA_TO_COVERAGE = 0x809E; + int GL_SAMPLE_ALPHA_TO_ONE = 0x809F; + int GL_SAMPLE_COVERAGE = 0x80A0; + int GL_SCISSOR_TEST = 0x0C11; + int GL_SET = 0x150F; + int GL_SHININESS = 0x1601; + int GL_SHORT = 0x1402; + int GL_SMOOTH = 0x1D01; + int GL_SMOOTH_LINE_WIDTH_RANGE = 0x0B22; + int GL_SMOOTH_POINT_SIZE_RANGE = 0x0B12; + int GL_SPECULAR = 0x1202; + int GL_SPOT_CUTOFF = 0x1206; + int GL_SPOT_DIRECTION = 0x1204; + int GL_SPOT_EXPONENT = 0x1205; + int GL_SRC_ALPHA = 0x0302; + int GL_SRC_ALPHA_SATURATE = 0x0308; + int GL_SRC_COLOR = 0x0300; + int GL_STACK_OVERFLOW = 0x0503; + int GL_STACK_UNDERFLOW = 0x0504; + int GL_STENCIL_BITS = 0x0D57; + int GL_STENCIL_BUFFER_BIT = 0x0400; + int GL_STENCIL_TEST = 0x0B90; + int GL_SUBPIXEL_BITS = 0x0D50; + int GL_TEXTURE = 0x1702; + int GL_TEXTURE_2D = 0x0DE1; + int GL_TEXTURE_COORD_ARRAY = 0x8078; + int GL_TEXTURE_ENV = 0x2300; + int GL_TEXTURE_ENV_COLOR = 0x2201; + int GL_TEXTURE_ENV_MODE = 0x2200; + int GL_TEXTURE_MAG_FILTER = 0x2800; + int GL_TEXTURE_MIN_FILTER = 0x2801; + int GL_TEXTURE_WRAP_S = 0x2802; + int GL_TEXTURE_WRAP_T = 0x2803; + int GL_TEXTURE0 = 0x84C0; + int GL_TEXTURE1 = 0x84C1; + int GL_TEXTURE2 = 0x84C2; + int GL_TEXTURE3 = 0x84C3; + int GL_TEXTURE4 = 0x84C4; + int GL_TEXTURE5 = 0x84C5; + int GL_TEXTURE6 = 0x84C6; + int GL_TEXTURE7 = 0x84C7; + int GL_TEXTURE8 = 0x84C8; + int GL_TEXTURE9 = 0x84C9; + int GL_TEXTURE10 = 0x84CA; + int GL_TEXTURE11 = 0x84CB; + int GL_TEXTURE12 = 0x84CC; + int GL_TEXTURE13 = 0x84CD; + int GL_TEXTURE14 = 0x84CE; + int GL_TEXTURE15 = 0x84CF; + int GL_TEXTURE16 = 0x84D0; + int GL_TEXTURE17 = 0x84D1; + int GL_TEXTURE18 = 0x84D2; + int GL_TEXTURE19 = 0x84D3; + int GL_TEXTURE20 = 0x84D4; + int GL_TEXTURE21 = 0x84D5; + int GL_TEXTURE22 = 0x84D6; + int GL_TEXTURE23 = 0x84D7; + int GL_TEXTURE24 = 0x84D8; + int GL_TEXTURE25 = 0x84D9; + int GL_TEXTURE26 = 0x84DA; + int GL_TEXTURE27 = 0x84DB; + int GL_TEXTURE28 = 0x84DC; + int GL_TEXTURE29 = 0x84DD; + int GL_TEXTURE30 = 0x84DE; + int GL_TEXTURE31 = 0x84DF; + int GL_TRIANGLE_FAN = 0x0006; + int GL_TRIANGLE_STRIP = 0x0005; + int GL_TRIANGLES = 0x0004; + int GL_TRUE = 1; + int GL_UNPACK_ALIGNMENT = 0x0CF5; + int GL_UNSIGNED_BYTE = 0x1401; + int GL_UNSIGNED_SHORT = 0x1403; + int GL_UNSIGNED_SHORT_4_4_4_4 = 0x8033; + int GL_UNSIGNED_SHORT_5_5_5_1 = 0x8034; + int GL_UNSIGNED_SHORT_5_6_5 = 0x8363; + int GL_VENDOR = 0x1F00; + int GL_VERSION = 0x1F02; + int GL_VERTEX_ARRAY = 0x8074; + int GL_XOR = 0x1506; + int GL_ZERO = 0; + diff --git a/opengl/tools/glgen/stubs/GL11ExtHeader.java-if b/opengl/tools/glgen/stubs/GL11ExtHeader.java-if new file mode 100644 index 0000000000..7be2164f63 --- /dev/null +++ b/opengl/tools/glgen/stubs/GL11ExtHeader.java-if @@ -0,0 +1,40 @@ +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +// This source file is automatically generated + +package javax.microedition.khronos.opengles; + +public interface GL11Ext extends GL { + int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 0x8B9E; + int GL_MATRIX_INDEX_ARRAY_OES = 0x8844; + int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 0x8849; + int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 0x8846; + int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 0x8848; + int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 0x8847; + int GL_MATRIX_PALETTE_OES = 0x8840; + int GL_MAX_PALETTE_MATRICES_OES = 0x8842; + int GL_MAX_VERTEX_UNITS_OES = 0x86A4; + int GL_TEXTURE_CROP_RECT_OES = 0x8B9D; + int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 0x889E; + int GL_WEIGHT_ARRAY_OES = 0x86AD; + int GL_WEIGHT_ARRAY_POINTER_OES = 0x86AC; + int GL_WEIGHT_ARRAY_SIZE_OES = 0x86AB; + int GL_WEIGHT_ARRAY_STRIDE_OES = 0x86AA; + int GL_WEIGHT_ARRAY_TYPE_OES = 0x86A9; + + void glTexParameterfv(int target, int pname, float[] param, int offset); + diff --git a/opengl/tools/glgen/stubs/GL11ExtensionPackHeader.java-if b/opengl/tools/glgen/stubs/GL11ExtensionPackHeader.java-if new file mode 100644 index 0000000000..a8001919c7 --- /dev/null +++ b/opengl/tools/glgen/stubs/GL11ExtensionPackHeader.java-if @@ -0,0 +1,108 @@ +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +// This source file is automatically generated + +package javax.microedition.khronos.opengles; + +public interface GL11ExtensionPack extends GL { + int GL_BLEND_DST_ALPHA = 0x80CA; + int GL_BLEND_DST_RGB = 0x80C8; + int GL_BLEND_EQUATION = 0x8009; + int GL_BLEND_EQUATION_ALPHA = 0x883D; + int GL_BLEND_EQUATION_RGB = 0x8009; + int GL_BLEND_SRC_ALPHA = 0x80CB; + int GL_BLEND_SRC_RGB = 0x80C9; + int GL_COLOR_ATTACHMENT0_OES = 0x8CE0; + int GL_COLOR_ATTACHMENT1_OES = 0x8CE1; + int GL_COLOR_ATTACHMENT2_OES = 0x8CE2; + int GL_COLOR_ATTACHMENT3_OES = 0x8CE3; + int GL_COLOR_ATTACHMENT4_OES = 0x8CE4; + int GL_COLOR_ATTACHMENT5_OES = 0x8CE5; + int GL_COLOR_ATTACHMENT6_OES = 0x8CE6; + int GL_COLOR_ATTACHMENT7_OES = 0x8CE7; + int GL_COLOR_ATTACHMENT8_OES = 0x8CE8; + int GL_COLOR_ATTACHMENT9_OES = 0x8CE9; + int GL_COLOR_ATTACHMENT10_OES = 0x8CEA; + int GL_COLOR_ATTACHMENT11_OES = 0x8CEB; + int GL_COLOR_ATTACHMENT12_OES = 0x8CEC; + int GL_COLOR_ATTACHMENT13_OES = 0x8CED; + int GL_COLOR_ATTACHMENT14_OES = 0x8CEE; + int GL_COLOR_ATTACHMENT15_OES = 0x8CEF; + int GL_DECR_WRAP = 0x8508; + int GL_DEPTH_ATTACHMENT_OES = 0x8D00; + int GL_DEPTH_COMPONENT = 0x1902; + int GL_DEPTH_COMPONENT16 = 0x81A5; + int GL_DEPTH_COMPONENT24 = 0x81A6; + int GL_DEPTH_COMPONENT32 = 0x81A7; + int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 0x8CD1; + int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 0x8CD0; + int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 0x8CD3; + int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 0x8CD2; + int GL_FRAMEBUFFER_BINDING_OES = 0x8CA6; + int GL_FRAMEBUFFER_COMPLETE_OES = 0x8CD5; + int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 0x8CD6; + int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 0x8CD9; + int GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES = 0x8CDB; + int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 0x8CDA; + int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 0x8CD7; + int GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES = 0x8CDC; + int GL_FRAMEBUFFER_OES = 0x8D40; + int GL_FRAMEBUFFER_UNSUPPORTED_OES = 0x8CDD; + int GL_FUNC_ADD = 0x8006; + int GL_FUNC_REVERSE_SUBTRACT = 0x800B; + int GL_FUNC_SUBTRACT = 0x800A; + int GL_INCR_WRAP = 0x8507; + int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 0x0506; + int GL_MAX_COLOR_ATTACHMENTS_OES = 0x8CDF; + int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; + int GL_MAX_RENDERBUFFER_SIZE_OES = 0x84E8; + int GL_MIRRORED_REPEAT = 0x8370; + int GL_NORMAL_MAP = 0x8511; + int GL_REFLECTION_MAP = 0x8512; + int GL_RENDERBUFFER_ALPHA_SIZE_OES = 0x8D53; + int GL_RENDERBUFFER_BINDING_OES = 0x8CA7; + int GL_RENDERBUFFER_BLUE_SIZE_OES = 0x8D52; + int GL_RENDERBUFFER_DEPTH_SIZE_OES = 0x8D54; + int GL_RENDERBUFFER_GREEN_SIZE_OES = 0x8D51; + int GL_RENDERBUFFER_HEIGHT_OES = 0x8D43; + int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 0x8D44; + int GL_RENDERBUFFER_OES = 0x8D41; + int GL_RENDERBUFFER_RED_SIZE_OES = 0x8D50; + int GL_RENDERBUFFER_STENCIL_SIZE_OES = 0x8D55; + int GL_RENDERBUFFER_WIDTH_OES = 0x8D42; + int GL_RGB5_A1 = 0x8057; + int GL_RGB565_OES = 0x8D62; + int GL_RGB8 = 0x8051; + int GL_RGBA4 = 0x8056; + int GL_RGBA8 = 0x8058; + int GL_STENCIL_ATTACHMENT_OES = 0x8D20; + int GL_STENCIL_INDEX = 0x1901; + int GL_STENCIL_INDEX1_OES = 0x8D46; + int GL_STENCIL_INDEX4_OES = 0x8D47; + int GL_STENCIL_INDEX8_OES = 0x8D48; + int GL_STR = -1; + int GL_TEXTURE_BINDING_CUBE_MAP = 0x8514; + int GL_TEXTURE_CUBE_MAP = 0x8513; + int GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; + int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; + int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; + int GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; + int GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; + int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; + int GL_TEXTURE_GEN_MODE = 0x2500; + int GL_TEXTURE_GEN_STR = 0x8D60; + diff --git a/opengl/tools/glgen/stubs/GL11Header.java-if b/opengl/tools/glgen/stubs/GL11Header.java-if new file mode 100644 index 0000000000..b0e5a6bea7 --- /dev/null +++ b/opengl/tools/glgen/stubs/GL11Header.java-if @@ -0,0 +1,145 @@ +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +// This source file is automatically generated + +package javax.microedition.khronos.opengles; + +public interface GL11 extends GL10 { + int GL_ACTIVE_TEXTURE = 0x84E0; + int GL_ADD_SIGNED = 0x8574; + int GL_ALPHA_SCALE = 0x0D1C; + int GL_ALPHA_TEST_FUNC = 0x0BC1; + int GL_ALPHA_TEST_REF = 0x0BC2; + int GL_ARRAY_BUFFER = 0x8892; + int GL_ARRAY_BUFFER_BINDING = 0x8894; + int GL_BLEND_DST = 0x0BE0; + int GL_BLEND_SRC = 0x0BE1; + int GL_BUFFER_ACCESS = 0x88BB; + int GL_BUFFER_SIZE = 0x8764; + int GL_BUFFER_USAGE = 0x8765; + int GL_CLIENT_ACTIVE_TEXTURE = 0x84E1; + int GL_CLIP_PLANE0 = 0x3000; + int GL_CLIP_PLANE1 = 0x3001; + int GL_CLIP_PLANE2 = 0x3002; + int GL_CLIP_PLANE3 = 0x3003; + int GL_CLIP_PLANE4 = 0x3004; + int GL_CLIP_PLANE5 = 0x3005; + int GL_COLOR_ARRAY_BUFFER_BINDING = 0x8898; + int GL_COLOR_ARRAY_POINTER = 0x8090; + int GL_COLOR_ARRAY_SIZE = 0x8081; + int GL_COLOR_ARRAY_STRIDE = 0x8083; + int GL_COLOR_ARRAY_TYPE = 0x8082; + int GL_COLOR_CLEAR_VALUE = 0x0C22; + int GL_COLOR_WRITEMASK = 0x0C23; + int GL_COMBINE = 0x8570; + int GL_COMBINE_ALPHA = 0x8572; + int GL_COMBINE_RGB = 0x8571; + int GL_CONSTANT = 0x8576; + int GL_COORD_REPLACE_OES = 0x8862; + int GL_CULL_FACE_MODE = 0x0B45; + int GL_CURRENT_COLOR = 0x0B00; + int GL_CURRENT_NORMAL = 0x0B02; + int GL_CURRENT_TEXTURE_COORDS = 0x0B03; + int GL_DEPTH_CLEAR_VALUE = 0x0B73; + int GL_DEPTH_FUNC = 0x0B74; + int GL_DEPTH_RANGE = 0x0B70; + int GL_DEPTH_WRITEMASK = 0x0B72; + int GL_DOT3_RGB = 0x86AE; + int GL_DOT3_RGBA = 0x86AF; + int GL_DYNAMIC_DRAW = 0x88E8; + int GL_ELEMENT_ARRAY_BUFFER = 0x8893; + int GL_ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; + int GL_FRONT_FACE = 0x0B46; + int GL_GENERATE_MIPMAP = 0x8191; + int GL_GENERATE_MIPMAP_HINT = 0x8192; + int GL_INTERPOLATE = 0x8575; + int GL_LINE_WIDTH = 0x0B21; + int GL_LOGIC_OP_MODE = 0x0BF0; + int GL_MATRIX_MODE = 0x0BA0; + int GL_MAX_CLIP_PLANES = 0x0D32; + int GL_MODELVIEW_MATRIX = 0x0BA6; + int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898D; + int GL_MODELVIEW_STACK_DEPTH = 0x0BA3; + int GL_NORMAL_ARRAY_BUFFER_BINDING = 0x8897; + int GL_NORMAL_ARRAY_POINTER = 0x808F; + int GL_NORMAL_ARRAY_STRIDE = 0x807F; + int GL_NORMAL_ARRAY_TYPE = 0x807E; + int GL_OPERAND0_ALPHA = 0x8598; + int GL_OPERAND0_RGB = 0x8590; + int GL_OPERAND1_ALPHA = 0x8599; + int GL_OPERAND1_RGB = 0x8591; + int GL_OPERAND2_ALPHA = 0x859A; + int GL_OPERAND2_RGB = 0x8592; + int GL_POINT_DISTANCE_ATTENUATION = 0x8129; + int GL_POINT_FADE_THRESHOLD_SIZE = 0x8128; + int GL_POINT_SIZE = 0x0B11; + int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 0x8B9F; + int GL_POINT_SIZE_ARRAY_OES = 0x8B9C; + int GL_POINT_SIZE_ARRAY_POINTER_OES = 0x898C; + int GL_POINT_SIZE_ARRAY_STRIDE_OES = 0x898B; + int GL_POINT_SIZE_ARRAY_TYPE_OES = 0x898A; + int GL_POINT_SIZE_MAX = 0x8127; + int GL_POINT_SIZE_MIN = 0x8126; + int GL_POINT_SPRITE_OES = 0x8861; + int GL_POLYGON_OFFSET_FACTOR = 0x8038; + int GL_POLYGON_OFFSET_UNITS = 0x2A00; + int GL_PREVIOUS = 0x8578; + int GL_PRIMARY_COLOR = 0x8577; + int GL_PROJECTION_MATRIX = 0x0BA7; + int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898E; + int GL_PROJECTION_STACK_DEPTH = 0x0BA4; + int GL_RGB_SCALE = 0x8573; + int GL_SAMPLE_BUFFERS = 0x80A8; + int GL_SAMPLE_COVERAGE_INVERT = 0x80AB; + int GL_SAMPLE_COVERAGE_VALUE = 0x80AA; + int GL_SAMPLES = 0x80A9; + int GL_SCISSOR_BOX = 0x0C10; + int GL_SHADE_MODEL = 0x0B54; + int GL_SRC0_ALPHA = 0x8588; + int GL_SRC0_RGB = 0x8580; + int GL_SRC1_ALPHA = 0x8589; + int GL_SRC1_RGB = 0x8581; + int GL_SRC2_ALPHA = 0x858A; + int GL_SRC2_RGB = 0x8582; + int GL_STATIC_DRAW = 0x88E4; + int GL_STENCIL_CLEAR_VALUE = 0x0B91; + int GL_STENCIL_FAIL = 0x0B94; + int GL_STENCIL_FUNC = 0x0B92; + int GL_STENCIL_PASS_DEPTH_FAIL = 0x0B95; + int GL_STENCIL_PASS_DEPTH_PASS = 0x0B96; + int GL_STENCIL_REF = 0x0B97; + int GL_STENCIL_VALUE_MASK = 0x0B93; + int GL_STENCIL_WRITEMASK = 0x0B98; + int GL_SUBTRACT = 0x84E7; + int GL_TEXTURE_BINDING_2D = 0x8069; + int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A; + int GL_TEXTURE_COORD_ARRAY_POINTER = 0x8092; + int GL_TEXTURE_COORD_ARRAY_SIZE = 0x8088; + int GL_TEXTURE_COORD_ARRAY_STRIDE = 0x808A; + int GL_TEXTURE_COORD_ARRAY_TYPE = 0x8089; + int GL_TEXTURE_MATRIX = 0x0BA8; + int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898F; + int GL_TEXTURE_STACK_DEPTH = 0x0BA5; + int GL_VERTEX_ARRAY_BUFFER_BINDING = 0x8896; + int GL_VERTEX_ARRAY_POINTER = 0x808E; + int GL_VERTEX_ARRAY_SIZE = 0x807A; + int GL_VERTEX_ARRAY_STRIDE = 0x807C; + int GL_VERTEX_ARRAY_TYPE = 0x807B; + int GL_VIEWPORT = 0x0BA2; + int GL_WRITE_ONLY = 0x88B9; + + void glGetPointerv(int pname, java.nio.Buffer[] params); diff --git a/opengl/tools/glgen/stubs/GL11ImplHeader.java-impl b/opengl/tools/glgen/stubs/GL11ImplHeader.java-impl new file mode 100644 index 0000000000..501be659c0 --- /dev/null +++ b/opengl/tools/glgen/stubs/GL11ImplHeader.java-impl @@ -0,0 +1,30 @@ +// Copyright 2006 The Android Open Source Project + +// All Rights Reserved. + +// This source file is automatically generated + +package com.google.android.gles_jni; + +import java.nio.Buffer; +import javax.microedition.khronos.opengles.GL11; +import android.graphics.Canvas; + +public class GL11Impl implements GL11 { + + // Private accessors for native code + + native private static void _nativeClassInit(); + static { + _nativeClassInit(); + } + + Buffer _colorPointer = null; + Buffer _normalPointer = null; + Buffer _texCoordPointer = null; + Buffer _vertexPointer = null; + + public GL11Impl() { + } + + diff --git a/opengl/tools/glgen/stubs/GLCHeader.cpp b/opengl/tools/glgen/stubs/GLCHeader.cpp new file mode 100644 index 0000000000..6495686b2a --- /dev/null +++ b/opengl/tools/glgen/stubs/GLCHeader.cpp @@ -0,0 +1,129 @@ +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +// This source file is automatically generated + +#include +#include + +#include +#include + +#include + +#define _NUM_COMPRESSED_TEXTURE_FORMATS \ + (::android::OGLES_NUM_COMPRESSED_TEXTURE_FORMATS) + +static int initialized = 0; + +static jclass nioAccessClass; +static jclass bufferClass; +static jclass OOMEClass; +static jclass UOEClass; +static jclass IAEClass; +static jclass AIOOBEClass; +static jmethodID getBasePointerID; +static jmethodID getBaseArrayID; +static jmethodID getBaseArrayOffsetID; +static jfieldID positionID; +static jfieldID limitID; +static jfieldID elementSizeShiftID; + +/* Cache method IDs each time the class is loaded. */ + +void +nativeClassInitBuffer(JNIEnv *_env) +{ + jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); + nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); + + jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); + bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); + + getBasePointerID = _env->GetStaticMethodID(nioAccessClass, + "getBasePointer", "(Ljava/nio/Buffer;)J"); + getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, + "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); + getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, + "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); + + positionID = _env->GetFieldID(bufferClass, "position", "I"); + limitID = _env->GetFieldID(bufferClass, "limit", "I"); + elementSizeShiftID = + _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); +} + + +static void +nativeClassInit(JNIEnv *_env, jclass glImplClass) +{ + nativeClassInitBuffer(_env); + + jclass IAEClassLocal = + _env->FindClass("java/lang/IllegalArgumentException"); + jclass OOMEClassLocal = + _env->FindClass("java/lang/OutOfMemoryError"); + jclass UOEClassLocal = + _env->FindClass("java/lang/UnsupportedOperationException"); + jclass AIOOBEClassLocal = + _env->FindClass("java/lang/ArrayIndexOutOfBoundsException"); + + IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal); + OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal); + UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal); + AIOOBEClass = (jclass) _env->NewGlobalRef(AIOOBEClassLocal); +} + +static void * +getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining) +{ + jint position; + jint limit; + jint elementSizeShift; + jlong pointer; + jint offset; + void *data; + + position = _env->GetIntField(buffer, positionID); + limit = _env->GetIntField(buffer, limitID); + elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + *remaining = (limit - position) << elementSizeShift; + pointer = _env->CallStaticLongMethod(nioAccessClass, + getBasePointerID, buffer); + if (pointer != 0L) { + *array = NULL; + return (void *) (jint) pointer; + } + + *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, + getBaseArrayID, buffer); + offset = _env->CallStaticIntMethod(nioAccessClass, + getBaseArrayOffsetID, buffer); + data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0); + + return (void *) ((char *) data + offset); +} + + +static void +releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) +{ + _env->ReleasePrimitiveArrayCritical(array, data, + commit ? 0 : JNI_ABORT); +} + +// -------------------------------------------------------------------------- + diff --git a/opengl/tools/glgen/stubs/GLHeader.java-if b/opengl/tools/glgen/stubs/GLHeader.java-if new file mode 100644 index 0000000000..3b78f3d2ce --- /dev/null +++ b/opengl/tools/glgen/stubs/GLHeader.java-if @@ -0,0 +1,22 @@ +/* //device/java/android/javax/microedition/khronos/opengles/GL.java +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package javax.microedition.khronos.opengles; + +public interface GL { +} + diff --git a/opengl/tools/glgen/stubs/GLImplHeader.java-impl b/opengl/tools/glgen/stubs/GLImplHeader.java-impl new file mode 100644 index 0000000000..db3a41c017 --- /dev/null +++ b/opengl/tools/glgen/stubs/GLImplHeader.java-impl @@ -0,0 +1,48 @@ +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +// This source file is automatically generated + +package com.google.android.gles_jni; + +import java.nio.Buffer; +import javax.microedition.khronos.opengles.GL10; +import javax.microedition.khronos.opengles.GL10Ext; +import javax.microedition.khronos.opengles.GL11; +import javax.microedition.khronos.opengles.GL11Ext; +import javax.microedition.khronos.opengles.GL11ExtensionPack; + +public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack { + + // Private accessors for native code + + native private static void _nativeClassInit(); + static { + _nativeClassInit(); + } + + Buffer _colorPointer = null; + Buffer _normalPointer = null; + Buffer _texCoordPointer = null; + Buffer _vertexPointer = null; + + public GLImpl() { + } + + public void glGetPointerv(int pname, java.nio.Buffer[] params) { + throw new UnsupportedOperationException("glGetPointerv"); + } + diff --git a/opengl/tools/glgen/stubs/glGetString.cpp b/opengl/tools/glgen/stubs/glGetString.cpp new file mode 100644 index 0000000000..22e1297177 --- /dev/null +++ b/opengl/tools/glgen/stubs/glGetString.cpp @@ -0,0 +1,10 @@ +#include + +/* const GLubyte * glGetString ( GLenum name ) */ +jstring +android_glGetString + (JNIEnv *_env, jobject _this, jint name) { + const char * chars = (const char *)glGetString((GLenum)name); + jstring output = _env->NewStringUTF(chars); + return output; +} diff --git a/opengl/tools/glgen/stubs/glGetString.java-10-if b/opengl/tools/glgen/stubs/glGetString.java-10-if new file mode 100644 index 0000000000..898fabcf2c --- /dev/null +++ b/opengl/tools/glgen/stubs/glGetString.java-10-if @@ -0,0 +1,4 @@ + public String glGetString( + int name + ); + diff --git a/opengl/tools/glgen/stubs/glGetString.java-if b/opengl/tools/glgen/stubs/glGetString.java-if new file mode 100644 index 0000000000..898fabcf2c --- /dev/null +++ b/opengl/tools/glgen/stubs/glGetString.java-if @@ -0,0 +1,4 @@ + public String glGetString( + int name + ); + diff --git a/opengl/tools/glgen/stubs/glGetString.java-impl b/opengl/tools/glgen/stubs/glGetString.java-impl new file mode 100644 index 0000000000..8c7881cfd8 --- /dev/null +++ b/opengl/tools/glgen/stubs/glGetString.java-impl @@ -0,0 +1,16 @@ + // C function const GLubyte * glGetString ( GLenum name ) + + public native String _glGetString( + int name + ); + + public String glGetString( + int name + ) { + String returnValue; + returnValue = _glGetString( + name + ); + return returnValue; + } + diff --git a/opengl/tools/glgen/stubs/glGetString.nativeReg b/opengl/tools/glgen/stubs/glGetString.nativeReg new file mode 100644 index 0000000000..e64187c8a3 --- /dev/null +++ b/opengl/tools/glgen/stubs/glGetString.nativeReg @@ -0,0 +1 @@ +{"_glGetString", "(I)Ljava/lang/String;", (void *) android_glGetString }, -- GitLab