paint_event.dart 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. part of cool_ui;
  2. typedef PaintCallback = void Function(PaintingContext context, Offset offset,Size size);
  3. class PaintEvent extends SingleChildRenderObjectWidget{
  4. final PaintCallback paintBefore;
  5. final PaintCallback paintAfter;
  6. const PaintEvent({
  7. Key key,
  8. this.paintBefore,
  9. this.paintAfter,
  10. Widget child
  11. }) :
  12. super(key: key, child: child);
  13. @override
  14. PaintEventProxyBox createRenderObject(BuildContext context) {
  15. return PaintEventProxyBox(
  16. paintAfter: paintAfter,
  17. paintBefore: paintBefore
  18. );
  19. }
  20. @override
  21. void updateRenderObject(BuildContext context, PaintEventProxyBox renderObject) {
  22. renderObject..paintAfter = paintBefore
  23. ..paintAfter = paintAfter;
  24. }
  25. }
  26. class PaintEventProxyBox extends RenderProxyBox{
  27. PaintCallback paintBefore;
  28. PaintCallback paintAfter;
  29. PaintEventProxyBox({
  30. RenderBox child,
  31. this.paintBefore,
  32. this.paintAfter
  33. }):super(child);
  34. @override
  35. void detach() {
  36. super.detach();
  37. markNeedsPaint();
  38. }
  39. @override
  40. void paint(PaintingContext context, Offset offset) {
  41. assert(size.width != null);
  42. assert(size.height != null);
  43. if(this.paintBefore != null){
  44. this.paintBefore(context,offset,size);
  45. }
  46. super.paint(context, offset);
  47. if(this.paintAfter != null){
  48. this.paintAfter(context,offset,size);
  49. }
  50. }
  51. }