//============================================================================== void DrawableImage::refreshFromValueTree (const ValueTree& tree, ComponentBuilder& builder) { const ValueTreeWrapper controller (tree); setComponentID (controller.getID()); const float newOpacity = controller.getOpacity(); const Colour newOverlayColour (controller.getOverlayColour()); Image newImage; const var imageIdentifier (controller.getImageIdentifier()); jassert (builder.getImageProvider() != 0 || imageIdentifier.isVoid()); // if you're using images, you need to provide something that can load and save them! if (builder.getImageProvider() != nullptr) newImage = builder.getImageProvider()->getImageForIdentifier (imageIdentifier); const RelativeParallelogram newBounds (controller.getBoundingBox()); if (bounds != newBounds || newOpacity != opacity || overlayColour != newOverlayColour || image != newImage) { repaint(); opacity = newOpacity; overlayColour = newOverlayColour; if (image != newImage) setImage (newImage); setBoundingBox (newBounds); } }
void Drawable::registerDrawableTypeHandlers (ComponentBuilder& builder) { builder.registerTypeHandler (new DrawableTypeHandler <DrawablePath>()); builder.registerTypeHandler (new DrawableTypeHandler <DrawableComposite>()); builder.registerTypeHandler (new DrawableTypeHandler <DrawableRectangle>()); builder.registerTypeHandler (new DrawableTypeHandler <DrawableImage>()); builder.registerTypeHandler (new DrawableTypeHandler <DrawableText>()); }
Drawable* Drawable::createFromValueTree (const ValueTree& tree, ComponentBuilder::ImageProvider* imageProvider) { ComponentBuilder builder (tree); builder.setImageProvider (imageProvider); registerDrawableTypeHandlers (builder); ScopedPointer<Component> comp (builder.createComponent()); Drawable* const d = dynamic_cast<Drawable*> (static_cast <Component*> (comp)); if (d != nullptr) comp.release(); return d; }
void ImageButton::refreshFromValueTree (const ValueTree& state, ComponentBuilder& builder) { Button::refreshFromValueTree (state, builder); const var upImageIdentifier (state [Ids::upImage]), overImageIdentifier (state [Ids::overImage]), downImageIdentifier (state [Ids::downImage]); ComponentBuilder::ImageProvider* const imageProvider = builder.getImageProvider(); jassert (imageProvider != nullptr || upImageIdentifier.isVoid()); Image newUpImage, newOverImage, newDownImage; if (imageProvider != nullptr) { newUpImage = imageProvider->getImageForIdentifier (upImageIdentifier); newOverImage = imageProvider->getImageForIdentifier (overImageIdentifier); newDownImage = imageProvider->getImageForIdentifier (downImageIdentifier); } using namespace ImageButtonHelpers; setImages (false, true, true, newUpImage, getOpacityFromVar (state[Ids::upOpacity]), getColourFromVar (state[Ids::upOverlay]), newOverImage, getOpacityFromVar (state[Ids::overOpacity]), getColourFromVar (state[Ids::overOverlay]), newDownImage, getOpacityFromVar (state[Ids::downOpacity]), getColourFromVar (state[Ids::downOverlay])); }
//============================================================================== void DrawableRectangle::refreshFromValueTree (const ValueTree& tree, ComponentBuilder& builder) { ValueTreeWrapper v (tree); setComponentID (v.getID()); refreshFillTypes (v, builder.getImageProvider()); setStrokeType (v.getStrokeType()); setRectangle (v.getRectangle()); setCornerSize (v.getCornerSize()); }
static void updateComponent (ComponentBuilder& builder, const ValueTree& state) { if (Component* topLevelComp = builder.getManagedComponent()) { ComponentBuilder::TypeHandler* const type = builder.getHandlerForState (state); const String uid (getStateId (state)); if (type == nullptr || uid.isEmpty()) { // ..handle the case where a child of the actual state node has changed. if (state.getParent().isValid()) updateComponent (builder, state.getParent()); } else { if (Component* const changedComp = findComponentWithID (*topLevelComp, uid)) type->updateComponentFromState (changedComp, state); } } }
//============================================================================== void DrawablePath::refreshFromValueTree (const ValueTree& tree, ComponentBuilder& builder) { ValueTreeWrapper v (tree); setComponentID (v.getID()); refreshFillTypes (v, builder.getImageProvider()); setStrokeType (v.getStrokeType()); RelativePointPath newRelativePath; v.writeTo (newRelativePath); setPath (newRelativePath); }
//============================================================================== void DrawableComposite::refreshFromValueTree (const ValueTree& tree, ComponentBuilder& builder) { const ValueTreeWrapper wrapper (tree); setComponentID (wrapper.getID()); wrapper.getMarkerList (true).applyTo (markersX); wrapper.getMarkerList (false).applyTo (markersY); setBoundingBox (wrapper.getBoundingBox()); builder.updateChildComponents (*this, wrapper.getChildList()); }