Giter Site home page Giter Site logo

bensonarafat / super_tooltip Goto Github PK

View Code? Open in Web Editor NEW
127.0 127.0 83.0 975 KB

SuperTooltip It is super flexible and allows you to display ToolTips in the overlay of the screen.

Home Page: https://pub.dev/packages/super_tooltip

License: MIT License

Objective-C 0.16% Dart 97.14% Batchfile 0.39% Kotlin 0.58% Swift 1.74%

super_tooltip's Introduction

Hey! I'm Benson Arafat.

GitHub Benson Arafat Linkedin: Benson Arafat Twitter: Benson Arafat Medium Badge

I develop mobile and web software, make technical content, love contributing to open-source projects in my free time and love meeting new people!

super_tooltip's People

Contributors

10ndavis avatar alabasteraxe avatar andreymolochko avatar bensonarafat avatar earminjon avatar escamoteur avatar jeduden avatar justinpriday avatar kaiquegazola avatar kentcb avatar mduccc avatar shinriyo avatar tbarbette avatar websters-dog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

super_tooltip's Issues

set tooltip location

Can I set the tooltip position like the standard Tooltip flutter does?
I only have a Tooltip in the center of the screen appears how to change the position?

iOS issues with spacing

In iOS on iPhone there is extra padding in the tooltip at the top when in the portrait orientation. I suspect this is due to the extra space added by the phone to the top for the battery etc. It goes away when in the landscape orientation.

Contrast portrait
BC308090-2A5C-496D-A9A6-D54DE49F7255

With landscape
569915A7-AF2A-41AD-8C78-676556E3A765

On the PC and on Mac the extra space does not appear, so it makes me think it has something to do with the battery/time thing at the top. Maybe SafeArea could help, but it didn't help within the window.

MIT License

The current license file says "MIT" but the actual text of the license file doesn't match the MIT license. This makes using the library a little troublesome in some applications. Would you be able to add a legit MIT license to the repo?

Feature

Can you make the dimensions attribute of _ShapeOverlay and _BubbleShape as SuperTooltip parameter。not set const EdgeInsets.all(10.0)

tooltips shows at center arrowTipDistance no effect

the tooltip is showing at the centre of the screen no effect when using arrowTipDistance; to put you in the context I have selectable text with other options when user select a word can click on a button to show some information about the selected word, the tooltips are showing far away from the selected word and stack the screen centre.
tmp

blockOutsidePointerEvents

Is it planned to add the blockOutsidePointerEvents parameter, which contains in the branch small_improvements ?

Help system

Don't know if this is the better form, but here's a contribution for a help system (those that shows tooltips with > Next, X Close and < Back buttons):

  1. Create GlobalKeys for all widgets you want to show help.

  2. Show your help like this:

HelpSystem.instance.showHelp(context, [
  HelpEntry(
    key: _recommendedLoginButtonKey,
    title: "Boas vindas!",
    text: "Para manter teus cronogramas salvos, você precisa se autenticar.\n\n"
        "Esta é a forma mais simples e fácil de se autenticar neste dispositivo:",
    direction: TooltipDirection.up,
    distance: 24,
  ),
  if (Platform.isIOS)
    HelpEntry(
      key: _googleLoginButtonKey,
      title: "Google",
      text: "Caso você já tenha uma conta usando Google, use este botão para entrar",
      direction: TooltipDirection.up,
      distance: 24,
    ),
  HelpEntry(
    key: _facebookLoginButtonKey,
    title: "Facebook",
    text: "Caso você já tenha uma conta usando o Facebook, você pode se autenticar aqui.",
    direction: TooltipDirection.up,
    distance: 24,
  ),
  HelpEntry(
    key: _emailLoginButtonKey,
    title: "E-mail e senha",
    text: "Se você usa e-mail e senha para entrar, use este botão.",
    direction: TooltipDirection.up,
    distance: 24,
  ),
  HelpEntry(
    key: _findSchedulesButtonKey,
    title: "Na dúvida?",
    text: "Caso não se lembre que conta usou para o teu cronograma, podemos te ajudar.",
    direction: TooltipDirection.up,
    distance: 24,
  ),
  HelpEntry(
    key: _helpButtonKey,
    title: "Ajuda",
    text: "Os botões de ajuda mostram estas dicas e estão presentes na maioria das telas.",
    direction: TooltipDirection.up,
    distance: 24,
  ),
]);

This is the HelpSystem class:

import 'package:flutter/material.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:super_tooltip/super_tooltip.dart';

