css怎么添加一條屬性能夠繪制一個(gè)矩形框

這篇文章主要介紹“css怎么添加一條屬性能夠繪制一個(gè)矩形框”,在日常操作中,相信很多人在css怎么添加一條屬性能夠繪制一個(gè)矩形框問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”css怎么添加一條屬性能夠繪制一個(gè)矩形框”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供濟(jì)陽網(wǎng)站建設(shè)、濟(jì)陽做網(wǎng)站、濟(jì)陽網(wǎng)站設(shè)計(jì)、濟(jì)陽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、濟(jì)陽企業(yè)網(wǎng)站模板建站服務(wù),十載濟(jì)陽做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

添加一條屬性,它能夠繪制一個(gè)矩形框。它可以指定矩形邊的顏色,邊的寬度,邊的樣式,以及矩形區(qū)域。如:
picl:blue solid 2px rect(100px 300px 300px 100px);
picl為屬性名稱,blue為邊的顏色,solid為邊 的樣式,2px為邊的寬度,rect(100px 300px 200px 50px)為矩形區(qū)域。

步驟:

(1).通過在 css/CSSPropertyNames.in文件中增加一個(gè)屬性名的關(guān)鍵字;
(2).使用perl命令(#perl makeprop.pl),生成對(duì)應(yīng)的.cpp和.h文件,這兩個(gè)文件包含了屬性名和屬性ID,以及屬性名的查找規(guī)則;
(3).將(2)中生成 的兩個(gè)文件拷貝到generated/ 目錄下;
(4).在CSSStyleSelector.cpp, CSSParser.cpp兩個(gè)文件中提供了屬性ID對(duì)應(yīng)的接口:(中間一些具體處理不詳細(xì)闡述,這里只說明總體步驟)

a.在 CSSParser.cpp中的“bool CSSParser::parseValue(int propId, bool important)”函數(shù)中增加“case CSSPropertyPicl: ”以及對(duì)應(yīng)的處理代碼,它是網(wǎng)頁上css樣式中我們自定義屬性“picl”的解析的入口;
說明:以此函數(shù)為起點(diǎn),將picl中各種值進(jìn)行解析,判 斷值是否合法。如果合法,將其進(jìn)行保存,保存后會(huì)更新css樣式。我們所關(guān)心的是如何取出picl屬性的各個(gè)值,以及怎樣進(jìn)行保存,我們不必去修改與樣式 更新有關(guān)的代碼,當(dāng)解析完后,瀏覽器會(huì)更新css樣式,丟棄無效的樣式,只保留合法(有效)的樣式。由于picl屬性是復(fù)合屬性,添加本條屬性只需調(diào)用這 個(gè)文件中的“bool CSSParser::parseShorthand(int propId, const int *properties, int numProperties, bool important)”函數(shù),它就會(huì)完成它里面對(duì)應(yīng)的各種單一屬性的解析。
b.如果屬性是單一 屬性,必須在CSSStyleSelector.cpp中的“void CSSStyleSelector::applyProperty(int id, CSSValue *value)”函數(shù)中添加對(duì)應(yīng)的case語句,它是css樣式執(zhí)行的入口。由于我們添加的屬性是一條復(fù)合屬性,它在執(zhí)行時(shí)會(huì)通過它里面的單一屬性進(jìn)行執(zhí) 行。因此,在CSSStyleSelector.cpp中的“void CSSStyleSelector::applyProperty(int id, CSSValue *value)”函數(shù)中不必添加本條屬性對(duì)應(yīng)的case語句。
說明:我借助了border屬性的方法來保存“邊的顏 色,邊的寬度,邊的樣式”,我們主要需要做的是對(duì)矩形值的處理,以及設(shè)置一個(gè)執(zhí)行我們的“picl”屬性的標(biāo)志。我添加了一個(gè)單一屬性:hic,它主要保 存矩形的四個(gè)值。在CSSStyleSelector.cpp中,“邊的顏色,邊的寬度,邊的樣式”這三個(gè)值由類似border屬性處理方式進(jìn)行了傳遞, 矩形的值通過“ case CSSPropertyHic: ”來傳遞,當(dāng)“picl”屬性的標(biāo)志被激活時(shí),則取出picl屬性的各個(gè)值,做如下處理:
paintInfo.context->setStrokeColor(); 設(shè)置邊的顏色;
paintInfo.context->setStrokeThickness(); 設(shè)置邊的寬度;
paintInfo.context->setStrokeStyle(); 設(shè)置邊邊的樣式;
paintInfo.context->drawLine() 畫矩形的一條邊,需要畫四次。

修改的文件:
(1).webkit/WebCore/css/CSSPropertyNames.in 中,在文件末尾增加如下兩行:
hic;
picl;
(2).webkit/WebCore/css/CSSParser.cpp 中,CSSParser::parseValue()函數(shù)中增加“case CSSPropertyPicl: ”以及對(duì)應(yīng)的處理代碼。如下:
case CSSPropertyPicl: {
const int properties4 = { CSSPropertyBorderWidth, CSSPropertyBorderStyle,
CSSPropertyBorderColor, CSSPropertyHic};
return parseShorthand(propId, properties, 4, important);
}

(3).webkit/WebCore /css/CSSStyleSelector.cpp中,CSSStyleSelector::applyProperty()函數(shù)中添加對(duì)應(yīng)的 “case CSSPropertyHic: ”,這里取出矩形的四條邊的值,并傳送到下面。
(4).webkit/WebCore /rendering/RenderObject.h中添加hasHic(),getHicRect()兩個(gè)函數(shù)的定義。
(5).webkit/WebCore /rendering/style/RenderStyle.h中添加如下幾個(gè)函數(shù):
Length hicLeft() const { return visual->hic.left(); }
Length hicRight() const { return visual->hic.right(); }
Length hicTop() const { return visual->hic.top(); }
Length hicBottom() const { return visual->hic.bottom(); }
LengthBox hic() const { return visual->hic; }
bool hasHic() const { return visual->hasHic; }
void setHasHic(bool b =true) { SET_VAR(visual, hasHic, b) }
void setHic(Length top, Length right, Length bottom, Length left);
(6).webkit/WebCore /rendering/style/RenderStyle.cpp中添加setHic()函數(shù)的實(shí)現(xiàn);
(7).webkit/WebCore /rendering/style/StyleVisualData.h中添加:
LengthBox hic;
bool hasHic : 1; //hasHic
(8).webkit/WebCore/rendering/RendBox.h中添加:
virtual IntRect getHicRect(int tx, int ty);
(9).webkit/WebCore/rendering /RendBox.cpp中,RenderBox::paintBoxDecorations()函數(shù)中添加畫矩形的實(shí)現(xiàn),以及getHicRect() 函數(shù)的實(shí)現(xiàn)

到此,關(guān)于“css怎么添加一條屬性能夠繪制一個(gè)矩形框”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

網(wǎng)頁標(biāo)題:css怎么添加一條屬性能夠繪制一個(gè)矩形框
文章網(wǎng)址:http://bm7419.com/article2/jjssoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、關(guān)鍵詞優(yōu)化動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)、靜態(tài)網(wǎng)站、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)