mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-02 11:43:19 +08:00
Adding NineTileBox widget
This commit is contained in:
1
doc/examples/widgets/.flutter-plugins-dependencies
Normal file
1
doc/examples/widgets/.flutter-plugins-dependencies
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"audioplayers","dependencies":["path_provider"]},{"name":"path_provider","dependencies":[]}]}
|
||||||
71
doc/examples/widgets/.gitignore
vendored
Normal file
71
doc/examples/widgets/.gitignore
vendored
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# Miscellaneous
|
||||||
|
*.class
|
||||||
|
*.log
|
||||||
|
*.pyc
|
||||||
|
*.swp
|
||||||
|
.DS_Store
|
||||||
|
.atom/
|
||||||
|
.buildlog/
|
||||||
|
.history
|
||||||
|
.svn/
|
||||||
|
|
||||||
|
# IntelliJ related
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# Visual Studio Code related
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# Flutter/Dart/Pub related
|
||||||
|
**/doc/api/
|
||||||
|
.dart_tool/
|
||||||
|
.flutter-plugins
|
||||||
|
.packages
|
||||||
|
.pub-cache/
|
||||||
|
.pub/
|
||||||
|
/build/
|
||||||
|
|
||||||
|
# Android related
|
||||||
|
**/android/**/gradle-wrapper.jar
|
||||||
|
**/android/.gradle
|
||||||
|
**/android/captures/
|
||||||
|
**/android/gradlew
|
||||||
|
**/android/gradlew.bat
|
||||||
|
**/android/local.properties
|
||||||
|
**/android/**/GeneratedPluginRegistrant.java
|
||||||
|
|
||||||
|
# iOS/XCode related
|
||||||
|
**/ios/**/*.mode1v3
|
||||||
|
**/ios/**/*.mode2v3
|
||||||
|
**/ios/**/*.moved-aside
|
||||||
|
**/ios/**/*.pbxuser
|
||||||
|
**/ios/**/*.perspectivev3
|
||||||
|
**/ios/**/*sync/
|
||||||
|
**/ios/**/.sconsign.dblite
|
||||||
|
**/ios/**/.tags*
|
||||||
|
**/ios/**/.vagrant/
|
||||||
|
**/ios/**/DerivedData/
|
||||||
|
**/ios/**/Icon?
|
||||||
|
**/ios/**/Pods/
|
||||||
|
**/ios/**/.symlinks/
|
||||||
|
**/ios/**/profile
|
||||||
|
**/ios/**/xcuserdata
|
||||||
|
**/ios/.generated/
|
||||||
|
**/ios/Flutter/App.framework
|
||||||
|
**/ios/Flutter/Flutter.framework
|
||||||
|
**/ios/Flutter/Generated.xcconfig
|
||||||
|
**/ios/Flutter/app.flx
|
||||||
|
**/ios/Flutter/app.zip
|
||||||
|
**/ios/Flutter/flutter_assets/
|
||||||
|
**/ios/ServiceDefinitions.json
|
||||||
|
**/ios/Runner/GeneratedPluginRegistrant.*
|
||||||
|
|
||||||
|
# Exceptions to above rules.
|
||||||
|
!**/ios/**/default.mode1v3
|
||||||
|
!**/ios/**/default.mode2v3
|
||||||
|
!**/ios/**/default.pbxuser
|
||||||
|
!**/ios/**/default.perspectivev3
|
||||||
|
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
|
||||||
|
|
||||||
10
doc/examples/widgets/.metadata
Normal file
10
doc/examples/widgets/.metadata
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# This file tracks properties of this Flutter project.
|
||||||
|
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||||
|
#
|
||||||
|
# This file should be version controlled and should not be manually edited.
|
||||||
|
|
||||||
|
version:
|
||||||
|
revision: 0aed0b61a1789ed06c9fa05a6c5fcfbd398c4811
|
||||||
|
channel: master
|
||||||
|
|
||||||
|
project_type: app
|
||||||
3
doc/examples/widgets/README.md
Normal file
3
doc/examples/widgets/README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Widgets
|
||||||
|
|
||||||
|
A Flutter project showcasing Flame's widgets.
|
||||||
BIN
doc/examples/widgets/assets/images/nine_tile_box.png
Normal file
BIN
doc/examples/widgets/assets/images/nine_tile_box.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 318 B |
29
doc/examples/widgets/lib/main.dart
Normal file
29
doc/examples/widgets/lib/main.dart
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flame/flame.dart';
|
||||||
|
import 'package:dashbook/dashbook.dart';
|
||||||
|
|
||||||
|
import 'package:flame/widgets/nine_tile_box.dart';
|
||||||
|
|
||||||
|
void main() async {
|
||||||
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
|
final nineTileBoxImage = await Flame.images.load('nine_tile_box.png');
|
||||||
|
final dashbook = Dashbook();
|
||||||
|
|
||||||
|
dashbook.storiesOf('SpritesheetContainer').decorator(CenterDecorator()).add(
|
||||||
|
'default',
|
||||||
|
(ctx) => Container(
|
||||||
|
width: ctx.numberProperty('width', 200),
|
||||||
|
height: ctx.numberProperty('height', 200),
|
||||||
|
child: NineTileBox(
|
||||||
|
image: nineTileBoxImage,
|
||||||
|
tileSize: 16,
|
||||||
|
destTileSize: 50,
|
||||||
|
child: const Center(
|
||||||
|
child: const Text('Cool label',
|
||||||
|
style: const TextStyle(color: const Color(0xFFFFFFFF)))),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
|
||||||
|
runApp(dashbook);
|
||||||
|
}
|
||||||
20
doc/examples/widgets/pubspec.yaml
Normal file
20
doc/examples/widgets/pubspec.yaml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
name: widgets
|
||||||
|
description: A Flutter project showcasing Flame's widgets.
|
||||||
|
|
||||||
|
version: 1.0.0+1
|
||||||
|
|
||||||
|
environment:
|
||||||
|
sdk: ">=2.1.0 <3.0.0"
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
flutter:
|
||||||
|
sdk: flutter
|
||||||
|
flame:
|
||||||
|
path: ../../../
|
||||||
|
dashbook: ^0.0.2
|
||||||
|
|
||||||
|
cupertino_icons: ^0.1.2
|
||||||
|
flutter:
|
||||||
|
uses-material-design: true
|
||||||
|
assets:
|
||||||
|
- assets/images/nine_tile_box.png
|
||||||
138
lib/widgets/nine_tile_box.dart
Normal file
138
lib/widgets/nine_tile_box.dart
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
import 'package:flutter/widgets.dart' as widgets;
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
import '../sprite.dart';
|
||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
class _Painter extends widgets.CustomPainter {
|
||||||
|
final Image image;
|
||||||
|
final double tileSize;
|
||||||
|
final double destTileSize;
|
||||||
|
|
||||||
|
_Painter(
|
||||||
|
{@required this.image,
|
||||||
|
@required this.tileSize,
|
||||||
|
@required this.destTileSize});
|
||||||
|
|
||||||
|
@override
|
||||||
|
void paint(Canvas canvas, Size size) {
|
||||||
|
final topLeftCorner =
|
||||||
|
Sprite.fromImage(image, x: 0, y: 0, width: tileSize, height: tileSize);
|
||||||
|
final topRightCorner = Sprite.fromImage(image,
|
||||||
|
x: tileSize * 2, y: 0, width: tileSize, height: tileSize);
|
||||||
|
|
||||||
|
final bottomLeftCorner = Sprite.fromImage(image,
|
||||||
|
x: 0, y: 2 * tileSize, width: tileSize, height: tileSize);
|
||||||
|
final bottomRightCorner = Sprite.fromImage(image,
|
||||||
|
x: tileSize * 2, y: 2 * tileSize, width: tileSize, height: tileSize);
|
||||||
|
|
||||||
|
final topSide = Sprite.fromImage(image,
|
||||||
|
x: tileSize, y: 0, width: tileSize, height: tileSize);
|
||||||
|
final bottomSide = Sprite.fromImage(image,
|
||||||
|
x: tileSize, y: tileSize * 2, width: tileSize, height: tileSize);
|
||||||
|
|
||||||
|
final leftSide = Sprite.fromImage(image,
|
||||||
|
x: 0, y: tileSize, width: tileSize, height: tileSize);
|
||||||
|
final rightSide = Sprite.fromImage(image,
|
||||||
|
x: tileSize * 2, y: tileSize, width: tileSize, height: tileSize);
|
||||||
|
|
||||||
|
final middle = Sprite.fromImage(image,
|
||||||
|
x: tileSize, y: tileSize, width: tileSize, height: tileSize);
|
||||||
|
|
||||||
|
// Middle
|
||||||
|
for (var y = destTileSize;
|
||||||
|
y < size.height - destTileSize;
|
||||||
|
y = y + destTileSize) {
|
||||||
|
for (var x = destTileSize;
|
||||||
|
x < size.width - destTileSize;
|
||||||
|
x = x + destTileSize) {
|
||||||
|
middle.renderRect(
|
||||||
|
canvas, Rect.fromLTWH(x, y, destTileSize, destTileSize));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Top and bottom side
|
||||||
|
for (var i = destTileSize;
|
||||||
|
i < size.width - destTileSize;
|
||||||
|
i = i + destTileSize) {
|
||||||
|
topSide.renderRect(
|
||||||
|
canvas, Rect.fromLTWH(i, 0, destTileSize, destTileSize));
|
||||||
|
bottomSide.renderRect(
|
||||||
|
canvas,
|
||||||
|
Rect.fromLTWH(
|
||||||
|
i, size.height - destTileSize, destTileSize, destTileSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Left and right side
|
||||||
|
for (var i = destTileSize;
|
||||||
|
i < size.height - destTileSize;
|
||||||
|
i = i + destTileSize) {
|
||||||
|
leftSide.renderRect(
|
||||||
|
canvas, Rect.fromLTWH(0, i, destTileSize, destTileSize));
|
||||||
|
rightSide.renderRect(
|
||||||
|
canvas,
|
||||||
|
Rect.fromLTWH(
|
||||||
|
size.width - destTileSize, i, destTileSize, destTileSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Corners
|
||||||
|
topLeftCorner.renderRect(
|
||||||
|
canvas, Rect.fromLTWH(0, 0, destTileSize, destTileSize));
|
||||||
|
topRightCorner.renderRect(
|
||||||
|
canvas,
|
||||||
|
Rect.fromLTWH(
|
||||||
|
size.width - destTileSize, 0, destTileSize, destTileSize));
|
||||||
|
|
||||||
|
bottomLeftCorner.renderRect(
|
||||||
|
canvas,
|
||||||
|
Rect.fromLTWH(
|
||||||
|
0, size.height - destTileSize, destTileSize, destTileSize));
|
||||||
|
bottomRightCorner.renderRect(
|
||||||
|
canvas,
|
||||||
|
Rect.fromLTWH(size.width - destTileSize, size.height - destTileSize,
|
||||||
|
destTileSize, destTileSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool shouldRepaint(_) => false;
|
||||||
|
}
|
||||||
|
|
||||||
|
class NineTileBox extends widgets.StatelessWidget {
|
||||||
|
final Image image;
|
||||||
|
final double tileSize;
|
||||||
|
final double destTileSize;
|
||||||
|
final double width;
|
||||||
|
final double height;
|
||||||
|
|
||||||
|
final widgets.Widget child;
|
||||||
|
|
||||||
|
final widgets.EdgeInsetsGeometry padding;
|
||||||
|
|
||||||
|
NineTileBox({
|
||||||
|
@required this.image,
|
||||||
|
@required this.tileSize,
|
||||||
|
@required this.destTileSize,
|
||||||
|
this.child,
|
||||||
|
this.width,
|
||||||
|
this.height,
|
||||||
|
this.padding,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
widgets.Widget build(widgets.BuildContext context) {
|
||||||
|
return widgets.Container(
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
child: widgets.CustomPaint(
|
||||||
|
painter: _Painter(
|
||||||
|
image: image,
|
||||||
|
tileSize: tileSize,
|
||||||
|
destTileSize: destTileSize,
|
||||||
|
),
|
||||||
|
child: widgets.Container(
|
||||||
|
child: child,
|
||||||
|
padding: padding,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -15,6 +15,7 @@ dependencies:
|
|||||||
convert: ^2.0.1
|
convert: ^2.0.1
|
||||||
flutter_svg: ^0.15.0
|
flutter_svg: ^0.15.0
|
||||||
flare_flutter: ^2.0.1
|
flare_flutter: ^2.0.1
|
||||||
|
meta: ^1.1.8
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user