summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2016-12-09 23:27:54 +0100
committerTomaž Vajngerl <quikee@gmail.com>2016-12-14 22:27:18 +0000
commita90dec7c429c76a44ee165df8b2ffdf867cf0b6c (patch)
tree0730d7fe854cffae4d4787cf98f7731a073992c2 /svx
parentee0461902fe7ffa23351f5359ae9a3dc8c0bcf0a (diff)
split markers for galaxy theme, when scaling use splitted markers
For markers (resize markers, anchors,...) we contain them all in one image atlas. This was generally done because of resource limitiations in Windows 95/98 which aren't a problem anymore in present systems. This is however problematic in HiDPI as we scale the image and the coordinates of aren't correct anymore. Another problem is that it uses its own cache instead of common cache in ImplImageTree. So this commit extracts all the markers into its own images for galaxy theme and uses them when we scale. In the future when we extracted all the markers to its own images for all icon themes we can remvoe the old code with the image atlas. Change-Id: Ibee181b529d30e20050df8cd396d338bd53532c0 (cherry picked from commit 681c2c3f59863d1f2d0123a92ee63baf84e18dfc) Reviewed-on: https://gerrit.libreoffice.org/31960 Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/svdraw/svdhdl.cxx129
-rw-r--r--svx/source/svdraw/svdstr.src95
2 files changed, 219 insertions, 5 deletions
diff --git a/svx/source/svdraw/svdhdl.cxx b/svx/source/svdraw/svdhdl.cxx
index 7115bba0355c..06c198280eb9 100644
--- a/svx/source/svdraw/svdhdl.cxx
+++ b/svx/source/svdraw/svdhdl.cxx
@@ -57,6 +57,7 @@
#include <vcl/svapp.hxx>
#include <svx/sdr/overlay/overlaypolypolygon.hxx>
#include <vcl/lazydelete.hxx>
+#include <vcl/BitmapTools.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
@@ -68,6 +69,7 @@
#include <memory>
+
// #i15222#
// Due to the resource problems in Win95/98 with bitmap resources I
// will change this handle bitmap providing class. Old version was splitting
@@ -673,12 +675,124 @@ BitmapMarkerKind SdrHdl::GetNextBigger(BitmapMarkerKind eKnd)
return eRetval;
}
-BitmapEx SdrHdl::ImpGetBitmapEx( BitmapMarkerKind eKindOfMarker, sal_uInt16 nInd)
+namespace
+{
+
+OUString appendMarkerName(BitmapMarkerKind eKindOfMarker)
{
+ switch(eKindOfMarker)
+ {
+ case BitmapMarkerKind::Rect_7x7:
+ return "rect7";
+ case BitmapMarkerKind::Rect_9x9:
+ return "rect9";
+ case BitmapMarkerKind::Rect_11x11:
+ return "rect11";
+ case BitmapMarkerKind::Rect_13x13:
+ return "rect13";
+ case BitmapMarkerKind::Circ_7x7:
+ case BitmapMarkerKind::Customshape_7x7:
+ return "circ7";
+ case BitmapMarkerKind::Circ_9x9:
+ case BitmapMarkerKind::Customshape_9x9:
+ return "circ9";
+ case BitmapMarkerKind::Circ_11x11:
+ case BitmapMarkerKind::Customshape_11x11:
+ return "circ11";
+ case BitmapMarkerKind::Elli_7x9:
+ return "elli7x9";
+ case BitmapMarkerKind::Elli_9x11:
+ return "elli9x11";
+ case BitmapMarkerKind::Elli_9x7:
+ return "elli9x7";
+ case BitmapMarkerKind::Elli_11x9:
+ return "elli11x9";
+ case BitmapMarkerKind::RectPlus_7x7:
+ return "rectplus7";
+ case BitmapMarkerKind::RectPlus_9x9:
+ return "rectplus9";
+ case BitmapMarkerKind::RectPlus_11x11:
+ return "rectplus11";
+ case BitmapMarkerKind::Crosshair:
+ return "cross";
+ case BitmapMarkerKind::Anchor:
+ case BitmapMarkerKind::AnchorTR:
+ return "anchor";
+ case BitmapMarkerKind::AnchorPressed:
+ case BitmapMarkerKind::AnchorPressedTR:
+ return "anchor-pressed";
+ case BitmapMarkerKind::Glue:
+ return "glue-selected";
+ case BitmapMarkerKind::Glue_Deselected:
+ return "glue-unselected";
+ default:
+ break;
+ }
+ return "";
+}
+
+OUString appendMarkerColor(BitmapColorIndex eIndex)
+{
+ switch(eIndex)
+ {
+ case BitmapColorIndex::LightGreen:
+ return "1";
+ case BitmapColorIndex::Cyan:
+ return "2";
+ case BitmapColorIndex::LightCyan:
+ return "3";
+ case BitmapColorIndex::Red:
+ return "4";
+ case BitmapColorIndex::LightRed:
+ return "5";
+ case BitmapColorIndex::Yellow:
+ return "6";
+ default:
+ break;
+ }
+ return "";
+}
+
+BitmapEx ImpGetBitmapEx(BitmapMarkerKind eKindOfMarker, BitmapColorIndex eIndex)
+{
+ // use this code path only when we use HiDPI (for now)
+ if (Application::GetDefaultDevice()->GetDPIScalePercentage() > 100)
+ {
+ OUString sMarkerPrefix("svx/res/marker-");
+
+ OUString sMarkerName = appendMarkerName(eKindOfMarker);
+ if (!sMarkerName.isEmpty())
+ {
+ BitmapEx aBitmapEx;
+
+ if (eKindOfMarker == BitmapMarkerKind::Crosshair
+ || eKindOfMarker == BitmapMarkerKind::Anchor
+ || eKindOfMarker == BitmapMarkerKind::AnchorTR
+ || eKindOfMarker == BitmapMarkerKind::AnchorPressed
+ || eKindOfMarker == BitmapMarkerKind::AnchorPressedTR
+ || eKindOfMarker == BitmapMarkerKind::Glue
+ || eKindOfMarker == BitmapMarkerKind::Glue_Deselected)
+ {
+ aBitmapEx = vcl::bitmap::loadFromName(sMarkerPrefix + sMarkerName + ".png");
+ }
+ else
+ {
+ aBitmapEx = vcl::bitmap::loadFromName(sMarkerPrefix + sMarkerName + "-" + appendMarkerColor(eIndex) + ".png");
+ }
+
+ if (!aBitmapEx.IsEmpty())
+ return aBitmapEx;
+ }
+ }
+
+ // if we can't load the marker..
+
static vcl::DeleteOnDeinit< SdrHdlBitmapSet > aModernSet(new SdrHdlBitmapSet);
- return aModernSet.get()->GetBitmapEx(eKindOfMarker, nInd);
+ return aModernSet.get()->GetBitmapEx(eKindOfMarker, sal_uInt16(eIndex));
}
+} // end anonymous namespace
+
sdr::overlay::OverlayObject* SdrHdl::CreateOverlayObject(
const basegfx::B2DPoint& rPos,
BitmapColorIndex eColIndex, BitmapMarkerKind eKindOfMarker, OutputDevice& /*rOutDev*/, Point aMoveOutsideOffset)
@@ -752,8 +866,8 @@ sdr::overlay::OverlayObject* SdrHdl::CreateOverlayObject(
}
// create animated handle
- BitmapEx aBmpEx1 = ImpGetBitmapEx( eKindOfMarker, (sal_uInt16)eColIndex );
- BitmapEx aBmpEx2 = ImpGetBitmapEx( eNextBigger, (sal_uInt16)eColIndex );
+ BitmapEx aBmpEx1 = ImpGetBitmapEx(eKindOfMarker, eColIndex);
+ BitmapEx aBmpEx2 = ImpGetBitmapEx(eNextBigger, eColIndex);
// #i53216# Use system cursor blink time. Use the unsigned value.
const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
@@ -784,7 +898,7 @@ sdr::overlay::OverlayObject* SdrHdl::CreateOverlayObject(
else
{
// create normal handle: use ImpGetBitmapEx(...) now
- BitmapEx aBmpEx = ImpGetBitmapEx(eKindOfMarker, (sal_uInt16)eColIndex);
+ BitmapEx aBmpEx = ImpGetBitmapEx(eKindOfMarker, eColIndex);
// When the image with handles is not found, the bitmap returned is
// empty. This is a problem when we use LibreOffice as a library
@@ -971,6 +1085,11 @@ void SdrHdl::onMouseLeave()
{
}
+BitmapEx SdrHdl::createGluePointBitmap()
+{
+ return ImpGetBitmapEx(BitmapMarkerKind::Glue_Deselected, BitmapColorIndex::LightGreen);
+}
+
SdrHdlColor::SdrHdlColor(const Point& rRef, Color aCol, const Size& rSize, bool bLum)
: SdrHdl(rRef, SdrHdlKind::Color),
aMarkerSize(rSize),
diff --git a/svx/source/svdraw/svdstr.src b/svx/source/svdraw/svdstr.src
index 871690393a4c..29fd30a30b9c 100644
--- a/svx/source/svdraw/svdstr.src
+++ b/svx/source/svdraw/svdstr.src
@@ -2678,6 +2678,101 @@ Bitmap SIP_SA_PAGESHADOW35X35
File = "pageshadow35x35.png";
};
+Bitmap BMP_MARKER_RECT7_1 { File = "marker-rect7-1.png"; };
+Bitmap BMP_MARKER_RECT7_2 { File = "marker-rect7-2.png"; };
+Bitmap BMP_MARKER_RECT7_3 { File = "marker-rect7-3.png"; };
+Bitmap BMP_MARKER_RECT7_4 { File = "marker-rect7-4.png"; };
+Bitmap BMP_MARKER_RECT7_5 { File = "marker-rect7-5.png"; };
+Bitmap BMP_MARKER_RECT7_6 { File = "marker-rect7-6.png"; };
+Bitmap BMP_MARKER_RECT9_1 { File = "marker-rect9-1.png"; };
+Bitmap BMP_MARKER_RECT9_2 { File = "marker-rect9-2.png"; };
+Bitmap BMP_MARKER_RECT9_3 { File = "marker-rect9-3.png"; };
+Bitmap BMP_MARKER_RECT9_4 { File = "marker-rect9-4.png"; };
+Bitmap BMP_MARKER_RECT9_5 { File = "marker-rect9-5.png"; };
+Bitmap BMP_MARKER_RECT9_6 { File = "marker-rect9-6.png"; };
+Bitmap BMP_MARKER_RECT11_1 { File = "marker-rect11-1.png"; };
+Bitmap BMP_MARKER_RECT11_2 { File = "marker-rect11-2.png"; };
+Bitmap BMP_MARKER_RECT11_3 { File = "marker-rect11-3.png"; };
+Bitmap BMP_MARKER_RECT11_4 { File = "marker-rect11-4.png"; };
+Bitmap BMP_MARKER_RECT11_5 { File = "marker-rect11-5.png"; };
+Bitmap BMP_MARKER_RECT11_6 { File = "marker-rect11-6.png"; };
+Bitmap BMP_MARKER_RECT13_1 { File = "marker-rect13-1.png"; };
+Bitmap BMP_MARKER_RECT13_2 { File = "marker-rect13-2.png"; };
+Bitmap BMP_MARKER_RECT13_3 { File = "marker-rect13-3.png"; };
+Bitmap BMP_MARKER_RECT13_4 { File = "marker-rect13-4.png"; };
+Bitmap BMP_MARKER_RECT13_5 { File = "marker-rect13-5.png"; };
+Bitmap BMP_MARKER_RECT13_6 { File = "marker-rect13-6.png"; };
+
+Bitmap BMP_MARKER_CIRC7_1 { File = "marker-circ7-1.png"; };
+Bitmap BMP_MARKER_CIRC7_2 { File = "marker-circ7-2.png"; };
+Bitmap BMP_MARKER_CIRC7_3 { File = "marker-circ7-3.png"; };
+Bitmap BMP_MARKER_CIRC7_4 { File = "marker-circ7-4.png"; };
+Bitmap BMP_MARKER_CIRC7_5 { File = "marker-circ7-5.png"; };
+Bitmap BMP_MARKER_CIRC7_6 { File = "marker-circ7-6.png"; };
+Bitmap BMP_MARKER_CIRC9_1 { File = "marker-circ9-1.png"; };
+Bitmap BMP_MARKER_CIRC9_2 { File = "marker-circ9-2.png"; };
+Bitmap BMP_MARKER_CIRC9_3 { File = "marker-circ9-3.png"; };
+Bitmap BMP_MARKER_CIRC9_4 { File = "marker-circ9-4.png"; };
+Bitmap BMP_MARKER_CIRC9_5 { File = "marker-circ9-5.png"; };
+Bitmap BMP_MARKER_CIRC9_6 { File = "marker-circ9-6.png"; };
+Bitmap BMP_MARKER_CIRC11_1 { File = "marker-circ11-1.png"; };
+Bitmap BMP_MARKER_CIRC11_2 { File = "marker-circ11-2.png"; };
+Bitmap BMP_MARKER_CIRC11_3 { File = "marker-circ11-3.png"; };
+Bitmap BMP_MARKER_CIRC11_4 { File = "marker-circ11-4.png"; };
+Bitmap BMP_MARKER_CIRC11_5 { File = "marker-circ11-5.png"; };
+Bitmap BMP_MARKER_CIRC11_6 { File = "marker-circ11-6.png"; };
+
+Bitmap BMP_MARKER_ELLI7x9_1 { File = "marker-elli7x9-1.png"; };
+Bitmap BMP_MARKER_ELLI7x9_2 { File = "marker-elli7x9-2.png"; };
+Bitmap BMP_MARKER_ELLI7x9_3 { File = "marker-elli7x9-3.png"; };
+Bitmap BMP_MARKER_ELLI7x9_4 { File = "marker-elli7x9-4.png"; };
+Bitmap BMP_MARKER_ELLI7x9_5 { File = "marker-elli7x9-5.png"; };
+Bitmap BMP_MARKER_ELLI7x9_6 { File = "marker-elli7x9-6.png"; };
+Bitmap BMP_MARKER_ELLI9x11_1 { File = "marker-elli9x11-1.png"; };
+Bitmap BMP_MARKER_ELLI9x11_2 { File = "marker-elli9x11-2.png"; };
+Bitmap BMP_MARKER_ELLI9x11_3 { File = "marker-elli9x11-3.png"; };
+Bitmap BMP_MARKER_ELLI9x11_4 { File = "marker-elli9x11-4.png"; };
+Bitmap BMP_MARKER_ELLI9x11_5 { File = "marker-elli9x11-5.png"; };
+Bitmap BMP_MARKER_ELLI9x11_6 { File = "marker-elli9x11-6.png"; };
+
+Bitmap BMP_MARKER_ELLI9x7_1 { File = "marker-elli9x7-1.png"; };
+Bitmap BMP_MARKER_ELLI9x7_2 { File = "marker-elli9x7-2.png"; };
+Bitmap BMP_MARKER_ELLI9x7_3 { File = "marker-elli9x7-3.png"; };
+Bitmap BMP_MARKER_ELLI9x7_4 { File = "marker-elli9x7-4.png"; };
+Bitmap BMP_MARKER_ELLI9x7_5 { File = "marker-elli9x7-5.png"; };
+Bitmap BMP_MARKER_ELLI9x7_6 { File = "marker-elli9x7-6.png"; };
+Bitmap BMP_MARKER_ELLI11x9_1 { File = "marker-elli11x9-1.png"; };
+Bitmap BMP_MARKER_ELLI11x9_2 { File = "marker-elli11x9-2.png"; };
+Bitmap BMP_MARKER_ELLI11x9_3 { File = "marker-elli11x9-3.png"; };
+Bitmap BMP_MARKER_ELLI11x9_4 { File = "marker-elli11x9-4.png"; };
+Bitmap BMP_MARKER_ELLI11x9_5 { File = "marker-elli11x9-5.png"; };
+Bitmap BMP_MARKER_ELLI11x9_6 { File = "marker-elli11x9-6.png"; };
+
+Bitmap BMP_MARKER_RECTPLUS7_1 { File = "marker-rectplus7-1.png"; };
+Bitmap BMP_MARKER_RECTPLUS7_2 { File = "marker-rectplus7-2.png"; };
+Bitmap BMP_MARKER_RECTPLUS7_3 { File = "marker-rectplus7-3.png"; };
+Bitmap BMP_MARKER_RECTPLUS7_4 { File = "marker-rectplus7-4.png"; };
+Bitmap BMP_MARKER_RECTPLUS7_5 { File = "marker-rectplus7-5.png"; };
+Bitmap BMP_MARKER_RECTPLUS7_6 { File = "marker-rectplus7-6.png"; };
+Bitmap BMP_MARKER_RECTPLUS9_1 { File = "marker-rectplus9-1.png"; };
+Bitmap BMP_MARKER_RECTPLUS9_2 { File = "marker-rectplus9-2.png"; };
+Bitmap BMP_MARKER_RECTPLUS9_3 { File = "marker-rectplus9-3.png"; };
+Bitmap BMP_MARKER_RECTPLUS9_4 { File = "marker-rectplus9-4.png"; };
+Bitmap BMP_MARKER_RECTPLUS9_5 { File = "marker-rectplus9-5.png"; };
+Bitmap BMP_MARKER_RECTPLUS9_6 { File = "marker-rectplus9-6.png"; };
+Bitmap BMP_MARKER_RECTPLUS11_1 { File = "marker-rectplus11-1.png"; };
+Bitmap BMP_MARKER_RECTPLUS11_2 { File = "marker-rectplus11-2.png"; };
+Bitmap BMP_MARKER_RECTPLUS11_3 { File = "marker-rectplus11-3.png"; };
+Bitmap BMP_MARKER_RECTPLUS11_4 { File = "marker-rectplus11-4.png"; };
+Bitmap BMP_MARKER_RECTPLUS11_5 { File = "marker-rectplus11-5.png"; };
+Bitmap BMP_MARKER_RECTPLUS11_6 { File = "marker-rectplus11-6.png"; };
+
+Bitmap BMP_MARKER_ANCHOR { File = "marker-anchor.png"; };
+Bitmap BMP_MARKER_ANCHOR_PRESSED { File = "marker-anchor-pressed.png"; };
+Bitmap BMP_MARKER_CROSS { File = "marker-cross.png"; };
+Bitmap BMP_MARKER_GLUE_SELECTED { File = "marker-glue-selected.png"; };
+Bitmap BMP_MARKER_GLUE_UNSELECTED { File = "marker-glue-unselected.png"; };
+
Bitmap SIP_SA_MARKERS
{
File = "markers.png";