/* —————————————————————————————————————————————————————————————————————————— */
class HelpEntry {
  HelpEntry({this.key, this.title, this.text, this.direction, this.distance});

  final GlobalKey key;
  final String title;
  final String text;
  final TooltipDirection direction;
  final double distance;

  SuperTooltip tooltip;
}

/* —————————————————————————————————————————————————————————————————————————— */
class HelpSystem {
  const HelpSystem._();

  static const HelpSystem instance = HelpSystem._();

/* —————————————————————————————————————————————————————————————————————————— */
  void showHelp(BuildContext context, List<HelpEntry> entries) {
    final theme = Theme.of(context);

    for (var ct = 0; ct < entries.length; ct++) {
      final entry = entries[ct];

      final buttons = <Widget>[];

      entry.tooltip = SuperTooltip(
        backgroundColor: Colors.white.withOpacity(0.9),
        hasShadow: false,
        popupDirection: entry.direction,
        arrowTipDistance: entry.distance,
        outsideBackgroundColor: Colors.transparent,
        content: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(8),
              child: Column(
                mainAxisSize: MainAxisSize.min,
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: <Widget>[
                  Text(entry.title, style: theme.textTheme.body2),
                  const SizedBox(height: 4),
                  Text(entry.text, style: theme.textTheme.caption),
                ],
              ),
            ),
            Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: buttons),
          ],
        ),
      );

      if (ct == 0) {
        buttons.add(FlatButton.icon(
          padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
          icon: Icon(MdiIcons.close, size: 24, color: theme.primaryColor),
          label: Text("FECHAR", style: theme.textTheme.caption),
          onPressed: () {
            entry.tooltip.close();
          },
        ));

        if (entries.length > 1) {
          buttons.add(FlatButton.icon(
            padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
            icon: Icon(MdiIcons.chevronRight, size: 24, color: theme.primaryColor),
            label: Text("AVANÇAR", style: theme.textTheme.caption),
            onPressed: () {
              entry.tooltip.close();
              entries[ct + 1].tooltip.show(entries[ct + 1].key.currentContext);
            },
          ));
        }

        entry.tooltip.show(entry.key.currentContext);
      } else if (ct == entries.length - 1) {
        buttons.add(FlatButton.icon(
          padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
          icon: Icon(MdiIcons.chevronLeft, size: 24, color: theme.primaryColor),
          label: Text("VOLTAR", style: theme.textTheme.caption),
          onPressed: () {
            entry.tooltip.close();
            entries[ct - 1].tooltip.show(entries[ct - 1].key.currentContext);
          },
        ));

        buttons.add(FlatButton.icon(
          padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
          icon: Icon(MdiIcons.close, size: 24, color: theme.primaryColor),
          label: Text("CONCLUIR", style: theme.textTheme.caption),
          onPressed: () {
            entry.tooltip.close();
          },
        ));
      } else {
        buttons.add(FlatButton.icon(
          padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
          icon: Icon(MdiIcons.chevronLeft, size: 24, color: theme.primaryColor),
          label: Text("VOLTAR", style: theme.textTheme.caption),
          onPressed: () {
            entry.tooltip.close();
            entries[ct - 1].tooltip.show(entries[ct - 1].key.currentContext);
          },
        ));

        buttons.add(FlatButton.icon(
          padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
          icon: Icon(MdiIcons.close, size: 24, color: theme.primaryColor),
          label: Text("FECHAR", style: theme.textTheme.caption),
          onPressed: () {
            entry.tooltip.close();
          },
        ));

        buttons.add(FlatButton.icon(
          padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
          icon: Icon(MdiIcons.chevronRight, size: 24, color: theme.primaryColor),
          label: Text("AVANÇAR", style: theme.textTheme.caption),
          onPressed: () {
            entry.tooltip.close();
            entries[ct + 1].tooltip.show(entries[ct + 1].key.currentContext);
          },
        ));
      }
    }
  }
}

Not able to close in one tap

On clicking outside tooltip is not getting closed in one attempt, need to click 3-4 times in one click only opacity changes. Same goes with cross button

void showToolTip() async {
SuperTooltip tooltip = SuperTooltip(
popupDirection: TooltipDirection.right,
maxWidth: 200.0,
showCloseButton: ShowCloseButton.inside,
dismissOnTapOutside: true,
closeButtonColor: Colors.red,
hasShadow: false,
content: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, "
"sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, "
"sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. ",
softWrap: true,
),
));
tooltip.show(context);
}

