Adding Notification on the Document Views
The DrawRectangleCommand method used to call the BitmapDocument::refreshViews method to notify a change in the document (as seen earlier in this step). This method will now be implemented:
void
BitmapDocument::refreshViews(const IlvRegion& region)
{
notifyViews(IlvGetSymbol("BitmapHasChanged"), 0, ®ion);
}
This method broadcasts the BitmapHasChanged message, giving the specified region as argument. To catch the message, the BitmapView declares a method in its interface:
IlvDvBeginInterface(BitmapView)
Method1(BitmapHasChanged, bitmapHasChanged, IlAny, region)
IlvDvEndInterface1(IlvDvFormView)
The first argument of the
Method1 macro is the message name.
The second argument is the method of
BitmapView that will be called when the message
BitmapHasChanged is received.
The third argument is the type of the first argument passed when calling the
bitmapHasChanged method.
The fourth argument is the name of the first argument passed when calling the
bitmapHasChanged method.
Note: Only simple types are supported in the interface declaration. Since an IlvRegion is needed to know what the modified region is, an IlAny (that is, a non-typed pointer) is used. |
Here is the code of the bitmapHasChanged method:
void
BitmapView::bitmapHasChanged(IlAny region)
{
IlvRegion redrawRegion(*(IlvRegion*)region);
IlvContainer* container = IlvContainer::GetContainer(_icon);
// Deal with the container transformer
if (container->getTransformer())
redrawRegion.apply(container->getTransformer());
// Optimization: Clip using the visible size of the container
IlvRect rect;
container->sizeVisible(rect);
redrawRegion.intersection(rect);
// Then redraw the region
container->bufferedDraw(redrawRegion);
}
Published date: 05/24/2022
Last modified date: 02/24/2022