Clicking Group Children Causes Bitmap to Redraw Incorrectly
-
Hello,
I have a bitmap in a main GeDialog group. When I click on either the child of another group within the main group or the bitmap itself, the bitmap redraws several times vertically incorrectly. It can be reset by resizing the window. You can see a quick screencast of the faulty behavior here. Can someone please help me fix this? Thank you very much!
Here is the random image, "random_img.jpg", that I used:
This script looks for it on the Desktop.import c4d,os from c4d import gui, plugins, bitmaps class BitmapUserArea(c4d.gui.GeUserArea) : def __init__(self,x,y,imageName) : self.x = x self.y = y fn = c4d.storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP) image = "random_img.jpg" path = os.path.join(fn,image) self.bmp = c4d.bitmaps.BaseBitmap() if self.bmp.InitWith(path)[0] != c4d.IMAGERESULT_OK: c4d.gui.MessageDialog("Cannot load image "" + path + "".") return def DrawMsg(self, x1, y1, x2, y2, msg) : self.OffScreenOn() self.DrawSetPen(c4d.COLOR_BG) self.DrawRectangle(x1, y1, x2, y2) self.SetClippingRegion(x1, y1, x2, y2) self.width, self.height = self.bmp.GetSize() self.DrawBitmap(self.bmp, x1 + self.x, y1 + self.y, self.width, self.height, 0, 0, self.width, self.height, c4d.BMP_NORMAL | c4d.BMP_ALLOWALPHA) def GetMinSize(self): self.width, self.height = self.bmp.GetSize() return self.width, self.height class MyDialog(c4d.gui.GeDialog) : ID_MAIN_GRP = 20000 ID_BMP_USERAREA = 20002 ID_TXT1 = 20004 ID_TXT2 = 20006 def __init__(self): self.randomImage = BitmapUserArea(0, 0, "random_img.jpg") def CreateLayout(self) : self.SetTitle("MyDialog") if self.GroupBegin(self.ID_MAIN_GRP, c4d.BFH_SCALEFIT | c4d.BFV_TOP, cols=3, rows=1, title=""): self.GroupBorderSpace(5, 5, 5, 5) self.GroupBorderNoTitle(c4d.BORDER_BLACK) self.AddUserArea(self.ID_BMP_USERAREA, c4d.BFH_CENTER | c4d.BFH_SCALE | c4d.BFV_CENTER |c4d.BFV_SCALE, initw=142, inith=52) self.AttachUserArea(self.randomImage, self.ID_BMP_USERAREA) self.AddStaticText(self.ID_TXT1, c4d.BFH_CENTER | c4d.BFH_SCALE | c4d.BFV_CENTER |c4d.BFV_SCALE, 0, 0, "TEXT 1", borderstyle=c4d.BORDER_BLACK) self.AddStaticText(self.ID_TXT2, c4d.BFH_CENTER | c4d.BFH_SCALE | c4d.BFV_CENTER |c4d.BFV_SCALE, 0, 0, "TEXT 2", borderstyle=c4d.BORDER_BLACK) return True def main() : global dialog dialog = MyDialog() dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, xpos=-2, ypos=-2, defaultw=350, defaulth=500) if __name__=='__main__': main()
-
Hi @blastframe, Thanks for reporting the issue.
Actually it's very similar to R21 GeUserArea in docked GeDialog behaves differently but as stated to the other topic, I don't have any news on that, I will bump development team again.So not the safest but as a workaround ignore the x,y, x2, y2 passed and draw with the data you defined in GetMinSize.
Of course, this has the limitation that scroll groups are not anymore supported, but its the only workaround I see for the moment.Cheers,
Maxime. -
@m_adam Thanks, Maxime, for the temporary workaround and for bumping it to the development team. I hope this is fixed soon!