Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  gfxWindowsNativeDrawing.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef _GFXWINDOWSNATIVEDRAWING_H_
#define _GFXWINDOWSNATIVEDRAWING_H_

#include <windows.h>

#include "gfxContext.h"
#include "gfxWindowsSurface.h"

class MOZ_STACK_CLASS gfxWindowsNativeDrawing {
 public:
  /* Flags for notifying this class what kind of operations the native
   * drawing supports
   */


  enum {
    /* Whether the native drawing can draw to a surface of content COLOR_ALPHA
     */

    CAN_DRAW_TO_COLOR_ALPHA = 1 << 0,
    CANNOT_DRAW_TO_COLOR_ALPHA = 0 << 0,

    /* Whether the native drawing can be scaled using SetWorldTransform */
    CAN_AXIS_ALIGNED_SCALE = 1 << 1,
    CANNOT_AXIS_ALIGNED_SCALE = 0 << 1,

    /* Whether the native drawing can be both scaled and rotated arbitrarily
       using SetWorldTransform */

    CAN_COMPLEX_TRANSFORM = 1 << 2,
    CANNOT_COMPLEX_TRANSFORM = 0 << 2,
  };

  /* Create native win32 drawing for a rectangle bounded by
   * nativeRect.
   *
   * Typical usage looks like:
   *
   *   gfxWindowsNativeDrawing nativeDraw(ctx, destGfxRect, capabilities);
   *   do {
   *     HDC dc = nativeDraw.BeginNativeDrawing();
   *     if (!dc)
   *       return NS_ERROR_FAILURE;
   *
   *     RECT winRect;
   *     nativeDraw.TransformToNativeRect(rect, winRect);
   *
   *       ... call win32 operations on HDC to draw to winRect ...
   *
   *     nativeDraw.EndNativeDrawing();
   *   } while (nativeDraw.ShouldRenderAgain());
   *   nativeDraw.PaintToContext();
   */

  gfxWindowsNativeDrawing(
      gfxContext* ctx, const gfxRect& nativeRect,
      uint32_t nativeDrawFlags = CANNOT_DRAW_TO_COLOR_ALPHA |
                                 CANNOT_AXIS_ALIGNED_SCALE |
                                 CANNOT_COMPLEX_TRANSFORM);

  /* Returns a HDC which may be used for native drawing.  This HDC is valid
   * until EndNativeDrawing is called; if it is used for drawing after that
   * time, the result is undefined. */

  HDC BeginNativeDrawing();

  /* Transform the native rect into something valid for rendering
   * to the HDC.  This may or may not change RECT, depending on
   * whether SetWorldTransform is used or not. */

  void TransformToNativeRect(const gfxRect& r, RECT& rout);

  /* Marks the end of native drawing */
  void EndNativeDrawing();

  /* Returns true if the native drawing should be executed again */
  bool ShouldRenderAgain();

  /* Places the result to the context, if necessary */
  void PaintToContext();

 private:
  gfxContext* mContext;
  gfxRect mNativeRect;
  uint32_t mNativeDrawFlags;

  // what state the rendering is in
  uint8_t mRenderState;

  mozilla::gfx::Point mDeviceOffset;
  RefPtr<gfxPattern> mBlackPattern, mWhitePattern;

  enum TransformType { TRANSLATION_ONLY, AXIS_ALIGNED_SCALE, COMPLEX };

  TransformType mTransformType;
  gfxPoint mTranslation;
  mozilla::gfx::MatrixScalesDouble mScale;
  XFORM mWorldTransform;

  // saved state
  RefPtr<gfxWindowsSurface> mWinSurface, mBlackSurface, mWhiteSurface;
  HDC mDC;
  XFORM mOldWorldTransform;
  POINT mOrigViewportOrigin;
  mozilla::gfx::IntSize mTempSurfaceSize;
};

#endif

Messung V0.5
C=90 H=99 G=94

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge