|
|
Home » U++ Library support » U++ Widgets - General questions or Mixed problems » Paint outside Ctrl Rect
Paint outside Ctrl Rect [message #23788] |
Sun, 22 November 2009 11:11  |
 |
koldo
Messages: 3432 Registered: August 2008
|
Senior Veteran |
|
|
Hello all
I have derived a class from Ctrl and I would like to paint outside its Rect, but Ctrl painting clips the painting area to the Ctrl Rect.
Is it a way to disable the Rect clipping in Rect ?
Best regards
Koldo
Best regards
Iñaki
|
|
|
|
|
|
|
Re: Paint outside Ctrl Rect [message #23819 is a reply to message #23809] |
Tue, 24 November 2009 15:01   |
 |
mirek
Messages: 14255 Registered: November 2005
|
Ultimate Member |
|
|
koldo wrote on Mon, 23 November 2009 11:36 | Hello mrjt
Unfortunately the control is clipped too with OverPaint().
Best regards
Koldo
|
Ctrl view is. Its Frames are not.
Frankly, your request is quite specific, it makes the whole paradigm upside-down. Anyway, we had similar problem in the past as X11 input fields paint outside too. But that is just frame...
In practice, I do no undestand why you would want something like that... It is like requiring regular host platform windows to paint one over another.
But I guess you should be able to reuse frame overpaint to this:
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
struct OverCtrl : public Ctrl, public CtrlFrame {
virtual void FrameAddSize(Size& sz) {}
virtual void FrameLayout(Rect& r) {}
virtual void FramePaint(Draw& w, const Rect& r) {
w.DrawRect(r.left - 10, r.top - 10, r.GetWidth() + 20, r.GetHeight() + 20, Blue());
w.DrawRect(r, Red());
}
virtual int OverPaint() const { return 10; }
OverCtrl() {
SetFrame(*this);
}
};
GUI_APP_MAIN
{
OverCtrl ctrl;
TopWindow win;
win.Add(ctrl.LeftPos(40, 40).TopPos(40, 10));
win.Run();
}
Mirek
|
|
|
|
|
|
|
|
Re: Paint outside Ctrl Rect [message #23843 is a reply to message #23788] |
Thu, 26 November 2009 08:52   |
mr_ped
Messages: 826 Registered: November 2005 Location: Czech Republic - Praha
|
Experienced Contributor |
|
|
The control should adapt to arrow's width, and draw it a tad smaller, so it will end inside rectangle and no clipping will happen. That's the correct way how it should work, but I can see it may be a bit tricky to code that size adjustment by width.
edit: I would probably end with calculating new boundary rectangle as 1/2 of line width inside of the clip rectangle. This way the drawn arrow would be inside the clipping, and like 99+% of available space would be used (but under certain arrow's angles like the one you posted it would not use 100% of available space). But I think visually it would work very well even in this simple way.
[Updated on: Thu, 26 November 2009 08:55] Report message to a moderator
|
|
|
|
|
Goto Forum:
Current Time: Tue Apr 29 01:50:40 CEST 2025
Total time taken to generate the page: 0.00916 seconds
|
|
|