diff --git a/.drone.yml b/.drone.yml index 0fd09e19..32448aec 100644 --- a/.drone.yml +++ b/.drone.yml @@ -138,17 +138,6 @@ steps: - cd .. - scp -r -o StrictHostKeyChecking=no -i ~/id_rsa $DIR buildfiles@build.openprivacy.ca:/home/buildfiles/buildfiles/ - - name: notify-email - image: drillster/drone-email - pull: if-not-exists - settings: - host: build.openprivacy.ca - port: 25 - skip_verify: true - from: drone@openprivacy.ca - when: - status: [ failure ] - - name: notify-gogs image: openpriv/drone-gogs pull: if-not-exists diff --git a/lib/cwtch/ffi.dart b/lib/cwtch/ffi.dart index f6aa14f5..c7b6b45f 100644 --- a/lib/cwtch/ffi.dart +++ b/lib/cwtch/ffi.dart @@ -159,7 +159,6 @@ class CwtchFfi implements Cwtch { cwtchDir = envVars['CWTCH_HOME'] ?? path.join(envVars['HOME']!, ".cwtch"); } - if (await File("linux/Tor/tor").exists()) { bundledTor = "linux/Tor/tor"; } else if (await File("lib/Tor/tor").exists()) { @@ -788,7 +787,6 @@ class CwtchFfi implements Cwtch { @override String? defaultDownloadPath() { - Map envVars = Platform.environment; String nominalPath = path.join(envVars[Platform.isWindows ? 'UserProfile' : 'HOME']!, "Downloads"); if (Directory(nominalPath).existsSync() == false) { diff --git a/lib/main.dart b/lib/main.dart index cfbf9dd6..180ffae7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -71,7 +71,6 @@ class FlwtchState extends State with WindowListener { @override initState() { - globalSettings = Settings(Locale("en", ''), CwtchDark()); globalErrorHandler = ErrorHandler(); globalTorStatus = TorStatus(); @@ -204,7 +203,8 @@ class FlwtchState extends State with WindowListener { print("Exiting..."); exit(0); } - }; + } + ; } // Invoked via notificationClickChannel by MyBroadcastReceiver in MainActivity.kt diff --git a/lib/models/profileservers.dart b/lib/models/profileservers.dart index fbc02203..61ee76d1 100644 --- a/lib/models/profileservers.dart +++ b/lib/models/profileservers.dart @@ -69,5 +69,4 @@ class ProfileServerListState extends ChangeNotifier { } List get servers => _servers.sublist(0); //todo: copy?? dont want caller able to bypass changenotifier - } diff --git a/lib/models/servers.dart b/lib/models/servers.dart index cd059cbf..c08290fd 100644 --- a/lib/models/servers.dart +++ b/lib/models/servers.dart @@ -68,7 +68,6 @@ class ServerListState extends ChangeNotifier { } List get servers => _servers.sublist(0); //todo: copy?? dont want caller able to bypass changenotifier - } class ServerInfoState extends ChangeNotifier { diff --git a/lib/notification_manager.dart b/lib/notification_manager.dart index f5cb9e8b..00042bcc 100644 --- a/lib/notification_manager.dart +++ b/lib/notification_manager.dart @@ -154,7 +154,6 @@ class NixNotificationManager implements NotificationsManager { } NotificationsManager newDesktopNotificationsManager(Future Function(String profileOnion, int convoId) notificationSelectConvo) { - // We don't want notifications in Dev Mode if (EnvironmentConfig.TEST_MODE) { return NullNotificationsManager(); diff --git a/lib/third_party/linkify/flutter_linkify.dart b/lib/third_party/linkify/flutter_linkify.dart index a4c38881..882bdfe5 100644 --- a/lib/third_party/linkify/flutter_linkify.dart +++ b/lib/third_party/linkify/flutter_linkify.dart @@ -294,47 +294,50 @@ class SelectableLinkify extends StatelessWidget { linkifiers: linkifiers, ); - return SelectableText.rich( - buildTextSpan( - elements, - style: Theme.of(context).textTheme.bodyText2?.merge(style), - codeStyle: Theme.of(context).textTheme.bodyText2?.merge(codeStyle), - onOpen: onOpen, - context: context, - linkStyle: Theme.of(context) - .textTheme - .bodyText2 - ?.merge(style) - .copyWith( - color: Colors.blueAccent, - decoration: TextDecoration.underline, - ) - .merge(linkStyle), - ), - textAlign: textAlign, - textDirection: textDirection, - minLines: minLines, - maxLines: maxLines, - focusNode: focusNode, - strutStyle: strutStyle, - showCursor: showCursor, - textScaleFactor: textScaleFactor, - autofocus: autofocus, - toolbarOptions: toolbarOptions, - cursorWidth: cursorWidth, - cursorRadius: cursorRadius, - cursorColor: cursorColor, - dragStartBehavior: dragStartBehavior, - enableInteractiveSelection: enableInteractiveSelection, - onTap: onTap, - scrollPhysics: scrollPhysics, - textWidthBasis: textWidthBasis, - textHeightBehavior: textHeightBehavior, - cursorHeight: cursorHeight, - selectionControls: selectionControls, - onSelectionChanged: onSelectionChanged, - style: style, - ); + return Container( + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: SelectableText.rich( + buildTextSpan( + elements, + style: Theme.of(context).textTheme.bodyText2?.merge(style), + codeStyle: Theme.of(context).textTheme.bodyText2?.merge(codeStyle), + onOpen: onOpen, + context: context, + linkStyle: Theme.of(context) + .textTheme + .bodyText2 + ?.merge(style) + .copyWith( + color: Colors.blueAccent, + decoration: TextDecoration.underline, + ) + .merge(linkStyle), + ), + textAlign: textAlign, + textDirection: textDirection, + minLines: minLines, + maxLines: maxLines, + focusNode: focusNode, + strutStyle: strutStyle, + showCursor: showCursor, + textScaleFactor: textScaleFactor, + autofocus: autofocus, + toolbarOptions: toolbarOptions, + cursorWidth: cursorWidth, + cursorRadius: cursorRadius, + cursorColor: cursorColor, + dragStartBehavior: dragStartBehavior, + enableInteractiveSelection: enableInteractiveSelection, + onTap: onTap, + scrollPhysics: scrollPhysics, + textWidthBasis: textWidthBasis, + textHeightBehavior: textHeightBehavior, + cursorHeight: cursorHeight, + selectionControls: selectionControls, + onSelectionChanged: onSelectionChanged, + style: style, + )); } } diff --git a/lib/views/globalsettingsview.dart b/lib/views/globalsettingsview.dart index a8306250..97e08748 100644 --- a/lib/views/globalsettingsview.dart +++ b/lib/views/globalsettingsview.dart @@ -128,7 +128,7 @@ class _GlobalSettingsViewState extends State { items: AppLocalizations.supportedLocales.map>((Locale value) { return DropdownMenuItem( value: value.toString(), - child: Text( key: Key("dropdownLanguage" + value.languageCode), getLanguageFull(context, value.languageCode, value.countryCode)), + child: Text(key: Key("dropdownLanguage" + value.languageCode), getLanguageFull(context, value.languageCode, value.countryCode)), ); }).toList()))), SwitchListTile( diff --git a/lib/views/groupsettingsview.dart b/lib/views/groupsettingsview.dart index 65048f7d..492c0847 100644 --- a/lib/views/groupsettingsview.dart +++ b/lib/views/groupsettingsview.dart @@ -46,7 +46,11 @@ class _GroupSettingsViewState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(Provider.of(context).nickname + " " + AppLocalizations.of(context)!.conversationSettings), + title: Container( + height: 24, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: Text(Provider.of(context).nickname + " " + AppLocalizations.of(context)!.conversationSettings)), ), body: _buildSettingsList(), ); diff --git a/lib/views/messageview.dart b/lib/views/messageview.dart index f74f9f93..868d1f70 100644 --- a/lib/views/messageview.dart +++ b/lib/views/messageview.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'dart:io'; +import 'dart:math'; import 'dart:ui'; import 'package:crypto/crypto.dart'; import 'package:cwtch/cwtch/cwtch.dart'; @@ -208,10 +209,15 @@ class _MessageViewState extends State { width: 10, ), Expanded( - child: Text( - Provider.of(context).nickname, - overflow: TextOverflow.ellipsis, - )) + child: Container( + height: 24, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: Text( + Provider.of(context).nickname, + overflow: TextOverflow.clip, + maxLines: 1, + ))) ]), actions: appBarButtons, ), @@ -574,7 +580,7 @@ class _MessageViewState extends State { keyboardType: TextInputType.multiline, enableIMEPersonalizedLearning: false, minLines: 1, - maxLength: (isGroup ? GroupMessageLengthMax : P2PMessageLengthMax) - numberOfBytesMoreThanChar, + maxLength: max(1, (isGroup ? GroupMessageLengthMax : P2PMessageLengthMax) - numberOfBytesMoreThanChar), maxLengthEnforcement: MaxLengthEnforcement.enforced, maxLines: 3, onFieldSubmitted: _sendMessage, diff --git a/lib/views/peersettingsview.dart b/lib/views/peersettingsview.dart index d4ae50c0..35ec44e2 100644 --- a/lib/views/peersettingsview.dart +++ b/lib/views/peersettingsview.dart @@ -47,7 +47,7 @@ class _PeerSettingsViewState extends State { } return Scaffold( appBar: AppBar( - title: Text(handle + " " + AppLocalizations.of(context)!.conversationSettings), + title: Container(height: 24, clipBehavior: Clip.hardEdge, decoration: BoxDecoration(), child: Text(handle + " " + AppLocalizations.of(context)!.conversationSettings)), ), body: _buildSettingsList(), ); diff --git a/lib/widgets/buttontextfield.dart b/lib/widgets/buttontextfield.dart index dd695de2..b5c24847 100644 --- a/lib/widgets/buttontextfield.dart +++ b/lib/widgets/buttontextfield.dart @@ -44,42 +44,47 @@ class _CwtchButtonTextFieldState extends State { @override Widget build(BuildContext context) { return Consumer(builder: (context, theme, child) { - return TextFormField( - key: widget.testKey, - controller: widget.controller, - readOnly: widget.readonly, - showCursor: !widget.readonly, - focusNode: _focusNode, - enableIMEPersonalizedLearning: false, - onChanged: widget.onChanged, - decoration: InputDecoration( - labelText: widget.labelText, - labelStyle: TextStyle(color: theme.current().mainTextColor, backgroundColor: theme.current().textfieldBackgroundColor), - suffixIcon: IconButton( - onPressed: widget.onPressed, - icon: widget.icon, - splashRadius: Material.defaultSplashRadius / 2, - padding: EdgeInsets.fromLTRB(0.0, 4.0, 2.0, 2.0), - tooltip: widget.tooltip, - enableFeedback: true, - color: theme.current().mainTextColor, - highlightColor: theme.current().defaultButtonColor, - focusColor: theme.current().defaultButtonActiveColor, - splashColor: theme.current().defaultButtonActiveColor, - ), - floatingLabelBehavior: FloatingLabelBehavior.never, - filled: true, - fillColor: theme.current().textfieldBackgroundColor, - focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 1.0)), - focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 1.0)), - errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 1.0)), - errorStyle: TextStyle( - color: theme.current().textfieldErrorColor, - fontWeight: FontWeight.bold, - ), - contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), - enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 1.0))), - ); + return Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration(), + child: TextFormField( + key: widget.testKey, + controller: widget.controller, + readOnly: widget.readonly, + showCursor: !widget.readonly, + focusNode: _focusNode, + enableIMEPersonalizedLearning: false, + onChanged: widget.onChanged, + maxLines: 1, + style: TextStyle(overflow: TextOverflow.clip), + decoration: InputDecoration( + labelText: widget.labelText, + labelStyle: TextStyle(color: theme.current().mainTextColor, backgroundColor: theme.current().textfieldBackgroundColor), + suffixIcon: IconButton( + onPressed: widget.onPressed, + icon: widget.icon, + splashRadius: Material.defaultSplashRadius / 2, + padding: EdgeInsets.fromLTRB(0.0, 4.0, 2.0, 2.0), + tooltip: widget.tooltip, + enableFeedback: true, + color: theme.current().mainTextColor, + highlightColor: theme.current().defaultButtonColor, + focusColor: theme.current().defaultButtonActiveColor, + splashColor: theme.current().defaultButtonActiveColor, + ), + floatingLabelBehavior: FloatingLabelBehavior.never, + filled: true, + fillColor: theme.current().textfieldBackgroundColor, + focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 1.0)), + focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 1.0)), + errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 1.0)), + errorStyle: TextStyle( + color: theme.current().textfieldErrorColor, + fontWeight: FontWeight.bold, + ), + contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), + enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 1.0))), + )); }); } } diff --git a/lib/widgets/contactrow.dart b/lib/widgets/contactrow.dart index 66332612..8411214b 100644 --- a/lib/widgets/contactrow.dart +++ b/lib/widgets/contactrow.dart @@ -64,17 +64,22 @@ class _ContactRowState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - contact.nickname, //(contact.isInvitation ? "invite " : "non-invite ") + (contact.isBlocked ? "blokt" : "nonblokt"),// + Container( + height: 24, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: Text( + contact.nickname, //(contact.isInvitation ? "invite " : "non-invite ") + (contact.isBlocked ? "blokt" : "nonblokt"),// - style: TextStyle( - fontSize: Provider.of(context).theme.contactOnionTextSize(), - color: contact.isBlocked - ? Provider.of(context).theme.portraitBlockedTextColor - : Provider.of(context).theme.mainTextColor), //Provider.of(context).biggerFont, - softWrap: true, - overflow: TextOverflow.visible, - ), + style: TextStyle( + fontSize: Provider.of(context).theme.contactOnionTextSize(), + color: contact.isBlocked + ? Provider.of(context).theme.portraitBlockedTextColor + : Provider.of(context).theme.mainTextColor), //Provider.of(context).biggerFont, + softWrap: true, + overflow: TextOverflow.clip, + maxLines: 1, + )), syncStatus ?? Container(), Visibility( visible: !Provider.of(context).streamerMode, diff --git a/lib/widgets/filebubble.dart b/lib/widgets/filebubble.dart index 0b98423f..e1181414 100644 --- a/lib/widgets/filebubble.dart +++ b/lib/widgets/filebubble.dart @@ -144,8 +144,12 @@ class FileBubbleState extends State { return LayoutBuilder(builder: (bcontext, constraints) { var wdgSender = Visibility( visible: widget.interactive, - child: SelectableText(senderDisplayStr + '\u202F', - style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of(context).theme.messageFromMeTextColor : Provider.of(context).theme.messageFromOtherTextColor))); + child: Container( + height: 11, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: SelectableText(senderDisplayStr + '\u202F', + style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of(context).theme.messageFromMeTextColor : Provider.of(context).theme.messageFromOtherTextColor)))); var isPreview = false; var wdgMessage = !showFileSharing ? Text(AppLocalizations.of(context)!.messageEnableFileSharing) diff --git a/lib/widgets/messagebubble.dart b/lib/widgets/messagebubble.dart index 19e7a103..531f1a5a 100644 --- a/lib/widgets/messagebubble.dart +++ b/lib/widgets/messagebubble.dart @@ -42,8 +42,17 @@ class MessageBubbleState extends State { senderDisplayStr = Provider.of(context).senderHandle; } } - var wdgSender = SelectableText(senderDisplayStr, - style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of(context).theme.messageFromMeTextColor : Provider.of(context).theme.messageFromOtherTextColor)); + var wdgSender = Container( + height: 11, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: SelectableText(senderDisplayStr, + maxLines: 1, + style: TextStyle( + fontSize: 9.0, + overflow: TextOverflow.clip, + color: fromMe ? Provider.of(context).theme.messageFromMeTextColor : Provider.of(context).theme.messageFromOtherTextColor, + ))); var wdgMessage = SelectableLinkify( text: widget.content + '\u202F', diff --git a/lib/widgets/profilerow.dart b/lib/widgets/profilerow.dart index dfc362b0..f08ac334 100644 --- a/lib/widgets/profilerow.dart +++ b/lib/widgets/profilerow.dart @@ -44,13 +44,17 @@ class _ProfileRowState extends State { Expanded( child: Column( children: [ - Text( - profile.nickname, - semanticsLabel: profile.nickname, - style: Provider.of(context).biggerFont, - softWrap: true, - overflow: TextOverflow.ellipsis, - ), + Container( + height: 24, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: Text( + profile.nickname, + semanticsLabel: profile.nickname, + style: Provider.of(context).biggerFont, + softWrap: true, + overflow: TextOverflow.ellipsis, + )), Visibility( visible: !Provider.of(context).streamerMode, child: ExcludeSemantics( diff --git a/lib/widgets/quotedmessage.dart b/lib/widgets/quotedmessage.dart index d371d3e8..810342bb 100644 --- a/lib/widgets/quotedmessage.dart +++ b/lib/widgets/quotedmessage.dart @@ -43,8 +43,12 @@ class QuotedMessageBubbleState extends State { } } - var wdgSender = SelectableText(senderDisplayStr, - style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of(context).theme.messageFromMeTextColor : Provider.of(context).theme.messageFromOtherTextColor)); + var wdgSender = Container( + height: 11, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: SelectableText(senderDisplayStr, + style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of(context).theme.messageFromMeTextColor : Provider.of(context).theme.messageFromOtherTextColor))); var showClickableLinks = Provider.of(context).isExperimentEnabled(ClickableLinksExperiment); var formatMessages = Provider.of(context).isExperimentEnabled(FormattingExperiment); diff --git a/lib/widgets/textfield.dart b/lib/widgets/textfield.dart index 0a9ffa6d..9c77280f 100644 --- a/lib/widgets/textfield.dart +++ b/lib/widgets/textfield.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; @@ -42,37 +43,41 @@ class _CwtchTextFieldState extends State { @override Widget build(BuildContext context) { return Consumer(builder: (context, theme, child) { - return TextFormField( - key: widget.testKey, - controller: widget.controller, - validator: widget.validator, - onChanged: widget.onChanged, - autofocus: widget.autofocus, - autovalidateMode: AutovalidateMode.onUserInteraction, - textAlign: widget.number ? TextAlign.end : TextAlign.start, - keyboardType: widget.multiLine - ? TextInputType.multiline - : widget.number - ? TextInputType.number - : TextInputType.text, - inputFormatters: widget.number ? [FilteringTextInputFormatter.digitsOnly] : null, - maxLines: widget.multiLine ? null : 1, - scrollController: _scrollController, - enableIMEPersonalizedLearning: false, - focusNode: _focusNode, - decoration: InputDecoration( - errorMaxLines: 2, - hintText: widget.hintText, - floatingLabelBehavior: FloatingLabelBehavior.never, - filled: true, - focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 1.0)), - focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 1.0)), - errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 1.0)), - errorStyle: TextStyle(color: theme.current().textfieldErrorColor, fontWeight: FontWeight.bold, overflow: TextOverflow.visible), - fillColor: theme.current().textfieldBackgroundColor, - contentPadding: EdgeInsets.fromLTRB(10.0, 5.0, 10.0, 5.0), - enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 1.0))), - ); + return Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration(), + child: TextFormField( + key: widget.testKey, + controller: widget.controller, + validator: widget.validator, + onChanged: widget.onChanged, + autofocus: widget.autofocus, + autovalidateMode: AutovalidateMode.onUserInteraction, + textAlign: widget.number ? TextAlign.end : TextAlign.start, + keyboardType: widget.multiLine + ? TextInputType.multiline + : widget.number + ? TextInputType.number + : TextInputType.text, + inputFormatters: widget.number ? [FilteringTextInputFormatter.digitsOnly] : null, + maxLines: widget.multiLine ? null : 1, + scrollController: _scrollController, + enableIMEPersonalizedLearning: false, + focusNode: _focusNode, + style: TextStyle(overflow: TextOverflow.clip), + decoration: InputDecoration( + errorMaxLines: 2, + hintText: widget.hintText, + floatingLabelBehavior: FloatingLabelBehavior.never, + filled: true, + focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 1.0)), + focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 1.0)), + errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 1.0)), + errorStyle: TextStyle(color: theme.current().textfieldErrorColor, fontWeight: FontWeight.bold, overflow: TextOverflow.visible), + fillColor: theme.current().textfieldBackgroundColor, + contentPadding: EdgeInsets.fromLTRB(10.0, 5.0, 10.0, 5.0), + enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 1.0))), + )); }); } } diff --git a/test/textfield_form_final.png b/test/textfield_form_final.png index 03c23e2c..64d499ab 100644 Binary files a/test/textfield_form_final.png and b/test/textfield_form_final.png differ diff --git a/test/textfield_form_init.png b/test/textfield_form_init.png index facd8e5e..d3f7d980 100644 Binary files a/test/textfield_form_init.png and b/test/textfield_form_init.png differ