Opened 8 years ago
Last modified 2 days ago
#12931 closed bug
Spirograph (BeOS app) doesn't draw its background transparent — at Version 3
Reported by: | jscipione | Owned by: | jscipione |
---|---|---|---|
Priority: | normal | Milestone: | R1/beta4 |
Component: | Kits/Interface Kit | Version: | R1/Development |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Platform: | All |
Description (last modified by )
Draws spirographs similar to a popular toy. Problem as stated by packager:
"But the transparency does not work on Haiku, so you will only see the top layer."
I've included some screenshots
Change History (6)
by , 8 years ago
Attachment: | spirograph_med.jpeg added |
---|
by , 8 years ago
Attachment: | Spirograph.png added |
---|
Screenshot on Haiku, notice the color #777477 which is B_TRANSPARENT_COLOR's hex value
comment:1 by , 8 years ago
Peeking at the window/view structure with hey may provide some hints: how the views are laid out, which drawing modes they are using, etc.
by , 8 years ago
Attachment: | Spirograph-1.5-src.zip added |
---|
comment:2 by , 8 years ago
This appears to be the malfunctioning bit of code
int32 DrawView::Rewrite_image(DrawView* data) { rgb_color Transparent; memcpy (&Transparent, &B_TRANSPARENT_MAGIC_RGBA32, 4); // We'll add a drawing view to the bitmap int i; // Index for the loop - we'll need it later BView* drawer = new BView ( data->image->Bounds(), "drawer", B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW | B_SUBPIXEL_PRECISE); // If allocated successfully, add it to the bitmap if (drawer != NULL) { data->image->AddChild(drawer); } // Now, adding the image layers, one by one // The drawing mode must be set to B_OP_MODE, for the LowColor // of the drawing shall be treated as transparent. // // I must acquire the lock! if ( drawer->LockLooper() ) { drawer->SetLowColor(Transparent); drawer->SetViewColor(Transparent); drawer->SetDrawingMode(B_OP_OVER); for (i=0; i<MAX_LAYERS-1; i++) { // If current layer is not empty if ( (data->layers[i] != NULL) && ( (int )data->layers[i] != 0x19) ) { // Adding it to the bitmap, in B_OP_OVER mode drawer->DrawBitmap (data->layers[i]); drawer->Sync(); } } drawer->UnlockLooper(); } else { // If I can't lock the BView, I alert the user. BAlert* cantLockLooper = new BAlert(NULL, "Cannot acquire the lock on the drawing element!", "Ok"); cantLockLooper->Go(); } // Now we may successfully delete the "drawer" BView data->image->RemoveChild (drawer); delete drawer; drawer = NULL; exit_thread(0); return 0; }
comment:3 by , 8 years ago
Description: | modified (diff) |
---|
Note:
See TracTickets
for help on using tickets.
Screenshot on BeOS