Ejemplo n.º 1
0
        public override Widget buildHandle(BuildContext context, TextSelectionHandleType type, float textLineHeight)
        {
            Size   desiredSize = getHandleSize(textLineHeight);
            Widget handle      = SizedBox.fromSize(
                size: desiredSize,
                child: new CustomPaint(
                    painter: new _TextSelectionHandlePainter(CupertinoTheme.of(context).primaryColor)
                    )
                );
            var result = Matrix4.identity();

            result.translate(desiredSize.width / 2, desiredSize.height / 2);
            result.rotateZ(Mathf.PI);
            result.translate(-desiredSize.width / 2, -desiredSize.height / 2);
            switch (type)
            {
            case TextSelectionHandleType.left:
                return(handle);

            case TextSelectionHandleType.right:
                return(new Transform(
                           transform: result,
                           child: handle
                           ));

            case TextSelectionHandleType.collapsed:
                return(new SizedBox());
            }
            D.assert(type != null);
            return(null);
        }
Ejemplo n.º 2
0
 public override Widget build(BuildContext context)
 {
     return(new CustomPaint(
                foregroundPainter: new _MaterialPainter(
                    SrcOffset, SrcSize, GameMaterial.GetMaterial(context)
                    ),
                child:
                SizedBox.fromSize(size: Size)
                ));
 }
Ejemplo n.º 3
0
 static Widget _buildTriangle()
 {
     return(SizedBox.fromSize(
                size: triangleSize,
                child: new CustomPaint(
                    painter: new TrianglePainter(
                        arrowDirection: ArrowDirection.up,
                        color: CColors.PrimaryBlue
                        )
                    )
                ));
 }
Ejemplo n.º 4
0
        public override Widget buildHandle(BuildContext context, TextSelectionHandleType type, float textLineHeight)
        {
            Size desiredSize = new Size(
                2.0f * CustomTextSelectionControlsUtils._kHandlesPadding,
                textLineHeight + 2.0f * CustomTextSelectionControlsUtils._kHandlesPadding
                );

            Widget handle = SizedBox.fromSize(
                size: desiredSize,
                child: new CustomPaint(
                    painter: new _TextSelectionHandlePainter(
                        new Offset(
                            CustomTextSelectionControlsUtils._kHandlesPadding,
                            textLineHeight + CustomTextSelectionControlsUtils._kHandlesPadding
                            )
                        )
                    )
                );

            switch (type)
            {
            case TextSelectionHandleType.left: {
                Matrix3 matrix3 = Matrix3.makeRotate(Mathf.PI);
                matrix3.preConcat(
                    Matrix3.makeTrans(
                        -CustomTextSelectionControlsUtils._kHandlesPadding,
                        -CustomTextSelectionControlsUtils._kHandlesPadding
                        )
                    );
                return(new Transform(
                           transform: matrix3,
                           child: handle
                           ));
            }

            case TextSelectionHandleType.right: {
                return(new Transform(
                           transform: Matrix3.makeTrans(
                               -CustomTextSelectionControlsUtils._kHandlesPadding,
                               -(textLineHeight + CustomTextSelectionControlsUtils._kHandlesPadding)
                               ),
                           child: handle
                           ));
            }

            case TextSelectionHandleType.collapsed:
                return(new Container());

            default:
                return(null);
            }
        }