how to set padding around content?

I see a default padding around content about 10 pixels, how to change that? I try for overlayDimensions and bubbleDimensions has no effect so.. Any suggestions guys?
Awesome package btw.

Cannot modify content padding.

Hi! Thanks for the great package! Little issue here. I am not able to see an option to modify the padding/margin around the content of the tooltip. It seems that there is something like a default padding. Maybe I am missing something. Otherwise I would recommend to add a property to control it. Thank you in advance!
Screen Shot 2021-10-19 at 18 27 01

Code used:

SuperTooltip(
      popupDirection: TooltipDirection.down,
      content: Material(
          child: Text(
            "Lorem ipsum dolor sit amet, consetetur sadipscingelitr, "
                "sed diam nonumy eirmod tempor invidunt ut laboreet dolore magna aliquyam erat, "
                "sed diam voluptua. At vero eos et accusam et justoduo dolores et ea rebum. ",
            softWrap: true,
          )),
    );

Something like being able to set this value in the _BubbleShape class.

EdgeInsetsGeometry get dimensions => new EdgeInsets.all(10.0); //this value of ten

Let me see if I manage to find some time to propose a merge for this feature.

Not compiling!

I think last commit just broke it!

You are trying to get "size" from a state object which doesn't implement it

if (automaticallyVerticalDirection) {
if (_targetCenter!.dy > overlay!.size.center(Offset.zero).dy) {. <<<<<------- error in this line
popupDirection = TooltipDirection.up;
} else {
popupDirection = TooltipDirection.down;
}
}

textscaling causes issues on centering

when my text scale is 1.0, I get

image

as expected, but somehow when I increase the textscale, say to 2.0, I end up with the arrow no longer in the middle

image

hmm, in fact, it is pointing to .25, .25, instead of .5, .5 of the widget.

Update. It seems that "renderbox" gives the same size regardless of whether textscale is 2.0 or 1.0 which is the problem.

Update 2. flutter/flutter#70885 "RenderObjects of WidgetSpan.child not scaled according to textScaleFactor #70885"; indeed I do have the text inside a WidgetSpan.

Change default bool _isVisible = true to false

Hello, my request is to change (super_tooltip_controller.dart: 9)

bool _isVisible = true;

to

bool _isVisible = false;

Reason:
By default the value should be false since it isn't visible right?
I also have some dependencies that checks on page load if the tooltip is open or not, and since the default is true, it always seems to think its open.

At present, I'm mitigating it by doing this at initState
await tooltipController.hideTooltip();

BackdropFilter with tooltip

I want the tooltip container to have a frosted look. In the API we only have a backgrounColor. How can we make this possible?

Overlay.of(context) return nullable OverlayState, should not be accessed directly

Thanks for your working, i have used super_tooltip of version 0.9.6, it really helps me. Now when i tried to use the newest version in my new project, there is compilation error.

super_tooltip package version: 2.0.4
flutter version: 3.3.10

Compilation error:
super_tooltip-2.0.4/lib/src/super_tooltip.dart:201:29: Error: Property 'context' cannot be accessed on 'OverlayState?' because it is potentially null.
super_tooltip-2.0.4/lib/src/super_tooltip.dart:351:25: Error: Method 'insertAll' cannot be called on 'OverlayState?' because it is potentially null.

Passed decoration shape is ignored

Currently the SuperTooltip class takes a decoration field just like a Tooltip class but the shape field inside that decoration is completely ignored. I would suggest either to hide it or to use it to override the default shape cause it's a bit confusing, for example I spent the last 2hours thinking that there was an issue with my custom painter just to realize that it was being completely ignored by the SuperTooltip class.

Code snippet to reproduce

class CustomTooltip extends StatefulWidget {
  const CustomTooltip({required this.child, super.key});

  final Widget child;

  @override
State<CustomTooltip> createState() => _CustomTolltipState();
}

