CharBrd 7: Border shadow
1, New character attribute
- Add the three shadow members to font
(width, color, location)
2, Painting
- Extract the shadow painting to a local function
and use that for character shadow (paintfrm.cxx)
- Reduce the painting rectangle of background
(shadow doesn't inherites the background of content)
3, Border merge
- Use text portion join members to skip shadow
when neccessary.
4, Vertical text
- Get shadow space dependant from oritentation and
border merge.
5, UNO API and ODF filter
Paragraph: ParaShadowFormat -> Character: CharShadowFormat
Change-Id: Ief4669990d238016c3ffc18a2609a3df7d9dddbf
diff --git a/offapi/com/sun/star/style/CharacterProperties.idl b/offapi/com/sun/star/style/CharacterProperties.idl
index 920c55d..c4f5452 100644
--- a/offapi/com/sun/star/style/CharacterProperties.idl
+++ b/offapi/com/sun/star/style/CharacterProperties.idl
@@ -24,6 +24,7 @@
#include <com/sun/star/awt/FontSlant.idl>
#include <com/sun/star/container/XNameContainer.idl>
#include <com/sun/star/table/BorderLine2.idl>
#include <com/sun/star/table/ShadowFormat.idl>
module com { module sun { module star { module style {
@@ -428,6 +429,12 @@ published service CharacterProperties
**/
[property, optional] long CharBottomBorderDistance;
/** Determines the type, color, and width of the shadow.
*
* @since LibreOffice 4.2
**/
[optional, property] com::sun::star::table::ShadowFormat CharShadowFormat;
};
}; }; }; };
diff --git a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXCellRange.csv b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXCellRange.csv
index bbf37c1..85b06ec 100644
--- a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXCellRange.csv
+++ b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXCellRange.csv
@@ -143,6 +143,7 @@
"SwXCellRange";"com::sun::star::style::CharacterProperties";"CharRightBorderDistance#optional"
"SwXCellRange";"com::sun::star::style::CharacterProperties";"CharBottomBorderDistance#optional"
"SwXCellRange";"com::sun::star::style::CharacterProperties";"CharTopBorderDistance#optional"
"SwXCellRange";"com::sun::star::style::CharacterProperties";"CharShadowFormat#optional"
"SwXCellRange";"com::sun::star::sheet::XCellRangeData#optional";"getDataArray()"
"SwXCellRange";"com::sun::star::sheet::XCellRangeData#optional";"setDataArray()"
"SwXCellRange";"com::sun::star::style::ParagraphPropertiesAsian#optional";"ParaIsHangingPunctuation"
diff --git a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextCursor.csv b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextCursor.csv
index fd964f8..1f45acc 100644
--- a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextCursor.csv
+++ b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextCursor.csv
@@ -165,6 +165,7 @@
"SwXTextCursor";"com::sun::star::style::CharacterProperties";"CharRightBorderDistance#optional"
"SwXTextCursor";"com::sun::star::style::CharacterProperties";"CharBottomBorderDistance#optional"
"SwXTextCursor";"com::sun::star::style::CharacterProperties";"CharTopBorderDistance#optional"
"SwXTextCursor";"com::sun::star::style::CharacterProperties";"CharShadowFormat#optional"
"SwXTextCursor";"com::sun::star::document::XDocumentInsertable#optional";"insertDocumentFromURL()"
"SwXTextCursor";"com::sun::star::beans::XPropertySet";"getPropertySetInfo()"
"SwXTextCursor";"com::sun::star::beans::XPropertySet";"setPropertyValue()"
diff --git a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextRange.csv b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextRange.csv
index 2618653..7beae74 100644
--- a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextRange.csv
+++ b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextRange.csv
@@ -139,6 +139,7 @@
"SwXTextRange";"com::sun::star::style::CharacterProperties";"CharRightBorderDistance#optional"
"SwXTextRange";"com::sun::star::style::CharacterProperties";"CharBottomBorderDistance#optional"
"SwXTextRange";"com::sun::star::style::CharacterProperties";"CharTopBorderDistance#optional"
"SwXTextRange";"com::sun::star::style::CharacterProperties";"CharShadowFormat#optional"
"SwXTextRange";"com::sun::star::beans::XPropertySet";"getPropertySetInfo()"
"SwXTextRange";"com::sun::star::beans::XPropertySet";"setPropertyValue()"
"SwXTextRange";"com::sun::star::beans::XPropertySet";"getPropertyValue()"
diff --git a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextTableCursor.csv b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextTableCursor.csv
index b2fbb91..79f86c9 100644
--- a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextTableCursor.csv
+++ b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextTableCursor.csv
@@ -142,6 +142,7 @@
"SwXTextTableCursor";"com::sun::star::style::CharacterProperties";"CharRightBorderDistance#optional"
"SwXTextTableCursor";"com::sun::star::style::CharacterProperties";"CharBottomBorderDistance#optional"
"SwXTextTableCursor";"com::sun::star::style::CharacterProperties";"CharTopBorderDistance#optional"
"SwXTextTableCursor";"com::sun::star::style::CharacterProperties";"CharShadowFormat#optional"
"SwXTextTableCursor";"com::sun::star::beans::XPropertySet";"getPropertySetInfo()"
"SwXTextTableCursor";"com::sun::star::beans::XPropertySet";"setPropertyValue()"
"SwXTextTableCursor";"com::sun::star::beans::XPropertySet";"getPropertyValue()"
diff --git a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextViewCursor.csv b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextViewCursor.csv
index 6ecd7ca..85ab9e7 100644
--- a/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextViewCursor.csv
+++ b/qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextViewCursor.csv
@@ -175,6 +175,7 @@
"SwXTextViewCursor";"com::sun::star::style::CharacterProperties";"CharRightBorderDistance#optional"
"SwXTextViewCursor";"com::sun::star::style::CharacterProperties";"CharBottomBorderDistance#optional"
"SwXTextViewCursor";"com::sun::star::style::CharacterProperties";"CharTopBorderDistance#optional"
"SwXTextViewCursor";"com::sun::star::style::CharacterProperties";"CharShadowFormat#optional"
"SwXTextViewCursor";"com::sun::star::document::XDocumentInsertable#optional";"insertDocumentFromURL()"
"SwXTextViewCursor";"com::sun::star::beans::XPropertySet";"getPropertySetInfo()"
"SwXTextViewCursor";"com::sun::star::beans::XPropertySet";"setPropertyValue()"
diff --git a/qadevOOo/objdsc/sw/com.sun.star.style.CharacterStyle.csv b/qadevOOo/objdsc/sw/com.sun.star.style.CharacterStyle.csv
index c7d16cd..26a08688 100644
--- a/qadevOOo/objdsc/sw/com.sun.star.style.CharacterStyle.csv
+++ b/qadevOOo/objdsc/sw/com.sun.star.style.CharacterStyle.csv
@@ -101,6 +101,7 @@
"CharacterStyle";"com::sun::star::style::CharacterProperties";"CharRightBorderDistance#optional"
"CharacterStyle";"com::sun::star::style::CharacterProperties";"CharBottomBorderDistance#optional"
"CharacterStyle";"com::sun::star::style::CharacterProperties";"CharTopBorderDistance#optional"
"CharacterStyle";"com::sun::star::style::CharacterProperties";"CharShadowFormat#optional"
"CharacterStyle";"com::sun::star::beans::XPropertySet";"getPropertySetInfo()"
"CharacterStyle";"com::sun::star::beans::XPropertySet";"setPropertyValue()"
"CharacterStyle";"com::sun::star::beans::XPropertySet";"getPropertyValue()"
diff --git a/sw/inc/charatr.hxx b/sw/inc/charatr.hxx
index 5ac0b34..b0a77c2 100644
--- a/sw/inc/charatr.hxx
+++ b/sw/inc/charatr.hxx
@@ -101,6 +101,8 @@ inline const SvxCharHiddenItem &SwAttrSet::GetCharHidden( sal_Bool bInP ) const
{ return (const SvxCharHiddenItem&)Get( RES_CHRATR_HIDDEN, bInP ); }
inline const SvxBoxItem &SwAttrSet::GetCharBorder( sal_Bool bInP ) const
{ return (const SvxBoxItem&)Get( RES_CHRATR_BOX, bInP ); }
inline const SvxShadowItem &SwAttrSet::GetCharShadow( sal_Bool bInP ) const
{ return (const SvxShadowItem&)Get( RES_CHRATR_SHADOW, bInP ); }
// implementation of the character attribute methods of SwFmt
@@ -164,6 +166,8 @@ inline const SvxCharHiddenItem &SwFmt::GetCharHidden( sal_Bool bInP ) const
{ return aSet.GetCharHidden(bInP); }
inline const SvxBoxItem &SwFmt::GetCharBorder( sal_Bool bInP ) const
{ return aSet.GetCharBorder(bInP); }
inline const SvxShadowItem &SwFmt::GetCharShadow( sal_Bool bInP ) const
{ return aSet.GetCharShadow(bInP); }
#endif
diff --git a/sw/inc/format.hxx b/sw/inc/format.hxx
index 6e8ad24..2063ee3 100644
--- a/sw/inc/format.hxx
+++ b/sw/inc/format.hxx
@@ -210,6 +210,7 @@ public:
inline const SvxCharReliefItem &GetCharRelief( sal_Bool = sal_True ) const;
inline const SvxCharHiddenItem &GetCharHidden( sal_Bool = sal_True ) const;
inline const SvxBoxItem &GetCharBorder( sal_Bool = sal_True ) const;
inline const SvxShadowItem &GetCharShadow( sal_Bool = sal_True ) const;
/// Frame-attributes - implemented in frmatr.hxx.
inline const SwFmtFillOrder &GetFillOrder( sal_Bool = sal_True ) const;
diff --git a/sw/inc/hintids.hxx b/sw/inc/hintids.hxx
index 37d5a39..da26031 100644
--- a/sw/inc/hintids.hxx
+++ b/sw/inc/hintids.hxx
@@ -89,6 +89,10 @@ RES_CHRATR_BEGIN = HINT_BEGIN,
RES_CHRATR_OVERLINE, // 38
RES_CHRATR_RSID, // 39
RES_CHRATR_BOX, // 40
RES_CHRATR_SHADOW, // 41
RES_CHRATR_DUMMY1, // 42
RES_CHRATR_DUMMY2, // 43
RES_CHRATR_DUMMY3, // 44
RES_CHRATR_END
};
@@ -114,27 +118,27 @@ RES_TXTATR_BEGIN = RES_CHRATR_END,
- META and METAFIELD must precede CJK_RUBY and INETFMT
*/
RES_TXTATR_WITHEND_BEGIN = RES_TXTATR_BEGIN ,
RES_TXTATR_REFMARK = RES_TXTATR_WITHEND_BEGIN, // 41
RES_TXTATR_TOXMARK, // 42
RES_TXTATR_META, // 43
RES_TXTATR_METAFIELD, // 44
RES_TXTATR_AUTOFMT, // 45
RES_TXTATR_INETFMT, // 46
RES_TXTATR_CHARFMT, // 47
RES_TXTATR_CJK_RUBY, // 48
RES_TXTATR_UNKNOWN_CONTAINER, // 49
RES_TXTATR_DUMMY5, // 50
RES_TXTATR_REFMARK = RES_TXTATR_WITHEND_BEGIN, // 45
RES_TXTATR_TOXMARK, // 46
RES_TXTATR_META, // 47
RES_TXTATR_METAFIELD, // 48
RES_TXTATR_AUTOFMT, // 49
RES_TXTATR_INETFMT, // 50
RES_TXTATR_CHARFMT, // 51
RES_TXTATR_CJK_RUBY, // 52
RES_TXTATR_UNKNOWN_CONTAINER, // 53
RES_TXTATR_DUMMY5, // 54
RES_TXTATR_WITHEND_END,
// all TextAttributes without an end
RES_TXTATR_NOEND_BEGIN = RES_TXTATR_WITHEND_END,
RES_TXTATR_FIELD = RES_TXTATR_NOEND_BEGIN, // 51
RES_TXTATR_FLYCNT, // 52
RES_TXTATR_FTN, // 53
RES_TXTATR_DUMMY4, // 54
RES_TXTATR_DUMMY3, // 55
RES_TXTATR_DUMMY1, // 56
RES_TXTATR_DUMMY2, // 57
RES_TXTATR_FIELD = RES_TXTATR_NOEND_BEGIN, // 55
RES_TXTATR_FLYCNT, // 56
RES_TXTATR_FTN, // 57
RES_TXTATR_DUMMY4, // 58
RES_TXTATR_DUMMY3, // 59
RES_TXTATR_DUMMY1, // 60
RES_TXTATR_DUMMY2, // 61
RES_TXTATR_NOEND_END,
RES_TXTATR_END = RES_TXTATR_NOEND_END
};
@@ -142,25 +146,25 @@ RES_TXTATR_END = RES_TXTATR_NOEND_END
enum RES_PARATR
{
RES_PARATR_BEGIN = RES_TXTATR_END,
RES_PARATR_LINESPACING = RES_PARATR_BEGIN, // 58
RES_PARATR_ADJUST, // 59
RES_PARATR_SPLIT, // 60
RES_PARATR_ORPHANS, // 61
RES_PARATR_WIDOWS, // 62
RES_PARATR_TABSTOP, // 63
RES_PARATR_HYPHENZONE, // 64
RES_PARATR_DROP, // 65
RES_PARATR_REGISTER, // 66
RES_PARATR_NUMRULE, // 67
RES_PARATR_SCRIPTSPACE, // 68
RES_PARATR_HANGINGPUNCTUATION, // 69
RES_PARATR_FORBIDDEN_RULES, // 70
RES_PARATR_VERTALIGN, // 71
RES_PARATR_SNAPTOGRID, // 72
RES_PARATR_CONNECT_BORDER, // 73
RES_PARATR_OUTLINELEVEL, // 74
RES_PARATR_RSID, // 75
RES_PARATR_GRABBAG, // 76
RES_PARATR_LINESPACING = RES_PARATR_BEGIN, // 62
RES_PARATR_ADJUST, // 63
RES_PARATR_SPLIT, // 64
RES_PARATR_ORPHANS, // 65
RES_PARATR_WIDOWS, // 66
RES_PARATR_TABSTOP, // 67
RES_PARATR_HYPHENZONE, // 68
RES_PARATR_DROP, // 69
RES_PARATR_REGISTER, // 70
RES_PARATR_NUMRULE, // 71
RES_PARATR_SCRIPTSPACE, // 72
RES_PARATR_HANGINGPUNCTUATION, // 73
RES_PARATR_FORBIDDEN_RULES, // 74
RES_PARATR_VERTALIGN, // 75
RES_PARATR_SNAPTOGRID, // 76
RES_PARATR_CONNECT_BORDER, // 77
RES_PARATR_OUTLINELEVEL, // 78
RES_PARATR_RSID, // 79
RES_PARATR_GRABBAG, // 80
RES_PARATR_END
};
@@ -169,101 +173,101 @@ RES_PARATR_END
enum RES_PARATR_LIST
{
RES_PARATR_LIST_BEGIN = RES_PARATR_END,
RES_PARATR_LIST_ID = RES_PARATR_LIST_BEGIN, // 77
RES_PARATR_LIST_LEVEL, // 78
RES_PARATR_LIST_ISRESTART, // 79
RES_PARATR_LIST_RESTARTVALUE, // 80
RES_PARATR_LIST_ISCOUNTED, // 81
RES_PARATR_LIST_ID = RES_PARATR_LIST_BEGIN, // 81
RES_PARATR_LIST_LEVEL, // 82
RES_PARATR_LIST_ISRESTART, // 83
RES_PARATR_LIST_RESTARTVALUE, // 84
RES_PARATR_LIST_ISCOUNTED, // 85
RES_PARATR_LIST_END
};
enum RES_FRMATR
{
RES_FRMATR_BEGIN = RES_PARATR_LIST_END,
RES_FILL_ORDER = RES_FRMATR_BEGIN, // 82
RES_FRM_SIZE, // 83
RES_PAPER_BIN, // 84
RES_LR_SPACE, // 85
RES_UL_SPACE, // 86
RES_PAGEDESC, // 87
RES_BREAK, // 88
RES_CNTNT, // 89
RES_HEADER, // 90
RES_FOOTER, // 91
RES_PRINT, // 92
RES_OPAQUE, // 93
RES_PROTECT, // 94
RES_SURROUND, // 95
RES_VERT_ORIENT, // 96
RES_HORI_ORIENT, // 97
RES_ANCHOR, // 98
RES_BACKGROUND, // 99
RES_BOX, // 100
RES_SHADOW, // 101
RES_FRMMACRO, // 102
RES_COL, // 103
RES_KEEP, // 104
RES_URL, // 105
RES_EDIT_IN_READONLY, // 106
RES_LAYOUT_SPLIT, // 107
RES_CHAIN, // 108
RES_TEXTGRID, // 109
RES_LINENUMBER , // 110
RES_FTN_AT_TXTEND, // 111
RES_END_AT_TXTEND, // 112
RES_COLUMNBALANCE, // 113
RES_FRAMEDIR, // 114
RES_HEADER_FOOTER_EAT_SPACING, // 115
RES_ROW_SPLIT, // 116
RES_FOLLOW_TEXT_FLOW, // 117
RES_COLLAPSING_BORDERS, // 118
RES_WRAP_INFLUENCE_ON_OBJPOS, // 119
RES_AUTO_STYLE, // 120
RES_FRMATR_STYLE_NAME, // 121
RES_FRMATR_CONDITIONAL_STYLE_NAME, // 122
RES_FILL_STYLE, // 123
RES_FILL_GRADIENT, // 124
RES_FILL_ORDER = RES_FRMATR_BEGIN, // 86
RES_FRM_SIZE, // 87
RES_PAPER_BIN, // 88
RES_LR_SPACE, // 89
RES_UL_SPACE, // 90
RES_PAGEDESC, // 91
RES_BREAK, // 92
RES_CNTNT, // 93
RES_HEADER, // 94
RES_FOOTER, // 95
RES_PRINT, // 96
RES_OPAQUE, // 97
RES_PROTECT, // 98
RES_SURROUND, // 99
RES_VERT_ORIENT, // 100
RES_HORI_ORIENT, // 101
RES_ANCHOR, // 102
RES_BACKGROUND, // 103
RES_BOX, // 104
RES_SHADOW, // 105
RES_FRMMACRO, // 106
RES_COL, // 107
RES_KEEP, // 108
RES_URL, // 109
RES_EDIT_IN_READONLY, // 110
RES_LAYOUT_SPLIT, // 111
RES_CHAIN, // 112
RES_TEXTGRID, // 113
RES_LINENUMBER , // 114
RES_FTN_AT_TXTEND, // 115
RES_END_AT_TXTEND, // 116
RES_COLUMNBALANCE, // 117
RES_FRAMEDIR, // 118
RES_HEADER_FOOTER_EAT_SPACING, // 119
RES_ROW_SPLIT, // 120
RES_FOLLOW_TEXT_FLOW, // 121
RES_COLLAPSING_BORDERS, // 122
RES_WRAP_INFLUENCE_ON_OBJPOS, // 123
RES_AUTO_STYLE, // 124
RES_FRMATR_STYLE_NAME, // 125
RES_FRMATR_CONDITIONAL_STYLE_NAME, // 126
RES_FILL_STYLE, // 127
RES_FILL_GRADIENT, // 128
RES_FRMATR_END
};
enum RES_GRFATR
{
RES_GRFATR_BEGIN = RES_FRMATR_END,
RES_GRFATR_MIRRORGRF = RES_GRFATR_BEGIN, // 125
RES_GRFATR_CROPGRF, // 126
RES_GRFATR_MIRRORGRF = RES_GRFATR_BEGIN, // 129
RES_GRFATR_CROPGRF, // 130
RES_GRFATR_ROTATION, // 127
RES_GRFATR_LUMINANCE, // 128
RES_GRFATR_CONTRAST, // 129
RES_GRFATR_CHANNELR, // 130
RES_GRFATR_CHANNELG, // 131
RES_GRFATR_CHANNELB, // 132
RES_GRFATR_GAMMA, // 133
RES_GRFATR_INVERT, // 134
RES_GRFATR_TRANSPARENCY, // 135
RES_GRFATR_DRAWMODE, // 136
RES_GRFATR_ROTATION, // 131
RES_GRFATR_LUMINANCE, // 132
RES_GRFATR_CONTRAST, // 133
RES_GRFATR_CHANNELR, // 134
RES_GRFATR_CHANNELG, // 135
RES_GRFATR_CHANNELB, // 136
RES_GRFATR_GAMMA, // 137
RES_GRFATR_INVERT, // 138
RES_GRFATR_TRANSPARENCY, // 139
RES_GRFATR_DRAWMODE, // 140
RES_GRFATR_DUMMY1, // 137
RES_GRFATR_DUMMY2, // 138
RES_GRFATR_DUMMY3, // 139
RES_GRFATR_DUMMY4, // 140
RES_GRFATR_DUMMY5, // 141
RES_GRFATR_DUMMY1, // 141
RES_GRFATR_DUMMY2, // 142
RES_GRFATR_DUMMY3, // 143
RES_GRFATR_DUMMY4, // 144
RES_GRFATR_DUMMY5, // 145
RES_GRFATR_END
};
enum RES_BOXATR
{
RES_BOXATR_BEGIN = RES_GRFATR_END,
RES_BOXATR_FORMAT = RES_BOXATR_BEGIN, // 142
RES_BOXATR_FORMULA, // 143
RES_BOXATR_VALUE, // 144
RES_BOXATR_FORMAT = RES_BOXATR_BEGIN, // 146
RES_BOXATR_FORMULA, // 147
RES_BOXATR_VALUE, // 148
RES_BOXATR_END
};
enum RES_UNKNOWNATR
{
RES_UNKNOWNATR_BEGIN = RES_BOXATR_END,
RES_UNKNOWNATR_CONTAINER = RES_UNKNOWNATR_BEGIN,// 145
RES_UNKNOWNATR_CONTAINER = RES_UNKNOWNATR_BEGIN,// 149
RES_UNKNOWNATR_END
};
diff --git a/sw/inc/swatrset.hxx b/sw/inc/swatrset.hxx
index 7810f39..0b35135 100644
--- a/sw/inc/swatrset.hxx
+++ b/sw/inc/swatrset.hxx
@@ -146,6 +146,7 @@ class SwAttrPool : public SfxItemPool
// map for binary filter is necessary (version map 5).
static sal_uInt16* pVersionMap5;
static sal_uInt16* pVersionMap6;
static sal_uInt16* pVersionMap7;
SwDoc* pDoc;
@@ -249,6 +250,7 @@ public:
inline const SvxCharReliefItem &GetCharRelief( sal_Bool = sal_True ) const;
inline const SvxCharHiddenItem &GetCharHidden( sal_Bool = sal_True ) const;
inline const SvxBoxItem &GetCharBorder( sal_Bool = sal_True ) const;
inline const SvxShadowItem &GetCharShadow( sal_Bool = sal_True ) const;
// Frame attributes. Implementation in frmatr.hxx.
inline const SwFmtFillOrder &GetFillOrder( sal_Bool = sal_True ) const;
diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx
index 7466139..aa1c7c9 100644
--- a/sw/inc/unoprnms.hxx
+++ b/sw/inc/unoprnms.hxx
@@ -835,8 +835,9 @@ enum SwPropNameIds
/* 0769 */ UNO_NAME_CHAR_RIGHT_BORDER_DISTANCE,
/* 0770 */ UNO_NAME_CHAR_TOP_BORDER_DISTANCE,
/* 0771 */ UNO_NAME_CHAR_BOTTOM_BORDER_DISTANCE,
/* 0772 */ UNO_NAME_CHAR_SHADOW_FORMAT,
/* 0772 */ SW_PROPNAME_END
/* 0773 */ SW_PROPNAME_END
// new items in this array must match SwPropNameTab aPropNameTab
};
diff --git a/sw/qa/extras/odfexport/data/charborder.odt b/sw/qa/extras/odfexport/data/charborder.odt
index 9f37d58..8395625 100644
--- a/sw/qa/extras/odfexport/data/charborder.odt
+++ b/sw/qa/extras/odfexport/data/charborder.odt
Binary files differ
diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx
index 3a248b2..b838312 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -10,6 +10,7 @@
#include <swmodeltestbase.hxx>
#include <com/sun/star/awt/Gradient.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include <com/sun/star/table/ShadowFormat.hpp>
class Test : public SwModelTestBase
{
@@ -200,6 +201,13 @@ void Test::testCharacterBorder()
aFirstParTopBorder, aFirstParTopPadding,
getProperty<table::BorderLine2>(xSet,"RightBorder"),
getProperty<sal_Int32>(xSet,"RightBorderDistance"));
// Shadow
const table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(xSet,"ParaShadowFormat");
CPPUNIT_ASSERT_EQUAL(aShadow.Color, 0L);
CPPUNIT_ASSERT_EQUAL((bool)aShadow.IsTransparent, false);
CPPUNIT_ASSERT_EQUAL((int)aShadow.Location, 0);
CPPUNIT_ASSERT_EQUAL((int)aShadow.ShadowWidth, 0);
}
// Character border for first paragraph
@@ -232,6 +240,13 @@ void Test::testCharacterBorder()
getProperty<table::BorderLine2>(xSet,"CharRightBorder"),
getProperty<sal_Int32>(xSet,"CharRightBorderDistance"));
// Shadow
const table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(xSet,"CharShadowFormat");
CPPUNIT_ASSERT_EQUAL(aShadow.Color, 16724787L);
CPPUNIT_ASSERT_EQUAL((bool)aShadow.IsTransparent, false);
CPPUNIT_ASSERT_EQUAL((int)aShadow.Location, 2);
CPPUNIT_ASSERT_EQUAL((int)aShadow.ShadowWidth, 280);
// Check autostyle
{
uno::Reference< style::XAutoStyleFamily > xAutoStyleFamily(getAutoStyles("ParagraphStyles"));
@@ -308,6 +323,13 @@ void Test::testCharacterBorder()
getProperty<table::BorderLine2>(xSet,"CharRightBorder"),
getProperty<sal_Int32>(xSet,"CharRightBorderDistance"));
// Shadow
const table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(xSet,"CharShadowFormat");
CPPUNIT_ASSERT_EQUAL(aShadow.Color, 0L);
CPPUNIT_ASSERT_EQUAL((bool)aShadow.IsTransparent, false);
CPPUNIT_ASSERT_EQUAL((int)aShadow.Location, 3);
CPPUNIT_ASSERT_EQUAL((int)aShadow.ShadowWidth, 79);
// Check character style
{
uno::Reference< container::XNameAccess > xStyleFamily(getStyles("CharacterStyles"), uno::UNO_QUERY);
diff --git a/sw/source/core/attr/swatrset.cxx b/sw/source/core/attr/swatrset.cxx
index bdf8b00..aef8556 100644
--- a/sw/source/core/attr/swatrset.cxx
+++ b/sw/source/core/attr/swatrset.cxx
@@ -53,6 +53,7 @@ SwAttrPool::SwAttrPool( SwDoc* pD )
// #i18732# - apply new version map
SetVersionMap( 5, 1,130, pVersionMap5 );
SetVersionMap( 6, 1,136, pVersionMap6 );
SetVersionMap( 7, 1,144, pVersionMap7 );
}
SwAttrPool::~SwAttrPool()
diff --git a/sw/source/core/bastyp/init.cxx b/sw/source/core/bastyp/init.cxx
index 812f169..c9624f2 100644
--- a/sw/source/core/bastyp/init.cxx
+++ b/sw/source/core/bastyp/init.cxx
@@ -289,6 +289,10 @@ SfxItemInfo aSlotTab[] =
{ SID_ATTR_CHAR_OVERLINE, SFX_ITEM_POOLABLE }, // RES_CHRATR_OVERLINE
{ 0, SFX_ITEM_POOLABLE }, // RES_CHRATR_RSID
{ 0, SFX_ITEM_POOLABLE }, // RES_CHRATR_BOX
{ 0, SFX_ITEM_POOLABLE }, // RES_CHRATR_SHADOW
{ 0, SFX_ITEM_POOLABLE }, // RES_CHRATR_DUMMY1
{ 0, SFX_ITEM_POOLABLE }, // RES_CHRATR_DUMMY2
{ 0, SFX_ITEM_POOLABLE }, // RES_CHRATR_DUMMY3
{ 0, 0 }, // RES_TXTATR_REFMARK
{ 0, 0 }, // RES_TXTATR_TOXMARK
@@ -419,6 +423,7 @@ sal_uInt16* SwAttrPool::pVersionMap4 = 0;
// #i18732#
sal_uInt16* SwAttrPool::pVersionMap5 = 0;
sal_uInt16* SwAttrPool::pVersionMap6 = 0;
sal_uInt16* SwAttrPool::pVersionMap7 = 0;
const sal_Char* pMarkToTable = "table";
const sal_Char* pMarkToFrame = "frame";
@@ -498,6 +503,12 @@ void _InitCore()
aAttrTab[ RES_CHRATR_HIDDEN - POOLATTR_BEGIN ] = new SvxCharHiddenItem( sal_False, RES_CHRATR_HIDDEN );
aAttrTab[ RES_CHRATR_OVERLINE- POOLATTR_BEGIN ] = new SvxOverlineItem( UNDERLINE_NONE, RES_CHRATR_OVERLINE );
aAttrTab[ RES_CHRATR_BOX - POOLATTR_BEGIN ] = new SvxBoxItem( RES_CHRATR_BOX );
aAttrTab[ RES_CHRATR_SHADOW - POOLATTR_BEGIN ] = new SvxShadowItem( RES_CHRATR_SHADOW );
// CharakterAttr - Dummies
aAttrTab[ RES_CHRATR_DUMMY1 - POOLATTR_BEGIN ] = new SfxBoolItem( RES_CHRATR_DUMMY1 );
aAttrTab[ RES_CHRATR_DUMMY2 - POOLATTR_BEGIN ] = new SfxBoolItem( RES_CHRATR_DUMMY2 );
aAttrTab[ RES_CHRATR_DUMMY3 - POOLATTR_BEGIN ] = new SfxBoolItem( RES_CHRATR_DUMMY3 );
aAttrTab[ RES_TXTATR_AUTOFMT- POOLATTR_BEGIN ] = new SwFmtAutoFmt;
aAttrTab[ RES_TXTATR_INETFMT - POOLATTR_BEGIN ] = new SwFmtINetFmt( OUString(), OUString() );
@@ -703,6 +714,14 @@ void _InitCore()
for ( i = 38; i <= 136; ++i )
SwAttrPool::pVersionMap6[ i-1 ] = i + 3;
// 7. version:
// New character attribute for character box shadow plus 3 dummies
SwAttrPool::pVersionMap7 = new sal_uInt16[ 144 ];
for( i = 1; i <= 40; ++i )
SwAttrPool::pVersionMap7[ i-1 ] = i;
for ( i = 41; i <= 144; ++i )
SwAttrPool::pVersionMap7[ i-1 ] = i + 4;
SwBreakIt::_Create( ::comphelper::getProcessComponentContext() );
pCheckIt = NULL;
@@ -799,6 +818,7 @@ void _FinitCore()
// #i18732#
delete[] SwAttrPool::pVersionMap5;
delete[] SwAttrPool::pVersionMap6;
delete[] SwAttrPool::pVersionMap7;
for ( sal_uInt16 i = 0; i < pGlobalOLEExcludeList->size(); ++i )
delete (*pGlobalOLEExcludeList)[i];
diff --git a/sw/source/core/doc/dbgoutsw.cxx b/sw/source/core/doc/dbgoutsw.cxx
index 4dd024a..2a97182 100644
--- a/sw/source/core/doc/dbgoutsw.cxx
+++ b/sw/source/core/doc/dbgoutsw.cxx
@@ -161,6 +161,7 @@ map<sal_uInt16,String,CompareUShort> & GetItemWhichMap()
aItemWhichMap[RES_CHRATR_RELIEF] = String("CHRATR_RELIEF", RTL_TEXTENCODING_ASCII_US);
aItemWhichMap[RES_CHRATR_HIDDEN] = String("CHRATR_HIDDEN", RTL_TEXTENCODING_ASCII_US);
aItemWhichMap[RES_CHRATR_BOX] = String("CHRATR_BOX", RTL_TEXTENCODING_ASCII_US);
aItemWhichMap[RES_CHRATR_SHADOW] = String("CHRATR_SHADOW", RTL_TEXTENCODING_ASCII_US);
aItemWhichMap[RES_TXTATR_AUTOFMT] = String("TXTATR_AUTOFMT", RTL_TEXTENCODING_ASCII_US);
aItemWhichMap[RES_TXTATR_INETFMT] = String("TXTATR_INETFMT", RTL_TEXTENCODING_ASCII_US);
aItemWhichMap[RES_TXTATR_REFMARK] = String("TXTATR_REFMARK", RTL_TEXTENCODING_ASCII_US);
diff --git a/sw/source/core/inc/swfntcch.hxx b/sw/source/core/inc/swfntcch.hxx
index d790581..041757a 100644
--- a/sw/source/core/inc/swfntcch.hxx
+++ b/sw/source/core/inc/swfntcch.hxx
@@ -21,7 +21,7 @@
#include <tools/mempool.hxx>
#define NUM_DEFAULT_VALUES 37
#define NUM_DEFAULT_VALUES 38
#include "swcache.hxx"
#include "swfont.hxx"
diff --git a/sw/source/core/inc/swfont.hxx b/sw/source/core/inc/swfont.hxx
index 82acffd..96840cf 100644
--- a/sw/source/core/inc/swfont.hxx
+++ b/sw/source/core/inc/swfont.hxx
@@ -142,6 +142,10 @@ class SwFont
sal_uInt16 m_nRightBorderDist;
sal_uInt16 m_nLeftBorderDist;
Color m_aShadowColor;
sal_uInt16 m_nShadowWidth;
SvxShadowLocation m_aShadowLocation;
sal_uInt8 nToxCnt; // Zaehlt die Schachtelungstiefe der Tox
sal_uInt8 nRefCnt; // Zaehlt die Schachtelungstiefe der Refs
sal_uInt8 m_nMetaCount; // count META/METAFIELD
@@ -403,7 +407,40 @@ public:
sal_uInt16 GetLeftBorderSpace() const;
bool HasBorder() const;
void RemoveBorders();
// Shadow attributes
void SetShadowColor( const Color& rColor );
void SetShadowWidth( const sal_uInt16 nWidth );
void SetShadowLocation( const SvxShadowLocation aLocation );
const Color& GetShadowColor() const { return m_aShadowColor; }
sal_uInt16 GetShadowWidth() const { return m_nShadowWidth; }
SvxShadowLocation GetShadowLocation() const { return m_aShadowLocation; }
/**
* Get the absolute shadow location dependant from orientation.
*
* @param[in] bVertLayout true, if the container layout is vertical
* false, otherwise
* @return absolute location
**/
SvxShadowLocation GetAbsShadowLocation( const bool bVertLayout ) const;
/**
* Calculate the shadow space on the specified side dependant from
* the orientation and connection with neightbours.
* @see shaditem.hxx for integer constants of sides
*
* @param[in] nShadow specify the side
* @param[in] bVertLayout true, if the container layout is vertical
* false, otherwise
* @param[in] bSkipLeft relative left shadow space is skipped
* @param[in] bSkipRight relative right shadow space is skipped
* @return the shadow space
**/
sal_uInt16 CalcShadowSpace(
const sal_uInt16 nShadow, const bool bVertLayout,
const bool bSkipLeft, const bool bSkipRight ) const;
};
inline void SwFont::SetColor( const Color& rColor )
@@ -883,34 +920,62 @@ inline void SwFont::SetLeftBorderDist( const sal_uInt16 nLeftDist )
inline sal_uInt16 SwFont::GetTopBorderSpace() const
{
sal_uInt16 nRet = 0;
if( m_aTopBorder )
return m_aTopBorder.get().GetScaledWidth() + m_nTopBorderDist;
else
return 0;
{
nRet += m_aTopBorder.get().GetScaledWidth() + m_nTopBorderDist;
}
if( m_aShadowLocation == SVX_SHADOW_TOPLEFT ||
m_aShadowLocation == SVX_SHADOW_TOPRIGHT )
{
nRet += m_nShadowWidth;
}
return nRet;
}
inline sal_uInt16 SwFont::GetBottomBorderSpace() const
{
sal_uInt16 nRet = 0;
if( m_aBottomBorder )
return m_aBottomBorder.get().GetScaledWidth() + m_nBottomBorderDist;
else
return 0;
{
nRet += m_aBottomBorder.get().GetScaledWidth() + m_nBottomBorderDist;
}
if( m_aShadowLocation == SVX_SHADOW_BOTTOMLEFT ||
m_aShadowLocation == SVX_SHADOW_BOTTOMRIGHT )
{
nRet += m_nShadowWidth;
}
return nRet;
}
inline sal_uInt16 SwFont::GetRightBorderSpace() const
{
sal_uInt16 nRet = 0;
if( m_aRightBorder )
return m_aRightBorder.get().GetScaledWidth() + m_nRightBorderDist;
else
return 0;
{
nRet += m_aRightBorder.get().GetScaledWidth() + m_nRightBorderDist;
}
if( m_aShadowLocation == SVX_SHADOW_TOPRIGHT ||
m_aShadowLocation == SVX_SHADOW_BOTTOMRIGHT )
{
nRet += m_nShadowWidth;
}
return nRet;
}
inline sal_uInt16 SwFont::GetLeftBorderSpace() const
{
sal_uInt16 nRet = 0;
if( m_aLeftBorder )
return m_aLeftBorder.get().GetScaledWidth() + m_nLeftBorderDist;
else
return 0;
{
nRet += m_aLeftBorder.get().GetScaledWidth() + m_nLeftBorderDist;
}
if( m_aShadowLocation == SVX_SHADOW_TOPLEFT ||
m_aShadowLocation == SVX_SHADOW_BOTTOMLEFT )
{
nRet += m_nShadowWidth;
}
return nRet;
}
inline bool SwFont::HasBorder() const
@@ -918,10 +983,25 @@ inline bool SwFont::HasBorder() const
return m_aTopBorder || m_aBottomBorder || m_aLeftBorder || m_aRightBorder;
}
inline void SwFont::RemoveBorders()
inline void SwFont::SetShadowColor( const Color& rColor )
{
m_aTopBorder = m_aBottomBorder = m_aLeftBorder = m_aRightBorder = boost::none;
m_nTopBorderDist = m_nBottomBorderDist = m_nRightBorderDist = m_nLeftBorderDist = 0;
m_aShadowColor = rColor;
bFntChg = sal_True;
aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
}
inline void SwFont::SetShadowWidth( const sal_uInt16 nWidth )
{
m_nShadowWidth = nWidth;
bFntChg = sal_True;
aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
}
inline void SwFont::SetShadowLocation( const SvxShadowLocation aLocation )
{
m_aShadowLocation = aLocation;
bFntChg = sal_True;
aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
}
/*************************************************************************
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index d965830..9a12cc7 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -4143,83 +4143,65 @@ void SwTabFrm::Paint(SwRect const& rRect, SwPrintData const*const) const
((SwTabFrm*)this)->ResetComplete();
}
/*************************************************************************
|*
|* SwFrm::PaintShadow()
|*
|* Description Paints a shadow if the format requests so.
|* The shadow is always painted on the outer edge of the OutRect.
|* If needed, the OutRect is shrunk so the painting of the border can be
|* done on it.
|*
|*************************************************************************/
/// OD 23.08.2002 #99657#
/// draw full shadow rectangle for frames with transparent drawn backgrounds.
void SwFrm::PaintShadow( const SwRect& rRect, SwRect& rOutRect,
const SwBorderAttrs &rAttrs ) const
/**
* Paint border shadow.
*
* @param[in] rRect aligned rect to clip the result
* @param[in|out] rOutRect full painting area as input
* painting area reduced by shadow space for border and background as output
* @param[in] rShadow includes shadow attributes
* @param[in] bDrawFullShadowRectangle paint full rect of shadow
* @param[in] bTop paint top part of the shadow
* @param[in] bBottom paint bottom part of the shadow
* @param[in] bLeft paint left part of the shadow
* @param[in] bRight paint right part of the shadow
**/
static void lcl_PaintShadow( const SwRect& rRect, SwRect& rOutRect,
const SvxShadowItem& rShadow, const bool bDrawFullShadowRectangle,
const bool bTop, const bool bBottom,
const bool bLeft, const bool bRight )
{
const SvxShadowItem &rShadow = rAttrs.GetShadow();
const long nWidth = ::lcl_AlignWidth ( rShadow.GetWidth() );
const long nHeight = ::lcl_AlignHeight( rShadow.GetWidth() );
SwRects aRegion( 2 );
SwRect aOut( rOutRect );
const sal_Bool bCnt = IsCntntFrm();
const bool bTop = !bCnt || rAttrs.GetTopLine ( *(this) );
const bool bBottom = !bCnt || rAttrs.GetBottomLine( *(this) );
SvxShadowLocation eLoc = rShadow.GetLocation();
if( IsVertical() )
{
switch( eLoc )
{
case SVX_SHADOW_BOTTOMRIGHT: eLoc = SVX_SHADOW_BOTTOMLEFT; break;
case SVX_SHADOW_TOPLEFT: eLoc = SVX_SHADOW_TOPRIGHT; break;
case SVX_SHADOW_TOPRIGHT: eLoc = SVX_SHADOW_BOTTOMRIGHT; break;
case SVX_SHADOW_BOTTOMLEFT: eLoc = SVX_SHADOW_TOPLEFT; break;
default: break;
}
}
/// OD 23.08.2002 #99657# - determine, if full shadow rectangle have to
/// be drawn or only two shadow rectangles beside the frame.
/// draw full shadow rectangle, if frame background is drawn transparent.
/// Status Quo:
/// SwLayoutFrm can have transparent drawn backgrounds. Thus,
/// "asked" their frame format.
bool bDrawFullShadowRectangle =
( IsLayoutFrm() &&
(static_cast<const SwLayoutFrm*>(this))->GetFmt()->IsBackgroundTransparent()
);
switch ( eLoc )
switch ( rShadow.GetLocation() )
{
case SVX_SHADOW_BOTTOMRIGHT:
{
if ( bDrawFullShadowRectangle )
{
/// OD 06.08.2002 #99657# - draw full shadow rectangle
aOut.Top( aOut.Top() + nHeight );
aOut.Left( aOut.Left() + nWidth );
aOut.Top( rOutRect.Top() + nHeight );
aOut.Left( rOutRect.Left() + nWidth );
aRegion.push_back( aOut );
}
else
{
aOut.Top ( aOut.Bottom() - nHeight );
aOut.Left( aOut.Left() + nWidth );
if ( bBottom )
if( bBottom )
{
aOut.Top( rOutRect.Bottom() - nHeight );
if( bLeft )
aOut.Left( rOutRect.Left() + nWidth );
aRegion.push_back( aOut );
aOut.Left( aOut.Right() - nWidth );
aOut.Top ( rOutRect.Top() + nHeight );
if ( bBottom )
aOut.Bottom( aOut.Bottom() - nHeight );
else
aOut.Bottom( aOut.Bottom() + nHeight );
aRegion.push_back( aOut );
}
if( bRight )
{
aOut.Left( rOutRect.Right() - nWidth );
if( bTop )
aOut.Top( rOutRect.Top() + nHeight );
else
aOut.Top( rOutRect.Top() );
if( bBottom )
aOut.Bottom( rOutRect.Bottom() - nHeight );
aRegion.push_back( aOut );
}
}
rOutRect.Right ( rOutRect.Right() - nWidth );
if( bRight )
rOutRect.Right( rOutRect.Right() - nWidth );
if( bBottom )
rOutRect.Bottom( rOutRect.Bottom()- nHeight );
}
@@ -4229,28 +4211,36 @@ void SwFrm::PaintShadow( const SwRect& rRect, SwRect& rOutRect,
if ( bDrawFullShadowRectangle )
{
/// OD 06.08.2002 #99657# - draw full shadow rectangle
aOut.Bottom( aOut.Bottom() - nHeight );
aOut.Right( aOut.Right() - nWidth );
aOut.Bottom( rOutRect.Bottom() - nHeight );
aOut.Right( rOutRect.Right() - nWidth );
aRegion.push_back( aOut );
}
else
{
aOut.Bottom( aOut.Top() + nHeight );
aOut.Right ( aOut.Right() - nWidth );
if ( bTop )
if( bTop )
{
aOut.Bottom( rOutRect.Top() + nHeight );
if( bRight )
aOut.Right( rOutRect.Right() - nWidth );
aRegion.push_back( aOut );
aOut.Right ( aOut.Left() + nWidth );
aOut.Bottom( rOutRect.Bottom() - nHeight );
if ( bTop )
aOut.Top( aOut.Top() + nHeight );
else
aOut.Top( aOut.Top() - nHeight );
aRegion.push_back( aOut );
}
if( bLeft )
{
aOut.Right( rOutRect.Left() + nWidth );
if( bBottom )
aOut.Bottom( rOutRect.Bottom() - nHeight );
else
aOut.Bottom( rOutRect.Bottom() );
if( bTop )
aOut.Top( rOutRect.Top() + nHeight );
aRegion.push_back( aOut );
}
}
rOutRect.Left( rOutRect.Left() + nWidth );
if( bLeft )
rOutRect.Left( rOutRect.Left() + nWidth );
if( bTop )
rOutRect.Top( rOutRect.Top() + nHeight );
rOutRect.Top( rOutRect.Top() + nHeight );
}
break;
case SVX_SHADOW_TOPRIGHT:
@@ -4258,26 +4248,34 @@ void SwFrm::PaintShadow( const SwRect& rRect, SwRect& rOutRect,
if ( bDrawFullShadowRectangle )
{
/// OD 06.08.2002 #99657# - draw full shadow rectangle
aOut.Bottom( aOut.Bottom() - nHeight);
aOut.Left( aOut.Left() + nWidth );
aOut.Bottom( rOutRect.Bottom() - nHeight);
aOut.Left( rOutRect.Left() + nWidth );
aRegion.push_back( aOut );
}
else
{
aOut.Bottom( aOut.Top() + nHeight );
aOut.Left ( aOut.Left()+ nWidth );
if ( bTop )
if( bTop )
{
aOut.Bottom( rOutRect.Top() + nHeight );
if( bLeft )
aOut.Left( rOutRect.Left() + nWidth );
aRegion.push_back( aOut );
aOut.Left ( aOut.Right() - nWidth );
aOut.Bottom( rOutRect.Bottom() - nHeight );
if ( bTop )
aOut.Top( aOut.Top() + nHeight );
else
aOut.Top( aOut.Top() - nHeight );
aRegion.push_back( aOut );
}
if( bRight )
{
aOut.Left( rOutRect.Right() - nWidth );
if( bBottom )
aOut.Bottom( rOutRect.Bottom() - nHeight );
else
aOut.Bottom( rOutRect.Bottom() );
if( bTop )
aOut.Top( rOutRect.Top() + nHeight );
aRegion.push_back( aOut );
}
}
rOutRect.Right( rOutRect.Right() - nWidth );
if( bRight )
rOutRect.Right( rOutRect.Right() - nWidth );
if( bTop )
rOutRect.Top( rOutRect.Top() + nHeight );
}
@@ -4287,26 +4285,34 @@ void SwFrm::PaintShadow( const SwRect& rRect, SwRect& rOutRect,
if ( bDrawFullShadowRectangle )
{
/// OD 06.08.2002 #99657# - draw full shadow rectangle
aOut.Top( aOut.Top() + nHeight );
aOut.Right( aOut.Right() - nWidth );
aOut.Top( rOutRect.Top() + nHeight );
aOut.Right( rOutRect.Right() - nWidth );
aRegion.push_back( aOut );
}
else
{
aOut.Top ( aOut.Bottom()- nHeight );
aOut.Right( aOut.Right() - nWidth );
if ( bBottom )
if( bBottom )
{
aOut.Top( rOutRect.Bottom()- nHeight );
if( bRight )
aOut.Right( rOutRect.Right() - nWidth );
aRegion.push_back( aOut );
aOut.Right( aOut.Left() + nWidth );
aOut.Top( rOutRect.Top() + nHeight );
if ( bBottom )
aOut.Bottom( aOut.Bottom() - nHeight );
else
aOut.Bottom( aOut.Bottom() + nHeight );
aRegion.push_back( aOut );
}
if( bLeft )
{
aOut.Right( rOutRect.Left() + nWidth );
if( bTop )
aOut.Top( rOutRect.Top() + nHeight );
else
aOut.Top( rOutRect.Top() );
if( bBottom )
aOut.Bottom( rOutRect.Bottom() - nHeight );
aRegion.push_back( aOut );
}
}
rOutRect.Left( rOutRect.Left() + nWidth );
if( bLeft )
rOutRect.Left( rOutRect.Left() + nWidth );
if( bBottom )
rOutRect.Bottom( rOutRect.Bottom() - nHeight );
}
@@ -4334,6 +4340,8 @@ void SwFrm::PaintShadow( const SwRect& rRect, SwRect& rOutRect,
if ( pOut->GetFillColor() != aShadowColor )
pOut->SetFillColor( aShadowColor );
pOut->SetLineColor();
pOut->SetDrawMode( nOldDrawMode );
for ( sal_uInt16 i = 0; i < aRegion.size(); ++i )
@@ -4359,6 +4367,53 @@ void SwFrm::PaintShadow( const SwRect& rRect, SwRect& rOutRect,
/*************************************************************************
|*
|* SwFrm::PaintShadow()
|*
|* Description Paints a shadow if the format requests so.
|* The shadow is always painted on the outer edge of the OutRect.
|* If needed, the OutRect is shrunk so the painting of the border can be
|* done on it.
|*
|*************************************************************************/
/// OD 23.08.2002 #99657#
/// draw full shadow rectangle for frames with transparent drawn backgrounds.
void SwFrm::PaintShadow( const SwRect& rRect, SwRect& rOutRect,
const SwBorderAttrs &rAttrs ) const
{
SvxShadowItem rShadow = rAttrs.GetShadow();
const sal_Bool bCnt = IsCntntFrm();
const bool bTop = !bCnt || rAttrs.GetTopLine ( *(this) );
const bool bBottom = !bCnt || rAttrs.GetBottomLine( *(this) );
if( IsVertical() )
{
switch( rShadow.GetLocation() )
{
case SVX_SHADOW_BOTTOMRIGHT: rShadow.SetLocation(SVX_SHADOW_BOTTOMLEFT); break;
case SVX_SHADOW_TOPLEFT: rShadow.SetLocation(SVX_SHADOW_TOPRIGHT); break;
case SVX_SHADOW_TOPRIGHT: rShadow.SetLocation(SVX_SHADOW_BOTTOMRIGHT); break;
case SVX_SHADOW_BOTTOMLEFT: rShadow.SetLocation(SVX_SHADOW_TOPLEFT); break;
default: break;
}
}
/// OD 23.08.2002 #99657# - determine, if full shadow rectangle have to
/// be drawn or only two shadow rectangles beside the frame.
/// draw full shadow rectangle, if frame background is drawn transparent.
/// Status Quo:
/// SwLayoutFrm can have transparent drawn backgrounds. Thus,
/// "asked" their frame format.
const bool bDrawFullShadowRectangle =
( IsLayoutFrm() &&
(static_cast<const SwLayoutFrm*>(this))->GetFmt()->IsBackgroundTransparent()
);
lcl_PaintShadow(rRect, rOutRect, rShadow, bDrawFullShadowRectangle, bTop, bBottom, true, true);
}
/*************************************************************************
|*
|* SwFrm::PaintBorderLine()
|*
|*************************************************************************/
@@ -4780,6 +4835,16 @@ void PaintCharacterBorder(
break;
}
// Paint shadow (reduce painting rect)
{
const SvxShadowItem aShadow(
0, &rFont.GetShadowColor(), rFont.GetShadowWidth(),
rFont.GetAbsShadowLocation(bVerticalLayout));
lcl_PaintShadow( SwRect(aAlignedRect), aAlignedRect, aShadow,
false, bTop, bBottom, bLeft, bRight);
}
// Init borders, after this initialization top, bottom, right and left means the
// absolute position
const boost::optional<editeng::SvxBorderLine> aTopBorder =
@@ -4791,7 +4856,6 @@ void PaintCharacterBorder(
const boost::optional<editeng::SvxBorderLine> aRightBorder =
(bRight ? rFont.GetAbsRightBorder(bVerticalLayout) : boost::none);
if( aTopBorder )
{
Point aLeftTop(
diff --git a/sw/source/core/text/atrhndl.hxx b/sw/source/core/text/atrhndl.hxx
index 24c5f91..393174b 100644
--- a/sw/source/core/text/atrhndl.hxx
+++ b/sw/source/core/text/atrhndl.hxx
@@ -21,7 +21,7 @@
#define _ATRHNDL_HXX
#define INITIAL_NUM_ATTR 3
#define NUM_ATTRIBUTE_STACKS 41
#define NUM_ATTRIBUTE_STACKS 42
#include <txatbase.hxx>
#include <swfntcch.hxx>
diff --git a/sw/source/core/text/atrstck.cxx b/sw/source/core/text/atrstck.cxx
index 2897303..0e3df3c 100644
--- a/sw/source/core/text/atrstck.cxx
+++ b/sw/source/core/text/atrstck.cxx
@@ -43,6 +43,7 @@
#include <editeng/twolinesitem.hxx>
#include <editeng/charhiddenitem.hxx>
#include <editeng/boxitem.hxx>
#include <editeng/shaditem.hxx>
#include <viewopt.hxx>
#include <charfmt.hxx>
#include <fchrfmt.hxx>
@@ -113,16 +114,20 @@ const sal_uInt8 StackPos[ static_cast<sal_uInt16>(RES_TXTATR_WITHEND_END) -
35, // RES_CHRATR_OVERLINE, // 38
0, // RES_CHRATR_RSID, // 39
36, // RES_CHRATR_BOX, // 40
37, // RES_TXTATR_REFMARK, // 41
38, // RES_TXTATR_TOXMARK, // 42
39, // RES_TXTATR_META, // 43
39, // RES_TXTATR_METAFIELD, // 44
0, // RES_TXTATR_AUTOFMT, // 45
0, // RES_TXTATR_INETFMT // 46
0, // RES_TXTATR_CHARFMT, // 47
40, // RES_TXTATR_CJK_RUBY, // 48
0, // RES_TXTATR_UNKNOWN_CONTAINER, // 49
0, // RES_TXTATR_DUMMY5 // 50
37, // RES_CHRATR_SHADOW, // 41
0, // RES_CHRATR_DUMMY1, // 42
0, // RES_CHRATR_DUMMY2, // 43
0, // RES_CHRATR_DUMMY3, // 44
38, // RES_TXTATR_REFMARK, // 45
39, // RES_TXTATR_TOXMARK, // 46
40, // RES_TXTATR_META, // 47
40, // RES_TXTATR_METAFIELD, // 48
0, // RES_TXTATR_AUTOFMT, // 49
0, // RES_TXTATR_INETFMT // 50
0, // RES_TXTATR_CHARFMT, // 51
41, // RES_TXTATR_CJK_RUBY, // 52
0, // RES_TXTATR_UNKNOWN_CONTAINER, // 53
0, // RES_TXTATR_DUMMY5 // 54
};
/*************************************************************************
@@ -757,6 +762,14 @@ void SwAttrHandler::FontChg(const SfxPoolItem& rItem, SwFont& rFnt, sal_Bool bPu
rFnt.SetLeftBorderDist( aBoxItem.GetDistance(BOX_LINE_LEFT) );
break;
}
case RES_CHRATR_SHADOW:
{
const SvxShadowItem& aShadowItem = static_cast<const SvxShadowItem&>(rItem);
rFnt.SetShadowColor( aShadowItem.GetColor() );
rFnt.SetShadowWidth( aShadowItem.GetWidth() );
rFnt.SetShadowLocation( aShadowItem.GetLocation() );
break;
}
case RES_CHRATR_OVERLINE :
rFnt.SetOverline( ((SvxOverlineItem&)rItem).GetLineStyle() );
rFnt.SetOverColor( ((SvxOverlineItem&)rItem).GetColor() );
diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index 2af2b3d..75085e1 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -30,6 +30,7 @@
#include <editeng/splwrap.hxx>
#include <editeng/pgrditem.hxx>
#include <editeng/tstpitem.hxx>
#include <editeng/shaditem.hxx>
#include <xmloff/odffields.hxx>
#include <SwSmartTagMgr.hxx>
@@ -689,7 +690,8 @@ void SwTxtPaintInfo::_DrawText( const XubString &rText, const SwLinePortion &rPo
}
void SwTxtPaintInfo::CalcRect( const SwLinePortion& rPor,
SwRect* pRect, SwRect* pIntersect ) const
SwRect* pRect, SwRect* pIntersect,
const bool bInsideBox ) const
{
Size aSize( rPor.Width(), rPor.Height() );
if( rPor.IsHangingPortion() )
@@ -746,6 +748,19 @@ void SwTxtPaintInfo::CalcRect( const SwLinePortion& rPor,
if ( GetTxtFrm()->IsVertical() )
GetTxtFrm()->SwitchHorizontalToVertical( aRect );
if( bInsideBox && rPor.InTxtGrp() )
{
const bool bJoinWithPrev =
static_cast<const SwTxtPortion&>(rPor).GetJoinBorderWithPrev();
const bool bJoinWithNext =
static_cast<const SwTxtPortion&>(rPor).GetJoinBorderWithNext();
const bool bIsVert = GetTxtFrm()->IsVertical();
aRect.Top(aRect.Top() + GetFont()->CalcShadowSpace(SHADOW_TOP, bIsVert, bJoinWithPrev, bJoinWithNext ));
aRect.Bottom(aRect.Bottom() - GetFont()->CalcShadowSpace(SHADOW_BOTTOM, bIsVert, bJoinWithPrev, bJoinWithNext ));
aRect.Left(aRect.Left() + GetFont()->CalcShadowSpace(SHADOW_LEFT, bIsVert, bJoinWithPrev, bJoinWithNext ));
aRect.Right(aRect.Right() - GetFont()->CalcShadowSpace(SHADOW_RIGHT, bIsVert, bJoinWithPrev, bJoinWithNext ));
}
if ( pRect )
*pRect = aRect;
@@ -1065,7 +1080,7 @@ void SwTxtPaintInfo::DrawBackground( const SwLinePortion &rPor ) const
OSL_ENSURE( OnWin(), "SwTxtPaintInfo::DrawBackground: printer pollution ?" );
SwRect aIntersect;
CalcRect( rPor, 0, &aIntersect );
CalcRect( rPor, 0, &aIntersect, true );
if ( aIntersect.HasArea() )
{
@@ -1092,7 +1107,7 @@ void SwTxtPaintInfo::DrawBackBrush( const SwLinePortion &rPor ) const
{
{
SwRect aIntersect;
CalcRect( rPor, &aIntersect, 0 );
CalcRect( rPor, &aIntersect, 0, true );
if(aIntersect.HasArea())
{
SwTxtNode *pNd = m_pFrm->GetTxtNode();
@@ -1150,7 +1165,7 @@ void SwTxtPaintInfo::DrawBackBrush( const SwLinePortion &rPor ) const
OSL_ENSURE( m_pFnt->GetBackColor(), "DrawBackBrush: Lost Color" );
SwRect aIntersect;
CalcRect( rPor, 0, &aIntersect );
CalcRect( rPor, 0, &aIntersect, true );
if ( aIntersect.HasArea() )
{
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index d682c8b..f9963d5 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -447,7 +447,16 @@ public:
inline void NotifyURL( const SwLinePortion &rPor ) const
{ if( URLNotify() ) _NotifyURL( rPor ); }
void CalcRect( const SwLinePortion& rPor, SwRect* pRect, SwRect* pIntersect = 0 ) const;
/**
* Calculate the rectangular area where the portion takes place.
* @param[in] rPor portion for which the method specify the painting area
* @param[out] pRect whole area of the portion
* @param[out] pIntersect part of the portion area clipped by OutputDevice's clip region
* @param[in] bInsideBox area of portion's content, padding and border, but shadow
* is excluded (e.g. for background)
**/
void CalcRect( const SwLinePortion& rPor, SwRect* pRect,
SwRect* pIntersect = 0, const bool bInsideBox = false ) const;
inline SwTwips GetPaintOfst() const;
inline void SetPaintOfst( const SwTwips nNew );
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index 97929cd..ef2cbc5 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -2866,7 +2866,10 @@ namespace {
rFirst.GetBottomBorderDist() == rSecond.GetBottomBorderDist() &&
rFirst.GetLeftBorderDist() == rSecond.GetLeftBorderDist() &&
rFirst.GetRightBorderDist() == rSecond.GetRightBorderDist() &&
rFirst.GetOrientation() == rSecond.GetOrientation();
rFirst.GetOrientation() == rSecond.GetOrientation() &&
rFirst.GetShadowColor() == rSecond.GetShadowColor() &&
rFirst.GetShadowWidth() == rSecond.GetShadowWidth() &&
rFirst.GetShadowLocation() == rSecond.GetShadowLocation();
}
} //end unnamed namespace
diff --git a/sw/source/core/txtnode/swfont.cxx b/sw/source/core/txtnode/swfont.cxx
index 4c2f970..61fdabe 100644
--- a/sw/source/core/txtnode/swfont.cxx
+++ b/sw/source/core/txtnode/swfont.cxx
@@ -49,6 +49,7 @@
#include <editeng/twolinesitem.hxx>
#include <editeng/charhiddenitem.hxx>
#include <editeng/boxitem.hxx>
#include <editeng/shaditem.hxx>
#include <IDocumentSettingAccess.hxx>
#include <vcl/window.hxx>
#include <charatr.hxx>
@@ -225,6 +226,148 @@ SwFont::GetAbsRightBorder( const bool bVertLayout ) const
}
}
SvxShadowLocation SwFont::GetAbsShadowLocation( const bool bVertLayout ) const
{
SvxShadowLocation aLocation = SVX_SHADOW_NONE;
switch( GetOrientation( bVertLayout ) )
{
case 0:
aLocation = m_aShadowLocation;
break;
case 900:
switch ( m_aShadowLocation )
{
case SVX_SHADOW_TOPLEFT:
aLocation = SVX_SHADOW_BOTTOMLEFT;
break;
case SVX_SHADOW_TOPRIGHT:
aLocation = SVX_SHADOW_TOPLEFT;
break;
case SVX_SHADOW_BOTTOMLEFT:
aLocation = SVX_SHADOW_BOTTOMRIGHT;
break;
case SVX_SHADOW_BOTTOMRIGHT:
aLocation = SVX_SHADOW_TOPRIGHT;
break;
case SVX_SHADOW_NONE:
case SVX_SHADOW_END:
aLocation = m_aShadowLocation;
break;
}
break;
case 1800:
switch ( m_aShadowLocation )
{
case SVX_SHADOW_TOPLEFT:
aLocation = SVX_SHADOW_BOTTOMRIGHT;
break;
case SVX_SHADOW_TOPRIGHT:
aLocation = SVX_SHADOW_BOTTOMLEFT;
break;
case SVX_SHADOW_BOTTOMLEFT:
aLocation = SVX_SHADOW_TOPRIGHT;
break;
case SVX_SHADOW_BOTTOMRIGHT:
aLocation = SVX_SHADOW_TOPLEFT;
break;
case SVX_SHADOW_NONE:
case SVX_SHADOW_END:
aLocation = m_aShadowLocation;
break;
}
break;
case 2700:
switch ( m_aShadowLocation )
{
case SVX_SHADOW_TOPLEFT:
aLocation = SVX_SHADOW_TOPRIGHT;
break;
case SVX_SHADOW_TOPRIGHT:
aLocation = SVX_SHADOW_BOTTOMRIGHT;
break;
case SVX_SHADOW_BOTTOMLEFT:
aLocation = SVX_SHADOW_TOPLEFT;
break;
case SVX_SHADOW_BOTTOMRIGHT:
aLocation = SVX_SHADOW_BOTTOMLEFT;
break;
case SVX_SHADOW_NONE:
case SVX_SHADOW_END:
aLocation = m_aShadowLocation;
break;
}
break;
default:
assert(false);
break;
}
return aLocation;
}
sal_uInt16 SwFont::CalcShadowSpace(
const sal_uInt16 nShadow, const bool bVertLayout,
const bool bSkipLeft, const bool bSkipRight ) const
{
sal_uInt16 nSpace = 0;
const sal_uInt16 nOrient = GetOrientation( bVertLayout );
const SvxShadowLocation aLoc = GetAbsShadowLocation( bVertLayout );
switch( nShadow )
{
case SHADOW_TOP:
if(( aLoc == SVX_SHADOW_TOPLEFT ||
aLoc == SVX_SHADOW_TOPRIGHT ) &&
( nOrient == 0 || nOrient == 1800 ||
( nOrient == 900 && !bSkipRight ) ||
( nOrient == 2700 && !bSkipLeft )))
{
nSpace = m_nShadowWidth;
}
break;
case SHADOW_BOTTOM:
if(( aLoc == SVX_SHADOW_BOTTOMLEFT ||
aLoc == SVX_SHADOW_BOTTOMRIGHT ) &&
( nOrient == 0 || nOrient == 1800 ||
( nOrient == 900 && !bSkipLeft ) ||
( nOrient == 2700 && !bSkipRight )))
{
nSpace = m_nShadowWidth;
}
break;
case SHADOW_LEFT:
if(( aLoc == SVX_SHADOW_TOPLEFT ||
aLoc == SVX_SHADOW_BOTTOMLEFT ) &&
( nOrient == 900 || nOrient == 2700 ||
( nOrient == 0 && !bSkipLeft ) ||
( nOrient == 1800 && !bSkipRight )))
{
nSpace = m_nShadowWidth;
}
break;
case SHADOW_RIGHT:
if(( aLoc == SVX_SHADOW_TOPRIGHT ||
aLoc == SVX_SHADOW_BOTTOMRIGHT ) &&
( nOrient == 900 || nOrient == 2700 ||
( nOrient == 0 && !bSkipRight ) ||
( nOrient == 1800 && !bSkipLeft )))
{
nSpace = m_nShadowWidth;
}
break;
default:
assert(false);
break;
}
return nSpace;
}
// maps directions for vertical layout
sal_uInt16 MapDirection( sal_uInt16 nDir, const sal_Bool bVertFormat )
{
@@ -353,8 +496,6 @@ void SwFont::SetDiffFnt( const SfxItemSet *pAttrSet,
delete pBackColor;
pBackColor = NULL;
RemoveBorders();
if( pAttrSet )
{
const SfxPoolItem* pItem;
@@ -546,6 +687,14 @@ void SwFont::SetDiffFnt( const SfxItemSet *pAttrSet,
SetRightBorderDist(pBoxItem->GetDistance(BOX_LINE_RIGHT));
SetLeftBorderDist(pBoxItem->GetDistance(BOX_LINE_LEFT));
}
if( SFX_ITEM_SET == pAttrSet->GetItemState( RES_CHRATR_SHADOW,
sal_True, &pItem ))
{
const SvxShadowItem* pShadowItem = static_cast<const SvxShadowItem*>(pItem);
SetShadowColor(pShadowItem->GetColor());
SetShadowWidth(pShadowItem->GetWidth());
SetShadowLocation(pShadowItem->GetLocation());
}
const SfxPoolItem* pTwoLinesItem = 0;
if( SFX_ITEM_SET ==
pAttrSet->GetItemState( RES_CHRATR_TWO_LINES, sal_True, &pTwoLinesItem ))
@@ -573,6 +722,9 @@ SwFont::SwFont()
, m_nBottomBorderDist(0)
, m_nRightBorderDist(0)
, m_nLeftBorderDist(0)
, m_aShadowColor(COL_TRANSPARENT)
, m_nShadowWidth(0)
, m_aShadowLocation(SVX_SHADOW_NONE)
, nActual(SW_LATIN)
{
}
@@ -592,6 +744,9 @@ SwFont::SwFont( const SwFont &rFont )
m_nBottomBorderDist = rFont.m_nBottomBorderDist;
m_nRightBorderDist = rFont.m_nRightBorderDist;
m_nLeftBorderDist = rFont.m_nLeftBorderDist;
m_aShadowColor = rFont.m_aShadowColor;
m_nShadowWidth = rFont.m_nShadowWidth;
m_aShadowLocation = rFont.m_aShadowLocation;
aUnderColor = rFont.GetUnderColor();
aOverColor = rFont.GetOverColor();
nToxCnt = 0;
@@ -727,7 +882,31 @@ SwFont::SwFont( const SwAttrSet* pAttrSet,
SetLeftBorderDist(pBoxItem->GetDistance(BOX_LINE_LEFT));
}
else
RemoveBorders();
{
SetTopBorder(0);
SetBottomBorder(0);
SetRightBorder(0);
SetLeftBorder(0);
SetTopBorderDist(0);
SetBottomBorderDist(0);
SetRightBorderDist(0);
SetLeftBorderDist(0);
}
if( SFX_ITEM_SET == pAttrSet->GetItemState( RES_CHRATR_SHADOW,
sal_True, &pItem ))
{
const SvxShadowItem* pShadowItem = static_cast<const SvxShadowItem*>(pItem);
SetShadowColor(pShadowItem->GetColor());
SetShadowWidth(pShadowItem->GetWidth());
SetShadowLocation(pShadowItem->GetLocation());
}
else
{
SetShadowColor(COL_TRANSPARENT);
SetShadowWidth(0);
SetShadowLocation(SVX_SHADOW_NONE);
}
const SvxTwoLinesItem& rTwoLinesItem = pAttrSet->Get2Lines();
if ( ! rTwoLinesItem.GetValue() )
@@ -776,6 +955,9 @@ SwFont& SwFont::operator=( const SwFont &rFont )
m_nBottomBorderDist = rFont.m_nBottomBorderDist;
m_nRightBorderDist = rFont.m_nRightBorderDist;
m_nLeftBorderDist = rFont.m_nLeftBorderDist;
m_aShadowColor = rFont.m_aShadowColor;
m_nShadowWidth = rFont.m_nShadowWidth;
m_aShadowLocation = rFont.m_aShadowLocation;
aUnderColor = rFont.GetUnderColor();
aOverColor = rFont.GetOverColor();
nToxCnt = 0;
diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx
index d9e56b2..c875dcc 100644
--- a/sw/source/core/unocore/unomap.cxx
+++ b/sw/source/core/unocore/unomap.cxx
@@ -213,6 +213,7 @@ SwUnoPropertyMapProvider::~SwUnoPropertyMapProvider()
{ SW_PROP_NMID(UNO_NAME_CHAR_RIGHT_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PropertyAttribute::MAYBEVOID, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },\
{ SW_PROP_NMID(UNO_NAME_CHAR_TOP_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PropertyAttribute::MAYBEVOID, TOP_BORDER_DISTANCE |CONVERT_TWIPS },\
{ SW_PROP_NMID(UNO_NAME_CHAR_BOTTOM_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PropertyAttribute::MAYBEVOID, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },\
{ SW_PROP_NMID(UNO_NAME_CHAR_SHADOW_FORMAT), RES_CHRATR_SHADOW, CPPU_E2T(CPPUTYPE_SHADOWFMT), PropertyAttribute::MAYBEVOID, CONVERT_TWIPS},\
{ SW_PROP_NMID(UNO_NAME_LEFT_BORDER), RES_BOX, CPPU_E2T(CPPUTYPE_BORDERLINE), PropertyAttribute::MAYBEVOID, LEFT_BORDER |CONVERT_TWIPS }, \
{ SW_PROP_NMID(UNO_NAME_RIGHT_BORDER), RES_BOX, CPPU_E2T(CPPUTYPE_BORDERLINE), PropertyAttribute::MAYBEVOID, RIGHT_BORDER |CONVERT_TWIPS }, \
{ SW_PROP_NMID(UNO_NAME_TOP_BORDER), RES_BOX, CPPU_E2T(CPPUTYPE_BORDERLINE), PropertyAttribute::MAYBEVOID, TOP_BORDER |CONVERT_TWIPS }, \
@@ -446,6 +447,7 @@ SwUnoPropertyMapProvider::~SwUnoPropertyMapProvider()
{ SW_PROP_NMID(UNO_NAME_CHAR_RIGHT_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32),PROPERTY_NONE, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },\
{ SW_PROP_NMID(UNO_NAME_CHAR_TOP_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PROPERTY_NONE, TOP_BORDER_DISTANCE |CONVERT_TWIPS },\
{ SW_PROP_NMID(UNO_NAME_CHAR_BOTTOM_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PROPERTY_NONE, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },\
{ SW_PROP_NMID(UNO_NAME_CHAR_SHADOW_FORMAT), RES_CHRATR_SHADOW, CPPU_E2T(CPPUTYPE_SHADOWFMT), PROPERTY_NONE, CONVERT_TWIPS},\
{ SW_PROP_NMID(UNO_NAME_LEFT_BORDER), RES_BOX, CPPU_E2T(CPPUTYPE_BORDERLINE), 0, LEFT_BORDER |CONVERT_TWIPS },\
{ SW_PROP_NMID(UNO_NAME_RIGHT_BORDER), RES_BOX, CPPU_E2T(CPPUTYPE_BORDERLINE), 0, RIGHT_BORDER |CONVERT_TWIPS },\
{ SW_PROP_NMID(UNO_NAME_TOP_BORDER), RES_BOX, CPPU_E2T(CPPUTYPE_BORDERLINE), 0, TOP_BORDER |CONVERT_TWIPS },\
@@ -601,6 +603,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s
{ SW_PROP_NMID(UNO_NAME_CHAR_RIGHT_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PROPERTY_NONE, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },
{ SW_PROP_NMID(UNO_NAME_CHAR_TOP_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PROPERTY_NONE, TOP_BORDER_DISTANCE |CONVERT_TWIPS },
{ SW_PROP_NMID(UNO_NAME_CHAR_BOTTOM_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PROPERTY_NONE, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },
{ SW_PROP_NMID(UNO_NAME_CHAR_SHADOW_FORMAT), RES_CHRATR_SHADOW, CPPU_E2T(CPPUTYPE_SHADOWFMT), PROPERTY_NONE, CONVERT_TWIPS},
{0,0,0,0,0,0}
};
aMapEntriesArr[nPropertyId] = aCharStyleMap;
@@ -659,6 +662,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s
{ SW_PROP_NMID(UNO_NAME_CHAR_RIGHT_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PROPERTY_NONE, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },
{ SW_PROP_NMID(UNO_NAME_CHAR_TOP_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PROPERTY_NONE, TOP_BORDER_DISTANCE |CONVERT_TWIPS },
{ SW_PROP_NMID(UNO_NAME_CHAR_BOTTOM_BORDER_DISTANCE), RES_CHRATR_BOX, CPPU_E2T(CPPUTYPE_INT32), PROPERTY_NONE, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },
{ SW_PROP_NMID(UNO_NAME_CHAR_SHADOW_FORMAT), RES_CHRATR_SHADOW, CPPU_E2T(CPPUTYPE_SHADOWFMT), PROPERTY_NONE, CONVERT_TWIPS},
{0,0,0,0,0,0}
};
aMapEntriesArr[nPropertyId] = aAutoCharStyleMap;
diff --git a/sw/source/core/unocore/unoprnms.cxx b/sw/source/core/unocore/unoprnms.cxx
index 39e691f..6dbbc4d 100644
--- a/sw/source/core/unocore/unoprnms.cxx
+++ b/sw/source/core/unocore/unoprnms.cxx
@@ -801,6 +801,7 @@ const SwPropNameTab aPropNameTab = {
/* 0769 UNO_NAME_CHAR_RIGHT_BORDER_DISTANCE */ {MAP_CHAR_LEN("CharRightBorderDistance")},
/* 0770 UNO_NAME_CHAR_TOP_BORDER_DISTANCE */ {MAP_CHAR_LEN("CharTopBorderDistance")},
/* 0771 UNO_NAME_CHAR_BOTTOM_BORDER_DISTANCE */ {MAP_CHAR_LEN("CharBottomBorderDistance")},
/* 0771 UNO_NAME_CHAR_SHADOW_FORMAT */ {MAP_CHAR_LEN("CharShadowFormat")},
// new items in this array must match enum SwPropNameIds
diff --git a/sw/source/core/unocore/unosrch.cxx b/sw/source/core/unocore/unosrch.cxx
index bc728f4..bacc481 100644
--- a/sw/source/core/unocore/unosrch.cxx
+++ b/sw/source/core/unocore/unosrch.cxx
@@ -169,7 +169,8 @@ void SwSearchProperties_Impl::FillItemSet(SfxItemSet& rSet, sal_Bool bIsValueSea
*pFontSizeCTLItem = 0,
*pCTLLangItem = 0,
*pCTLPostureItem = 0,
*pCTLWeightItem = 0;
*pCTLWeightItem = 0,
*pShadowItem = 0;
PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin();
for(sal_uInt32 i = 0; i < nArrLen; i++, ++aIt)
@@ -409,6 +410,11 @@ void SwSearchProperties_Impl::FillItemSet(SfxItemSet& rSet, sal_Bool bIsValueSea
pCTLWeightItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
pTempItem = pCTLWeightItem;
break;
case RES_CHRATR_SHADOW:
if(!pShadowItem )
pShadowItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
pTempItem = pShadowItem;
break;
}
if(pTempItem)
{
@@ -458,6 +464,7 @@ void SwSearchProperties_Impl::FillItemSet(SfxItemSet& rSet, sal_Bool bIsValueSea
delete pCharColorItem;
delete pCasemapItem ;
delete pBrushItem ;
delete pShadowItem;
}
sal_Bool SwSearchProperties_Impl::HasAttributes() const
diff --git a/sw/source/filter/html/css1atr.cxx b/sw/source/filter/html/css1atr.cxx
index f0f8fba..bd77d3c 100644
--- a/sw/source/filter/html/css1atr.cxx
+++ b/sw/source/filter/html/css1atr.cxx
@@ -3640,6 +3640,10 @@ SwAttrFnTab aCSS1AttrFnTab = {
/* RES_CHRATR_OVERLINE */ OutCSS1_SvxOverline,
/* RES_CHRATR_RSID */ 0,
/* RES_CHRATR_BOX */ 0,
/* RES_CHRATR_SHADOW */ 0,
/* RES_CHRATR_DUMMY1 */ 0,
/* RES_CHRATR_DUMMY2 */ 0,
/* RES_CHRATR_DUMMY3 */ 0,
/* RES_TXTATR_REFMARK */ 0,
/* RES_TXTATR_TOXMARK */ 0,
diff --git a/sw/source/filter/html/htmlatr.cxx b/sw/source/filter/html/htmlatr.cxx
index 5ae4128..f2b7615 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -3228,6 +3228,10 @@ SwAttrFnTab aHTMLAttrFnTab = {
/* RES_CHRATR_OVERLINE */ OutHTML_CSS1Attr,
/* RES_CHRATR_RSID */ 0,
/* RES_CHRATR_BOX */ 0,
/* RES_CHRATR_SHADOW */ 0,
/* RES_CHRATR_DUMMY1 */ 0,
/* RES_CHRATR_DUMMY2 */ 0,
/* RES_CHRATR_DUMMY3 */ 0,
/* RES_TXTATR_REFMARK */ 0,
/* RES_TXTATR_TOXMARK */ 0,
diff --git a/sw/source/ui/shells/textsh1.cxx b/sw/source/ui/shells/textsh1.cxx
index 52ada49..490f0e9 100644
--- a/sw/source/ui/shells/textsh1.cxx
+++ b/sw/source/ui/shells/textsh1.cxx
@@ -140,6 +140,7 @@ void sw_CharDialog( SwWrtShell &rWrtSh, bool bUseDialog, sal_uInt16 nSlot,const
RES_TXTATR_INETFMT, RES_TXTATR_INETFMT,
RES_BACKGROUND, RES_BACKGROUND,
RES_BOX, RES_BOX,
RES_SHADOW, RES_SHADOW,
SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
FN_PARAM_SELECTION, FN_PARAM_SELECTION,
SID_HTML_MODE, SID_HTML_MODE,
diff --git a/sw/source/ui/utlui/uitool.cxx b/sw/source/ui/utlui/uitool.cxx
index 862a954..455e738c 100644
--- a/sw/source/ui/utlui/uitool.cxx
+++ b/sw/source/ui/utlui/uitool.cxx
@@ -32,6 +32,7 @@
#include <editeng/pmdlitem.hxx>
#include <editeng/tstpitem.hxx>
#include <editeng/boxitem.hxx>
#include <editeng/shaditem.hxx>
#include <editeng/sizeitem.hxx>
#include <editeng/brushitem.hxx>
#include <svx/pageitem.hxx>
@@ -133,18 +134,28 @@ void ConvertAttrCharToGen(SfxItemSet& rSet, sal_uInt8 nMode)
rSet.ClearItem(RES_BACKGROUND);
}
// Border
if( nMode == CONV_ATTR_STD )
{
const SfxPoolItem *pTmpBox;
if( SFX_ITEM_SET == rSet.GetItemState( RES_CHRATR_BOX, sal_True, &pTmpBox ) )
// Border
const SfxPoolItem *pTmpItem;
if( SFX_ITEM_SET == rSet.GetItemState( RES_CHRATR_BOX, sal_True, &pTmpItem ) )
{
SvxBoxItem aTmpBox( *((SvxBoxItem*)pTmpBox) );
SvxBoxItem aTmpBox( *((SvxBoxItem*)pTmpItem) );
aTmpBox.SetWhich( RES_BOX );
rSet.Put( aTmpBox );
}
else
rSet.ClearItem(RES_BOX);
// Border shadow
if( SFX_ITEM_SET == rSet.GetItemState( RES_CHRATR_SHADOW, sal_False, &pTmpItem ) )
{
SvxShadowItem aTmpShadow( *((SvxShadowItem*)pTmpItem) );
aTmpShadow.SetWhich( RES_SHADOW );
rSet.Put( aTmpShadow );
}
else
rSet.ClearItem( RES_SHADOW );
}
}
@@ -162,17 +173,26 @@ void ConvertAttrGenToChar(SfxItemSet& rSet, sal_uInt8 nMode)
rSet.ClearItem( RES_BACKGROUND );
}
// Border
if( nMode == CONV_ATTR_STD )
{
const SfxPoolItem *pTmpBox;
if( SFX_ITEM_SET == rSet.GetItemState( RES_BOX, sal_False, &pTmpBox ) )
// Border
const SfxPoolItem *pTmpItem;
if( SFX_ITEM_SET == rSet.GetItemState( RES_BOX, sal_False, &pTmpItem ) )
{
SvxBoxItem aTmpBox( *((SvxBoxItem*)pTmpBox) );
SvxBoxItem aTmpBox( *((SvxBoxItem*)pTmpItem) );
aTmpBox.SetWhich( RES_CHRATR_BOX );
rSet.Put( aTmpBox );
}
rSet.ClearItem( RES_BOX );
// Border shadow
if( SFX_ITEM_SET == rSet.GetItemState( RES_SHADOW, sal_False, &pTmpItem ) )
{
SvxShadowItem aTmpShadow( *((SvxShadowItem*)pTmpItem) );
aTmpShadow.SetWhich( RES_CHRATR_SHADOW );
rSet.Put( aTmpShadow );
}
rSet.ClearItem( RES_SHADOW );
}
}
diff --git a/xmloff/source/text/txtprmap.cxx b/xmloff/source/text/txtprmap.cxx
index 64430ee..00be1ae 100644
--- a/xmloff/source/text/txtprmap.cxx
+++ b/xmloff/source/text/txtprmap.cxx
@@ -238,6 +238,8 @@ XMLPropertyMapEntry aXMLParaPropMap[] =
MT_EV( "CharRightBorder", FO, BORDER_RIGHT, XML_TYPE_BORDER, CTF_CHARRIGHTBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharTopBorder", FO, BORDER_TOP, XML_TYPE_BORDER, CTF_CHARTOPBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharBottomBorder", FO, BORDER_BOTTOM, XML_TYPE_BORDER, CTF_CHARBOTTOMBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
// RES_CHRATR_SHADOW
MT_EV( "CharShadowFormat", STYLE, SHADOW, XML_TYPE_TEXT_SHADOW, 0, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
// RES_TXTATR_INETFMT
// TODO
// RES_TXTATR_REFMARK
@@ -562,6 +564,8 @@ XMLPropertyMapEntry aXMLTextPropMap[] =
MT_EV( "CharRightBorder", FO, BORDER_RIGHT, XML_TYPE_BORDER, CTF_CHARRIGHTBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharTopBorder", FO, BORDER_TOP, XML_TYPE_BORDER, CTF_CHARTOPBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
MT_EV( "CharBottomBorder", FO, BORDER_BOTTOM, XML_TYPE_BORDER, CTF_CHARBOTTOMBORDER, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
// RES_CHRATR_SHADOW
MT_EV( "CharShadowFormat", STYLE, SHADOW, XML_TYPE_TEXT_SHADOW, 0, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
// RES_TXTATR_INETFMT
MT_E( "HyperLinkURL", TEXT, XMLNS, XML_TYPE_STRING|MID_FLAG_NO_PROPERTY_IMPORT, CTF_HYPERLINK_URL ),
// RES_TXTATR_REFMARK