Ejemplo n.º 5
0
        public override Widget build(BuildContext context)
        {
            List <Widget> items = new List <Widget>();
            Widget        onePhysicalPixelVerticalDivider =
                new SizedBox(width: 1.0f / MediaQuery.of(context: context).devicePixelRatio);

            this.tipMenuItems.ForEach(tipMenuItem => {
                items.Add(_buildToolbarButton(text: tipMenuItem.title, onPressed: tipMenuItem.onTap));
                var index = this.tipMenuItems.IndexOf(item: tipMenuItem);
                if (this.tipMenuItems.Count > 1 && index < this.tipMenuItems.Count)
                {
                    items.Add(item: onePhysicalPixelVerticalDivider);
                }
            });

            Widget triangle = SizedBox.fromSize(
                size: CustomTextSelectionControlsUtils._kToolbarTriangleSize,
                child: new CustomPaint(
                    painter: new TrianglePainter(
                        arrowDirection: this.arrowDirection
                        )
                    )
                );

            Widget toolbar = new ClipRRect(
                borderRadius: CustomTextSelectionControlsUtils._kToolbarBorderRadius,
                child: new DecoratedBox(
                    decoration: new BoxDecoration(
                        color: CustomTextSelectionControlsUtils._kToolbarDividerColor,
                        borderRadius: CustomTextSelectionControlsUtils._kToolbarBorderRadius,
                        border: Border.all(color: CustomTextSelectionControlsUtils._kToolbarBackgroundColor, 0)
                        ),
                    child: new Row(mainAxisSize: MainAxisSize.min, children: items)
                    )
                );

            List <Widget> menus = this.arrowDirection == ArrowDirection.down
                ? new List <Widget> {
                toolbar, triangle
            }
                : new List <Widget> {
                triangle, toolbar
            };

            return(new Column(
                       mainAxisSize: MainAxisSize.min,
                       children: menus
                       ));
        }
Ejemplo n.º 6
0
 public override Widget build(BuildContext context)
 {
     return(SizedBox.fromSize(size: AppConstants.DIRECTION_BUTTON_SIZE * 2.8f,
                              child: Transform.rotate(
                                  origin: new Offset(90, 90),
                                  degree: Mathf.PI / 4,
                                  child: new Column(
                                      mainAxisSize: MainAxisSize.min,
                                      children: new List <Widget>()
     {
         new SizedBox(height: AppConstants.DIRECTION_BUTTON_SPACE),
         new Row(
             children: new List <Widget>()
         {
             new SizedBox(width: AppConstants.DIRECTION_BUTTON_SPACE),
             new GBButton(
                 size: AppConstants.DIRECTION_BUTTON_SIZE,
                 () => { Game.of(context).Drop(); }
                 ),
             new SizedBox(width: AppConstants.DIRECTION_BUTTON_SPACE),
             new GBButton(
                 size: AppConstants.DIRECTION_BUTTON_SIZE,
                 () => { Game.of(context).Right(); }
                 )
         }
             ),
         new SizedBox(height: AppConstants.DIRECTION_BUTTON_SPACE),
         new Row(
             children: new List <Widget>()
         {
             new SizedBox(width: AppConstants.DIRECTION_BUTTON_SPACE),
             new GBButton(
                 size: AppConstants.DIRECTION_BUTTON_SIZE,
                 () => { Game.of(context).Left(); }
                 ),
             new SizedBox(width: AppConstants.DIRECTION_BUTTON_SPACE),
             new GBButton(
                 size: AppConstants.DIRECTION_BUTTON_SIZE,
                 () => { Game.of(context).Down(); }
                 )
         }
             ),
         new SizedBox(height: AppConstants.DIRECTION_BUTTON_SPACE)
     }
                                      )
                                  )
                              ));
 }
Ejemplo n.º 7
0
        public override Widget buildHandle(BuildContext context, TextSelectionHandleType type, float textLineHeight)
        {
            Size desiredSize = new Size(
                2.0f * CupertinoTextSelectionUtils._kHandlesPadding,
                textLineHeight + 2.0f * CupertinoTextSelectionUtils._kHandlesPadding
                );

            Widget handle = SizedBox.fromSize(
                size: desiredSize,
                child: new CustomPaint(
                    painter: new _TextSelectionHandlePainter(
                        origin: new Offset(CupertinoTextSelectionUtils._kHandlesPadding,
                                           textLineHeight + CupertinoTextSelectionUtils._kHandlesPadding)
                        )
                    )
                );

            switch (type)
            {
            case TextSelectionHandleType.left:
                Matrix4 matrix = new Matrix4().rotationZ(Mathf.PI);
                matrix.translate(-CupertinoTextSelectionUtils._kHandlesPadding,
                                 -CupertinoTextSelectionUtils._kHandlesPadding);

                return(new Transform(
                           transform: matrix,
                           child: handle
                           ));

            case TextSelectionHandleType.right:
                return(new Transform(
                           transform: new Matrix4().translationValues(
                               -CupertinoTextSelectionUtils._kHandlesPadding,
                               -(textLineHeight + CupertinoTextSelectionUtils._kHandlesPadding),
                               0
                               ),
                           child: handle
                           ));

            case TextSelectionHandleType.collapsed:
                return(new Container());
            }

            return(null);
        }
