Home » U++ Library support » Look and Chameleon Technology » look of ctrl with styled horz and vert scrollbars
|
Re: look of ctrl with styled horz and vert scrollbars [message #37829 is a reply to message #37827] |
Fri, 16 November 2012 07:44 |
|
kropniczki wrote on Fri, 16 November 2012 02:53 | I got a TopWindow with a background painted Black() and added a number of NoBackground() Ctrls to it.
If a Ctrl needs to show both (styled) horizontal and vertical scroll bars at the same time, Ctrl right bottom corner square does not get painted accordingly (black).
Any clue on how to fix it?
Thanks!!
|
Hi,
I believe that that little square is hardcoded to be painted in SColorFace color. So you can either modify that, but that will affect your entire application or you can make your own class which would inherit from ScrollBars and override FramePaint() - it is only three lines of code
Alternative and probably better solution would be to modify ScrollBars to so that it can figure out the correct color from the style of the scrollbars it contains. Shouldn't be difficult too.
Best regards,
Honza
|
|
|
|
Re: look of ctrl with styled horz and vert scrollbars [message #37840 is a reply to message #37829] |
Fri, 16 November 2012 21:32 |
|
bushman
Messages: 134 Registered: February 2009
|
Experienced Member |
|
|
Hi, Honza, please help me out with this:
dolik.rce wrote on Fri, 16 November 2012 03:44 | ... you can make your own class which would inherit from ScrollBars and override FramePaint() - it is only three lines of code
|
If you mean Scrollbar.cpp code
void ScrollBars::FramePaint(Draw& w, const Rect& r) {
if(x.IsShown() && y.IsShown() && !box) {
int h = ScrollBarSize();
w.DrawRect(r.right - h, r.bottom - h, h, h, SColorFace);
}
}
Ok, but how to do it? First, let us check if I got your point right: let's say I create a class that inherits from ScrollBars (MyScrollBars), override FramePaint method and then make my Ctrls use it instead ScrollBars directly. If that's what you mean, TreeCtrl, for one, declares its ScrollBars sb member as private. Therefore I can not replace it by MyScrollbars. I'm sorry, but I don't follow you. Besides, ArrayCtrl, for instance, does not use ScrollBars. Can you elaborate on that?
dolik.rce wrote on Fri, 16 November 2012 03:44 | Alternative and probably better solution would be to modify ScrollBars to so that it can figure out the correct color from the style of the scrollbars it contains. Shouldn't be difficult too.
|
And what about that? Can you help me out on how to do it, though?
Thanks!
[Updated on: Fri, 16 November 2012 21:34] Report message to a moderator
|
|
|
Re: look of ctrl with styled horz and vert scrollbars [message #37841 is a reply to message #37829] |
Fri, 16 November 2012 22:37 |
|
bushman
Messages: 134 Registered: February 2009
|
Experienced Member |
|
|
Looks like I found a makeshift solution when inspecting ScrollBars code. Unfortunately enough, however, it requires modifying ScrollBar.h hard code:
replace by in line 163.
Apparently, since ParentCtrl is transparent, it lets the background color show up through to the top Z level, which in itself is enough to take care of the nagging little bottom right square.
BTW, I also observed that ScrollBars constructor points its member, which is protected, to the_box. One could therefore inherit from ScrollBars and re-point *box to a ParentCtrl instead, which would in turn avoid any direct manipulation of ScrollBar.h alltogether. However, then again, how to make TreeCtrl use my inherited class instead of ScrollBars?
Yet, what to do when Ctrl does not use ScrollBars, like ArrayCtrl, for example?
Thank you!
[Updated on: Fri, 16 November 2012 22:39] Report message to a moderator
|
|
|
Re: look of ctrl with styled horz and vert scrollbars [message #37849 is a reply to message #37827] |
Sun, 18 November 2012 11:48 |
|
Hi,
Sorry for late reply, I've been quite busy.
I somehow missed the fact that you are using TreeCtrl, I thought you use the ScrollBars directly. So overriding the FramePaint and using customized class is not really an option for you.
Quote: |
Quote: | I believe that that little square is hardcoded to be painted in SColorFace color.
| I've already tried that before I posted this thread, but it did not work.
|
It should work like this:GUI_APP_MAIN{
SColorFace_Write(Black());
SColorText_Write(White());
SColorPaper_Write(LtGray());
SColorLabel_Write(Gray());
// etc ...
MyApp().Run();
}
This method is probably the best if you want to globally style entire application.
Quote: |
Quote: | Alternative and probably better solution would be to modify ScrollBars to so that it can figure out the correct color from the style of the scrollbars it contains. Shouldn't be difficult too.
|
You mean, modify Upp's native original code? Doesn't sound ok to me, unless you guys hard code it in upcoming releases, I guess.
|
Yes, modifying this in U++ source is what I meant. IMHO it is a styling bug. However, I'm not really familiar with this, so the final decision is up to Mirek.
Could you post some simple testcase with the complete styling? E.g. something like the dialog on the image in your first post.
Honza
|
|
|
Re: look of ctrl with styled horz and vert scrollbars [message #37886 is a reply to message #37849] |
Mon, 19 November 2012 23:46 |
|
bushman
Messages: 134 Registered: February 2009
|
Experienced Member |
|
|
Issue resolved!
Well, I'm afraid I had included the SColor..._Write(Color) stuff in the main app constructor instead of inside the GUI_APP_MAIN block . How could I possibly know?
Anyway, before I found this out, I had modifyed ScrollBar.h declaration in line 163 from to and ArrayCtrl.h declaration in line 189 from FrameBottom<StaticRect> scrollbox; to FrameBottom<ParentCtrl> scrollbox; , respectively. By doing so, I replaced opaque StaticRect scrollbar containers by rather transparent ParentCtrl ones, which resolved the issue, regardless of where the SColor..._Write(Color) lines were included. Having said that, I ask: shouldn't it be hard-coded this way in future Upp releases for TreeCtrl and ArrayCtrl as well as for other widgets that use scrollbars? I mean, unless it implies unforeseen negative consequences, why not, since Upp help clearly states that Quote: | "This class is supposed to be used as logical parent in situation when more widgets are to be grouped together. The only difference from Ctrl is that ParentCtrl activates Transparent in constructor"
|
Many thanks!
[Updated on: Mon, 19 November 2012 23:49] Report message to a moderator
|
|
|
|
Goto Forum:
Current Time: Sat Dec 14 14:29:31 CET 2024
Total time taken to generate the page: 0.01839 seconds
|