289 public Point2D transform(Point2D p, Effect defaultInput) { 290 return getContentInput(defaultInput).transform(p, defaultInput); 291 } 292 293 @Override 294 public Point2D untransform(Point2D p, Effect defaultInput) { 295 return getContentInput(defaultInput).untransform(p, defaultInput); 296 } 297 298 @Override 299 public RenderState getRenderState(FilterContext fctx, 300 BaseTransform transform, 301 Rectangle outputClip, 302 Object renderHelper, 303 Effect defaultInput) 304 { 305 // RT-27564 306 // TODO: Since only the content input is used for the output bounds 307 // we could attempt to factor the bounds of the content input in our 308 // answer for the getInputClip() method of the RenderState, but for 309 // now we will just use the stock RenderSpaceRenderState object. 310 return RenderState.RenderSpaceRenderState; 311 } 312 313 @Override 314 public boolean reducesOpaquePixels() { 315 final Effect contentInput = getContentInput(); 316 return contentInput != null && contentInput.reducesOpaquePixels(); 317 } 318 319 @Override 320 public DirtyRegionContainer getDirtyRegions(Effect defaultInput, DirtyRegionPool regionPool) { 321 Effect bump = getDefaultedInput(0, defaultInput); 322 DirtyRegionContainer drc1 = bump.getDirtyRegions(defaultInput, regionPool); 323 drc1.grow(1, 1); 324 325 Effect content = getDefaultedInput(1, defaultInput); 326 DirtyRegionContainer drc2 = content.getDirtyRegions(defaultInput, regionPool); 327 328 drc1.merge(drc2); 329 regionPool.checkIn(drc2); 330 | 289 public Point2D transform(Point2D p, Effect defaultInput) { 290 return getContentInput(defaultInput).transform(p, defaultInput); 291 } 292 293 @Override 294 public Point2D untransform(Point2D p, Effect defaultInput) { 295 return getContentInput(defaultInput).untransform(p, defaultInput); 296 } 297 298 @Override 299 public RenderState getRenderState(FilterContext fctx, 300 BaseTransform transform, 301 Rectangle outputClip, 302 Object renderHelper, 303 Effect defaultInput) 304 { 305 // RT-27564 306 // TODO: Since only the content input is used for the output bounds 307 // we could attempt to factor the bounds of the content input in our 308 // answer for the getInputClip() method of the RenderState, but for 309 // now we will just use (a close copy of) the stock RenderSpaceRenderState object. 310 return new RenderState() { 311 @Override 312 public EffectCoordinateSpace getEffectTransformSpace() { 313 return EffectCoordinateSpace.RenderSpace; 314 } 315 316 @Override 317 public BaseTransform getInputTransform(BaseTransform filterTransform) { 318 return filterTransform; 319 } 320 321 @Override 322 public BaseTransform getResultTransform(BaseTransform filterTransform) { 323 return BaseTransform.IDENTITY_TRANSFORM; 324 } 325 326 @Override 327 public Rectangle getInputClip(int i, Rectangle filterClip) { 328 if (i == 0) { 329 Rectangle r = new Rectangle(filterClip); 330 r.grow(1, 1); 331 return r; 332 } 333 return filterClip; 334 } 335 }; 336 } 337 338 @Override 339 public boolean reducesOpaquePixels() { 340 final Effect contentInput = getContentInput(); 341 return contentInput != null && contentInput.reducesOpaquePixels(); 342 } 343 344 @Override 345 public DirtyRegionContainer getDirtyRegions(Effect defaultInput, DirtyRegionPool regionPool) { 346 Effect bump = getDefaultedInput(0, defaultInput); 347 DirtyRegionContainer drc1 = bump.getDirtyRegions(defaultInput, regionPool); 348 drc1.grow(1, 1); 349 350 Effect content = getDefaultedInput(1, defaultInput); 351 DirtyRegionContainer drc2 = content.getDirtyRegions(defaultInput, regionPool); 352 353 drc1.merge(drc2); 354 regionPool.checkIn(drc2); 355 |