Ejemplo n.º 8
0
        public override Widget build(BuildContext context)
        {
            Widget triangle = SizedBox.fromSize(
                size: CustomTextSelectionControlsUtils._kToolbarTriangleSize,
                child: new CustomPaint(
                    painter: new TrianglePainter(
                        arrowDirection: this.widget.arrowDirection
                        )
                    )
                );

            return(new AnimatedBuilder(
                       animation: this._animationController,
                       builder: (cxt, child) => new Opacity(
                           opacity: this._animationOpacity.value,
                           child: triangle
                           )
                       ));
        }
Ejemplo n.º 9
0
        public override Widget build(BuildContext context)
        {
            var width = BrickSize.of(context).Size.width;

            return(SizedBox.fromSize(
                       size: new Size(width, width),
                       child: new Container(
                           margin: EdgeInsets.all(width * 0.05f),
                           padding: EdgeInsets.all(width * 0.1f),
                           decoration: new BoxDecoration(
                               border: Border.all(
                                   color: mColor,
                                   width: width * 0.1f
                                   )
                               ),
                           child: new Container(
                               color: mColor
                               )
                           )
                       ));
        }
Ejemplo n.º 10
0
        public override Widget build(BuildContext context)
        {
            List <Widget> items = new List <Widget>();
            Widget        onePhysicalPixelVerticalDivider =
                new SizedBox(width: 1.0f / MediaQuery.of(context).devicePixelRatio);

            if (this.handleCut != null)
            {
                items.Add(_buildToolbarButton("剪切", this.handleCut));
            }

            if (this.handleCopy != null)
            {
                if (items.isNotEmpty())
                {
                    items.Add(onePhysicalPixelVerticalDivider);
                }

                items.Add(_buildToolbarButton("拷贝", this.handleCopy));
            }

            if (this.handlePaste != null)
            {
                if (items.isNotEmpty())
                {
                    items.Add(onePhysicalPixelVerticalDivider);
                }

                items.Add(_buildToolbarButton("粘贴", this.handlePaste));
            }

            if (this.handleSelectAll != null)
            {
                if (items.isNotEmpty())
                {
                    items.Add(onePhysicalPixelVerticalDivider);
                }

                items.Add(_buildToolbarButton("全选", this.handleSelectAll));
            }

            Widget padding = new Padding(padding: EdgeInsets.only(bottom: 10.0f));

            Widget triangle = SizedBox.fromSize(
                size: CustomTextSelectionControlsUtils._kToolbarTriangleSize,
                child: new CustomPaint(
                    painter: new _TextSelectionToolbarNotchPainter((_ArrowDirection)this.arrowDirection)
                    )
                );

            Widget toolbar = new ClipRRect(
                borderRadius: CustomTextSelectionControlsUtils._kToolbarBorderRadius,
                child: new DecoratedBox(
                    decoration: new BoxDecoration(
                        color: CustomTextSelectionControlsUtils._kToolbarDividerColor,
                        borderRadius: CustomTextSelectionControlsUtils._kToolbarBorderRadius,
                        border: Border.all(color: CustomTextSelectionControlsUtils._kToolbarBackgroundColor, 0)
                        ),
                    child: new Row(mainAxisSize: MainAxisSize.min, children: items)
                    )
                );

            List <Widget> menus = this.arrowDirection == _ArrowDirection.down
                ? new List <Widget> {
                toolbar, triangle, padding
            }
                : new List <Widget> {
                padding, triangle, toolbar
            };

            return(new Column(
                       mainAxisSize: MainAxisSize.min,
                       children: menus
                       ));
        }
