On Friday 01 of July 2011 14:17:15 Max Vlasov wrote: > Hi, > > I recently created report http://bugs.freepascal.org/view.php?id=19658 > > This was about panels that behave a little differently to panels in Lazarus > Windows and Delphi. There were no comments or feedback request there so I > decided to take a look > > After some investigation it appeared that the problem was because GtkFrame > was used. The problem with this widget is that one can't control the > postion and painting in a small area two pixels around it. So every nested > TPanel in GTK2 Lazarus smaller by 4 pixels that the parent no matter what > (the consequences can be seen in the screenshots from Panel.zip). Looking > at the code I also noticed that no special features of GtkFrame were used, > all panel drawings take place inside paltform-independent part of LCL. > > Trying to solve the problem, I ended up with the following replacement in > the TGtk2WSCustomPanel.CreateHandle > > { -------- Before } > > Frame := gtk_frame_new(nil); > gtk_frame_set_shadow_type(PGtkFrame(Frame), > BorderStyleShadowMap[TCustomControl(AWinControl).BorderStyle]); > > { -------- After } > > Frame:=gtk_scrolled_window_new(nil, nil); > gtk_scrolled_window_set_shadow_type(PGtkScrolledWindow(Frame), > BorderStyleShadowMap[TCustomControl(AWinControl).BorderStyle]); > gtk_scrolled_window_set_policy(PGtkScrolledWindow(Frame), > GTK_POLICY_NEVER, GTK_POLICY_NEVER); > > After this change the problem project that looked identically (good) in > Delphi and Win32 Lazarus and differently in GTK2 Lazarus (labels and panels > at wrong positions) began to look consistent in linux. > > So there are questions: > - Can this patch be applied? Apart from obvious testing and checking, there > is also a compatibility problem. After this change, the forms people > designed in linux can start to look a little different (or even greatly if > the nesting level of panels is deep). But as I noted in the report, without > this change it's difficult to synchronize forms "visually". > - Does using GtkFrame in LCL make sense at all? I did not look deeper, but > at least quick search showed it was used several times.
1.It's changed to GtkFrame with r31280 LCL GTK2: Make Panel.OnPaint work. Patch from August Klein, issue #19488 I don't like to use GtkScrolledWin in place of simple widget. Can it be changed to something else (like pure GtkWindow and then draw border if needed) ? zeljko
-- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
