--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/src/CMIDTextEditorEdwinCustomDraw.cpp Wed Sep 01 12:33:18 2010 +0100
@@ -0,0 +1,281 @@
+
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Defines custom drawing for text editor edwin.
+*
+*/
+
+
+// INTERNAL INCLUDES
+#include "CMIDTextEditorEdwinCustomDraw.h"
+
+// EXTERNAL INCLUDES
+#include <j2me/jdebug.h>
+
+// ---------------------------------------------------------------------------
+// CMIDTextEditorEdwinCustomDraw::CMIDTextEditorEdwinCustomDraw
+// ---------------------------------------------------------------------------
+//
+CMIDTextEditorEdwinCustomDraw::CMIDTextEditorEdwinCustomDraw(
+ const MLafEnv& aLafEnv,
+ const MFormCustomDraw& aParentDraw,
+ const CMIDTextEditorEdwin& aEdwin) :
+ CLafEdwinCustomDrawBase(aLafEnv, aEdwin),
+ iEdwin(aEdwin), iParentDraw(aParentDraw)
+{
+ DEBUG("CMIDTextEditorEdwinCustomDraw::CMIDTextEditorEdwinCustomDraw");
+}
+
+// ---------------------------------------------------------------------------
+// CMIDTextEditorEdwinCustomDraw::~CMIDTextEditorEdwinCustomDraw
+// ---------------------------------------------------------------------------
+//
+CMIDTextEditorEdwinCustomDraw::~CMIDTextEditorEdwinCustomDraw()
+{
+ DEBUG("CMIDTextEditorEdwinCustomDraw::~CMIDTextEditorEdwinCustomDraw");
+}
+
+// ---------------------------------------------------------------------------
+// CMIDTextEditorEdwinCustomDraw::DrawBackground
+// (other items were commented in the header file)
+// ---------------------------------------------------------------------------
+//
+void CMIDTextEditorEdwinCustomDraw::DrawBackground(
+ const TParam& aParam,
+ const TRgb& aBackground,
+ TRect& aDrawn) const
+{
+ // Background drawing is not done by custom draw.
+
+ // Check if CCoeControl::Draw() has been invoked for the editor window.
+ // This guarantees that draw is not invoked all the time. Redraw
+ // removes the issue with background transparency because if FEP tries
+ // to draw the text without the CONE control framework, the editor gets
+ // redrawn which guarantees that the text is not messed up due to
+ // the editor's transparency.
+
+ if (iEdwin.IsTransparent())
+ {
+ iEdwin.Redraw();
+ }
+ else
+ {
+ // If scaling is on, it clips drawing to canvas size. After it
+ // draws its background.
+ // Only drawing otherwise.
+ if (iEdwin.IsScalingOn())
+ {
+
+ aParam.iGc.SetClippingRect(GetClippingRectForScaling());
+
+ iParentDraw.DrawBackground(aParam, aBackground, aDrawn);
+
+ aParam.iGc.CancelClippingRect();
+ }
+ else
+ {
+ iParentDraw.DrawBackground(aParam, aBackground, aDrawn);
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------
+// CMIDTextEditorEdwinCustomDraw::DrawLineGraphics
+// (other items were commented in the header file)
+// ---------------------------------------------------------------------------
+//
+void CMIDTextEditorEdwinCustomDraw::DrawLineGraphics(
+ const TParam& aParam,
+ const TLineInfo& aLineInfo) const
+{
+ // If scaling is on, it clips drawing to canvas size. After it
+ // draws its lines.
+ // Only drawing otherwise.
+ if (iEdwin.IsScalingOn())
+ {
+
+ aParam.iGc.SetClippingRect(GetClippingRectForScaling());
+
+ iParentDraw.DrawLineGraphics(aParam, aLineInfo);
+
+ aParam.iGc.CancelClippingRect();
+ }
+ else
+ {
+ iParentDraw.DrawLineGraphics(aParam, aLineInfo);
+ }
+}
+
+// ---------------------------------------------------------------------------
+// CMIDTextEditorEdwinCustomDraw::DrawText
+// (other items were commented in the header file)
+// ---------------------------------------------------------------------------
+//
+void CMIDTextEditorEdwinCustomDraw::DrawText(
+ const TParam& aParam,
+ const TLineInfo& aLineInfo,
+ const TCharFormat& aFormat,
+ const TDesC& aText,
+ const TPoint& aTextOrigin,
+ TInt aExtraPixels) const
+{
+ // If transparency is enabled, check that if draw has not been invoked
+ // yet and issue redraw in that case. This removes the issue with
+ // transparency so that the old content does not cause corruption to
+ // the new text drawn on top of the old content. Otherwise it is ok
+ // to draw the text because opaque background draws on top of the old
+ // content in the editor.
+
+ if (iEdwin.IsTransparent() && !iEdwin.DrawOngoing())
+ {
+ iEdwin.Redraw();
+ return;
+ }
+
+ // If scaling is on, it clips drawing to canvas size. After it
+ // draws its text.
+ // Only drawing otherwise.
+ if (iEdwin.IsScalingOn())
+ {
+ aParam.iGc.SetClippingRect(GetClippingRectForScaling());
+
+ iParentDraw.DrawText(
+ aParam,
+ aLineInfo,
+ aFormat,
+ aText,
+ aTextOrigin,
+ aExtraPixels);
+
+ aParam.iGc.CancelClippingRect();
+ }
+ else
+ {
+ iParentDraw.DrawText(
+ aParam,
+ aLineInfo,
+ aFormat,
+ aText,
+ aTextOrigin,
+ aExtraPixels);
+ }
+}
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+// ---------------------------------------------------------------------------
+// CMIDTextEditorEdwinCustomDraw::DrawText
+// (other items were commented in the header file)
+// ---------------------------------------------------------------------------
+//
+void CMIDTextEditorEdwinCustomDraw::DrawText(
+ const TParam& aParam,
+ const TLineInfo& aLineInfo,
+ const TCharFormat& aFormat,
+ const TDesC& aText,
+ const TInt aStart,
+ const TInt aEnd,
+ const TPoint& aTextOrigin,
+ TInt aExtraPixels) const
+{
+ // If transparency is enabled, check that if draw has not been invoked
+ // yet and issue redraw in that case. This removes the issue with
+ // transparency so that the old content does not cause corruption to
+ // the new text drawn on top of the old content. Otherwise it is ok
+ // to draw the text because opaque background draws on top of the old
+ // content in the editor.
+
+ if (iEdwin.IsTransparent() && !iEdwin.DrawOngoing())
+ {
+ iEdwin.Redraw();
+ return;
+ }
+
+ // If scaling is on, it clips drawing to canvas size. After it
+ // draws its text.
+ // Only drawing otherwise.
+ if (iEdwin.IsScalingOn())
+ {
+
+ aParam.iGc.SetClippingRect(GetClippingRectForScaling());
+
+ iParentDraw.DrawText(
+ aParam,
+ aLineInfo,
+ aFormat,
+ aText,
+ aStart,
+ aEnd,
+ aTextOrigin,
+ aExtraPixels);
+
+ aParam.iGc.CancelClippingRect();
+ }
+ else
+ {
+ iParentDraw.DrawText(
+ aParam,
+ aLineInfo,
+ aFormat,
+ aText,
+ aStart,
+ aEnd,
+ aTextOrigin,
+ aExtraPixels);
+ }
+}
+#endif
+
+// ---------------------------------------------------------------------------
+// CMIDTextEditorEdwinCustomDraw::SystemColor
+// (other items were commented in the header file)
+// ---------------------------------------------------------------------------
+//
+TRgb CMIDTextEditorEdwinCustomDraw::SystemColor(
+ TUint aColorIndex,
+ TRgb aDefaultColor) const
+{
+ TRgb ret;
+
+ // Return custom highlight color if retrieved by the system.
+ if (aColorIndex == TLogicalRgb::ESystemSelectionBackgroundIndex)
+ {
+ iEdwin.GetColor(EColorControlHighlightBackground, ret);
+ }
+ else if (aColorIndex == TLogicalRgb::ESystemSelectionForegroundIndex)
+ {
+ iEdwin.GetColor(EColorControlHighlightText, ret);
+ }
+ else
+ {
+ // Other colors use parent's SystemColor.
+ ret = iParentDraw.SystemColor(aColorIndex, aDefaultColor);
+ }
+
+ return ret;
+}
+
+// ---------------------------------------------------------------------------
+// CMIDTextEditorEdwinCustomDraw::GetClippingRectForScaling()
+// (other items were commented in the header file)
+// ---------------------------------------------------------------------------
+//
+const TRect CMIDTextEditorEdwinCustomDraw::GetClippingRectForScaling() const
+{
+ // It gets intersection of editor and canvas rectangles.
+ TRect rect = iEdwin.GetOnScreenCanvasRect();
+ rect.Intersection(iEdwin.Rect());
+ return rect;
+}
+
+// End of file