/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "AreaTransparencyGradientControl.hxx" #include "AreaPropertyPanel.hxx" #include "AreaPropertyPanel.hrc" #include #include #include #include #include #include namespace svx { namespace sidebar { // positioning helpers #define APOS1_1 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL), MAP_APPFONT)) #define APOS2_1 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL), MAP_APPFONT)) #define APOS1_2 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL), MAP_APPFONT)) #define APOS2_2 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL), MAP_APPFONT)) #define APOS1_3 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL), MAP_APPFONT)) #define APOS1_4 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL), MAP_APPFONT)) #define APOS2_3 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL), MAP_APPFONT)) #define APOS2_4 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL), MAP_APPFONT)) #define APOS1_5 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) #define APOS1_6 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 3*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+2*(MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) #define APOS2_5 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) #define APOS2_6 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 3*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+2*(MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) #define APOS1_7 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 3*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) #define APOS1_8 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 4*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+3*(MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) #define APOS_Left_Right_1 Point(LogicToPixel(Point(LEFT_RIGHT_X1,LEFT_RIGHT_Y1), MAP_APPFONT)) #define APOS_Left_Right_2 Point(LogicToPixel(Point(LEFT_RIGHT_X2,LEFT_RIGHT_Y1), MAP_APPFONT)) #define APOS_Left_Right_3 Point(LogicToPixel(Point(LEFT_RIGHT_X1,LEFT_RIGHT_Y2), MAP_APPFONT)) #define APOS_Left_Right_4 Point(LogicToPixel(Point(LEFT_RIGHT_X2,LEFT_RIGHT_Y2), MAP_APPFONT)) AreaTransparencyGradientControl::AreaTransparencyGradientControl ( Window* pParent, AreaPropertyPanel& rPanel) : PopupControl( pParent,SVX_RES(RID_POPUPPANEL_AREAPAGE_TRGR)), maFtTrgrCenterX(this, SVX_RES(FT_TRGR_CENTER_X)), maMtrTrgrCenterX(this, SVX_RES(MTR_TRGR_CENTER_X)), maFtTrgrCenterY(this, SVX_RES(FT_TRGR_CENTER_Y)), maMtrTrgrCenterY(this, SVX_RES(MTR_TRGR_CENTER_Y)), maFtTrgrAngle(this, SVX_RES(FT_TRGR_ANGLE)), maMtrTrgrAngle(this, SVX_RES(MTR_TRGR_ANGLE)), maBtnLeft45(this, SVX_RES(BTN_LEFT_SECOND)), maBtnRight45(this, SVX_RES(BTN_RIGHT_FIRST)), maFtTrgrStartValue(this, SVX_RES(FT_TRGR_START_VALUE)), maMtrTrgrStartValue(this, SVX_RES(MTR_TRGR_START_VALUE)), maFtTrgrEndValue(this, SVX_RES(FT_TRGR_END_VALUE)), maMtrTrgrEndValue(this, SVX_RES(MTR_TRGR_END_VALUE)), maFtTrgrBorder(this, SVX_RES(FT_TRGR_BORDER)), maMtrTrgrBorder(this, SVX_RES(MTR_TRGR_BORDER)), maRotLeft( SVX_RES(IMG_ROT_LEFT)), maRotRight( SVX_RES(IMG_ROT_RIGHT)), mrAreaPropertyPanel(rPanel), mpBindings(NULL) { Link aLink = LINK( this, AreaTransparencyGradientControl, ModifiedTrgrHdl_Impl); maMtrTrgrCenterX.SetModifyHdl( aLink ); maMtrTrgrCenterY.SetModifyHdl( aLink ); maMtrTrgrAngle.SetModifyHdl( aLink ); maMtrTrgrBorder.SetModifyHdl( aLink ); maMtrTrgrStartValue.SetModifyHdl( aLink ); maMtrTrgrEndValue.SetModifyHdl( aLink ); aLink = LINK( this, AreaTransparencyGradientControl, Left_Click45_Impl); maBtnLeft45.SetSelectHdl( aLink ); aLink = LINK( this, AreaTransparencyGradientControl, Right_Click45_Impl); maBtnRight45.SetSelectHdl( aLink ); maBtnLeft45.SetItemImage(1,maRotLeft); Size aTbxSize = maBtnLeft45.CalcWindowSizePixel(); maBtnLeft45.SetOutputSizePixel( aTbxSize ); maBtnLeft45.SetQuickHelpText(1, String(SVX_RES(STR_HELP_LEFT))); //acc wj maBtnRight45.SetItemImage(1,maRotRight); aTbxSize = maBtnRight45.CalcWindowSizePixel(); maBtnRight45.SetOutputSizePixel( aTbxSize ); maBtnRight45.SetQuickHelpText(1, String(SVX_RES(STR_HELP_RIGHT))); //acc wj maBtnLeft45.SetBackground(Wallpaper()); maBtnLeft45.SetPaintTransparent(true); maBtnRight45.SetBackground(Wallpaper()); maBtnRight45.SetPaintTransparent(true); FreeResource(); mpBindings = mrAreaPropertyPanel.GetBindings(); } AreaTransparencyGradientControl::~AreaTransparencyGradientControl (void) { } void AreaTransparencyGradientControl::ToGetFocus() { if(maMtrTrgrCenterX.IsVisible()) maMtrTrgrCenterX.GrabFocus(); else maMtrTrgrAngle.GrabFocus(); } void AreaTransparencyGradientControl::Rearrange(XFillFloatTransparenceItem* pGradientItem) { InitStatus(pGradientItem); const XGradient& rGradient = pGradientItem->GetGradientValue(); XGradientStyle eXGS(rGradient.GetGradientStyle()); Size aSize(POP_WIDTH,POP_HEIGHT); aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); Size aSize2(POP_WIDTH,POP_HEIGHT2); aSize2 = LogicToPixel( aSize2, MapMode(MAP_APPFONT) ); long aPosY = 0; Point aPointAngle; Size aSizeAngle = maMtrTrgrAngle.GetSizePixel(); Size aTbxSize = maBtnLeft45.CalcWindowSizePixel(); switch(eXGS) { case XGRAD_LINEAR: case XGRAD_AXIAL: maFtTrgrCenterX.Hide(); maMtrTrgrCenterX.Hide(); maFtTrgrCenterY.Hide(); maMtrTrgrCenterY.Hide(); maFtTrgrAngle.Show(); maFtTrgrAngle.SetPosPixel(APOS1_1); maMtrTrgrAngle.Show(); maMtrTrgrAngle.SetPosPixel(APOS2_1); maFtTrgrStartValue.SetPosPixel(APOS1_3); maMtrTrgrStartValue.SetPosPixel(APOS1_4); maFtTrgrEndValue.SetPosPixel(APOS2_3); maMtrTrgrEndValue.SetPosPixel(APOS2_4); maFtTrgrBorder.SetPosPixel(APOS1_5); maMtrTrgrBorder.SetPosPixel(APOS1_6); maBtnLeft45.Show(); maBtnRight45.Show(); aPointAngle = maMtrTrgrAngle.GetPosPixel(); aPosY = aPointAngle.getY() + aSizeAngle.getHeight() - aTbxSize.getHeight(); maBtnLeft45.SetPosPixel(Point(APOS_Left_Right_1.getX(), aPosY)); maBtnRight45.SetPosPixel(Point(APOS_Left_Right_2.getX(), aPosY)); SetSizePixel(aSize2); break; case XGRAD_RADIAL: maFtTrgrCenterX.Show(); maFtTrgrCenterX.SetPosPixel(APOS1_1); maMtrTrgrCenterX.Show(); maMtrTrgrCenterX.SetPosPixel(APOS2_1); maFtTrgrCenterY.Show(); maFtTrgrCenterY.SetPosPixel(APOS1_2); maMtrTrgrCenterY.Show(); maMtrTrgrCenterY.SetPosPixel(APOS2_2); maFtTrgrAngle.Hide(); maMtrTrgrAngle.Hide(); maFtTrgrStartValue.SetPosPixel(APOS1_3); maMtrTrgrStartValue.SetPosPixel(APOS1_4); maFtTrgrEndValue.SetPosPixel(APOS2_3); maMtrTrgrEndValue.SetPosPixel(APOS2_4); maFtTrgrBorder.SetPosPixel(APOS1_5); maMtrTrgrBorder.SetPosPixel(APOS1_6); maBtnLeft45.Hide(); maBtnRight45.Hide(); SetSizePixel(aSize2); break; case XGRAD_ELLIPTICAL: case XGRAD_SQUARE: case XGRAD_RECT: maFtTrgrCenterX.Show(); maFtTrgrCenterX.SetPosPixel(APOS1_1); maMtrTrgrCenterX.Show(); maMtrTrgrCenterX.SetPosPixel(APOS2_1); maFtTrgrCenterY.Show(); maFtTrgrCenterY.SetPosPixel(APOS1_2); maMtrTrgrCenterY.Show(); maMtrTrgrCenterY.SetPosPixel(APOS2_2); maFtTrgrAngle.Show(); maFtTrgrAngle.SetPosPixel(APOS1_3); maMtrTrgrAngle.Show(); maMtrTrgrAngle.SetPosPixel(APOS1_4); maFtTrgrStartValue.SetPosPixel(APOS1_5); maMtrTrgrStartValue.SetPosPixel(APOS1_6); maFtTrgrEndValue.SetPosPixel(APOS2_5); maMtrTrgrEndValue.SetPosPixel(APOS2_6); maFtTrgrBorder.SetPosPixel(APOS1_7); maMtrTrgrBorder.SetPosPixel(APOS1_8); maBtnLeft45.Show(); maBtnRight45.Show(); aPointAngle = maMtrTrgrAngle.GetPosPixel(); aPosY = aPointAngle.getY() + aSizeAngle.getHeight() - aTbxSize.getHeight(); maBtnLeft45.SetPosPixel(Point(APOS_Left_Right_3.getX(), aPosY)); maBtnRight45.SetPosPixel(Point(APOS_Left_Right_4.getX(), aPosY)); SetSizePixel(aSize); break; } } void AreaTransparencyGradientControl::InitStatus(XFillFloatTransparenceItem* pGradientItem) { const XGradient& rGradient = pGradientItem->GetGradientValue(); XGradient aGradient; if (rGradient.GetXOffset() == AreaPropertyPanel::DEFAULT_CENTERX && rGradient.GetYOffset() == AreaPropertyPanel::DEFAULT_CENTERY && (rGradient.GetAngle() / 10) == AreaPropertyPanel::DEFAULT_ANGLE && ((sal_uInt16)((((sal_uInt16)rGradient.GetStartColor().GetRed() + 1) * 100) / 255)) == AreaPropertyPanel::DEFAULT_STARTVALUE && ((sal_uInt16)((((sal_uInt16)rGradient.GetEndColor().GetRed() + 1) * 100) / 255)) == AreaPropertyPanel::DEFAULT_ENDVALUE && rGradient.GetBorder() == AreaPropertyPanel::DEFAULT_BORDER) { aGradient = mrAreaPropertyPanel.GetGradient(rGradient.GetGradientStyle()); } else { aGradient = rGradient; } maMtrTrgrCenterX.SetValue(aGradient.GetXOffset()); maMtrTrgrCenterY.SetValue(aGradient.GetYOffset()); maMtrTrgrAngle.SetValue(aGradient.GetAngle() / 10); maMtrTrgrStartValue.SetValue((sal_uInt16)((((sal_uInt16)aGradient.GetStartColor().GetRed() + 1) * 100) / 255)); maMtrTrgrEndValue.SetValue((sal_uInt16)((((sal_uInt16)aGradient.GetEndColor().GetRed() + 1) * 100) / 255)); maMtrTrgrBorder.SetValue(aGradient.GetBorder()); } void AreaTransparencyGradientControl::ExecuteValueModify( sal_uInt8 nStartCol, sal_uInt8 nEndCol ) { //Added sal_Int16 aMtrValue = (sal_Int16)maMtrTrgrAngle.GetValue(); while(aMtrValue<0) aMtrValue += 360; sal_uInt16 nVal = aMtrValue/360; nVal = aMtrValue - nVal*360; maMtrTrgrAngle.SetValue(nVal); //End of new code XGradient aTmpGradient( Color(nStartCol, nStartCol, nStartCol), Color(nEndCol, nEndCol, nEndCol), (XGradientStyle)(mrAreaPropertyPanel.GetSelectedTransparencyTypeIndex()-2), (sal_uInt16)maMtrTrgrAngle.GetValue() * 10, (sal_uInt16)maMtrTrgrCenterX.GetValue(), (sal_uInt16)maMtrTrgrCenterY.GetValue(), (sal_uInt16)maMtrTrgrBorder.GetValue(), 100, 100); mrAreaPropertyPanel.SetGradient(aTmpGradient); SfxItemPool* pPool = NULL; bool bEnable = true; XFillFloatTransparenceItem aGradientItem(pPool,aTmpGradient, bEnable ); mpBindings->GetDispatcher()->Execute( SID_ATTR_FILL_FLOATTRANSPARENCE, SFX_CALLMODE_RECORD, &aGradientItem, 0L ); } IMPL_LINK(AreaTransparencyGradientControl, ModifiedTrgrHdl_Impl, void *, /* pControl */) { sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrStartValue.GetValue() * 255) / 100); sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrEndValue.GetValue() * 255) / 100); ExecuteValueModify( nStartCol, nEndCol ); return( 0L ); } IMPL_LINK(AreaTransparencyGradientControl, Left_Click45_Impl, void *, /* pControl */) { sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrStartValue.GetValue() * 255) / 100); sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrEndValue.GetValue() * 255) / 100); sal_uInt16 aTemp = (sal_uInt16)maMtrTrgrAngle.GetValue(); if(aTemp>=315) aTemp -= 360; aTemp += 45; maMtrTrgrAngle.SetValue(aTemp); ExecuteValueModify( nStartCol, nEndCol ); return( 0L ); } IMPL_LINK(AreaTransparencyGradientControl, Right_Click45_Impl, void *, /* pControl */) { sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrStartValue.GetValue() * 255) / 100); sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrEndValue.GetValue() * 255) / 100); sal_uInt16 aTemp = (sal_uInt16)maMtrTrgrAngle.GetValue(); if(aTemp<45) aTemp += 360; aTemp -= 45; maMtrTrgrAngle.SetValue(aTemp); ExecuteValueModify( nStartCol, nEndCol ); return( 0L ); } } } // end of namespace svx::sidebar // eof