Provide an implementation for SurfaceImpl::AlphaRectangle, and rename
[G|S]etCaretLineBack git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40934 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
#include "wx/image.h"
|
||||
#include "wx/imaglist.h"
|
||||
#include "wx/tokenzr.h"
|
||||
#include "wx/rawbmp.h"
|
||||
|
||||
#include "Platform.h"
|
||||
#include "PlatWX.h"
|
||||
@@ -334,12 +335,73 @@ void SurfaceImpl::RoundedRectangle(PRectangle rc, ColourAllocated fore, ColourAl
|
||||
hdc->DrawRoundedRectangle(wxRectFromPRectangle(rc), 4);
|
||||
}
|
||||
|
||||
#ifdef __WXMSW__
|
||||
#define wxPy_premultiply(p, a) ((p) * (a) / 0xff)
|
||||
#else
|
||||
#define wxPy_premultiply(p, a) (p)
|
||||
#endif
|
||||
|
||||
void SurfaceImpl::AlphaRectangle(PRectangle rc, int cornerSize,
|
||||
ColourAllocated fill, int alphaFill,
|
||||
ColourAllocated outline, int alphaOutline, int flags) {
|
||||
// ** TODO
|
||||
ColourAllocated outline, int alphaOutline,
|
||||
int /*flags*/) {
|
||||
int x, y;
|
||||
wxRect r = wxRectFromPRectangle(rc);
|
||||
wxBitmap bmp(r.width, r.height, 32);
|
||||
wxAlphaPixelData pixData(bmp);
|
||||
pixData.UseAlpha();
|
||||
|
||||
RectangleDraw(rc, outline, fill);
|
||||
// Set the fill pixels
|
||||
ColourDesired cdf(fill.AsLong());
|
||||
int red = cdf.GetRed();
|
||||
int green = cdf.GetGreen();
|
||||
int blue = cdf.GetBlue();
|
||||
|
||||
wxAlphaPixelData::Iterator p(pixData);
|
||||
for (y=0; y<r.height; y++) {
|
||||
p.MoveTo(pixData, 0, y);
|
||||
for (x=0; x<r.width; x++) {
|
||||
p.Red() = wxPy_premultiply(red, alphaFill);
|
||||
p.Green() = wxPy_premultiply(green, alphaFill);
|
||||
p.Blue() = wxPy_premultiply(blue, alphaFill);
|
||||
p.Alpha() = alphaFill;
|
||||
++p;
|
||||
}
|
||||
}
|
||||
|
||||
// Set the outline pixels
|
||||
ColourDesired cdo(outline.AsLong());
|
||||
red = cdo.GetRed();
|
||||
green = cdo.GetGreen();
|
||||
blue = cdo.GetBlue();
|
||||
for (x=0; x<r.width; x++) {
|
||||
p.MoveTo(pixData, x, 0);
|
||||
p.Red() = wxPy_premultiply(red, alphaOutline);
|
||||
p.Green() = wxPy_premultiply(green, alphaOutline);
|
||||
p.Blue() = wxPy_premultiply(blue, alphaOutline);
|
||||
p.Alpha() = alphaOutline;
|
||||
p.MoveTo(pixData, x, r.height-1);
|
||||
p.Red() = wxPy_premultiply(red, alphaOutline);
|
||||
p.Green() = wxPy_premultiply(green, alphaOutline);
|
||||
p.Blue() = wxPy_premultiply(blue, alphaOutline);
|
||||
p.Alpha() = alphaOutline;
|
||||
}
|
||||
|
||||
for (y=0; y<r.height; y++) {
|
||||
p.MoveTo(pixData, 0, y);
|
||||
p.Red() = wxPy_premultiply(red, alphaOutline);
|
||||
p.Green() = wxPy_premultiply(green, alphaOutline);
|
||||
p.Blue() = wxPy_premultiply(blue, alphaOutline);
|
||||
p.Alpha() = alphaOutline;
|
||||
p.MoveTo(pixData, r.width-1, y);
|
||||
p.Red() = wxPy_premultiply(red, alphaOutline);
|
||||
p.Green() = wxPy_premultiply(green, alphaOutline);
|
||||
p.Blue() = wxPy_premultiply(blue, alphaOutline);
|
||||
p.Alpha() = alphaOutline;
|
||||
}
|
||||
|
||||
// Draw the bitmap
|
||||
hdc->DrawBitmap(bmp, r.x, r.y, true);
|
||||
}
|
||||
|
||||
void SurfaceImpl::Ellipse(PRectangle rc, ColourAllocated fore, ColourAllocated back) {
|
||||
|
Reference in New Issue
Block a user