class _CustomTolltipState extends State<CustomTooltip> {
  final _controller = SuperTooltipController();

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      Future.delayed(const Duration(seconds: 1), _controller.showTooltip);
    });
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return SuperTooltip(
      showBarrier: false,
      borderRadius: 8,
      bottom: 5,
      hasShadow: false,
      popupDirection: TooltipDirection.up,
      borderColor: Colors.teal[700]!,
      showCloseButton: ShowCloseButton.none,
      backgroundColor: Colors.teal[700],
      content: ConstrainedBox(
        constraints: const BoxConstraints(maxWidth: Spacing.s52),
        child: Row(
          children: [
            Expanded(
              child: Text(
                'Example',
                style: context.textTheme.labelLarge?.copyWith(
                  color: Colors.white,
                ),
              ),
            ),
            SizedBox.square(
              dimension: Spacing.s8,
              child: IconButton(
                iconSize: Spacing.s4,
                onPressed: () {},
                icon: const Icon(
                  Icons.close,
                  color: Colors.white,
                ),
              ),
            )
          ],
        ),
      ),
      controller: _controller,
      decoration: const ShapeDecoration(
        shape: CustomShape(),
      ),
      child: widget.child,
    );
  }
}

class CustomShape extends ShapeBorder {
  const CustomShape();

  @override
  EdgeInsetsGeometry get dimensions =>
      const EdgeInsets.only(bottom: Spacing.s10);

  @override
  Path getInnerPath(Rect rect, {TextDirection? textDirection}) => Path();

  @override
  Path getOuterPath(Rect rect, {TextDirection? textDirection}) {
    return Path()
      ..addRRect(
        RRect.fromRectAndRadius(rect, const Radius.circular(8)),
      )
      ..moveTo(rect.bottomCenter.dx - 15, rect.bottomCenter.dy)
      ..relativeArcToPoint(
        Offset(rect.bottomCenter.dx - 4, rect.bottomCenter.dy),
        radius: const Radius.circular(100),
      )
      // ..moveTo(rect.bottomCenter.dx, rect.bottomCenter.dy)
      ..relativeLineTo(10, 20)
      ..relativeArcToPoint(
        Offset(rect.bottomCenter.dx - 4, rect.bottomCenter.dy),
        radius: const Radius.circular(100),
      )
      ..relativeLineTo(10, -20)
      ..close();
  }

  @override
  void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) {}

  @override
  ShapeBorder scale(double t) => this;
}
Flutter Doctor
[!] Flutter (Channel stable, 3.10.6, on macOS 13.4.1 22F770820d darwin-arm64, locale en-DE)
  • Flutter version 3.10.6 on channel stable at /Users/silverhairs/fvm/versions/3.10.6
  ! Warning: `dart` on your path resolves to /opt/homebrew/Cellar/dart/3.1.0/libexec/bin/dart, which is not inside your current Flutter SDK checkout at /Users/silverhairs/fvm/versions/3.10.6. Consider adding /Users/silverhairs/fvm/versions/3.10.6/bin to the front of your path.
  • Upstream repository https://github.com/flutter/flutter.git
  • Framework revision f468f3366c (6 weeks ago), 2023-07-12 15:19:05 -0700
  • Engine revision cdbeda788a
  • Dart version 3.0.6
  • DevTools version 2.23.1
  • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.2)
  • Android SDK at /Users/silverhairs/Library/Android/sdk
  • Platform android-33, build-tools 33.0.2
  • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
  • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
  • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3.1)
  • Xcode at /Applications/Xcode.app/Contents/Developer
  • Build 14E300c
  • CocoaPods version 1.12.1

[✓] Chrome - develop for the web
  • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.1)
  • Android Studio at /Applications/Android Studio.app/Contents
  • Flutter plugin can be installed from:
    🔨 https://plugins.jetbrains.com/plugin/9212-flutter
  • Dart plugin can be installed from:
    🔨 https://plugins.jetbrains.com/plugin/6351-dart
  • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] VS Code (version 1.81.1)
  • VS Code at /Applications/Visual Studio Code.app/Contents
  • Flutter extension version 3.70.0

[✓] Connected device (4 available)
  • sdk gphone64 arm64 (mobile) • emulator-5554             • android-arm64  • Android 13 (API 33) (emulator)
  • iPhone (mobile)             • 00008101-00120D212EFA001E • ios            • iOS 16.6 20G75
  • macOS (desktop)             • macos                     • darwin-arm64   • macOS 13.4.1 22F770820d darwin-arm64
  • Chrome (web)                • chrome                    • web-javascript • Google Chrome 116.0.5845.96
  ! Error: iPhone is busy: Making iPhone ready for development. Xcode will continue when iPhone is finished. (code -10)

[✓] Network resources
  • All expected network resources are available.

! Doctor found issues in 1 category.

Can't click on tooltip child

