From 2712d4f67ddd338cfbe61880e1e8921582362b94 Mon Sep 17 00:00:00 2001 From: Edouard Dupin Date: Sun, 11 Sep 2011 22:46:36 +0200 Subject: [PATCH] SYS: Buffer anchor mechanism first step --- Makefile | 1 + Sources/Buffer/Buffer.cpp | 8 ---- Sources/Buffer/Buffer.h | 3 +- Sources/Buffer/BufferAnchor.cpp | 38 +++++++++++++++ Sources/Buffer/BufferAnchor.h | 56 ++++++++++++++++++++++ Sources/Buffer/BufferText.cpp | 18 ------- Sources/Buffer/BufferText.h | 45 +++++------------ Sources/CustumWidget/CodeView/CodeView.cpp | 27 ++--------- avancement.boo | 2 +- 9 files changed, 113 insertions(+), 85 deletions(-) create mode 100644 Sources/Buffer/BufferAnchor.cpp create mode 100644 Sources/Buffer/BufferAnchor.h diff --git a/Makefile b/Makefile index 16efb3b..770d85e 100644 --- a/Makefile +++ b/Makefile @@ -178,6 +178,7 @@ CXXFILES+= CustumWidget/BufferView/BufferView.cpp \ # Basic Interface : CXXFILES+= Buffer/Buffer.cpp \ + Buffer/BufferAnchor.cpp \ Buffer/BufferText.cpp \ Buffer/BufferEmpty.cpp \ Buffer/BufferManager.cpp \ diff --git a/Sources/Buffer/Buffer.cpp b/Sources/Buffer/Buffer.cpp index a1921b2..fecf21a 100644 --- a/Sources/Buffer/Buffer.cpp +++ b/Sources/Buffer/Buffer.cpp @@ -235,7 +235,6 @@ void Buffer::ScrollUp(void) // nothing to do } - /** * @brief * @@ -244,13 +243,6 @@ void Buffer::ScrollUp(void) * @return --- * */ -void Buffer::ForceReDraw(bool allElement) -{ - // nothing to do -} - - - void Buffer::cursorMove(int32_t gtkKey) { // nothing to do diff --git a/Sources/Buffer/Buffer.h b/Sources/Buffer/Buffer.h index fd78b3f..c37a360 100644 --- a/Sources/Buffer/Buffer.h +++ b/Sources/Buffer/Buffer.h @@ -30,7 +30,7 @@ #include "Display.h" #include "charset.h" #include "Edn.h" - +#include "BufferAnchor.h" typedef struct{ uint32_t nbTotalLine; //!< Number of line in the buffer @@ -82,7 +82,6 @@ class Buffer { virtual void SetLineDisplay(uint32_t lineNumber); virtual int32_t Display(DrawerManager &drawer); - virtual void ForceReDraw(bool allElement); virtual void AddChar(char * UTF8data); virtual void cursorMove(int32_t gtkKey); virtual void MouseSelectFromCursorTo(int32_t width, int32_t height); diff --git a/Sources/Buffer/BufferAnchor.cpp b/Sources/Buffer/BufferAnchor.cpp new file mode 100644 index 0000000..7302e62 --- /dev/null +++ b/Sources/Buffer/BufferAnchor.cpp @@ -0,0 +1,38 @@ +/** + ******************************************************************************* + * @file BufferAnchor.cpp + * @brief Editeur De N'ours : anchor on a secific buffer (Sources) + * @author Edouard DUPIN + * @date 11/09/2011 + * @par Project + * Edn + * + * @par Copyright + * Copyright 2010 Edouard DUPIN, all right reserved + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY. + * + * Licence summary : + * You can modify and redistribute the sources code and binaries. + * You can send me the bug-fix + * You can not earn money with this Software (if the source extract from Edn + * represent less than 50% of original Sources) + * Term of the licence in in the file licence.txt. + * + ******************************************************************************* + */ + + +#include "BufferAnchor.h" + +BufferAnchor::BufferAnchor(void) +{ + +} + +BufferAnchor::~BufferAnchor(void) +{ + +} + diff --git a/Sources/Buffer/BufferAnchor.h b/Sources/Buffer/BufferAnchor.h new file mode 100644 index 0000000..196e854 --- /dev/null +++ b/Sources/Buffer/BufferAnchor.h @@ -0,0 +1,56 @@ +/** + ******************************************************************************* + * @file BufferAnchor.h + * @brief Editeur De N'ours : anchor on a secific buffer (header) + * @author Edouard DUPIN + * @date 11/09/2011 + * @par Project + * Edn + * + * @par Copyright + * Copyright 2010 Edouard DUPIN, all right reserved + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY. + * + * Licence summary : + * You can modify and redistribute the sources code and binaries. + * You can send me the bug-fix + * You can not earn money with this Software (if the source extract from Edn + * represent less than 50% of original Sources) + * Term of the licence in in the file licence.txt. + * + ******************************************************************************* + */ + +#ifndef __BUFFER_ANCHOR_H__ +#define __BUFFER_ANCHOR_H__ + +#include "Display.h" +#include "charset.h" +#include "Edn.h" + + +class BufferAnchor +{ + public : + BufferAnchor(void); + ~BufferAnchor(void); + MoveAnchor(int32_t offsetLine); + //BufModification(...); + DisplayUpdateFirstLine(void); + DisplayUpdateNextLine(void); + private : + int32_t m_lineId; + int32_t m_bufferPos; + public: + int32_t m_lineNumber; + int32_t m_posStart; + int32_t m_posStop; + int32_t m_selectionPosStart; + int32_t m_selectionPosStop; +}; + + +#endif + diff --git a/Sources/Buffer/BufferText.cpp b/Sources/Buffer/BufferText.cpp index 413a3c8..49eb477 100644 --- a/Sources/Buffer/BufferText.cpp +++ b/Sources/Buffer/BufferText.cpp @@ -52,7 +52,6 @@ extern "C" */ void BufferText::BasicInit(void) { - NeedToCleanEndPage = true; // set the first element that is displayed m_displayStartBufferPos = 0; @@ -72,7 +71,6 @@ void BufferText::BasicInit(void) m_displayStart.y = 0; m_displaySize.x = 200; m_displaySize.y = 20; - m_displayLocalSyntax.idSequence = -1; } @@ -660,7 +658,6 @@ void BufferText::ScrollUp(void) */ void BufferText::MoveUpDown(int32_t ofset) { - m_displayLocalSyntax.idSequence = -1; if (ofset >= 0) { int32_t nbLine = m_EdnBuf.NumberOfLines(); if (m_displayStart.y+ofset+3 > nbLine) { @@ -683,21 +680,6 @@ void BufferText::MoveUpDown(int32_t ofset) } - -/** - * @brief - * - * @param[in,out] --- - * - * @return --- - * - */ -void BufferText::ForceReDraw(bool allElement) -{ - NeedToCleanEndPage = true; - //m_displayLocalSyntax.idSequence = -1; -} - void BufferText::SetInsertPosition(int32_t newPos, bool insertChar) { int32_t SelectionStart, SelectionEnd, SelectionRectStart, SelectionRectEnd; diff --git a/Sources/Buffer/BufferText.h b/Sources/Buffer/BufferText.h index 21ff9f2..9894b96 100644 --- a/Sources/Buffer/BufferText.h +++ b/Sources/Buffer/BufferText.h @@ -35,37 +35,7 @@ typedef enum { CURSOR_DISPLAY_MODE_INSERT, CURSOR_DISPLAY_MODE_NOT_FOCUS, } cursorDisplayMode_te; -#if 0 -class colorPalette { - private : - ColorizeManager * m_colorManager; - public : - color_ts & colorSpace; - color_ts & colorTab; - color_ts & colorLineNumber; - - Colorize * colorNormal; - Colorize * colorSel; - Colorize * colorCurrent; - public : - colorPalette(void): - m_colorManager(ColorizeManager::getInstance()), - colorSpace(m_colorManager->Get(COLOR_CODE_SPACE)), - colorTab(m_colorManager->Get(COLOR_CODE_TAB)), - colorLineNumber(m_colorManager->Get(COLOR_CODE_LINE_NUMBER)), - { - /* - ColorizeManager * m_colorManager = ColorizeManager::getInstance(); - colorSpace = m_colorManager->Get(COLOR_CODE_SPACE); - colorTab = m_colorManager->Get(COLOR_CODE_TAB); - colorLineNumber = m_colorManager->Get(COLOR_CODE_LINE_NUMBER); - */ - colorNormal = m_colorManager->Get("normal"); - colorSel = m_colorManager->Get("SelectedText"); - } -} colorPalette_ts; -#endif class BufferText : public Buffer { public: @@ -78,7 +48,6 @@ class BufferText : public Buffer { void SetLineDisplay(uint32_t lineNumber); int32_t Display(DrawerManager &drawer); - void ForceReDraw(bool allElement); void AddChar(char * UTF8data); void cursorMove(int32_t gtkKey); void MouseSelectFromCursorTo(int32_t width, int32_t height); @@ -107,25 +76,32 @@ class BufferText : public Buffer { protected: void NameChange(void); + // anchor section + public: + void AnchorAdd(int32_t anchorID); + void AnchorRm(int32_t anchorID); + + private: + Edn::VectorType m_AnchorList; //!< list of all line anchor in the current buffer + private: // Display - bool NeedToCleanEndPage; //!< if true, the end of the page need to be clean (arrive after a remove line) ColorizeManager * myColorManager; //!< for the background color : int32_t m_nbColoneForLineNumber; //!< number of colomn use for linenumber display // Direct buffer IO EdnBuf m_EdnBuf; //!< buffer associated on this displayer + position_ts m_displayStart; //!< position where the display is starting position_ts m_displaySize; //!< number of char displayable in the screan int32_t m_displayStartBufferPos; //!< position where the buffer start + // Cursor : int32_t m_cursorPos; //!< position in the buffer of the cursor int32_t m_cursorPreferredCol; //!< colomn of the last up and down ... bool m_cursorOn; //!< the blink of the cursor ... cursorDisplayMode_te m_cursorMode; //!< type of cursor Selected - displayHLData_ts m_displayLocalSyntax; //!< for the display of the local elements (display HL mode) - // internal function void BasicInit(void); void UpdateWindowsPosition(bool centerPage = false); @@ -147,6 +123,7 @@ class BufferText : public Buffer { void DrawLineNumber(DrawerManager &drawer, int32_t lineNumber); void UpdatePointerNumber(void); void DrawLine(DrawerManager &drawer, int32_t lineNumber, int32_t startPos, int32_t endPos, int32_t selStartPos, int32_t selEndPos); + //void DrawLine(DrawerManager &drawer, int32_t lineNumber, int32_t startPos, int32_t endPos, int32_t selStartPos, int32_t selEndPos); }; diff --git a/Sources/CustumWidget/CodeView/CodeView.cpp b/Sources/CustumWidget/CodeView/CodeView.cpp index b17feda..ae585e4 100644 --- a/Sources/CustumWidget/CodeView/CodeView.cpp +++ b/Sources/CustumWidget/CodeView/CodeView.cpp @@ -99,7 +99,6 @@ void CodeView::OnMessage(int32_t id, int32_t dataID) case EDN_MSG__CURRENT_CHANGE_BUFFER_ID: //EDN_INFO("Select a new Buffer ... " << dataID); m_bufferID = dataID; - m_bufferManager->Get(m_bufferID)->ForceReDraw(true); // request the dispplay of the curent Editor SendMessage(EDN_MSG__BUFFER_CHANGE_CURRENT, m_bufferID); break; @@ -197,6 +196,7 @@ gboolean CodeView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, gpo # ifdef USE_GTK_VERSION_3_0 GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); + EDN_INFO("GTK+ request a diplay of : "<< allocation.width <<"px * "<< allocation.height <<"px"); bool needRedrawAll = false; if (self->m_shawableAreaX != allocation.width) { needRedrawAll = true; @@ -207,6 +207,7 @@ gboolean CodeView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, gpo self->m_shawableAreaY = allocation.height; } # elif defined( USE_GTK_VERSION_2_0) + EDN_INFO("GTK+ request a diplay of : "<< widget->allocation.width <<"px * "<< widget->allocation.height <<"px"); bool needRedrawAll = false; if (self->m_shawableAreaX != widget->allocation.width) { needRedrawAll = true; @@ -217,26 +218,15 @@ gboolean CodeView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, gpo self->m_shawableAreaY = widget->allocation.height; } # endif - if (true == needRedrawAll) { - //updateScrollElement(); - self->m_bufferManager->Get(self->m_bufferID)->ForceReDraw(true); - } - EDN_INFO("Request a display of : " << self->m_shawableAreaX << "px * "<< self->m_shawableAreaY<<"px"); - /* - EDN_INFO("widget width=%d", widget->allocation.width); - EDN_INFO("widget height=%d", widget->allocation.height); - */ + EDN_INFO("Edn request a display of : " << self->m_shawableAreaX << "px * "<< self->m_shawableAreaY<<"px"); - //EDN_INFO("BufferView Display"); // Get the color Manager : ColorizeManager *myColorManager = NULL; myColorManager = ColorizeManager::getInstance(); - //(void)m_bufferManager->Get(m_bufferID)->Display(m_displayParameters, m_shawableAreaX, m_shawableAreaY); DrawerManager monDrawer(widget, self->m_shawableAreaX, self->m_shawableAreaY); //EDN_INFO("Display buffer ID = " << m_bufferID); (void)self->m_bufferManager->Get(self->m_bufferID)->Display(monDrawer); -// EDN_WARNING("Must display here ... "); return TRUE; } @@ -250,22 +240,15 @@ gboolean CodeView::CB_displayInit( GtkWidget *widget, gpointer data) # ifdef USE_GTK_VERSION_3_0 GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); - int32_t size_x = allocation.width; - int32_t size_y = allocation.height; - + EDN_INFO("GTK+ request a diplay of : "<< allocation.width <<"px * "<< allocation.height <<"px"); self->m_shawableAreaX = allocation.width; self->m_shawableAreaY = allocation.height; # elif defined( USE_GTK_VERSION_2_0) - int32_t size_x = widget->allocation.width; - int32_t size_y = widget->allocation.height; - + EDN_INFO("GTK+ request a diplay of : "<< widget->allocation.width <<"px * "<< widget->allocation.height <<"px"); self->m_shawableAreaX = widget->allocation.width; self->m_shawableAreaY = widget->allocation.height; # endif - EDN_INFO("Request a diplay of : "<< size_x <<"px * "<< size_y <<"px"); - gtk_widget_queue_draw( widget ); - return TRUE; } diff --git a/avancement.boo b/avancement.boo index 6413f7d..c1aec8d 100644 --- a/avancement.boo +++ b/avancement.boo @@ -1,7 +1,7 @@ # action a faire (ordonner par révision) : * 0.2.X : - gui : Amelioration du full-screen et du display de base (sans l'entete de la fenetre) - - gui : Mise en place d'un display ligne par ligne + - gui : display partielle de la fenetre - gui : ascenceur quand nécessaire - gui : Demander la création de nouveaux fichier quand il n'existe pas (a l'ouverture en ligne de commande) - sys : Mise en place des colorisation de base pour le