Week #4 Report - GSoC - 100 Paper Cuts
mail at bayramcicek.com.tr
Mon Jul 5 08:35:36 UTC 2021
Dear LibreOffice Community,
GSoC progress for week #4.
> Blog Posts:
Blog post for week #2:
Blog post for week #3 and #4:
> Group selection works with Drawing objects, but doesn't work with
raster images / Writer
Writer can group shapes(rectangles, circles), text boxes and draw
images(from Draw/Calc); but this feature does not work on raster images
because images in Writer handled as Frame objects(Graphics/holding
Last 2 weeks, I was working on "drawing objects" to understand how
grouping works. I worked mainly on debugging and finding why raster
images does not group with shapes. Here is what I found:
/(All code pointers are in the blog post)/
> All selected objects store in /rMrkList/ list:
/const SdrMarkList &rMrkList = pDView->GetMarkedObjectList();/
> In /SwFEShell::SelectObj/,/SAL_DEBUG( rMrkList.GetMarkDescription()
For shapes: "/shapes/"
For 2+ shapes: "/2 shapes/"
For draw images: "/Image with transparency/"
For text box: "/Text Frame/"
For raster images: "/[Drawing object]/"
"/[Drawing object]/" defined as /STR_ObjNameSingulNONE/. This means
/GetMarkDescription()/ doesn't know what the raster images?
> Contents by position:
Shape : /OBJCNT_SIMPLE/
Raster images : /OBJCNT_GRF/
> Selection Type:
Shape : /SelectionType::DrawObject/
Raster images : /SelectionType::Graphic (CNT_GRF)/
> Selecting raster images via /SHIFT+CLICK /add them in /rMrkList/, but
only /1/ of them:
While shapes added normally on the /rMrkList/, raster images added only
once, then be /unmarked/, because /::GetFlyFromMarked( &rMrkList, this
)/ always returns an address which is caused to execute
> Frame is not accessible
Another interesting issue is when trying to add(select) a raster image
to the shape list (unmarking disabled) debugging warns /"warn: /*...*/
frame is not accessible"./
/bool bShapeSelected = false;//
// else if( pFESh->IsObjSelected() > 0 )//
// bShapeSelected = true;//
// aFrameOrObj = static_cast<const SwFrame *>( nullptr );//
//// ... //
// OSL_ENSURE( bShapeSelected ||
// "frame is not accessible" );/
"/pFESh->IsObjSelected()/" should return /GetMarkCount()/, not /0/.
Otherwise /bShapeSelected/ stays /false/ and /OSL_ENSURE/ warns /"frame
is not accessible"/:
/size_t SwFEShell::IsObjSelected() const//
// if ( IsFrameSelected() || !Imp()->HasDrawView() )//
// return 0;//
// return Imp()->GetDrawView()->GetMarkedObjectList().GetMarkCount();//
//bool SwFEShell::IsFrameSelected() const//
// if ( !Imp()->HasDrawView() )//
// return false;//
// return nullptr != ::GetFlyFromMarked(
When selecting raster images, in /SwFEShell::IsFrameSelected()/:
/ return nullptr != ::GetFlyFromMarked(/*..*/);/
/GetFlyFromMarked/ should return false 0(null) (as like shapes do), not
an /address/ which make/nullptr != 0x01... true./
I also looked at /Draw/ and /Calc/ to see how images are handled. Images
are converted a drawing objects and have the same attributes like
shapes. But in Writer, images have different attributes and handling.
> Summary of last 2 weeks
- Tried to understand how shapes grouped together
> Next week TO-DO:
- Make raster images selectable(group) with SHIFT+CLICK
Please let me know if you have any suggestions about group selection of
Thank you all.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the LibreOffice