Rewrote the push/pop state and ViewAttr stuff:
- it now seems to work finally correctly - renamed ViewAttr to ViewState and put it into the BPrivate namespace - some refactoring (moved some private BView methods to ViewState) - renamed AS_LAYER_MOVETO/RESIZETO to *_TO (note the underscore) - exchanged BView::originX/Y with fParentOffset (BPoint) - divided AS_LAYER_GET_COLORS into separate ones for high/low/view color - BView::SetPattern() now actually works as expected (ie. updates only if necessary) - exchanged the ViewAttr::flags with ViewState::valid_flags which inverses the previous logic (which wasn't even used consistently) - fState was initialized twice (incorrectly by the ViewAttr constructor, and then again correctly by initCachedState()) - now the ViewState constructor does the job alone, but correctly - BView::PushState() no longer resets the state (it did so only locally anyway...) - cleanup git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13325 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
f479b4974a
commit
80a230b10e
@ -265,7 +265,9 @@ enum {
|
||||
AS_LAYER_SET_HIGH_COLOR,
|
||||
AS_LAYER_SET_LOW_COLOR,
|
||||
AS_LAYER_SET_VIEW_COLOR,
|
||||
AS_LAYER_GET_COLORS,
|
||||
AS_LAYER_GET_HIGH_COLOR,
|
||||
AS_LAYER_GET_LOW_COLOR,
|
||||
AS_LAYER_GET_VIEW_COLOR,
|
||||
AS_LAYER_PRINT_ALIASING,
|
||||
AS_LAYER_CLIP_TO_PICTURE,
|
||||
AS_LAYER_GET_CLIP_REGION,
|
||||
@ -287,8 +289,8 @@ enum {
|
||||
AS_LAYER_INVAL_RECT,
|
||||
AS_LAYER_INVAL_REGION,
|
||||
AS_LAYER_INVERT_RECT,
|
||||
AS_LAYER_MOVETO,
|
||||
AS_LAYER_RESIZETO,
|
||||
AS_LAYER_MOVE_TO,
|
||||
AS_LAYER_RESIZE_TO,
|
||||
AS_LAYER_SET_STATE,
|
||||
AS_LAYER_SET_FONT_STATE,
|
||||
AS_LAYER_GET_STATE,
|
||||
|
@ -23,8 +23,8 @@ struct shape_data {
|
||||
|
||||
enum {
|
||||
B_VIEW_FONT_BIT = 0x00000001,
|
||||
B_VIEW_COLORS_BIT = 0x00000002,
|
||||
B_VIEW_DRAW_MODE_BIT = 0x00000004,
|
||||
B_VIEW_HIGH_COLOR_BIT = 0x00000002,
|
||||
B_VIEW_DRAWING_MODE_BIT = 0x00000004,
|
||||
B_VIEW_CLIP_REGION_BIT = 0x00000008,
|
||||
B_VIEW_LINE_MODES_BIT = 0x00000010,
|
||||
B_VIEW_BLENDING_BIT = 0x00000020,
|
||||
@ -33,56 +33,70 @@ enum {
|
||||
B_VIEW_COORD_BIT = 0x00000100,
|
||||
B_VIEW_ORIGIN_BIT = 0x00000200,
|
||||
B_VIEW_PEN_SIZE_BIT = 0x00000400,
|
||||
B_VIEW_PEN_LOC_BIT = 0x00000800,
|
||||
|
||||
// used for archiving
|
||||
B_VIEW_PEN_LOCATION_BIT = 0x00000800,
|
||||
B_VIEW_LOW_COLOR_BIT = 0x00008000,
|
||||
B_VIEW_VIEW_COLOR_BIT = 0x00010000,
|
||||
B_VIEW_PATTERN_BIT = 0x00020000,
|
||||
|
||||
// these used for archiving only
|
||||
B_VIEW_RESIZE_BIT = 0x00001000,
|
||||
B_VIEW_FLAGS_BIT = 0x00002000,
|
||||
B_VIEW_EVMASK_BIT = 0x00004000
|
||||
B_VIEW_EVENT_MASK_BIT = 0x00004000
|
||||
};
|
||||
|
||||
|
||||
// JB: Is there any reason why this can't be a struct ?
|
||||
//struct _view_attr_{
|
||||
class ViewAttr
|
||||
{
|
||||
public:
|
||||
ViewAttr(void);
|
||||
BFont font;
|
||||
uint16 fontFlags;
|
||||
namespace BPrivate {
|
||||
|
||||
BPoint penPosition;
|
||||
float penSize;
|
||||
class ViewState {
|
||||
public:
|
||||
ViewState();
|
||||
|
||||
rgb_color highColor;
|
||||
rgb_color lowColor;
|
||||
// TODO: viewColor, is NOT part of a view state! Have this as a member of BView.
|
||||
rgb_color viewColor;
|
||||
|
||||
pattern patt;
|
||||
bool IsValid(uint32 bit) { return valid_flags & bit; }
|
||||
|
||||
drawing_mode drawingMode;
|
||||
// clipping region for our view
|
||||
BRegion clippingRegion;
|
||||
// local coordinate system
|
||||
BPoint coordSysOrigin;
|
||||
// line modes
|
||||
join_mode lineJoin;
|
||||
cap_mode lineCap;
|
||||
float miterLimit;
|
||||
// alpha blending
|
||||
source_alpha alphaSrcMode;
|
||||
alpha_function alphaFncMode;
|
||||
// scale
|
||||
float scale;
|
||||
// font aliasing. Used for printing only!
|
||||
bool fontAliasing;
|
||||
// flags used for synchronization with app_server
|
||||
uint16 flags;
|
||||
// flags used for archiving
|
||||
uint16 archivingFlags;
|
||||
void UpdateServerFontState(BPrivate::PortLink &link);
|
||||
void UpdateServerState(BPrivate::PortLink &link);
|
||||
|
||||
public:
|
||||
BPoint pen_location;
|
||||
float pen_size;
|
||||
|
||||
rgb_color high_color;
|
||||
rgb_color low_color;
|
||||
|
||||
// This one is not affected by pop state/push state
|
||||
rgb_color view_color;
|
||||
|
||||
::pattern pattern;
|
||||
|
||||
::drawing_mode drawing_mode;
|
||||
BRegion clipping_region;
|
||||
BPoint origin;
|
||||
|
||||
// line modes
|
||||
join_mode line_join;
|
||||
cap_mode line_cap;
|
||||
float miter_limit;
|
||||
|
||||
// alpha blending
|
||||
source_alpha alpha_source_mode;
|
||||
alpha_function alpha_function_mode;
|
||||
|
||||
float scale;
|
||||
|
||||
// fonts
|
||||
BFont font;
|
||||
uint16 font_flags;
|
||||
bool font_aliasing;
|
||||
// font aliasing. Used for printing only!
|
||||
|
||||
// flags used for synchronization with app_server
|
||||
uint32 valid_flags;
|
||||
// flags used for archiving
|
||||
uint32 archiving_flags;
|
||||
};
|
||||
|
||||
} // namespace BPrivate
|
||||
|
||||
struct _array_hdr_{
|
||||
float startX;
|
||||
float startY;
|
||||
@ -100,4 +114,4 @@ struct _array_data_{
|
||||
_array_hdr_* array;
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif /* _VIEWAUX_H_ */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -833,10 +833,10 @@ BWindow::DispatchMessage(BMessage *msg, BHandler *target)
|
||||
msg->FindFloat("height", i, &height);
|
||||
if ((view = findView(top_view, token))) {
|
||||
// update the views offset in parent
|
||||
if (view->originX != frameLeftTop.x || view->originY != frameLeftTop.y) {
|
||||
if (view->LeftTop() != frameLeftTop) {
|
||||
//printf("updating position (%.1f, %.1f): %s\n", frameLeftTop.x, frameLeftTop.y, view->Name());
|
||||
view->originX = frameLeftTop.x;
|
||||
view->originY = frameLeftTop.y;
|
||||
view->fParentOffset = frameLeftTop;
|
||||
|
||||
// optionally call FrameMoved
|
||||
if (view->fFlags & B_FRAME_EVENTS) {
|
||||
STRACE(("Calling BView(%s)::FrameMoved( %.1f, %.1f )\n", view->Name(),
|
||||
|
@ -621,11 +621,12 @@ myRootLayer->Unlock();
|
||||
myRootLayer->SetEventMaskLayer(fCurrentLayer, mask, options);
|
||||
break;
|
||||
}
|
||||
case AS_LAYER_MOVETO:
|
||||
case AS_LAYER_MOVE_TO:
|
||||
{
|
||||
STRACE(("ServerWindow %s: Message AS_LAYER_MOVETO: Layer name: %s\n", fTitle, fCurrentLayer->Name()));
|
||||
STRACE(("ServerWindow %s: Message AS_LAYER_MOVE_TO: Layer name: %s\n",
|
||||
fTitle, fCurrentLayer->Name()));
|
||||
|
||||
float x, y;
|
||||
|
||||
link.Read<float>(&x);
|
||||
link.Read<float>(&y);
|
||||
|
||||
@ -635,11 +636,12 @@ myRootLayer->Unlock();
|
||||
fCurrentLayer->MoveBy(offsetX, offsetY);
|
||||
break;
|
||||
}
|
||||
case AS_LAYER_RESIZETO:
|
||||
case AS_LAYER_RESIZE_TO:
|
||||
{
|
||||
STRACE(("ServerWindow %s: Message AS_LAYER_RESIZETO: Layer name: %s\n", fTitle, fCurrentLayer->Name()));
|
||||
STRACE(("ServerWindow %s: Message AS_LAYER_RESIZE_TO: Layer name: %s\n",
|
||||
fTitle, fCurrentLayer->Name()));
|
||||
|
||||
float newWidth, newHeight;
|
||||
|
||||
link.Read<float>(&newWidth);
|
||||
link.Read<float>(&newHeight);
|
||||
|
||||
@ -854,23 +856,34 @@ myRootLayer->Lock();
|
||||
myRootLayer->Unlock();
|
||||
break;
|
||||
}
|
||||
case AS_LAYER_GET_COLORS:
|
||||
{
|
||||
DTRACE(("ServerWindow %s: Message AS_LAYER_GET_COLORS: Layer: %s\n", Title(), fCurrentLayer->Name()));
|
||||
rgb_color highColor, lowColor, viewColor;
|
||||
|
||||
highColor = fCurrentLayer->fLayerData->HighColor().GetColor32();
|
||||
lowColor = fCurrentLayer->fLayerData->LowColor().GetColor32();
|
||||
viewColor = fCurrentLayer->ViewColor().GetColor32();
|
||||
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Attach(&highColor, sizeof(rgb_color));
|
||||
fLink.Attach(&lowColor, sizeof(rgb_color));
|
||||
fLink.Attach(&viewColor, sizeof(rgb_color));
|
||||
fLink.Flush();
|
||||
|
||||
case AS_LAYER_GET_HIGH_COLOR:
|
||||
DTRACE(("ServerWindow %s: Message AS_LAYER_GET_HIGH_COLOR: Layer: %s\n",
|
||||
Title(), fCurrentLayer->Name()));
|
||||
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Attach<rgb_color>(fCurrentLayer->fLayerData->HighColor().GetColor32());
|
||||
fLink.Flush();
|
||||
break;
|
||||
}
|
||||
|
||||
case AS_LAYER_GET_LOW_COLOR:
|
||||
DTRACE(("ServerWindow %s: Message AS_LAYER_GET_LOW_COLOR: Layer: %s\n",
|
||||
Title(), fCurrentLayer->Name()));
|
||||
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Attach<rgb_color>(fCurrentLayer->fLayerData->LowColor().GetColor32());
|
||||
fLink.Flush();
|
||||
break;
|
||||
|
||||
case AS_LAYER_GET_VIEW_COLOR:
|
||||
DTRACE(("ServerWindow %s: Message AS_LAYER_GET_VIEW_COLOR: Layer: %s\n",
|
||||
Title(), fCurrentLayer->Name()));
|
||||
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Attach<rgb_color>(fCurrentLayer->ViewColor().GetColor32());
|
||||
fLink.Flush();
|
||||
break;
|
||||
|
||||
case AS_LAYER_SET_BLEND_MODE:
|
||||
{
|
||||
DTRACE(("ServerWindow %s: Message AS_LAYER_SET_BLEND_MODE: Layer: %s\n", Title(), fCurrentLayer->Name()));
|
||||
|
Loading…
Reference in New Issue
Block a user