Ejemplo n.º 11
0
        public override Widget build(BuildContext context)
        {
            List <Widget> items = new List <Widget>();
            Widget        onePhysicalPixelVerticalDivider =
                new SizedBox(width: 1.0f / MediaQuery.of(context).devicePixelRatio);
            CupertinoLocalizations localizations = CupertinoLocalizations.of(context);

            if (this.handleCut != null)
            {
                items.Add(this._buildToolbarButton(localizations.cutButtonLabel, this.handleCut));
            }

            if (this.handleCopy != null)
            {
                if (items.isNotEmpty())
                {
                    items.Add(onePhysicalPixelVerticalDivider);
                }

                items.Add(this._buildToolbarButton(localizations.copyButtonLabel, this.handleCopy));
            }

            if (this.handlePaste != null)
            {
                if (items.isNotEmpty())
                {
                    items.Add(onePhysicalPixelVerticalDivider);
                }

                items.Add(this._buildToolbarButton(localizations.pasteButtonLabel, this.handlePaste));
            }

            if (this.handleSelectAll != null)
            {
                if (items.isNotEmpty())
                {
                    items.Add(onePhysicalPixelVerticalDivider);
                }

                items.Add(this._buildToolbarButton(localizations.selectAllButtonLabel, this.handleSelectAll));
            }

            Widget triangle = SizedBox.fromSize(
                size: CupertinoTextSelectionUtils._kToolbarTriangleSize,
                child: new CustomPaint(
                    painter: new _TextSelectionToolbarNotchPainter()
                    )
                );

            return(new Column(
                       mainAxisSize: MainAxisSize.min,
                       children: new List <Widget> {
                new ClipRRect(
                    borderRadius: CupertinoTextSelectionUtils._kToolbarBorderRadius,
                    child: new DecoratedBox(
                        decoration: new BoxDecoration(
                            color: CupertinoTextSelectionUtils._kToolbarDividerColor,
                            borderRadius: CupertinoTextSelectionUtils._kToolbarBorderRadius,
                            border: Border.all(color: CupertinoTextSelectionUtils._kToolbarBackgroundColor,
                                               width: 0)
                            ),
                        child: new Row(mainAxisSize: MainAxisSize.min, children: items)
                        )
                    ),
                triangle,
                new Padding(padding: EdgeInsets.only(bottom: 10.0f))
            }
                       ));
        }
Ejemplo n.º 12
0
        public override Widget build(BuildContext context)
        {
            return(new Material(
                       color: mColor,
                       elevation: 2,
                       shape: new CircleBorder(),
                       child: new GestureDetector(
                           behavior: HitTestBehavior.opaque,
                           onTapDown: details =>
            {
                this.setState(() => { mColor = widget.Color.withOpacity(0.5f); });

                if (mTimer != null)
                {
                    return;
                }

                mTapEnd = false;

                widget.OnTap();

                if (!widget.EnableLongPress)
                {
                    return;
                }

                Promise.Delayed(TimeSpan.FromMilliseconds(300))
                .Then(() =>
                {
                    if (!mTapEnd)
                    {
                        mTimer = Window.instance.periodic(TimeSpan.FromMilliseconds(60),
                                                          () =>
                        {
                            if (mTapEnd)
                            {
                                mTimer?.cancel();
                                mTimer = null;
                            }
                            else
                            {
                                widget.OnTap();
                            }
                        });
                    }
                });
            },
                           onTapCancel: () =>
            {
                mTimer?.cancel();
                mTimer = null;
                mTapEnd = true;

                this.setState(() => { mColor = widget.Color; });
            },
                           onTapUp: details =>
            {
                mTimer?.cancel();
                mTimer = null;
                mTapEnd = true;

                this.setState(() => { mColor = widget.Color; });
            },
                           child: SizedBox.fromSize(
                               size: widget.Size
                               )
                           )
                       ));
        }