SliderShadowNode.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. */
  7. #pragma once
  8. #include <react/components/rncore/EventEmitters.h>
  9. #include <react/components/rncore/Props.h>
  10. #include <react/components/slider/SliderMeasurementsManager.h>
  11. #include <react/components/slider/SliderState.h>
  12. #include <react/components/view/ConcreteViewShadowNode.h>
  13. #include <react/imagemanager/ImageManager.h>
  14. #include <react/imagemanager/primitives.h>
  15. namespace facebook {
  16. namespace react {
  17. extern const char SliderComponentName[];
  18. /*
  19. * `ShadowNode` for <Slider> component.
  20. */
  21. class SliderShadowNode final : public ConcreteViewShadowNode<
  22. SliderComponentName,
  23. SliderProps,
  24. SliderEventEmitter,
  25. SliderState> {
  26. public:
  27. using ConcreteViewShadowNode::ConcreteViewShadowNode;
  28. // Associates a shared `ImageManager` with the node.
  29. void setImageManager(const SharedImageManager &imageManager);
  30. // Associates a shared `SliderMeasurementsManager` with the node.
  31. void setSliderMeasurementsManager(
  32. const std::shared_ptr<SliderMeasurementsManager> &measurementsManager);
  33. static SliderState initialStateData(
  34. ShadowNodeFragment const &fragment,
  35. SurfaceId const surfaceId,
  36. ComponentDescriptor const &componentDescriptor) {
  37. auto imageSource = ImageSource{ImageSource::Type::Invalid};
  38. return {imageSource,
  39. {imageSource, nullptr},
  40. imageSource,
  41. {imageSource, nullptr},
  42. imageSource,
  43. {imageSource, nullptr},
  44. imageSource,
  45. {imageSource, nullptr}};
  46. }
  47. #pragma mark - LayoutableShadowNode
  48. Size measure(LayoutConstraints layoutConstraints) const override;
  49. void layout(LayoutContext layoutContext) override;
  50. private:
  51. void updateStateIfNeeded();
  52. ImageSource getTrackImageSource() const;
  53. ImageSource getMinimumTrackImageSource() const;
  54. ImageSource getMaximumTrackImageSource() const;
  55. ImageSource getThumbImageSource() const;
  56. SharedImageManager imageManager_;
  57. std::shared_ptr<SliderMeasurementsManager> measurementsManager_;
  58. };
  59. } // namespace react
  60. } // namespace facebook