After navigating back to the original page where the tooltip is, I don't reassign the controller, I can open the tooltip and close it normally, but I can't click on the button that I have inside the tooltip. Its not an issue with the backdrop covering it as i changed the color to red and seen that its not. Those buttons should be turning blue for me to click. I also attached 2 more images. One with the working config and another when it glitches. It seems there are 2 listeners to the same controller that i only created once. But once i navigate back to the page it creates another listener. I have on the front page where i only assign the controller if its null. So no way of me assigning it twice.
WorkingConfig
notWorkingConfig

Untitled.video.-.Made.with.Clipchamp.1.mp4

Feature request: tap tooltip to dismiss

Super tooltip has been great so far - thank you! One thing we've noticed is that users sometimes expect to be able to dismiss the tooltip by tapping the tooltip itself, not the barrier.

Could this be added as an option? Happy to help implement as well.

A way to change animation duration

I was wondering if it is possible to change animation duration? I.e. the duration between tapping the target widget and tooltip fading in completely.

Thanks!

Show tooltip using a key

Hi,

Is it possible to show the tooltip at a given location using a key?
Eg :


FloatingActionButton(
    key: _navigation
    ...

And then do tooltip.show(_navigation) ? That would be very helpful :) Keeping the BuildContext is cumbersome in some cases.

blur

this is so cool, might be too much to ask but... can you add blur?

Feature Request

Does the SuperTooltip show if it's wrapped in MouseRegion?

Slivers

How to use this plugin within custom scroll view and slivers, everywhere is expected RenderBox?

Move Center Pointer

How to move the center pointer into custom location.
For example for pointing a button?

Release new version on pub.dev

Recently, I noticed that some pull requests have been merged.

However, the version on pub.dev is still outdated, dating back to two years ago.
I believe it is necessary to release a new version that includes the newly merged code.

Is Auto open tooltip possible?

Onboard like tooltip need to show for every button widgets,While app is installed first time.So Any idea how can I autopen this tooltip & also in one screen need to open array of tooltip concurrently.
May its Enhancement of this plugin.Its really helpful to get that design.Thanks

Null safety

Thanks for the great package!

Do you plan to make a null safe update of the package?

[Bug] Null check operator used on a null value

I just got this exception in Firebase:

Non-fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: Null check operator used on a null value. Error thrown Instance of 'ErrorDescription'.
       at OverlayEntry.remove(OverlayEntry.java:148)
       at SuperTooltip.close(SuperTooltip.java:199)
       at SuperTooltip.show.<fn>.<fn>.<fn>(<fn>.java:223)
       at GestureRecognizer.invokeCallback(GestureRecognizer.java:182)
       at TapGestureRecognizer.handleTapUp(TapGestureRecognizer.java:607)
       at BaseTapGestureRecognizer._checkUp(BaseTapGestureRecognizer.java:296)
       at BaseTapGestureRecognizer.handlePrimaryPointer(BaseTapGestureRecognizer.java:230)
       at PrimaryPointerGestureRecognizer.handleEvent(PrimaryPointerGestureRecognizer.java:475)
       at PointerRouter._dispatch(PointerRouter.java:93)
       at PointerRouter._dispatchEventToRoutes.<fn>(_dispatchEventToRoutes.java:138)
       at _LinkedHashMapMixin.forEach(_LinkedHashMapMixin.java)
       at PointerRouter._dispatchEventToRoutes(PointerRouter.java:136)
       at PointerRouter.route(PointerRouter.java:122)
       at GestureBinding.handleEvent(GestureBinding.java:439)
       at GestureBinding.dispatchEvent(GestureBinding.java:419)
       at RendererBinding.dispatchEvent(RendererBinding.java:287)
       at GestureBinding._handlePointerEventImmediately(GestureBinding.java:374)
       at GestureBinding.handlePointerEvent(GestureBinding.java:338)
       at GestureBinding._flushPointerEventQueue(GestureBinding.java:296)
       at GestureBinding._handlePointerDataPacket(GestureBinding.java:279)

so technically the exception was thrown by Flutter's code, but I'm not sure whether this is because of a problem in the library or Flutter itself.
I don't have reproduction steps, unfortunately.

flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.2.3, on Mac OS X 10.15.7 19H524 darwin-x64, locale en-PL)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.1)
[✓] IntelliJ IDEA Community Edition (version 2021.1.2)
[✓] Connected device (1 available)

• No issues found!

Put the overlay behind the widget

The background overlay now draw in front of the widget/context I'm trying to point at. Would it be possible to draw the overlay behind the widget/context I'm targeting? Or punch a "hole" in the background overlay so the user can clearly see the referenced object.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.