Przeglądaj źródła

expand drawing rgb to work without the rgb( or #, needs to have 3 numbers and 2 commas or be 3 hex characters (#724)

sabrogden 1 rok temu
rodzic
commit
04cf373814
1 zmienionych plików z 25 dodań i 22 usunięć
  1. 25 22
      QListCtrl.cpp

+ 25 - 22
QListCtrl.cpp

@@ -498,17 +498,17 @@ void CQListCtrl::DrawCopiedColorCode(CString& csText, CRect& rcText, CDC* pDC)
 	if (g_Opt.m_bDrawCopiedColorCode == FALSE)
 		return;
 
-	//draw hex color copied like #FF0000
-	if ((csText.GetLength() >= 7 &&
-		csText.GetLength() < 14 &&
-		csText[0] == '#'))
+	CString trimmedText = CString(csText).Trim(L'»').Trim().Trim('#');
+
+	//draw hex color copied like #FF0000, FF0000, FF0000 other text with a space before other text
+	if (trimmedText.GetLength() == 6 ||
+		trimmedText.Find(' ') == 6)
 	{
 		int r, g, b;
-		int scanRet = swscanf(csText, _T("#%02x%02x%02x"), &r, &g, &b);
+		int scanRet = swscanf(trimmedText, _T("%02x%02x%02x"), &r, &g, &b);
 		if (scanRet == 3)
 		{
 			CRect pastedRect(rcText);
-			//pastedRect.left += 2;
 			pastedRect.right = pastedRect.left + m_windowDpi->Scale(rcText.Height());
 
 			pDC->FillSolidRect(pastedRect, COLORREF(RGB(r, g, b)));
@@ -518,27 +518,30 @@ void CQListCtrl::DrawCopiedColorCode(CString& csText, CRect& rcText, CDC* pDC)
 		}
 	}
 
-	//draw rgb color copied like rgb(255,0,0)
-	if (csText.GetLength() >= 10 &&
-		csText.Left(4).MakeLower() == _T("rgb("))
+	// draw rgb color copied like 255,0,0 and rgb(255,0,0)
+	int firstCommaPos = trimmedText.Find(',');
+	if (firstCommaPos >= 0)
 	{
-		int endBracket = csText.Find(_T(")"), 4);
-		if (endBracket > 0)
+		int secondCommaPos = trimmedText.Find(',', firstCommaPos+1);
+		if (secondCommaPos)
 		{
-			int startBracket = 4;
-			CString rgb = csText.Mid(startBracket, endBracket - startBracket);
-			int r, g, b;
-			int scanRet = swscanf(rgb, _T("%d,%d,%d"), &r, &g, &b);
-			if (scanRet == 3)
+			int noThirdCommaPos = trimmedText.Find(',', secondCommaPos+1);
+			
+			if (noThirdCommaPos < 0)
 			{
-				CRect pastedRect(rcText);
-				//pastedRect.left += 2;
-				pastedRect.right = pastedRect.left + m_windowDpi->Scale(rcText.Height());
+				int r, g, b;
+				CString noRGB = trimmedText.MakeLower().Trim(_T("rgb(")).Trim(')');
+				int scanRet = swscanf(noRGB, _T("%d,%d,%d"), &r, &g, &b);
+				if (scanRet == 3)
+				{
+					CRect pastedRect(rcText);
+					pastedRect.right = pastedRect.left + m_windowDpi->Scale(rcText.Height());
 
-				pDC->FillSolidRect(pastedRect, COLORREF(RGB(r, g, b)));
+					pDC->FillSolidRect(pastedRect, COLORREF(RGB(r, g, b)));
 
-				rcText.left += m_windowDpi->Scale(rcText.Height());
-				rcText.left += m_windowDpi->Scale(ROW_LEFT_BORDER);
+					rcText.left += m_windowDpi->Scale(rcText.Height());
+					rcText.left += m_windowDpi->Scale(ROW_LEFT_BORDER);
+				}
 			}
 		}
 	}